diff --git "a/postman\346\216\245\345\217\243\345\217\257\347\233\264\346\216\245\345\257\274\345\205\245BPMN.postman_collection.json" "b/postman\346\216\245\345\217\243\345\217\257\347\233\264\346\216\245\345\257\274\345\205\245BPMN.postman_collection.json" new file mode 100644 index 0000000000000000000000000000000000000000..c86c8141f61ccd16c07dba4c641a349862923de5 --- /dev/null +++ "b/postman\346\216\245\345\217\243\345\217\257\347\233\264\346\216\245\345\257\274\345\205\245BPMN.postman_collection.json" @@ -0,0 +1,1074 @@ +{ + "info": { + "_postman_id": "c5d13794-3046-40d4-a5dd-be87c30b643b", + "name": "BPMN", + "description": "BPMN的项目请求", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "用户", + "item": [ + { + "name": "登录-login", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "http://localhost:8080/login?username=bajie&password=1", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "login" + ], + "query": [ + { + "key": "username", + "value": "bajie" + }, + { + "key": "password", + "value": "1" + } + ] + } + }, + "response": [] + }, + { + "name": "获取用户列表:/user/getUsers", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processDefinition/getDefinitions", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "getDefinitions" + ] + } + }, + "response": [] + } + ], + "protocolProfileBehavior": {} + }, + { + "name": "流程定义processDefinition", + "item": [ + { + "name": "上传BPMN流媒体-/uploadStream", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "processFile", + "type": "file", + "src": "/D:/redmine/HouXuanRen20200707V1.bpmn" + } + ], + "options": { + "formdata": {} + } + }, + "url": { + "raw": "http://localhost:8080/processDefinition/uploadStreamAndDeployment", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "uploadStreamAndDeployment" + ] + } + }, + "response": [] + }, + { + "name": "上传BPMN-/upload", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "processFile", + "type": "file", + "src": "/D:/redmine/DocPush.bpmn" + } + ], + "options": { + "formdata": {} + } + }, + "url": { + "raw": "http://localhost:8080/processDefinition/upload", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "upload" + ] + } + }, + "response": [] + }, + { + "name": "部署BPMN文件(问题)/addDeploymentByFileNameBPMN?deploymentUUID", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "http://localhost:8080/processDefinition/addDeploymentByFileNameBPMN?deploymentFileUUID=e387c111-4c96-4f64-a759-1238e9faa40b.bpmn&deploymentName=申请请假流程0625", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "addDeploymentByFileNameBPMN" + ], + "query": [ + { + "key": "deploymentFileUUID", + "value": "e387c111-4c96-4f64-a759-1238e9faa40b.bpmn" + }, + { + "key": "deploymentName", + "value": "申请请假流程0625" + } + ] + } + }, + "response": [] + }, + { + "name": "部署BPMN字符/addDeploymentByString?deploymentUUID", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "http://localhost:8080/processDefinition/addDeploymentByString?stringBPMN=\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "addDeploymentByString" + ], + "query": [ + { + "key": "stringBPMN", + "value": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" + }, + { + "key": "deploymentName", + "value": "请假流程0628", + "disabled": true + } + ] + } + }, + "response": [] + }, + { + "name": "获取流程定义列表:/getDefinitions", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processDefinition/getDefinitions", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "getDefinitions" + ] + } + }, + "response": [] + }, + { + "name": "获取流程定义XML/getDefinitionXML", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processDefinition/getDefinitionXML?deploymentID=6f82e834-b9e9-11ea-abb1-dcfb4875e032&resourceName=DocPush.bpmn", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "getDefinitionXML" + ], + "query": [ + { + "key": "deploymentID", + "value": "6f82e834-b9e9-11ea-abb1-dcfb4875e032" + }, + { + "key": "resourceName", + "value": "DocPush.bpmn" + } + ] + } + }, + "response": [] + }, + { + "name": "获取流程部署列表/getDeployments", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processDefinition/getDeployments", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "getDeployments" + ] + }, + "description": "返回值的列:\r\nID、流程部署名称、创建时间" + }, + "response": [] + }, + { + "name": "删除流程部署(同时删除定义)/delDefinition", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processDefinition/delDefinition?pdID=d82f0afd-bf4d-11ea-91e6-522b73dcbd6c", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processDefinition", + "delDefinition" + ], + "query": [ + { + "key": "pdID", + "value": "d82f0afd-bf4d-11ea-91e6-522b73dcbd6c" + } + ] + } + }, + "response": [] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "id": "3c91dac2-ab4e-4814-990e-63a796e770a5", + "type": "text/javascript", + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "id": "51558b6a-79fc-4df5-b2db-996fdb7a2ea6", + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "protocolProfileBehavior": {} + }, + { + "name": "流程实例processInstance", + "item": [ + { + "name": "获取流程实例列表-/getInstances", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processInstance/getInstances", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processInstance", + "getInstances" + ] + }, + "description": "列:\r\nID、流程实例名称、启动时间、状态" + }, + "response": [] + }, + { + "name": "启动流程实例-/startProcess", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processInstance/startProcess?processDefinitionKey=Process_HouXuanRen&instanceName=流程实例名称-候选人0707&instanceVariable=流程实例内容描述-候选人", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processInstance", + "startProcess" + ], + "query": [ + { + "key": "processDefinitionKey", + "value": "Process_HouXuanRen" + }, + { + "key": "instanceName", + "value": "流程实例名称-候选人0707" + }, + { + "key": "instanceVariable", + "value": "流程实例内容描述-候选人" + } + ] + } + }, + "response": [] + }, + { + "name": "删除流程实例-/deleteInstance", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/psrocessInstance/deleteInstance?instanceID=e9923c17-b45b-11ea-8f13-dcfb4875e032", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "psrocessInstance", + "deleteInstance" + ], + "query": [ + { + "key": "instanceID", + "value": "e9923c17-b45b-11ea-8f13-dcfb4875e032" + } + ] + } + }, + "response": [] + }, + { + "name": "挂起流程实例-/suspendInstance", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processInstance/suspendInstance?instanceID=ed20d166-b46c-11ea-b93f-dcfb4875e032", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processInstance", + "suspendInstance" + ], + "query": [ + { + "key": "instanceID", + "value": "ed20d166-b46c-11ea-b93f-dcfb4875e032" + } + ] + } + }, + "response": [] + }, + { + "name": "激活流程实例-/deleteInstance", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processInstance/resumeInstance?instanceID=ed20d166-b46c-11ea-b93f-dcfb4875e032", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processInstance", + "resumeInstance" + ], + "query": [ + { + "key": "instanceID", + "value": "ed20d166-b46c-11ea-b93f-dcfb4875e032" + } + ] + } + }, + "response": [] + }, + { + "name": "获取流程参数-/variables", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/processInstance/variables?instanceID=43d08691-b9e5-11ea-8e0f-522b73dcbd6c", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "processInstance", + "variables" + ], + "query": [ + { + "key": "instanceID", + "value": "43d08691-b9e5-11ea-8e0f-522b73dcbd6c" + } + ] + } + }, + "response": [] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "id": "01c38a58-e456-41df-b726-99ebd292adfd", + "type": "text/javascript", + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "id": "cea7a0e6-79bc-4e9c-9d28-91abd9534c57", + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "protocolProfileBehavior": {} + }, + { + "name": "任务task", + "item": [ + { + "name": "我的待办任务-/getTasks", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/task/getTasks", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "task", + "getTasks" + ] + } + }, + "response": [] + }, + { + "name": "完成待办任务-/completeTask", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/task/completeTask?taskID=95fd3087-b9ec-11ea-a7fd-522b73dcbd6c", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "task", + "completeTask" + ], + "query": [ + { + "key": "taskID", + "value": "95fd3087-b9ec-11ea-a7fd-522b73dcbd6c" + } + ] + } + }, + "response": [] + }, + { + "name": "渲染表单/formDataShow", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/task/formDataShow?taskID=00e7b095-e02f-11ea-8503-fa163ee33758", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "task", + "formDataShow" + ], + "query": [ + { + "key": "taskID", + "value": "00e7b095-e02f-11ea-8503-fa163ee33758" + } + ] + } + }, + "response": [] + }, + { + "name": "保存表单/formDataSave", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "url": { + "raw": "http://localhost:8080/task/formDataSave?taskID=800a2f22-e039-11ea-9c37-dcfb4875e032&formData=FormProperty_0lovri0-_!不是参数-_!f!_!FormProperty_1iu6onu-_!18-_!s", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "task", + "formDataSave" + ], + "query": [ + { + "key": "taskID", + "value": "800a2f22-e039-11ea-9c37-dcfb4875e032" + }, + { + "key": "formData", + "value": "FormProperty_0lovri0-_!不是参数-_!f!_!FormProperty_1iu6onu-_!18-_!s" + } + ] + } + }, + "response": [] + } + ], + "protocolProfileBehavior": {} + }, + { + "name": "历史activitiHistory", + "item": [ + { + "name": "用户历史任务-/getInstancesByUserName", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/activitiHistory/getInstancesByUserName", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "activitiHistory", + "getInstancesByUserName" + ], + "query": [ + { + "key": "userName", + "value": "wukong", + "disabled": true + } + ] + } + }, + "response": [] + }, + { + "name": "实例历史任务-/getInstancesByPiID", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/activitiHistory/getInstancesByPiID?piID=d53a887c-bc50-11ea-8636-fa163ee33758", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "activitiHistory", + "getInstancesByPiID" + ], + "query": [ + { + "key": "piID", + "value": "d53a887c-bc50-11ea-8636-fa163ee33758" + } + ] + } + }, + "response": [] + }, + { + "name": "查看流程实例历史", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki", + "type": "string" + }, + { + "key": "username", + "value": "wukong", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:8080/activitiHistory/gethighLine?instanceId=1f2314cb-cefa-11ea-84aa-dcfb4875e032", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "activitiHistory", + "gethighLine" + ], + "query": [ + { + "key": "instanceId", + "value": "1f2314cb-cefa-11ea-84aa-dcfb4875e032" + } + ] + } + }, + "response": [] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "id": "af2d609b-0870-4dbc-8205-943f00e10eaf", + "type": "text/javascript", + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "id": "1f1e1f2a-67fa-4cd7-9e9a-bf483486605a", + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "protocolProfileBehavior": {} + }, + { + "name": "测试", + "item": [ + { + "name": "上传BPMN正式服务器", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "processFile", + "type": "file", + "src": "/D:/redmine/DocPush.bpmn" + } + ], + "options": { + "formdata": {} + } + }, + "url": { + "raw": "http://139.9.118.236:8080/processDefinition/upload", + "protocol": "http", + "host": [ + "139", + "9", + "118", + "236" + ], + "port": "8080", + "path": [ + "processDefinition", + "upload" + ] + } + }, + "response": [] + }, + { + "name": "完成任务流程参数", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "processFile", + "type": "file", + "src": [], + "disabled": true + } + ], + "options": { + "formdata": {} + } + }, + "url": { + "raw": "http://localhost:8080/testcompleteTask?taskID=6217fa3b-d09e-11ea-83ac-dcfb4875e032", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "testcompleteTask" + ], + "query": [ + { + "key": "taskID", + "value": "6217fa3b-d09e-11ea-83ac-dcfb4875e032" + } + ] + } + }, + "response": [] + } + ], + "protocolProfileBehavior": {} + } + ], + "protocolProfileBehavior": {} +} \ No newline at end of file diff --git a/src/main/java/com/imooc/activitiweb/util/PathMapping.java b/src/main/java/com/imooc/activitiweb/util/PathMapping.java index aeaae6b3c657745bdc0095035a11c190117ed10a..39f2e83fc2b191a27589bc72fa267416eced9aae 100644 --- a/src/main/java/com/imooc/activitiweb/util/PathMapping.java +++ b/src/main/java/com/imooc/activitiweb/util/PathMapping.java @@ -13,5 +13,8 @@ public class PathMapping implements WebMvcConfigurer { //String[] resourceLocation = new String[]{"file:D:\\WangJianIDEA_Test\\activiti-imooc\\src\\main\\resources\\resources\\bpmn\\","classpath:/resources/"}; registry.addResourceHandler("/**").addResourceLocations("classpath:/resources/");//默认也有这个路径映射 registry.addResourceHandler("/bpmn/**").addResourceLocations(GlobalConfig.BPMN_PathMapping); + + registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } } diff --git a/src/main/resources/resources/bpmnjs/dist/index.js b/src/main/resources/resources/bpmnjs/dist/index.js index 8bd9a6a45c68c9d80e8d961f480c21f6201a56b6..adb62a02a663d21f340566d29bb2acecd5faf316 100644 --- a/src/main/resources/resources/bpmnjs/dist/index.js +++ b/src/main/resources/resources/bpmnjs/dist/index.js @@ -83350,7 +83350,7 @@ function formFieldTextField(options, getSelectedFormField) { function ensureFormKeyAndDataSupported(element) { return ( - is(element, 'bpmn:StartEvent') && !is(element.parent, 'bpmn:SubProcess') + is(element, 'bpmn:StartEvent') && !is(element.parent, 'bpmn:SubProcess') ) || is(element, 'bpmn:UserTask'); } @@ -83413,26 +83413,26 @@ module.exports = function(group, element, bpmnFactory, translate) { extensionElements = elementHelper.createElement('bpmn:ExtensionElements', { values: [] }, bo, bpmnFactory); commands.push(cmdHelper.updateProperties(element, { extensionElements: extensionElements })); } - /* var formData = formHelper.getFormData(element); - - if (!formData) { - formData = elementHelper.createElement('activiti:FormData', { fields: [] }, extensionElements, bpmnFactory); - commands.push(cmdHelper.addAndRemoveElementsFromList( - element, - extensionElements, - 'values', - 'extensionElements', - [formData], - [] - )); - }*/ + /* var formData = formHelper.getFormData(element); + + if (!formData) { + formData = elementHelper.createElement('activiti:FormData', { fields: [] }, extensionElements, bpmnFactory); + commands.push(cmdHelper.addAndRemoveElementsFromList( + element, + extensionElements, + 'values', + 'extensionElements', + [formData], + [] + )); + }*/ /**activiti 是向 extensionElements 下追加元素,而不是 formData 下,*/ var field = elementHelper.createElement('activiti:FormProperty', { id: value }, extensionElements, bpmnFactory); if (typeof extensionElements.values !== 'undefined') { commands.push(cmdHelper.addElementsTolist(element, extensionElements, 'values', [ field ])); } else { commands.push(cmdHelper.updateBusinessObject(element, extensionElements, { - values: [ field ] + values: [ field ] })); } return commands; @@ -83446,9 +83446,9 @@ module.exports = function(group, element, bpmnFactory, translate) { commands.push(removeEntry(getBusinessObject(element), element, extensionElements)); } else { commands.push(cmdHelper.removeElementsFromList(element, extensionElements, 'values', null, [entry])); - /* if (entry.id === formData.get('businessKey')) { - commands.push(cmdHelper.updateBusinessObject(element, extensionElements, { 'businessKey': undefined })); - }*/ + /* if (entry.id === formData.get('businessKey')) { + commands.push(cmdHelper.updateBusinessObject(element, extensionElements, { 'businessKey': undefined })); + }*/ } return commands; @@ -83560,18 +83560,24 @@ module.exports = function(group, element, bpmnFactory, translate) { })); // [FormData] form field label text input field - group.entries.push(formFieldTextField({ + group.entries.push(entryFactory.textField({ id: 'form-field-label', label: translate('Label'), - modelProperty: 'label' - }, getSelectedFormField)); + modelProperty: 'label', + hidden: function(element, node) { + return !getSelectedFormField(element, node); + } + })); // [FormData] form field defaultValue text input field - group.entries.push(formFieldTextField({ + group.entries.push(entryFactory.textField({ id: 'form-field-defaultValue', label: translate('Default Value'), - modelProperty: 'defaultValue' - }, getSelectedFormField)); + modelProperty: 'defaultValue', + hidden: function(element, node) { + return !getSelectedFormField(element, node); + } + })); // [FormData] form field enum values label @@ -83607,10 +83613,10 @@ module.exports = function(group, element, bpmnFactory, translate) { id = generateValueId(); var enumValue = elementHelper.createElement( - 'activiti:Value', - { id: id, name: undefined }, - getBusinessObject(element), - bpmnFactory + 'activiti:Value', + { id: id, name: undefined }, + getBusinessObject(element), + bpmnFactory ); return cmdHelper.addElementsTolist(element, selectedFormField, 'values', [enumValue]); @@ -83679,10 +83685,10 @@ module.exports = function(group, element, bpmnFactory, translate) { } var newConstraint = elementHelper.createElement( - 'activiti:Constraint', - { name: undefined, config: undefined }, - validation, - bpmnFactory + 'activiti:Constraint', + { name: undefined, config: undefined }, + validation, + bpmnFactory ); commands.push(cmdHelper.addElementsTolist(element, validation, 'constraints', [ newConstraint ])); @@ -83705,11 +83711,11 @@ module.exports = function(group, element, bpmnFactory, translate) { currentConstraint = constraints[idx]; commands.push(cmdHelper.removeElementsFromList( - element, - formField.validation, - 'constraints', - null, - [ currentConstraint ] + element, + formField.validation, + 'constraints', + null, + [ currentConstraint ] )); if (constraints.length === 1) { @@ -90008,4 +90014,4 @@ var _default = tools; exports.default = _default; },{"jquery":348}]},{},[1]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhcHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvUHJvcGVydGllc1BhbmVsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvVXRpbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvQ3JlYXRlQW5kUmVmZXJlbmNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2NtZC9DcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL011bHRpQ29tbWFuZEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL1VwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9oZWxwZXIvRWxlbWVudEhlbHBlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VNb2RlbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvTW9kZWxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9OYXZpZ2F0ZWRWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvVmlld2VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2NvcmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9CcG1uUmVuZGVyVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L0JwbW5SZW5kZXJlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L1BhdGhNYXAuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9UZXh0UmVuZGVyZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9CcG1uQXV0b1BsYWNlVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQvQ29udGV4dFBhZFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQnBtbkNvcHlQYXN0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL01vZGRsZUNvcHkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29weS1wYXN0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9CcG1uRGlPcmRlcmluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0JwbW5EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9CcG1uRWRpdG9yQWN0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL0JwbW5HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9BdXRvUGxhY2VCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9CcG1uSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0JwbW5LZXlib2FyZEJpbmRpbmdzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxFZGl0aW5nUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsRWRpdGluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvY21kL1VwZGF0ZUxhYmVsSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5MYXlvdXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uVXBkYXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9FbGVtZW50RmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9Nb2RlbGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BcHBlbmRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Bc3NvY2lhdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0F0dGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQm91bmRhcnlFdmVudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZURhdGFPYmplY3RCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGF0YVN0b3JlQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGVsZXRlTGFuZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RldGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRHJvcE9uRmxvd0JlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRml4SG92ZXJCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Hcm91cEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0ltcG9ydERvY2tpbmdGaXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvSXNIb3Jpem9udGFsRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0xhYmVsQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvTW9kZWxpbmdGZWVkYmFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZW1vdmVFbGVtZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1JlcGxhY2VFbGVtZW50QmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUxhbmVCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1NwYWNlVG9vbEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1VuY2xhaW1JZEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0dlb21ldHJpY1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MYWJlbExheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lQXR0YWNobWVudFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lSW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL3V0aWwvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQWRkTGFuZUhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0lkQ2xhaW1IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZXNpemVMYW5lSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvU2V0Q29sb3JIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGxpdExhbmVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9VcGRhdGVDYW52YXNSb290SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlUHJvcGVydGllc0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL0xhbmVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL0JwbW5PcmRlcmluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvUGFsZXR0ZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9SZXBsYWNlTWVudVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS91dGlsL1R5cGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UtcHJldmlldy9CcG1uUmVwbGFjZVByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS1wcmV2aWV3L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvQnBtblJlcGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3J1bGVzL0JwbW5SdWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zZWFyY2gvQnBtblNlYXJjaFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9CcG1uQ29ubmVjdFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0JwbW5DcmVhdGVNb3ZlU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvQnBtbkltcG9ydGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ltcG9ydC9CcG1uVHJlZVdhbGtlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvSW1wb3J0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9MYWJlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Qb3dlcmVkQnlVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvRGlhZ3JhbS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRTdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudEZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FbGVtZW50UmVnaXN0cnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL0dyYXBoaWNzRmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvQmFzZVJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvRGVmYXVsdFJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYWxpZ24tZWxlbWVudHMvQWxpZ25FbGVtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdHRhY2gtc3VwcG9ydC9BdHRhY2hTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F0dGFjaC1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9BdXRvUGxhY2VVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvQXV0b1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1zY3JvbGwvQXV0b1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXNjcm9sbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9CZW5kcG9pbnRNb3ZlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMvQmVuZHBvaW50VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9Db25uZWN0aW9uU2VnbWVudE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jaGFuZ2Utc3VwcG9ydC9DaGFuZ2VTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NsaXBib2FyZC9DbGlwYm9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2xpcGJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvQ29ubmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0L0Nvbm5lY3RQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3L0Nvbm5lY3Rpb25QcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3Rpb24tcHJldmlldy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQ29weVBhc3RlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlL0NyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvQ3JlYXRlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9EcmFnZ2luZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9Ib3ZlckZpeC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dsb2JhbC1jb25uZWN0L0dsb2JhbENvbm5lY3QuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ2xvYmFsLWNvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvYmVoYXZpb3IvU3BhY2VUb29sQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2hhbmQtdG9vbC9IYW5kVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9oYW5kLXRvb2wvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbi9LZXlib2FyZE1vdmVTZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQtbW92ZS1zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmRCaW5kaW5ncy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9MYWJlbFN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL0xhc3NvVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9BbGlnbkVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQXBwZW5kU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQ3JlYXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVMYWJlbEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0NyZWF0ZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0RlbGV0ZUVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9EaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9MYXlvdXRDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvTW92ZUNvbm5lY3Rpb25IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVwbGFjZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVzaXplU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGFjZVRvb2xIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlQXR0YWNobWVudEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVdheXBvaW50c0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9BbmNob3JzSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9oZWxwZXIvTW92ZUNsb3N1cmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9Nb3ZlSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL01vdXNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvTW92ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb3ZlL01vdmVQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3JkZXJpbmcvT3JkZXJpbmdQcm92aWRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdXRsaW5lL091dGxpbmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3V0bGluZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9PdmVybGF5cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wYWxldHRlL1BhbGV0dGUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcGFsZXR0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3ByZXZpZXctc3VwcG9ydC9QcmV2aWV3U3VwcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wcmV2aWV3LXN1cHBvcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplSGFuZGxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMvUnVsZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL1J1bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvU2VhcmNoUGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWxlY3Rpb24vU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvblZpc3VhbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0NyZWF0ZU1vdmVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9SZXNpemVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbFByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9TcGFjZVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy90b29sLW1hbmFnZXIvVG9vbE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbC1tYW5hZ2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL1Rvb2x0aXBzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG91Y2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvdHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2xheW91dC9CYXNlTGF5b3V0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9tb2RlbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL2tleWJvYXJkLW1vdmUvS2V5Ym9hcmRNb3ZlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvTW92ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi90b3VjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQXR0YWNoVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NsaWNrVHJhcC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQ3Vyc29yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Fc2NhcGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRXZlbnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9HZW9tZXRyeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0dyYXBoaWNzVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0lkR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvTGluZUludGVyc2VjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL01hdGguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb3VzZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1BsYXRmb3JtLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUG9zaXRpb25VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUmVtb3ZhbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLW1vZGRsZS9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9jc3MuZXNjYXBlL2Nzcy5lc2NhcGUuanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzLWRpcmVjdC1lZGl0aW5nL2xpYi9EaXJlY3RFZGl0aW5nLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcvbGliL1RleHRCb3guanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlL3RyYW5zbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2RpZGkvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvaGFtbWVyanMvaGFtbWVyLmpzIiwibm9kZV9tb2R1bGVzL2lkcy9ub2RlX21vZHVsZXMvaGF0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lkcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlc1dpdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0RGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmlxLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VYb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RGdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRWFjaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VGb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUh5YnJpZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVBhcnRpYWwuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlU2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlV3JhcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXREYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRIb2xkZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0V3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZWFsTmFtZXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldERhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRXcmFwVG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fdXBkYXRlV3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvYmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW5EZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlCeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvbWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub29wLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub3cuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlckxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gveG9yLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kYXNoL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kb20vZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvbWl0dC9kaXN0L21pdHQuZXMuanMiLCJub2RlX21vZHVsZXMvbW9kZGxlLXhtbC9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9tb2RkbGUvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL2NvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL3JlZnMuanMiLCJub2RlX21vZHVsZXMvcGF0aC1pbnRlcnNlY3Rpb24vaW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL3NheGVuL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL3Njcm9sbC10YWJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlbGVjdGlvbi11cGRhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGlueS1zdmcvZGlzdC9pbmRleC5lc20uanMiLCJyZXNvdXJjZXMvYWN0aXZpdGkuanNvbiIsInJlc291cmNlcy9jdXN0b21Db250cm9scy9DdXN0b21Db250ZXh0UGFkLmpzIiwicmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzL0N1c3RvbVBhbGV0dGUuanMiLCJyZXNvdXJjZXMvY3VzdG9tQ29udHJvbHMvaW5kZXguanMiLCJyZXNvdXJjZXMvY3VzdG9tVHJhbnNsYXRlL2N1c3RvbVRyYW5zbGF0ZS5qcyIsInJlc291cmNlcy9jdXN0b21UcmFuc2xhdGUvdHJhbnNsYXRpb25zR2VybWFuLmpzIiwicmVzb3VyY2VzL25ld0RpYWdyYW0uYnBtbiIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL1Byb3BlcnRpZXNBY3RpdmF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9VdGlscy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvQ2hlY2tib3hFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0NvbWJvRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9FbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0VudHJ5RmllbGREZXNjcmlwdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvTGFiZWxGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9MaW5rRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9TZWxlY3RFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L1RhYmxlRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9UZXh0Qm94RW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9UZXh0SW5wdXRFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L1ZhbGlkYXRpb25Bd2FyZVRleHRJbnB1dC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvQ2F0ZWdvcnlIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvQ21kSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0VsZW1lbnRIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0Zvcm1IZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0lucHV0T3V0cHV0SGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL1BhcnRpY2lwYW50SGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9DcmVhdGVIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9DdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9FbGVtZW50VGVtcGxhdGVzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvRWxlbWVudFRlbXBsYXRlc0xvYWRlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL0hlbHBlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL1ZhbGlkYXRvci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL2NtZC9DaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvY21kL2luZGV4LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvaW5kZXguanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9wYXJ0cy9DaG9vc2VyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9wYXJ0cy9DdXN0b21Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2luZGV4LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvQXN5bmNocm9ub3VzQ29udGludWF0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9DYWxsQWN0aXZpdHlQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0NhbmRpZGF0ZVN0YXJ0ZXJQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0NvbmRpdGlvbmFsUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Db25uZWN0b3JEZXRhaWxQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Db25uZWN0b3JJbnB1dE91dHB1dFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRXJyb3JFdmVudFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRXh0ZXJuYWxUYXNrQ29uZmlndXJhdGlvblByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRmllbGRJbmplY3Rpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Zvcm1Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0hpc3RvcnlUaW1lVG9MaXZlUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9JbnB1dE91dHB1dFBhcmFtZXRlclByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvSW5wdXRPdXRwdXRQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0pvYkNvbmZpZ3VyYXRpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0xpc3RlbmVyRGV0YWlsUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9MaXN0ZW5lckZpZWxkSW5qZWN0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9MaXN0ZW5lclByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvTXVsdGlJbnN0YW5jZUxvb3BQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1Byb3BlcnRpZXNQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1NjcmlwdFRhc2tQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1NlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1N0YXJ0RXZlbnRJbml0aWF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9UYXNrbGlzdFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvVXNlclRhc2tQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1ZhcmlhYmxlTWFwcGluZ1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvVmVyc2lvblRhZ1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vQXN5bmNDb250aW51YXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9DYWxsYWJsZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0NhbmRpZGF0ZVN0YXJ0ZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9EZWxlZ2F0ZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRXh0ZW5zaW9uRWxlbWVudHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FeHRlcm5hbC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0V4dGVybmFsVGFza1ByaW9yaXR5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRmllbGRJbmplY3Rpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9IaXN0b3J5VGltZVRvTGl2ZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0ltcGxlbWVudGF0aW9uVHlwZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vSW5wdXRPdXRwdXRQYXJhbWV0ZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9Kb2JQcmlvcml0eS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0pvYlJldHJ5VGltZUN5Y2xlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vTGlzdGVuZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9NdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1Byb3BlcnRpZXMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9SZXN1bHRWYXJpYWJsZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1NjcmlwdC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1Rhc2tsaXN0LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9Eb2N1bWVudGF0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL0V2ZW50UHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL0V4ZWN1dGFibGVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvSWRQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvTGlua1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9OYW1lUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL1Byb2Nlc3NQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vQ29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vRXJyb3JFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0VzY2FsYXRpb25FdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0V2ZW50RGVmaW5pdGlvblJlZmVyZW5jZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vTWVzc2FnZUV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vTmFtZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vU2lnbmFsRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9UaW1lckV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy90b29scy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0FDQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFQQTtBQVFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFQLENBQWdCLFFBQWhCLEdBQTJCLElBQTNCLEdBQWtDLE1BQU0sQ0FBQyxRQUFQLENBQWdCLElBQWxFO0FBQ0EsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsSUFBaEIsQ0FBcUIsS0FBckIsQ0FBMkIsUUFBM0IsRUFBcUMsQ0FBckMsQ0FBYjtBQUNBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsSUFBM0IsRUFBaUMsQ0FBakMsQ0FBWjtBQUNBLE1BQU0sU0FBUyxHQUFHLE9BQU8sR0FBRyxHQUE1QixDLENBRUE7O0FBQ0EsSUFBSSxxQkFBcUIsR0FBRztBQUN4QixFQUFBLFNBQVMsRUFBRSxDQUFDLE9BQUQsRUFBVSx3QkFBVjtBQURhLENBQTVCO0FBR0E7QUFDQSxJQUFJLFNBQVMsR0FBRyxxQkFBRSxlQUFGLENBQWhCO0FBQ0EsSUFBSSxNQUFNLEdBQUcscUJBQUUsWUFBRixDQUFiO0FBQ0EsSUFBSSxXQUFXLEdBQUcsSUFBSSxnQkFBSixDQUFnQjtBQUM5QixFQUFBLFNBQVMsRUFBRSxNQURtQjtBQUU5QixFQUFBLGVBQWUsRUFBRTtBQUNiLElBQUEsTUFBTSxFQUFFO0FBREssR0FGYTtBQUs5QixFQUFBLGlCQUFpQixFQUFFLENBQ2YsOEJBRGUsRUFFZixpQkFGZSxF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QXBCLEVBQThCLFlBQVk7QUFDdEMsbUJBQU0sTUFBTixDQUFhLFdBQWIsRUFBeUIsU0FBekI7QUFDSCxHQUZEO0FBR0gsQ0FoR0Q7OztBQy9DQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3J2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNubEZBLE1BQUksR0FBRyxHQUFHLE1BQUEsQ0FBQSxPQUFBLEdBQWlCLFVB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4blZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RKQSxTQUFTLGNBQVQsQ0FBd0IsT0FBeEIsRUFBaUMsTUFBakMsRUFBeUM7QUFFdkMsTUFBSSxPQUFPLENBQUMsYUFBUixLQUEwQixNQUFNLENBQUMsYUFBckMsRUFBb0Q7QUFDbEQsUUFBSTtBQUNGO0FBQ0EsYUFBTyxNQUFNLENBQUMsYUFBUCxDQUFxQixV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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5aEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdmRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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OztBQUNELFNBQUksSUFBSSxDQUFSLElBQWEsSUFBSSxDQUFDLGFBQUQsQ0FBakIsRUFBaUM7QUFDN0IsVUFBSSxHQUFHLEdBQUM7QUFDSixnQkFBUSxJQUFJLENBQUMsYUFBRCxDQUFKLENBQW9CLENBQXBCLENBREo7QUFFSixrQkFBUyxPQUZMO0FBR0osZ0JBQU87QUFISCxPQUFSO0FBS0EsTUFBQSxTQUFTLENBQUMsSUFBVixDQUFlLEdBQWY7QUFDSDs7QUFDRCxXQUFPLFNBQVA7QUFDSDs7QUEvUFMsQ0FBZDtlQXFRZSxLIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiXHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCBCcG1uTW9kZWxlciBmcm9tICdicG1uLWpzL2xpYi9Nb2RlbGVyJztcclxuLy9pbXBvcnQgcHJvcGVydGllc1BhbmVsTW9kdWxlIGZyb20gJy4uL3Jlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsJztcclxuaW1wb3J0IHByb3BlcnRpZXNQYW5lbE1vZHVsZSBmcm9tICdicG1uLWpzLXByb3BlcnRpZXMtcGFuZWwnO1xyXG5pbXBvcnQgcHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlIGZyb20gJy4uL3Jlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpJztcclxuaW1wb3J0IGFjdGl2aXRpTW9kZGxlRGVzY3JpcHRvciBmcm9tICcuLi9yZXNvdXJjZXMvYWN0aXZpdGkuanNvbic7XHJcbmltcG9ydCBjdXN0b21UcmFuc2xhdGUgZnJvbSAnLi4vcmVzb3VyY2VzL2N1c3RvbVRyYW5zbGF0ZS9jdXN0b21UcmFuc2xhdGUnO1xyXG5pbXBvcnQgY3VzdG9tQ29udHJvbHNNb2R1bGUgZnJvbSAnLi4vcmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzJztcclxuaW1wb3J0IHRvb2xzIGZyb20gJy4uL3Jlc291cmNlcy90b29scydcclxuaW1wb3J0IGRpYWdyYW1YTUwgZnJvbSAnLi4vcmVzb3VyY2VzL25ld0RpYWdyYW0uYnBtbic7XHJcbmNvbnN0IHByb0hvc3QgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuY29uc3QgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiYnBtbmpzXCIpWzBdO1xyXG5jb25zdCBrZXkgPSBocmVmLnNwbGl0KHdpbmRvdy5sb2NhdGlvbi5ob3N0KVsxXTtcclxuY29uc3QgcHVibGljdXJsID0gcHJvSG9zdCArIGtleTtcclxuXHJcbi8vIOa3u+WKoOe/u+ivkee7hOS7tlxyXG52YXIgY3VzdG9tVHJhbnNsYXRlTW9kdWxlID0ge1xyXG4gICAgdHJhbnNsYXRlOiBbJ3ZhbHVlJywgY3VzdG9tVHJhbnNsYXRlXVxyXG59O1xyXG5kZWJ1Z2dlclxyXG52YXIgY29udGFpbmVyID0gJCgnI2pzLWRyb3Atem9uZScpO1xyXG52YXIgY2FudmFzID0gJCgnI2pzLWNhbnZhcycpO1xyXG52YXIgYnBtbk1vZGVsZXIgPSBuZXcgQnBtbk1vZGVsZXIoe1xyXG4gICAgY29udGFpbmVyOiBjYW52YXMsXHJcbiAgICBwcm9wZXJ0aWVzUGFuZWw6IHtcclxuICAgICAgICBwYXJlbnQ6ICcjanMtcHJvcGVydGllcy1wYW5lbCdcclxuICAgIH0sXHJcbiAgICBhZGRpdGlvbmFsTW9kdWxlczogW1xyXG4gICAgICAgIHByb3BlcnRpZXNQYW5lbE1vZHVsZSxcclxuICAgICAgICBwcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUsXHJcbiAgICAgICAgY3VzdG9tQ29udHJvbHNNb2R1bGUsXHJcbiAgICAgICAgY3VzdG9tVHJhbnNsYXRlTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgbW9kZGxlRXh0ZW5zaW9uczoge1xyXG4gICAgICAgIGFjdGl2aXRpOmFjdGl2aXRpTW9kZGxlRGVzY3JpcHRvclxyXG4gICAgfVxyXG59KTtcclxuY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWRpYWdyYW0nKTtcclxuLy8g5Yik5pat5rWP6KeI5Zmo5pSv5oyB56iL5bqmXHJcbmlmICghd2luZG93LkZpbGVMaXN0IHx8ICF3aW5kb3cuRmlsZVJlYWRlcikge1xyXG4gICAgd2luZG93LmFsZXJ0KCfor7fkvb/nlKjosLfmrYzjgIHngavni5DjgIFJRTEwK+a1j+iniOWZqCcpO1xyXG59IGVsc2Uge1xyXG4gICAgdG9vbHMucmVnaXN0ZXJGaWxlRHJvcChjb250YWluZXIsIHRvb2xzLmNyZWF0ZURpYWdyYW0oZGlhZ3JhbVhNTCwgYnBtbk1vZGVsZXIsIGNvbnRhaW5lcikpO1xyXG59XHJcblxyXG5cclxuJChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyDliJvlu7picG1uXHJcbiAgICB2YXIgcGFyYW0gPSB0b29scy5nZXRVcmxQYXJhbSh3aW5kb3cubG9jYXRpb24uaHJlZilcclxuICAgICAgICAkKCcuaXRlbScpLnNob3coKVxyXG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdhZGRCcG1uJykge1xyXG4gICAgICAgIHRvb2xzLmNyZWF0ZURpYWdyYW0oZGlhZ3JhbVhNTCwgYnBtbk1vZGVsZXIsIGNvbnRhaW5lcik7XHJcbiAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdsb29rQnBtbicpIHsgLy/nvJbovpFicG1uXHJcbiAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAkKCcuaXRlbScpLmhpZGUoKVxyXG4gICAgICAgICQoJy5kb3dubG9hZCcpLnNob3coKVxyXG4gICAgICAgIGNvbnN0IElkID0gcGFyYW0uZGVwbG95bWVudEZpbGVVVUlEIHx8ICc2ZDRhZjJkYy1iYWIwLTExZWEtYjU4NC0zY2YwMTFlYWFmY2EnXHJcbiAgICAgICAgY29uc3QgTmFtZT1wYXJhbS5kZXBsb3ltZW50TmFtZSB8fCAnU3RyaW5nLmJwbW4nXHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VJZD1wYXJhbS5pbnN0YW5jZUlkXHJcbiAgICAgICAgdmFyIHBhcmFtPXtcclxuICAgICAgICAgICAgXCJkZXBsb3ltZW50SWRcIjpJZCxcclxuICAgICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjpkZWNvZGVVUkkoTmFtZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaW5zdGFuY2VJZCl7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbTE9e1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VJZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsnYWN0aXZpdGlIaXN0b3J5L2dldGhpZ2hMaW5lJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0xLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6J2pzb24nLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgQ29sb3JKc29uPXRvb2xzLmdldEJ5Q29sb3IocmVzdWx0Lm9iailcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vZ2V0RGVmaW5pdGlvblhNTCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6J3RleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3WG1sRGF0YSA9IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShuZXdYbWxEYXRhLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gQ29sb3JKc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLnNldENvbG9yKENvbG9ySnNvbltpXSxicG1uTW9kZWxlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIC8v5Yqg6L295ZCO5Y+w5pa55rOV6I635Y+WeG1sXHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vZ2V0RGVmaW5pdGlvblhNTCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6J3RleHQnLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdYbWxEYXRhID0gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShuZXdYbWxEYXRhLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmKHBhcmFtLnR5cGUgPT09IFwiaGlzdG9yeUJwbW5cIikgeyAvLyBicG1u5Y6G5Y+yXHJcbiAgICAgICAgJCgnLml0ZW0nKS5oaWRlKClcclxuICAgICAgICAkKCcuZG93bmxvYWQnKS5zaG93KClcclxuICAgIH1cclxuICAgIC8vIOeCueWHu+aWsOWinlxyXG4gICAgJCgnI2pzLWRvd25sb2FkLWRpYWdyYW0nKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgIHRvb2xzLnN5b3BlbignYWxlcnQnKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyDngrnlh7vlj5bmtohcclxuICAgICQoJy5jYW5jZWwnKS5vbihcImNsaWNrXCIsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvb2xzLnN5aGlkZSgnYWxlcnQnKVxyXG4gICAgfSlcclxuICAgIC8vIOeCueWHu+ehruWumlxyXG4gICAgJCgnI3N1cmUnKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAvLyBjb25zdCB0ZXh0PSQoXCIjZGVwbG95bWVudE5hbWVcIikudmFsKClcclxuICAgICAgICB0b29scy5zYXZlQnBtbihicG1uTW9kZWxlcilcclxuICAgIH0pXHJcblxyXG5cclxuXHJcbiAgICAvLyDngrnlh7vkuIvovb1cclxuICAgICQoXCIjZG93bmxvYWRCcG1uXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvb2xzLmRvd25Mb2FkKGJwbW5Nb2RlbGVyKVxyXG4gICAgfSlcclxuICAgIC8vIOeCueWHu+S4iuS8oFxyXG4gICAgJChcIiN1cGxvYWRGaWxlXCIpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b29scy51cGxvYWQoYnBtbk1vZGVsZXIsY29udGFpbmVyKVxyXG4gICAgfSlcclxufSk7XHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWInKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuL1V0aWxzJykuZXNjYXBlSFRNTDtcblxudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXG4gICAgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXG4gICAgZG9tUXVlcnlBbGwgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnlBbGwsXG4gICAgZG9tUmVtb3ZlID0gcmVxdWlyZSgnbWluLWRvbScpLnJlbW92ZSxcbiAgICBkb21DbGFzc2VzID0gcmVxdWlyZSgnbWluLWRvbScpLmNsYXNzZXMsXG4gICAgZG9tQ2xvc2VzdCA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbG9zZXN0LFxuICAgIGRvbUF0dHIgPSByZXF1aXJlKCdtaW4tZG9tJykuYXR0cixcbiAgICBkb21EZWxlZ2F0ZSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kZWxlZ2F0ZSxcbiAgICBkb21NYXRjaGVzID0gcmVxdWlyZSgnbWluLWRvbScpLm1hdGNoZXM7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcbiAgICBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoL2dldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpLFxuICAgIGlzRW1wdHkgPSByZXF1aXJlKCdsb2Rhc2gvaXNFbXB0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheScpLFxuICAgIHhvciA9IHJlcXVpcmUoJ2xvZGFzaC94b3InKSxcbiAgICBkZWJvdW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kZWJvdW5jZScpO1xuXG52YXIgdXBkYXRlU2VsZWN0aW9uID0gcmVxdWlyZSgnc2VsZWN0aW9uLXVwZGF0ZScpO1xuXG52YXIgc2Nyb2xsVGFicyA9IHJlcXVpcmUoJ3Njcm9sbC10YWJzJykuZGVmYXVsdDtcblxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcblxudmFyIEhJREVfQ0xBU1MgPSAnYnBwLWhpZGRlbic7XG52YXIgREVCT1VOQ0VfREVMQVkgPSAzMDA7XG5cblxuZnVuY3Rpb24gaXNUb2dnbGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnY2hlY2tib3gnIHx8IG5vZGUudHlwZSA9PT0gJ3JhZGlvJztcbn1cblxuZnVuY3Rpb24gaXNTZWxlY3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnc2VsZWN0LW9uZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGVudEVkaXRhYmxlKG5vZGUpIHtcbiAgcmV0dXJuIGRvbUF0dHIobm9kZSwgJ2NvbnRlbnRlZGl0YWJsZScpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVBsYWNlaG9sZGVycyhub2RlKSB7XG4gIHZhciBzZWxlY3RvciA9ICdpbnB1dFtuYW1lXSwgdGV4dGFyZWFbbmFtZV0sIFtkYXRhLXZhbHVlXSwgW2NvbnRlbnRlZGl0YWJsZV0nO1xuICB2YXIgcGxhY2Vob2xkZXJzID0gZG9tUXVlcnlBbGwoc2VsZWN0b3IsIG5vZGUpO1xuICBpZiAoKCFwbGFjZWhvbGRlcnMgfHwgIXBsYWNlaG9sZGVycy5sZW5ndGgpICYmIGRvbU1hdGNoZXMobm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcGxhY2Vob2xkZXJzID0gWyBub2RlIF07XG4gIH1cbiAgcmV0dXJuIHBsYWNlaG9sZGVycztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGFjdGl2ZSBmb3JtIGNvbnRyb2xzLlxuICogVGhpcyBleGNsdWRlcyB0aGUgaW52aXNpYmxlIGNvbnRyb2xzIHVubGVzcyBhbGwgaXMgdHJ1ZVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsPWZhbHNlXVxuICovXG5mdW5jdGlvbiBnZXRGb3JtQ29udHJvbHMobm9kZSwgYWxsKSB7XG4gIHZhciBjb250cm9scyA9IGRvbVF1ZXJ5QWxsKCdpbnB1dFtuYW1lXSwgdGV4dGFyZWFbbmFtZV0sIHNlbGVjdFtuYW1lXSwgW2NvbnRlbnRlZGl0YWJsZV0nLCBub2RlKTtcblxuICBpZiAoIWNvbnRyb2xzIHx8ICFjb250cm9scy5sZW5ndGgpIHtcbiAgICBjb250cm9scyA9IGRvbU1hdGNoZXMobm9kZSwgJ29wdGlvbicpID8gWyBub2RlIF0gOiBjb250cm9scztcbiAgfVxuXG4gIGlmICghYWxsKSB7XG4gICAgY29udHJvbHMgPSBmaWx0ZXIoY29udHJvbHMsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHJldHVybiAhZG9tQ2xvc2VzdChub2RlLCAnLicgKyBISURFX0NMQVNTKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb250cm9scztcbn1cblxuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGVudHJ5Tm9kZSkge1xuICB2YXIgdmFsdWVzID0ge307XG5cbiAgdmFyIGNvbnRyb2xOb2RlcyA9IGdldEZvcm1Db250cm9scyhlbnRyeU5vZGUpO1xuXG4gIGZvckVhY2goY29udHJvbE5vZGVzLCBmdW5jdGlvbihjb250cm9sTm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IGNvbnRyb2xOb2RlLnZhbHVlO1xuXG4gICAgdmFyIG5hbWUgPSBkb21BdHRyKGNvbnRyb2xOb2RlLCAnbmFtZScpIHx8IGRvbUF0dHIoY29udHJvbE5vZGUsICdkYXRhLW5hbWUnKTtcblxuICAgIC8vIHRha2UgdG9nZ2xlIHN0YXRlIGludG8gYWNjb3VudCBmb3IgcmFkaW8gLyBjaGVja2JveGVzXG4gICAgaWYgKGlzVG9nZ2xlKGNvbnRyb2xOb2RlKSkge1xuICAgICAgaWYgKGNvbnRyb2xOb2RlLmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKCFkb21BdHRyKGNvbnRyb2xOb2RlLCAndmFsdWUnKSkge1xuICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGNvbnRyb2xOb2RlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKGNvbnRyb2xOb2RlKSkge1xuICAgICAgdmFsdWUgPSBjb250cm9sTm9kZS5pbm5lclRleHQ7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgLy8gaGFuZGxlIHNlcmlhbGl6YXRpb24gaW4gZW50cnkgcHJvdmlkZXJcbiAgICAgIC8vIChpZS4gaWYgZW1wdHkgc3RyaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkIG9yIG5vdClcbiAgICAgIHZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcblxufVxuXG4vKipcbiAqIEV4dHJhY3QgaW5wdXQgdmFsdWVzIGZyb20gZW50cnkgbm9kZVxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IGVudHJ5Tm9kZVxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKSB7XG5cbiAgdmFyIHZhbHVlcztcblxuICB2YXIgbGlzdENvbnRhaW5lciA9IGRvbVF1ZXJ5KCdbZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcl0nLCBlbnRyeU5vZGUpO1xuICBpZiAobGlzdENvbnRhaW5lcikge1xuICAgIHZhbHVlcyA9IFtdO1xuICAgIHZhciBsaXN0Tm9kZXMgPSBsaXN0Q29udGFpbmVyLmNoaWxkcmVuIHx8IFtdO1xuICAgIGZvckVhY2gobGlzdE5vZGVzLCBmdW5jdGlvbihsaXN0Tm9kZSkge1xuICAgICAgdmFsdWVzLnB1c2goZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGxpc3ROb2RlKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGVudHJ5Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBmb3JtIGV4dHJhY3RlZCB2YWx1ZSBlcXVhbHNcbiAqIHRvIGFuIG9sZCBjYWNoZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRWYWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdmFsdWVFcXVhbCh2YWx1ZSwgb2xkVmFsdWUpIHtcblxuICBpZiAodmFsdWUgJiYgIW9sZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGFsbEtleXMgPSBrZXlzKHZhbHVlKS5jb25jYXQoa2V5cyhvbGRWYWx1ZSkpO1xuXG4gIHJldHVybiBhbGxLZXlzLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiB2YWx1ZVtrZXldID09PSBvbGRWYWx1ZVtrZXldO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZm9ybSBleHRyYWN0ZWQgdmFsdWUocylcbiAqIGVxdWFsIGFuIG9sZCBjYWNoZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD58T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0PnxPYmplY3R9IG9sZFZhbHVlc1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdmFsdWVzRXF1YWwodmFsdWVzLCBvbGRWYWx1ZXMpIHtcblxuICBpZiAoaXNBcnJheSh2YWx1ZXMpKSB7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCAhPT0gb2xkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXMuZXZlcnkoZnVuY3Rpb24odiwgaWR4KSB7XG4gICAgICByZXR1cm4gdmFsdWVFcXVhbCh2LCBvbGRWYWx1ZXNbaWR4XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVFcXVhbCh2YWx1ZXMsIG9sZFZhbHVlcyk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbWFwcGluZyBvZiB7IGlkOiBlbnRyeSB9IGZvciBhbGwgZW50cmllcyBpbiB0aGUgZ2l2ZW4gZ3JvdXBzIGluIHRoZSBnaXZlbiB0YWJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YWJzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RFbnRyaWVzKHRhYnMpIHtcbiAgcmV0dXJuIGtleUJ5KGZsYXR0ZW5EZWVwKG1hcChmbGF0dGVuRGVlcChtYXAodGFicywgJ2dyb3VwcycpKSwgJ2VudHJpZXMnKSksICdpZCcpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIG1hcHBpbmcgb2YgeyBpZDogZ3JvdXAgfSBmb3IgYWxsIGdyb3VwcyBpbiB0aGUgZ2l2ZW4gdGFicy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFic1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBleHRyYWN0R3JvdXBzKHRhYnMpIHtcbiAgcmV0dXJuIGtleUJ5KGZsYXR0ZW5EZWVwKG1hcCh0YWJzLCAnZ3JvdXBzJykpLCAnaWQnKTtcbn1cblxuLyoqXG4gKiBBIHByb3BlcnRpZXMgcGFuZWwgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVG8gdXNlIGl0IHByb3ZpZGUgYSBgcHJvcGVydGllc1Byb3ZpZGVyYCBjb21wb25lbnQgdGhhdCBrbm93c1xuICogYWJvdXQgd2hpY2ggcHJvcGVydGllcyB0byBkaXNwbGF5LlxuICpcbiAqIFByb3BlcnRpZXMgZWRpdCBzdGF0ZSAvIHZpc2liaWxpdHkgY2FuIGJlIGludGVyY2VwdGVkXG4gKiB2aWEgYSBjdXN0b20ge0BsaW5rIFByb3BlcnRpZXNBY3RpdmF0b3J9LlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXNQcm92aWRlcn0gcHJvcGVydGllc1Byb3ZpZGVyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbmZ1bmN0aW9uIFByb3BlcnRpZXNQYW5lbChjb25maWcsIGV2ZW50QnVzLCBtb2RlbGluZywgcHJvcGVydGllc1Byb3ZpZGVyLCBjb21tYW5kU3RhY2ssIGNhbnZhcykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9wcm9wZXJ0aWVzUHJvdmlkZXIgPSBwcm9wZXJ0aWVzUHJvdmlkZXI7XG5cbiAgdGhpcy5faW5pdChjb25maWcpO1xufVxuXG5Qcm9wZXJ0aWVzUGFuZWwuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5wcm9wZXJ0aWVzUGFuZWwnLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAncHJvcGVydGllc1Byb3ZpZGVyJyxcbiAgJ2NvbW1hbmRTdGFjaycsXG4gICdjYW52YXMnXG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3BlcnRpZXNQYW5lbDtcblxuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oY29uZmlnKSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcyxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIHJvb3QgZWxlbWVudCBvbmNlIGl0IGlzIGFkZGVkIHRvIHRoZSBjYW52YXNcbiAgICovXG4gIGV2ZW50QnVzLm9uKCdyb290LmFkZGVkJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlbGVtZW50ID0gZS5lbGVtZW50O1xuXG4gICAgaWYgKGlzSW1wbGljaXRSb290KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGUoZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IGUubmV3U2VsZWN0aW9uWzBdO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAoaXNJbXBsaWNpdFJvb3Qocm9vdEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGUobmV3RWxlbWVudCk7XG4gIH0pO1xuXG4gIC8vIGFkZCAvIHVwZGF0ZSB0YWItYmFyIHNjcm9sbGluZ1xuICBldmVudEJ1cy5vbihbXG4gICAgJ3Byb3BlcnRpZXNQYW5lbC5jaGFuZ2VkJyxcbiAgICAncHJvcGVydGllc1BhbmVsLnJlc2l6ZWQnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgdGFiQmFyTm9kZSA9IGRvbVF1ZXJ5KCcuYnBwLXByb3BlcnRpZXMtdGFiLWJhcicsIHNlbGYuX2NvbnRhaW5lcik7XG5cbiAgICBpZiAoIXRhYkJhck5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2Nyb2xsZXIgPSBzY3JvbGxUYWJzLmdldCh0YWJCYXJOb2RlKTtcblxuICAgIGlmICghc2Nyb2xsZXIpIHtcblxuICAgICAgLy8gd2UgZGlkIG5vdCBpbml0aWFsaXplIHlldCwgZG8gdGhhdFxuICAgICAgLy8gbm93IGFuZCBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBhY3RpdmVcbiAgICAgIC8vIHRhYiBvbiBzY3JvbGwgdXBkYXRlXG4gICAgICBzY3JvbGxlciA9IHNjcm9sbFRhYnModGFiQmFyTm9kZSwge1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICB0YWJzQ29udGFpbmVyOiAnLmJwcC1wcm9wZXJ0aWVzLXRhYnMtbGlua3MnLFxuICAgICAgICAgIHRhYjogJy5icHAtcHJvcGVydGllcy10YWJzLWxpbmtzIGxpJyxcbiAgICAgICAgICBpZ25vcmU6ICcuYnBwLWhpZGRlbicsXG4gICAgICAgICAgYWN0aXZlOiAnLmJwcC1hY3RpdmUnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG5cbiAgICAgIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCBmdW5jdGlvbihuZXdBY3RpdmVOb2RlLCBvbGRBY3RpdmVOb2RlLCBkaXJlY3Rpb24pIHtcblxuICAgICAgICB2YXIgbGlua05vZGUgPSBkb21RdWVyeSgnW2RhdGEtdGFiLXRhcmdldF0nLCBuZXdBY3RpdmVOb2RlKTtcblxuICAgICAgICB2YXIgdGFiSWQgPSBkb21BdHRyKGxpbmtOb2RlLCAnZGF0YS10YWItdGFyZ2V0Jyk7XG5cbiAgICAgICAgc2VsZi5hY3RpdmF0ZVRhYih0YWJJZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZWFjdCBvbiB0YWIgY2hhbmdlcyBhbmQgb3IgdGFiQ29udGFpbmVyIHJlc2l6ZVxuICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhlIGFjdGl2ZSB0YWIgaXMgc2hvd24gY29tcGxldGVseVxuICAgIHNjcm9sbGVyLnVwZGF0ZSgpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudHMuY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjdXJyZW50ID0gc2VsZi5fY3VycmVudDtcbiAgICB2YXIgZWxlbWVudCA9IGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGlmIChlLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xKSB7XG4gICAgICAgIHNlbGYudXBkYXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnRUZW1wbGF0ZXMuY2hhbmdlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VsZi5fY3VycmVudDtcbiAgICB2YXIgZWxlbWVudCA9IGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHNlbGYudXBkYXRlKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZGV0YWNoKCk7XG4gIH0pO1xuXG4gIHRoaXMuX2NvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXBhbmVsXCI+PC9kaXY+Jyk7XG5cbiAgdGhpcy5fYmluZExpc3RlbmVycyh0aGlzLl9jb250YWluZXIpO1xuXG4gIGlmIChjb25maWcgJiYgY29uZmlnLnBhcmVudCkge1xuICAgIHRoaXMuYXR0YWNoVG8oY29uZmlnLnBhcmVudCk7XG4gIH1cbn07XG5cblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKHBhcmVudE5vZGUpIHtcblxuICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudE5vZGUgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBkZXRhY2ggZnJvbSB0aGVcbiAgLy8gcHJldmlvdXMsIG9sZCBwYXJlbnRcbiAgdGhpcy5kZXRhY2goKTtcblxuICAvLyB1bndyYXAgalF1ZXJ5IGlmIHByb3ZpZGVkXG4gIGlmIChwYXJlbnROb2RlLmdldCAmJiBwYXJlbnROb2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXQoMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmVudE5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyZW50Tm9kZSA9IGRvbVF1ZXJ5KHBhcmVudE5vZGUpO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcblxuICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgdGhpcy5fZW1pdCgnYXR0YWNoJyk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsXG4gICAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZW1pdCgnZGV0YWNoJyk7XG5cbiAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIFNlbGVjdCB0aGUgZ2l2ZW4gdGFiIHdpdGhpbiB0aGUgcHJvcGVydGllcyBwYW5lbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHRhYlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmFjdGl2YXRlVGFiID0gZnVuY3Rpb24odGFiKSB7XG5cbiAgdmFyIHRhYklkID0gdHlwZW9mIHRhYiA9PT0gJ3N0cmluZycgPyB0YWIgOiB0YWIuaWQ7XG5cbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIHZhciBwYW5lbE5vZGUgPSBjdXJyZW50LnBhbmVsO1xuXG4gIHZhciBhbGxUYWJOb2RlcyA9IGRvbVF1ZXJ5QWxsKCcuYnBwLXByb3BlcnRpZXMtdGFiJywgcGFuZWxOb2RlKSxcbiAgICAgIGFsbFRhYkxpbmtOb2RlcyA9IGRvbVF1ZXJ5QWxsKCcuYnBwLXByb3BlcnRpZXMtdGFiLWxpbmsnLCBwYW5lbE5vZGUpO1xuXG4gIGZvckVhY2goYWxsVGFiTm9kZXMsIGZ1bmN0aW9uKHRhYk5vZGUpIHtcblxuICAgIHZhciBjdXJyZW50VGFiSWQgPSBkb21BdHRyKHRhYk5vZGUsICdkYXRhLXRhYicpO1xuXG4gICAgZG9tQ2xhc3Nlcyh0YWJOb2RlKS50b2dnbGUoJ2JwcC1hY3RpdmUnLCB0YWJJZCA9PT0gY3VycmVudFRhYklkKTtcbiAgfSk7XG5cbiAgZm9yRWFjaChhbGxUYWJMaW5rTm9kZXMsIGZ1bmN0aW9uKHRhYkxpbmtOb2RlKSB7XG5cbiAgICB2YXIgdGFiTGluayA9IGRvbVF1ZXJ5KCdbZGF0YS10YWItdGFyZ2V0XScsIHRhYkxpbmtOb2RlKSxcbiAgICAgICAgY3VycmVudFRhYklkID0gZG9tQXR0cih0YWJMaW5rLCAnZGF0YS10YWItdGFyZ2V0Jyk7XG5cbiAgICBkb21DbGFzc2VzKHRhYkxpbmtOb2RlKS50b2dnbGUoJ2JwcC1hY3RpdmUnLCB0YWJJZCA9PT0gY3VycmVudFRhYklkKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsXG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgLy8gbm8gYWN0dWFsIHNlbGVjdGlvbiBjaGFuZ2VcbiAgdmFyIG5lZWRzQ3JlYXRlID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAvLyB1c2UgUm9vdEVsZW1lbnQgb2YgQlBNTiBkaWFncmFtIHRvIGdlbmVyYXRlIHByb3BlcnRpZXMgcGFuZWwgaWYgbm8gZWxlbWVudCBpcyBzZWxlY3RlZFxuICAgIGVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcbiAgfVxuXG4gIHZhciBuZXdUYWJzID0gdGhpcy5fcHJvcGVydGllc1Byb3ZpZGVyLmdldFRhYnMoZWxlbWVudCk7XG5cbiAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50ID09PSBlbGVtZW50KSB7XG4gICAgLy8gc2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgcGFuZWxcblxuICAgIG5lZWRzQ3JlYXRlID0gdGhpcy5fZW50cmllc0NoYW5nZWQoY3VycmVudCwgbmV3VGFicyk7XG4gIH1cblxuICBpZiAobmVlZHNDcmVhdGUpIHtcblxuICAgIGlmIChjdXJyZW50KSB7XG5cbiAgICAgIC8vIGdldCBhY3RpdmUgdGFiIGZyb20gdGhlIGV4aXN0aW5nIHBhbmVsIGJlZm9yZSByZW1vdmUgaXRcbiAgICAgIHZhciBhY3RpdmVUYWJOb2RlID0gZG9tUXVlcnkoJy5icHAtcHJvcGVydGllcy10YWIuYnBwLWFjdGl2ZScsIGN1cnJlbnQucGFuZWwpO1xuXG4gICAgICB2YXIgYWN0aXZlVGFiSWQ7XG4gICAgICBpZiAoYWN0aXZlVGFiTm9kZSkge1xuICAgICAgICBhY3RpdmVUYWJJZCA9IGRvbUF0dHIoYWN0aXZlVGFiTm9kZSwgJ2RhdGEtdGFiJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBvbGQgcGFuZWxcbiAgICAgIGRvbVJlbW92ZShjdXJyZW50LnBhbmVsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50ID0gdGhpcy5fY3JlYXRlKGVsZW1lbnQsIG5ld1RhYnMpO1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIHNhdmVkIGFjdGl2ZSB0YWIgZnJvbSB0aGUgcmVtb3ZlIHBhbmVsIG9yIHRoZSBmaXJzdCB0YWJcbiAgICAoYWN0aXZlVGFiSWQpID8gdGhpcy5hY3RpdmF0ZVRhYihhY3RpdmVUYWJJZCkgOiB0aGlzLmFjdGl2YXRlVGFiKHRoaXMuX2N1cnJlbnQudGFic1swXSk7XG5cbiAgfVxuXG4gIGlmICh0aGlzLl9jdXJyZW50KSB7XG4gICAgLy8gbWFrZSBzdXJlIGNvcnJlY3QgdGFiIGNvbnRlbnRzIGFyZSB2aXNpYmxlXG4gICAgdGhpcy5fdXBkYXRlQWN0aXZhdGlvbih0aGlzLl9jdXJyZW50KTtcblxuICB9XG5cbiAgdGhpcy5fZW1pdCgnY2hhbmdlZCcpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvbmUgb2YgdHdvIGdyb3VwcyBoYXMgZGlmZmVyZW50IGVudHJpZXMgdGhhbiB0aGUgb3RoZXIuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjdXJyZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IG5ld1RhYnNcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2VudHJpZXNDaGFuZ2VkID0gZnVuY3Rpb24oY3VycmVudCwgbmV3VGFicykge1xuXG4gIHZhciBvbGRFbnRyeUlkcyA9IGtleXMoY3VycmVudC5lbnRyaWVzKSxcbiAgICAgIG5ld0VudHJ5SWRzID0ga2V5cyhleHRyYWN0RW50cmllcyhuZXdUYWJzKSk7XG5cbiAgcmV0dXJuICFpc0VtcHR5KHhvcihvbGRFbnRyeUlkcywgbmV3RW50cnlJZHMpKTtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuJyArIGV2ZW50LCB7IHBhbmVsOiB0aGlzLCBjdXJyZW50OiB0aGlzLl9jdXJyZW50IH0pO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fYmluZExpc3RlbmVycyA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBoYW5kbGVzIGEgY2hhbmdlIGZvciBhIGdpdmVuIGV2ZW50XG4gIHZhciBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcblxuICAgIC8vIHNlZSBpZiB3ZSBoYW5kbGUgYSBjaGFuZ2UgaW5zaWRlIGEgW2RhdGEtZW50cnldIGVsZW1lbnQuXG4gICAgLy8gaWYgbm90LCBkcm9wIG91dFxuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCxcbiAgICAgICAgZW50cnlOb2RlID0gZG9tQ2xvc2VzdChpbnB1dE5vZGUsICdbZGF0YS1lbnRyeV0nKSxcbiAgICAgICAgZW50cnlJZCwgZW50cnk7XG5cbiAgICAvLyBjaGFuZ2UgZnJvbSBvdXRzaWRlIGEgW2RhdGEtZW50cnldIGVsZW1lbnQsIHNpbXBseSBpZ25vcmVcbiAgICBpZiAoIWVudHJ5Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVudHJ5SWQgPSBkb21BdHRyKGVudHJ5Tm9kZSwgJ2RhdGEtZW50cnknKTtcbiAgICBlbnRyeSA9IHNlbGYuZ2V0RW50cnkoZW50cnlJZCk7XG5cbiAgICB2YXIgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKTtcblxuICAgIGlmIChldmVudC50eXBlID09PSAnY2hhbmdlJykge1xuXG4gICAgICAvLyAtIGlmIHRoZSBcImRhdGEtb24tY2hhbmdlXCIgYXR0cmlidXRlIGlzIHByZXNlbnQgYW5kIGEgdmFsdWUgaXMgY2hhbmdlZCxcbiAgICAgIC8vICAgdGhlbiB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gaXMgcGVyZm9ybWVkLlxuICAgICAgLy8gLSBpZiB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gcmV0dXJucyBcInRydWVcIiB0aGVuIGFuIHVwZGF0ZSB0byB0aGUgYnVzaW5lc3NcbiAgICAgIC8vICAgb2JqZWN0IGlzIGRvbmVcbiAgICAgIC8vIC0gaWYgaXQgZG9lcyBub3QgcmV0dXJuIFwidHJ1ZVwiLCB0aGVuIG9ubHkgdGhlIERPTSBjb250ZW50IGlzIHVwZGF0ZWRcbiAgICAgIHZhciBvbkNoYW5nZUFjdGlvbiA9IGRvbUF0dHIoaW5wdXROb2RlLCAnZGF0YS1vbi1jaGFuZ2UnKTtcblxuICAgICAgaWYgKG9uQ2hhbmdlQWN0aW9uKSB7XG4gICAgICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgb25DaGFuZ2VBY3Rpb24sIGV2ZW50KTtcblxuICAgICAgICBpZiAoIWlzRW50cnlEaXJ0eSkge1xuICAgICAgICAgIHJldHVybiBzZWxmLnVwZGF0ZShzZWxmLl9jdXJyZW50LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHNlbGYuYXBwbHlDaGFuZ2VzKGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG4gICAgc2VsZi51cGRhdGVTdGF0ZShlbnRyeSwgZW50cnlOb2RlKTtcbiAgfTtcblxuICAvLyBkZWJvdW5jZSB1cGRhdGUgb25seSBlbGVtZW50cyB0aGF0IGFyZSB0YXJnZXQgb2Yga2V5IGV2ZW50cyxcbiAgLy8gaS5lLiBJTlBVVCBhbmQgVEVYVEFSRUEuIFNFTEVDVHMgd2lsbCB0cmlnZ2VyIGFuIGltbWVkaWF0ZSB1cGRhdGUgYW55d2F5LlxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJ2lucHV0LCB0ZXh0YXJlYSwgW2NvbnRlbnRlZGl0YWJsZV0nLCAnaW5wdXQnLCBkZWJvdW5jZShoYW5kbGVDaGFuZ2UsIERFQk9VTkNFX0RFTEFZKSk7XG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIFtjb250ZW50ZWRpdGFibGVdJywgJ2NoYW5nZScsIGhhbmRsZUNoYW5nZSk7XG5cbiAgLy8gaGFuZGxlIGtleSBldmVudHNcbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdzZWxlY3QnLCAna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIERFTFxuICAgIGlmIChlLmtleUNvZGUgPT09IDQ2KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdbZGF0YS1hY3Rpb25dJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuXG4gICAgLy8gdHJpZ2dlcnMgb24gYWxsIGlucHV0c1xuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCxcbiAgICAgICAgZW50cnlOb2RlID0gZG9tQ2xvc2VzdChpbnB1dE5vZGUsICdbZGF0YS1lbnRyeV0nKTtcblxuICAgIHZhciBhY3Rpb25JZCA9IGRvbUF0dHIoaW5wdXROb2RlLCAnZGF0YS1hY3Rpb24nKSxcbiAgICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZW50cnlOb2RlLCAnZGF0YS1lbnRyeScpO1xuXG4gICAgdmFyIGVudHJ5ID0gc2VsZi5nZXRFbnRyeShlbnRyeUlkKTtcblxuICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgYWN0aW9uSWQsIGV2ZW50KTtcblxuICAgIGlmIChpc0VudHJ5RGlydHkpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuXG4gICAgICBzZWxmLmFwcGx5Q2hhbmdlcyhlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50LCBlbGVtZW50KSB7XG4gICAgLy8gdHJpZ2dlcnMgb24gYWxsIGlucHV0c1xuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldDtcblxuICAgIHZhciBlbnRyeU5vZGUgPSBkb21DbG9zZXN0KGlucHV0Tm9kZSwgJ1tkYXRhLWVudHJ5XScpO1xuXG4gICAgLy8gb25seSB3b3JrIG9uIGRhdGEgZW50cmllc1xuICAgIGlmICghZW50cnlOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50SGFuZGxlcklkID0gZG9tQXR0cihpbnB1dE5vZGUsICdkYXRhLWJsdXInKSxcbiAgICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZW50cnlOb2RlLCAnZGF0YS1lbnRyeScpO1xuXG4gICAgdmFyIGVudHJ5ID0gc2VsZi5nZXRFbnRyeShlbnRyeUlkKTtcblxuICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgZXZlbnRIYW5kbGVySWQsIGV2ZW50KTtcblxuICAgIGlmIChpc0VudHJ5RGlydHkpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuXG4gICAgICBzZWxmLmFwcGx5Q2hhbmdlcyhlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gIH1cblxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJ1tkYXRhLWJsdXJdJywgJ2JsdXInLCBoYW5kbGVJbnB1dCwgdHJ1ZSk7XG5cbiAgLy8gbWFrZSB0YWIgbGlua3MgaW50ZXJhY3RpdmVcbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICcuYnBwLXByb3BlcnRpZXMtdGFicy1saW5rcyBbZGF0YS10YWItdGFyZ2V0XScsICdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHZhciBkZWxlZ2F0ZVRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgdmFyIHRhYklkID0gZG9tQXR0cihkZWxlZ2F0ZVRhcmdldCwgJ2RhdGEtdGFiLXRhcmdldCcpO1xuXG4gICAgLy8gYWN0aXZhdGUgdGFiIG9uIGxpbmsgY2xpY2tcbiAgICBzZWxmLmFjdGl2YXRlVGFiKHRhYklkKTtcbiAgfSk7XG5cbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUudXBkYXRlU3RhdGUgPSBmdW5jdGlvbihlbnRyeSwgZW50cnlOb2RlKSB7XG4gIHRoaXMudXBkYXRlU2hvdyhlbnRyeSwgZW50cnlOb2RlKTtcbiAgdGhpcy51cGRhdGVEaXNhYmxlKGVudHJ5LCBlbnRyeU5vZGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGVudHJ5IG5vZGUgaW4gdGhlIERPTVxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZVNob3cgPSBmdW5jdGlvbihlbnRyeSwgbm9kZSkge1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudDtcblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hvd05vZGVzID0gZG9tUXVlcnlBbGwoJ1tkYXRhLXNob3ddJywgbm9kZSkgfHwgW107XG5cbiAgZm9yRWFjaChzaG93Tm9kZXMsIGZ1bmN0aW9uKHNob3dOb2RlKSB7XG5cbiAgICB2YXIgZXhwciA9IGRvbUF0dHIoc2hvd05vZGUsICdkYXRhLXNob3cnKTtcbiAgICB2YXIgZm4gPSBnZXQoZW50cnksIGV4cHIpO1xuICAgIGlmIChmbikge1xuICAgICAgdmFyIHNjb3BlID0gZG9tQ2xvc2VzdChzaG93Tm9kZSwgJ1tkYXRhLXNjb3BlXScpIHx8IG5vZGU7XG4gICAgICB2YXIgc2hvdWxkU2hvdyA9IGZuKGN1cnJlbnQuZWxlbWVudCwgbm9kZSwgc2hvd05vZGUsIHNjb3BlKSB8fCBmYWxzZTtcbiAgICAgIGlmIChzaG91bGRTaG93KSB7XG4gICAgICAgIGRvbUNsYXNzZXMoc2hvd05vZGUpLnJlbW92ZShISURFX0NMQVNTKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbUNsYXNzZXMoc2hvd05vZGUpLmFkZChISURFX0NMQVNTKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBnaXZlbiBmdW5jdGlvbi4gSWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZVxuICogbm9kZSBpcyBtYXJrZWQgYXMgXCJkaXNhYmxlZFwiLlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZURpc2FibGUgPSBmdW5jdGlvbihlbnRyeSwgbm9kZSkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgaWYgKCFjdXJyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vZGVzID0gZG9tUXVlcnlBbGwoJ1tkYXRhLWRpc2FibGVdJywgbm9kZSkgfHwgW107XG5cbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24oY3VycmVudE5vZGUpIHtcbiAgICB2YXIgZXhwciA9IGRvbUF0dHIoY3VycmVudE5vZGUsICdkYXRhLWRpc2FibGUnKTtcbiAgICB2YXIgZm4gPSBnZXQoZW50cnksIGV4cHIpO1xuICAgIGlmIChmbikge1xuICAgICAgdmFyIHNjb3BlID0gZG9tQ2xvc2VzdChjdXJyZW50Tm9kZSwgJ1tkYXRhLXNjb3BlXScpIHx8IG5vZGU7XG4gICAgICB2YXIgc2hvdWxkRGlzYWJsZSA9IGZuKGN1cnJlbnQuZWxlbWVudCwgbm9kZSwgY3VycmVudE5vZGUsIHNjb3BlKSB8fCBmYWxzZTtcbiAgICAgIGRvbUF0dHIoY3VycmVudE5vZGUsICdkaXNhYmxlZCcsIHNob3VsZERpc2FibGUgPyAnJyA6IG51bGwpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmV4ZWN1dGVBY3Rpb24gPSBmdW5jdGlvbihlbnRyeSwgZW50cnlOb2RlLCBhY3Rpb25JZCwgZXZlbnQpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIGlmICghY3VycmVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmbiA9IGdldChlbnRyeSwgYWN0aW9uSWQpO1xuICBpZiAoZm4pIHtcbiAgICB2YXIgc2NvcGVOb2RlID0gZG9tQ2xvc2VzdChldmVudC50YXJnZXQsICdbZGF0YS1zY29wZV0nKSB8fCBlbnRyeU5vZGU7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGVudHJ5LCBbIGN1cnJlbnQuZWxlbWVudCwgZW50cnlOb2RlLCBldmVudCwgc2NvcGVOb2RlIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGx5IGNoYW5nZXMgdG8gdGhlIGJ1c2luZXNzIG9iamVjdCBieSBleGVjdXRpbmcgYSBjb21tYW5kXG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuYXBwbHlDaGFuZ2VzID0gZnVuY3Rpb24oZW50cnksIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY3VycmVudC5lbGVtZW50O1xuXG4gIC8vIGVuc3VyZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgbW9kZWwgaWYgd2UgZ290IGRpcnR5IGNoYW5nZXNcbiAgaWYgKHZhbHVlc0VxdWFsKHZhbHVlcywgZW50cnkub2xkVmFsdWVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb21tYW5kID0gZW50cnkuc2V0KGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCk7XG5cbiAgdmFyIGNvbW1hbmRUb0V4ZWN1dGU7XG5cbiAgaWYgKGlzQXJyYXkoY29tbWFuZCkpIHtcbiAgICBpZiAoY29tbWFuZC5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRUb0V4ZWN1dGUgPSB7XG4gICAgICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsXG4gICAgICAgIGNvbnRleHQ6IGZsYXR0ZW5EZWVwKGNvbW1hbmQpXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb21tYW5kVG9FeGVjdXRlID0gY29tbWFuZDtcbiAgfVxuXG4gIGlmIChjb21tYW5kVG9FeGVjdXRlKSB7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZFRvRXhlY3V0ZS5jbWQsIGNvbW1hbmRUb0V4ZWN1dGUuY29udGV4dCB8fCB7IGVsZW1lbnQgOiBlbGVtZW50IH0pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMudXBkYXRlKGVsZW1lbnQpO1xuICB9XG59O1xuXG5cbi8qKlxuICogYXBwbHkgdmFsaWRhdGlvbiBlcnJvcnMgaW4gdGhlIERPTSBhbmQgc2hvdyBvciByZW1vdmUgYW4gZXJyb3IgbWVzc2FnZSBuZWFyIHRoZSBlbnRyeSBub2RlLlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmFwcGx5VmFsaWRhdGlvbkVycm9ycyA9IGZ1bmN0aW9uKHZhbGlkYXRpb25FcnJvcnMsIGVudHJ5Tm9kZSkge1xuXG4gIHZhciB2YWxpZCA9IHRydWU7XG5cbiAgdmFyIGNvbnRyb2xOb2RlcyA9IGdldEZvcm1Db250cm9scyhlbnRyeU5vZGUsIHRydWUpO1xuXG4gIGZvckVhY2goY29udHJvbE5vZGVzLCBmdW5jdGlvbihjb250cm9sTm9kZSkge1xuXG4gICAgdmFyIG5hbWUgPSBkb21BdHRyKGNvbnRyb2xOb2RlLCAnbmFtZScpIHx8IGRvbUF0dHIoY29udHJvbE5vZGUsICdkYXRhLW5hbWUnKTtcblxuICAgIHZhciBlcnJvciA9IHZhbGlkYXRpb25FcnJvcnMgJiYgdmFsaWRhdGlvbkVycm9yc1tuYW1lXTtcblxuICAgIHZhciBlcnJvck1lc3NhZ2VOb2RlID0gZG9tUXVlcnkoJy5icHAtZXJyb3ItbWVzc2FnZScsIGNvbnRyb2xOb2RlLnBhcmVudE5vZGUpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWVycm9yTWVzc2FnZU5vZGUpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlTm9kZSA9IGRvbWlmeSgnPGRpdj48L2Rpdj4nKTtcblxuICAgICAgICBkb21DbGFzc2VzKGVycm9yTWVzc2FnZU5vZGUpLmFkZCgnYnBwLWVycm9yLW1lc3NhZ2UnKTtcblxuICAgICAgICAvLyBpbnNlcnQgZXJyb3JNZXNzYWdlTm9kZSBhZnRlciBjb250cm9sTm9kZVxuICAgICAgICBjb250cm9sTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlcnJvck1lc3NhZ2VOb2RlLCBjb250cm9sTm9kZS5uZXh0U2libGluZyk7XG4gICAgICB9XG5cbiAgICAgIGVycm9yTWVzc2FnZU5vZGUudGV4dENvbnRlbnQgPSBlcnJvcjtcblxuICAgICAgZG9tQ2xhc3Nlcyhjb250cm9sTm9kZSkuYWRkKCdpbnZhbGlkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbUNsYXNzZXMoY29udHJvbE5vZGUpLnJlbW92ZSgnaW52YWxpZCcpO1xuXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlTm9kZSkge1xuICAgICAgICBjb250cm9sTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycm9yTWVzc2FnZU5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZhbGlkO1xufTtcblxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBlbnRyeSBjb250YWlucyB2YWxpZCBpbnB1dFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW50cnksIHZhbHVlcywgZW50cnlOb2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgdmFyIHZhbGlkID0gdHJ1ZTtcblxuICBlbnRyeU5vZGUgPSBlbnRyeU5vZGUgfHwgZG9tUXVlcnkoJ1tkYXRhLWVudHJ5PVwiJyArIGVudHJ5LmlkICsgJ1wiXScsIGN1cnJlbnQucGFuZWwpO1xuXG4gIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHZhciBsaXN0Q29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWxpc3QtZW50cnktY29udGFpbmVyXScsIGVudHJ5Tm9kZSksXG4gICAgICAgIGxpc3RFbnRyeU5vZGVzID0gbGlzdENvbnRhaW5lci5jaGlsZHJlbiB8fCBbXTtcblxuICAgIC8vIGNyZWF0ZSBuZXcgZWxlbWVudHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RWYWx1ZSA9IHZhbHVlc1tpXTtcblxuICAgICAgaWYgKGVudHJ5LnZhbGlkYXRlTGlzdEl0ZW0pIHtcblxuICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9ycyA9IGVudHJ5LnZhbGlkYXRlTGlzdEl0ZW0oY3VycmVudC5lbGVtZW50LCBsaXN0VmFsdWUsIGVudHJ5Tm9kZSwgaSksXG4gICAgICAgICAgICBsaXN0RW50cnlOb2RlID0gbGlzdEVudHJ5Tm9kZXNbaV07XG5cbiAgICAgICAgdmFsaWQgPSBzZWxmLmFwcGx5VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0aW9uRXJyb3JzLCBsaXN0RW50cnlOb2RlKSAmJiB2YWxpZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVudHJ5LnZhbGlkYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBlbnRyeS52YWxpZGF0ZShjdXJyZW50LmVsZW1lbnQsIHZhbHVlcywgZW50cnlOb2RlKTtcblxuICAgICAgdmFsaWQgPSBzZWxmLmFwcGx5VmFsaWRhdGlvbkVycm9ycyh0aGlzLnZhbGlkYXRpb25FcnJvcnMsIGVudHJ5Tm9kZSkgJiYgdmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5nZXRFbnRyeSA9IGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiB0aGlzLl9jdXJyZW50ICYmIHRoaXMuX2N1cnJlbnQuZW50cmllc1tpZF07XG59O1xuXG52YXIgZmxhdHRlbkRlZXAgPSByZXF1aXJlKCdsb2Rhc2gvZmxhdHRlbkRlZXAnKSxcbiAgICBrZXlCeSA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlCeScpLFxuICAgIG1hcCA9IHJlcXVpcmUoJ2xvZGFzaC9tYXAnKTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fY3JlYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgdGFicykge1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lck5vZGUgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgdmFyIHBhbmVsTm9kZSA9IHRoaXMuX2NyZWF0ZVBhbmVsKGVsZW1lbnQsIHRhYnMpO1xuXG4gIGNvbnRhaW5lck5vZGUuYXBwZW5kQ2hpbGQocGFuZWxOb2RlKTtcblxuICB2YXIgZW50cmllcyA9IGV4dHJhY3RFbnRyaWVzKHRhYnMpO1xuICB2YXIgZ3JvdXBzID0gZXh0cmFjdEdyb3Vwcyh0YWJzKTtcblxuICByZXR1cm4ge1xuICAgIHRhYnM6IHRhYnMsXG4gICAgZ3JvdXBzOiBncm91cHMsXG4gICAgZW50cmllczogZW50cmllcyxcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIHBhbmVsOiBwYW5lbE5vZGVcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHZhcmlhYmxlIHBhcnRzIG9mIHRoZSBlbnRyeSBub2RlIG9uIGVsZW1lbnQgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge0VudHJ5RGVzY3JpcHRvcn0gZW50cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVudHJ5Tm9kZVxuICogQHBhcmFtIHtOdW1iZXJ9IGlkeFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUgPSBmdW5jdGlvbihlbGVtZW50LCBlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUsIGlkeCkge1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIGZ1bmN0aW9uIGlzUHJvcGVydHlFZGl0YWJsZShlbnRyeSwgcHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5pc1Byb3BlcnR5RWRpdGFibGUnLCB7XG4gICAgICBlbnRyeTogZW50cnksXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBpbnB1dE5vZGVzID0gZ2V0UHJvcGVydHlQbGFjZWhvbGRlcnMoZW50cnlOb2RlKTtcblxuICBmb3JFYWNoKGlucHV0Tm9kZXMsIGZ1bmN0aW9uKG5vZGUpIHtcblxuICAgIHZhciBuYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgZWRpdGFibGU7XG5cbiAgICAvLyB3ZSBkZWFsIHdpdGggYW4gaW5wdXQgZWxlbWVudFxuICAgIGlmICgndmFsdWUnIGluIG5vZGUgfHwgaXNDb250ZW50RWRpdGFibGUobm9kZSkgPT09ICd0cnVlJykge1xuICAgICAgbmFtZSA9IGRvbUF0dHIobm9kZSwgJ25hbWUnKSB8fCBkb21BdHRyKG5vZGUsICdkYXRhLW5hbWUnKTtcbiAgICAgIG5ld1ZhbHVlID0gdmFsdWVzW25hbWVdO1xuXG4gICAgICBlZGl0YWJsZSA9IGlzUHJvcGVydHlFZGl0YWJsZShlbnRyeSwgbmFtZSk7XG4gICAgICBpZiAoZWRpdGFibGUgJiYgZW50cnkuZWRpdGFibGUpIHtcbiAgICAgICAgZWRpdGFibGUgPSBlbnRyeS5lZGl0YWJsZShlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIG5hbWUsIG5ld1ZhbHVlLCBpZHgpO1xuICAgICAgfVxuXG4gICAgICBkb21BdHRyKG5vZGUsICdyZWFkb25seScsIGVkaXRhYmxlID8gbnVsbCA6ICcnKTtcbiAgICAgIGRvbUF0dHIobm9kZSwgJ2Rpc2FibGVkJywgZWRpdGFibGUgPyBudWxsIDogJycpO1xuXG4gICAgICAvLyB0YWtlIGZ1bGwgY29udHJvbCBvdmVyIHNldHRpbmcgdGhlIHZhbHVlXG4gICAgICAvLyBhbmQgcG9zc2libHkgdXBkYXRpbmcgdGhlIGlucHV0IGluIGVudHJ5I3NldENvbnRyb2xWYWx1ZVxuICAgICAgaWYgKGVudHJ5LnNldENvbnRyb2xWYWx1ZSkge1xuICAgICAgICBlbnRyeS5zZXRDb250cm9sVmFsdWUoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBuYW1lLCBuZXdWYWx1ZSwgaWR4KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUb2dnbGUobm9kZSkpIHtcbiAgICAgICAgc2V0VG9nZ2xlVmFsdWUobm9kZSwgbmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChpc1NlbGVjdChub2RlKSkge1xuICAgICAgICBzZXRTZWxlY3RWYWx1ZShub2RlLCBuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKG5vZGUsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBkZWFsIHdpdGggc29tZSBub24tZWRpdGFibGUgaHRtbCBlbGVtZW50XG4gICAgZWxzZSB7XG4gICAgICBuYW1lID0gZG9tQXR0cihub2RlLCAnZGF0YS12YWx1ZScpO1xuICAgICAgbmV3VmFsdWUgPSB2YWx1ZXNbbmFtZV07XG4gICAgICBpZiAoZW50cnkuc2V0Q29udHJvbFZhbHVlKSB7XG4gICAgICAgIGVudHJ5LnNldENvbnRyb2xWYWx1ZShlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIG5hbWUsIG5ld1ZhbHVlLCBpZHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGV4dFZhbHVlKG5vZGUsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLy8gVE9ETyhuaWtrdSk6IFdURiBmcmVha2luZyBuYW1lPyBDaGFuZ2UgLyBjbGFyaWZ5LlxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fdXBkYXRlQWN0aXZhdGlvbiA9IGZ1bmN0aW9uKGN1cnJlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBlbGVtZW50ID0gY3VycmVudC5lbGVtZW50O1xuXG4gIGZ1bmN0aW9uIGlzRW50cnlWaXNpYmxlKGVudHJ5KSB7XG4gICAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5pc0VudHJ5VmlzaWJsZScsIHtcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzR3JvdXBWaXNpYmxlKGdyb3VwLCBlbGVtZW50LCBncm91cE5vZGUpIHtcbiAgICBpZiAodHlwZW9mIGdyb3VwLmVuYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBncm91cC5lbmFibGVkKGVsZW1lbnQsIGdyb3VwTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVGFiVmlzaWJsZSh0YWIsIGVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIHRhYi5lbmFibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGFiLmVuYWJsZWQoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVZpc2libGUobm9kZSwgdmlzaWJsZSkge1xuICAgIGRvbUNsYXNzZXMobm9kZSkudG9nZ2xlKEhJREVfQ0xBU1MsICF2aXNpYmxlKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGFjdGl2ZSB0YWIgaXMgdmlzaWJsZVxuICAvLyBpZiBub3Q6IHNldCB0aGUgZmlyc3QgdGFiIGFzIGFjdGl2ZSB0YWJcbiAgZnVuY3Rpb24gY2hlY2tBY3RpdmVUYWJWaXNpYmlsaXR5KG5vZGUsIHZpc2libGUpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBkb21DbGFzc2VzKG5vZGUpLmhhcygnYnBwLWFjdGl2ZScpO1xuICAgIGlmICghdmlzaWJsZSAmJiBpc0FjdGl2ZSkge1xuICAgICAgc2VsZi5hY3RpdmF0ZVRhYihjdXJyZW50LnRhYnNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxhYmVsKGVsZW1lbnQsIHNlbGVjdG9yLCB0ZXh0KSB7XG4gICAgdmFyIGxhYmVsTm9kZSA9IGRvbVF1ZXJ5KHNlbGVjdG9yLCBlbGVtZW50KTtcblxuICAgIGlmICghbGFiZWxOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGFiZWxOb2RlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuXG4gIHZhciBwYW5lbE5vZGUgPSBjdXJyZW50LnBhbmVsO1xuXG4gIGZvckVhY2goY3VycmVudC50YWJzLCBmdW5jdGlvbih0YWIpIHtcblxuICAgIHZhciB0YWJOb2RlID0gZG9tUXVlcnkoJ1tkYXRhLXRhYj0nICsgdGFiLmlkICsgJ10nLCBwYW5lbE5vZGUpO1xuICAgIHZhciB0YWJMaW5rTm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS10YWItdGFyZ2V0PScgKyB0YWIuaWQgKyAnXScsIHBhbmVsTm9kZSkucGFyZW50Tm9kZTtcblxuICAgIHZhciB0YWJWaXNpYmxlID0gZmFsc2U7XG5cbiAgICBmb3JFYWNoKHRhYi5ncm91cHMsIGZ1bmN0aW9uKGdyb3VwKSB7XG5cbiAgICAgIHZhciBncm91cFZpc2libGUgPSBmYWxzZTtcblxuICAgICAgdmFyIGdyb3VwTm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS1ncm91cD0nICsgZ3JvdXAuaWQgKyAnXScsIHRhYk5vZGUpO1xuXG4gICAgICBmb3JFYWNoKGdyb3VwLmVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5KSB7XG5cbiAgICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS1lbnRyeT1cIicgKyBlbnRyeS5pZCArICdcIl0nLCBncm91cE5vZGUpO1xuXG4gICAgICAgIHZhciBlbnRyeVZpc2libGUgPSBpc0VudHJ5VmlzaWJsZShlbnRyeSk7XG5cbiAgICAgICAgZ3JvdXBWaXNpYmxlID0gZ3JvdXBWaXNpYmxlIHx8IGVudHJ5VmlzaWJsZTtcblxuICAgICAgICB0b2dnbGVWaXNpYmxlKGVudHJ5Tm9kZSwgZW50cnlWaXNpYmxlKTtcblxuICAgICAgICB2YXIgdmFsdWVzID0gJ2dldCcgaW4gZW50cnkgPyBlbnRyeS5nZXQoZWxlbWVudCwgZW50cnlOb2RlKSA6IHt9O1xuXG4gICAgICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIHZhciBsaXN0RW50cnlDb250YWluZXIgPSBkb21RdWVyeSgnW2RhdGEtbGlzdC1lbnRyeS1jb250YWluZXJdJywgZW50cnlOb2RlKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmdFbGVtZW50cyA9IGxpc3RFbnRyeUNvbnRhaW5lci5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbGlzdFZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgdmFyIGxpc3RJdGVtTm9kZSA9IGV4aXN0aW5nRWxlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoIWxpc3RJdGVtTm9kZSkge1xuICAgICAgICAgICAgICBsaXN0SXRlbU5vZGUgPSBkb21pZnkoZW50cnkuY3JlYXRlTGlzdEVudHJ5VGVtcGxhdGUobGlzdFZhbHVlLCBpLCBsaXN0RW50cnlDb250YWluZXIpKTtcbiAgICAgICAgICAgICAgbGlzdEVudHJ5Q29udGFpbmVyLmFwcGVuZENoaWxkKGxpc3RJdGVtTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb21BdHRyKGxpc3RJdGVtTm9kZSwgJ2RhdGEtaW5kZXgnLCBpKTtcblxuICAgICAgICAgICAgc2VsZi5fYmluZFRlbXBsYXRlKGVsZW1lbnQsIGVudHJ5LCBsaXN0VmFsdWUsIGxpc3RJdGVtTm9kZSwgaSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVudHJpZXNUb1JlbW92ZSA9IGV4aXN0aW5nRWxlbWVudHMubGVuZ3RoIC0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZW50cmllc1RvUmVtb3ZlOyBqKyspIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcnBoYW5lZCBlbGVtZW50XG4gICAgICAgICAgICBsaXN0RW50cnlDb250YWluZXIucmVtb3ZlQ2hpbGQobGlzdEVudHJ5Q29udGFpbmVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi5fYmluZFRlbXBsYXRlKGVsZW1lbnQsIGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgY29uZGl0aW9uYWxseSB2aXNpYmxlIGVsZW1lbnRzXG4gICAgICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gICAgICAgIHNlbGYudmFsaWRhdGUoZW50cnksIHZhbHVlcywgZW50cnlOb2RlKTtcblxuICAgICAgICAvLyByZW1lbWJlciBpbml0aWFsIHN0YXRlIGZvciBsYXRlciBkaXJ0eSBjaGVja2luZ1xuICAgICAgICBlbnRyeS5vbGRWYWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgZ3JvdXAubGFiZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdXBkYXRlTGFiZWwoZ3JvdXBOb2RlLCAnLmdyb3VwLWxhYmVsJywgZ3JvdXAubGFiZWwoZWxlbWVudCwgZ3JvdXBOb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIGdyb3VwVmlzaWJsZSA9IGdyb3VwVmlzaWJsZSAmJiBpc0dyb3VwVmlzaWJsZShncm91cCwgZWxlbWVudCwgZ3JvdXBOb2RlKTtcblxuICAgICAgdGFiVmlzaWJsZSA9IHRhYlZpc2libGUgfHwgZ3JvdXBWaXNpYmxlO1xuXG4gICAgICB0b2dnbGVWaXNpYmxlKGdyb3VwTm9kZSwgZ3JvdXBWaXNpYmxlKTtcbiAgICB9KTtcblxuICAgIHRhYlZpc2libGUgPSB0YWJWaXNpYmxlICYmIGlzVGFiVmlzaWJsZSh0YWIsIGVsZW1lbnQpO1xuXG4gICAgdG9nZ2xlVmlzaWJsZSh0YWJOb2RlLCB0YWJWaXNpYmxlKTtcbiAgICB0b2dnbGVWaXNpYmxlKHRhYkxpbmtOb2RlLCB0YWJWaXNpYmxlKTtcblxuICAgIGNoZWNrQWN0aXZlVGFiVmlzaWJpbGl0eSh0YWJOb2RlLCB0YWJWaXNpYmxlKTtcbiAgfSk7XG5cbiAgLy8gaW5qZWN0IGVsZW1lbnRzIGlkIGludG8gaGVhZGVyXG4gIHVwZGF0ZUxhYmVsKHBhbmVsTm9kZSwgJ1tkYXRhLWxhYmVsLWlkXScsIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlkIHx8ICcnKTtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZVBhbmVsID0gZnVuY3Rpb24oZWxlbWVudCwgdGFicykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHBhbmVsTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzXCI+PC9kaXY+JyksXG4gICAgICBoZWFkZXJOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtaGVhZGVyXCI+JyArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwibGFiZWxcIiBkYXRhLWxhYmVsLWlkPjwvZGl2PicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNlYXJjaFwiPicgK1xuICAgICAgICAgICc8aW5wdXQgdHlwZT1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBwcm9wZXJ0eVwiIC8+JyArXG4gICAgICAgICAgJzxidXR0b24+PHNwYW4+U2VhcmNoPC9zcGFuPjwvYnV0dG9uPicgK1xuICAgICAgICAnPC9kaXY+JyArXG4gICAgICAnPC9kaXY+JyksXG4gICAgICB0YWJCYXJOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtdGFiLWJhclwiPjwvZGl2PicpLFxuICAgICAgdGFiTGlua3NOb2RlID0gZG9taWZ5KCc8dWwgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWJzLWxpbmtzXCI+PC91bD4nKSxcbiAgICAgIHRhYkNvbnRhaW5lck5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWJzLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuXG4gIHBhbmVsTm9kZS5hcHBlbmRDaGlsZChoZWFkZXJOb2RlKTtcblxuICBmb3JFYWNoKHRhYnMsIGZ1bmN0aW9uKHRhYiwgdGFiSW5kZXgpIHtcblxuICAgIGlmICghdGFiLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhYiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdGFiTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXRhYlwiIGRhdGEtdGFiPVwiJyArIGVzY2FwZUhUTUwodGFiLmlkKSArICdcIj48L2Rpdj4nKSxcbiAgICAgICAgdGFiTGlua05vZGUgPSBkb21pZnkoJzxsaSBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXRhYi1saW5rXCI+JyArXG4gICAgICAgICAgJzxhIGhyZWYgZGF0YS10YWItdGFyZ2V0PVwiJyArIGVzY2FwZUhUTUwodGFiLmlkKSArICdcIj4nICsgZXNjYXBlSFRNTCh0YWIubGFiZWwpICsgJzwvYT4nICtcbiAgICAgICAgJzwvbGk+Jyk7XG5cbiAgICB2YXIgZ3JvdXBzID0gdGFiLmdyb3VwcztcblxuICAgIGZvckVhY2goZ3JvdXBzLCBmdW5jdGlvbihncm91cCkge1xuXG4gICAgICBpZiAoIWdyb3VwLmlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ3JvdXAgbXVzdCBoYXZlIGFuIGlkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cE5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy1ncm91cFwiIGRhdGEtZ3JvdXA9XCInICsgZXNjYXBlSFRNTChncm91cC5pZCkgKyAnXCI+JyArXG4gICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZ3JvdXAtdG9nZ2xlXCI+PC9zcGFuPicgK1xuICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdyb3VwLWxhYmVsXCI+JyArIGVzY2FwZUhUTUwoZ3JvdXAubGFiZWwpICsgJzwvc3Bhbj4nICtcbiAgICAgICAgJzwvZGl2PicpO1xuXG4gICAgICAvLyBUT0RPKG5yZSk6IHVzZSBldmVudCBkZWxlZ2F0aW9uIHRvIGhhbmRsZSB0aGF0Li4uXG4gICAgICBncm91cE5vZGUucXVlcnlTZWxlY3RvcignLmdyb3VwLXRvZ2dsZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgIGRvbUNsYXNzZXMoZ3JvdXBOb2RlKS50b2dnbGUoJ2dyb3VwLWNsb3NlZCcpO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgICBncm91cE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldnQpIHtcbiAgICAgICAgaWYgKCFldnQuZGVmYXVsdFByZXZlbnRlZCAmJiBkb21DbGFzc2VzKGdyb3VwTm9kZSkuaGFzKCdncm91cC1jbG9zZWQnKSkge1xuICAgICAgICAgIGRvbUNsYXNzZXMoZ3JvdXBOb2RlKS5yZW1vdmUoJ2dyb3VwLWNsb3NlZCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yRWFjaChncm91cC5lbnRyaWVzLCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgICAgIGlmICghZW50cnkuaWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VudHJ5IG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGh0bWwgPSBlbnRyeS5odG1sO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBodG1sID0gZG9taWZ5KGh0bWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW53cmFwIGpxdWVyeVxuICAgICAgICBpZiAoaHRtbC5nZXQgJiYgaHRtbC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgICAgICAgaHRtbCA9IGh0bWwuZ2V0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLWVudHJ5XCIgZGF0YS1lbnRyeT1cIicgKyBlc2NhcGVIVE1MKGVudHJ5LmlkKSArICdcIj48L2Rpdj4nKTtcblxuICAgICAgICBmb3JFYWNoKGVudHJ5LmNzc0NsYXNzZXMgfHwgW10sIGZ1bmN0aW9uKGNzc0NsYXNzKSB7XG4gICAgICAgICAgZG9tQ2xhc3NlcyhlbnRyeU5vZGUpLmFkZChjc3NDbGFzcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVudHJ5Tm9kZS5hcHBlbmRDaGlsZChodG1sKTtcblxuICAgICAgICBncm91cE5vZGUuYXBwZW5kQ2hpbGQoZW50cnlOb2RlKTtcblxuICAgICAgICAvLyB1cGRhdGUgY29uZGl0aW9uYWxseSB2aXNpYmxlIGVsZW1lbnRzXG4gICAgICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gICAgICB9KTtcblxuICAgICAgdGFiTm9kZS5hcHBlbmRDaGlsZChncm91cE5vZGUpO1xuICAgIH0pO1xuXG4gICAgdGFiTGlua3NOb2RlLmFwcGVuZENoaWxkKHRhYkxpbmtOb2RlKTtcbiAgICB0YWJDb250YWluZXJOb2RlLmFwcGVuZENoaWxkKHRhYk5vZGUpO1xuICB9KTtcblxuICB0YWJCYXJOb2RlLmFwcGVuZENoaWxkKHRhYkxpbmtzTm9kZSk7XG5cbiAgcGFuZWxOb2RlLmFwcGVuZENoaWxkKHRhYkJhck5vZGUpO1xuICBwYW5lbE5vZGUuYXBwZW5kQ2hpbGQodGFiQ29udGFpbmVyTm9kZSk7XG5cbiAgcmV0dXJuIHBhbmVsTm9kZTtcbn07XG5cblxuXG5mdW5jdGlvbiBzZXRJbnB1dFZhbHVlKG5vZGUsIHZhbHVlKSB7XG5cbiAgdmFyIGNvbnRlbnRFZGl0YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlKG5vZGUpO1xuXG4gIHZhciBvbGRWYWx1ZSA9IGNvbnRlbnRFZGl0YWJsZSA/IG5vZGUuaW5uZXJUZXh0IDogbm9kZS52YWx1ZTtcblxuICB2YXIgc2VsZWN0aW9uO1xuXG4gIC8vIHByZXZlbnRzIGlucHV0IGZpZWxkcyBmcm9tIGhhdmluZyB0aGUgdmFsdWUgJ3VuZGVmaW5lZCdcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9ICcnO1xuICB9XG5cbiAgaWYgKG9sZFZhbHVlID09PSB2YWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzZWxlY3Rpb24gb24gdW5kby9yZWRvXG4gIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlKSB7XG4gICAgc2VsZWN0aW9uID0gdXBkYXRlU2VsZWN0aW9uKGdldFNlbGVjdGlvbihub2RlKSwgb2xkVmFsdWUsIHZhbHVlKTtcbiAgfVxuXG4gIGlmIChjb250ZW50RWRpdGFibGUpIHtcbiAgICBub2RlLmlubmVyVGV4dCA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3RWYWx1ZShub2RlLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRUb2dnbGVWYWx1ZShub2RlLCB2YWx1ZSkge1xuICB2YXIgbm9kZVZhbHVlID0gbm9kZS52YWx1ZTtcblxuICBub2RlLmNoZWNrZWQgPSAodmFsdWUgPT09IG5vZGVWYWx1ZSkgfHwgKCFkb21BdHRyKG5vZGUsICd2YWx1ZScpICYmIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gc2V0VGV4dFZhbHVlKG5vZGUsIHZhbHVlKSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKG5vZGUpIHtcblxuICByZXR1cm4gaXNDb250ZW50RWRpdGFibGUobm9kZSkgPyBnZXRDb250ZW50RWRpdGFibGVTZWxlY3Rpb24obm9kZSkgOiB7XG4gICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50RWRpdGFibGVTZWxlY3Rpb24obm9kZSkge1xuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7XG5cbiAgaWYgKCFmb2N1c05vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBzZWxlY3RlZCcpO1xuICB9XG5cbiAgLy8gdmVyaWZ5IHdlIGhhdmUgc2VsZWN0aW9uIG9uIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgaWYgKCFub2RlLmNvbnRhaW5zKGZvY3VzTm9kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBzZWxlY3RlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogTWF0aC5taW4oZm9jdXNPZmZzZXQsIGFuY2hvck9mZnNldCksXG4gICAgZW5kOiBNYXRoLm1heChmb2N1c09mZnNldCwgYW5jaG9yT2Zmc2V0KVxuICB9O1xufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKSB7XG5cbiAgaWYgKGlzQ29udGVudEVkaXRhYmxlKG5vZGUpKSB7XG4gICAgc2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydDtcbiAgICBub2RlLnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi5lbmQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbikge1xuXG4gIHZhciBmb2N1c05vZGUsXG4gICAgICBkb21SYW5nZSxcbiAgICAgIGRvbVNlbGVjdGlvbjtcblxuICBmb2N1c05vZGUgPSBub2RlLmZpcnN0Q2hpbGQgfHwgbm9kZSxcbiAgZG9tUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBkb21SYW5nZS5zZXRTdGFydChmb2N1c05vZGUsIHNlbGVjdGlvbi5zdGFydCk7XG4gIGRvbVJhbmdlLnNldEVuZChmb2N1c05vZGUsIHNlbGVjdGlvbi5lbmQpO1xuXG4gIGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgZG9tU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBkb21TZWxlY3Rpb24uYWRkUmFuZ2UoZG9tUmFuZ2UpO1xufVxuXG5mdW5jdGlvbiBpc0ltcGxpY2l0Um9vdChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LmlkID09PSAnX19pbXBsaWNpdHJvb3QnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXG4gICAgZG9tQ2xlYXIgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xlYXIsXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxuICAgIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXG4gICAgSWRzID0gcmVxdWlyZSgnaWRzJykuZGVmYXVsdDtcblxudmFyIFNQQUNFX1JFR0VYID0gL1xccy87XG5cbi8vIGZvciBRTmFtZSB2YWxpZGF0aW9uIGFzIHBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lQ2hhclxudmFyIFFOQU1FX1JFR0VYID0gL14oW2Etel1bXFx3LS5dKjopP1thLXpfXVtcXHctLl0qJC9pO1xuXG4vLyBmb3IgSUQgdmFsaWRhdGlvbiBhcyBwZXIgQlBNTiBTY2hlbWEgKFFOYW1lIC0gTmFtZXNwYWNlKVxudmFyIElEX1JFR0VYID0gL15bYS16X11bXFx3LS5dKiQvaTtcblxudmFyIFBMQUNFSE9MREVSX1JFR0VYID0gL1xcJFxceyhbXn1dKilcXH0vZztcblxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjMzk7J1xufTtcblxuZnVuY3Rpb24gc2VsZWN0ZWRPcHRpb24oc2VsZWN0Qm94KSB7XG4gIGlmIChzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIHNlbGVjdEJveC5vcHRpb25zW3NlbGVjdEJveC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uO1xuXG5cbmZ1bmN0aW9uIHNlbGVjdGVkVHlwZShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpIHtcbiAgdmFyIHR5cGVTZWxlY3QgPSBkb21RdWVyeShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb24odHlwZVNlbGVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnNlbGVjdGVkVHlwZSA9IHNlbGVjdGVkVHlwZTtcblxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSByb290IGVsZW1lbnQgdGhlIGRvY3VtZW50IHRoaXNcbiAqIGJ1c2luZXNzIG9iamVjdCBpcyBjb250YWluZWQgaW4uXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChidXNpbmVzc09iamVjdCkge1xuICB2YXIgcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldFJvb3QgPSBnZXRSb290O1xuXG5cbi8qKlxuICogZmlsdGVycyBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3Qgd2hpY2ggaGF2ZSBhIGdpdmVuIHR5cGUuXG4gKiByZW1vdmVzIGEgbmV3IGxpc3RcbiAqL1xuZnVuY3Rpb24gZmlsdGVyRWxlbWVudHNCeVR5cGUob2JqZWN0TGlzdCwgdHlwZSkge1xuICB2YXIgbGlzdCA9IG9iamVjdExpc3QgfHwgW107XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChsaXN0LCBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoaXMob2JqLCB0eXBlKSkge1xuICAgICAgcmVzdWx0LnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5maWx0ZXJFbGVtZW50c0J5VHlwZSA9IGZpbHRlckVsZW1lbnRzQnlUeXBlO1xuXG5cbmZ1bmN0aW9uIGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XG4gIHZhciByb290ID0gZ2V0Um9vdChidXNpbmVzc09iamVjdCk7XG5cbiAgcmV0dXJuIGZpbHRlckVsZW1lbnRzQnlUeXBlKHJvb3Qucm9vdEVsZW1lbnRzLCByZWZlcmVuY2VkVHlwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmZpbmRSb290RWxlbWVudHNCeVR5cGUgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlO1xuXG5cbmZ1bmN0aW9uIHJlbW92ZUFsbENoaWxkcmVuKGRvbUVsZW1lbnQpIHtcbiAgd2hpbGUgKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgIGRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9tRWxlbWVudC5maXJzdENoaWxkKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVBbGxDaGlsZHJlbiA9IHJlbW92ZUFsbENoaWxkcmVuO1xuXG5cbi8qKlxuICogYWRkcyBhbiBlbXB0eSBvcHRpb24gdG8gdGhlIGxpc3RcbiAqL1xuZnVuY3Rpb24gYWRkRW1wdHlQYXJhbWV0ZXIobGlzdCkge1xuICByZXR1cm4gbGlzdC5wdXNoKHsgJ2xhYmVsJzogJycsICd2YWx1ZSc6ICcnLCAnbmFtZSc6ICcnIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5hZGRFbXB0eVBhcmFtZXRlciA9IGFkZEVtcHR5UGFyYW1ldGVyO1xuXG5cbi8qKlxuICogcmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgcm9vdCBlbGVtZW50cyBmb3IgdGhlIGdpdmVuIHBhcmFtZXRlciAncmVmZXJlbmNlZFR5cGUnXG4gKi9cbmZ1bmN0aW9uIHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XG4gIHZhciBtb2RlbCA9IFtdO1xuICB2YXIgcmVmZXJhYmxlT2JqZWN0cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcbiAgZm9yRWFjaChyZWZlcmFibGVPYmplY3RzLCBmdW5jdGlvbihvYmopIHtcbiAgICBtb2RlbC5wdXNoKHtcbiAgICAgIGxhYmVsOiAob2JqLm5hbWUgfHwgJycpICsgJyAoaWQ9JytvYmouaWQrJyknLFxuICAgICAgdmFsdWU6IG9iai5pZCxcbiAgICAgIG5hbWU6IG9iai5uYW1lXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbW9kZWw7XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlZnJlc2hPcHRpb25zTW9kZWwgPSByZWZyZXNoT3B0aW9uc01vZGVsO1xuXG5cbi8qKlxuICogZmlsbHMgdGhlIGRyb3AgZG93biB3aXRoIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0Ryb3BEb3duKGRvbVNlbGVjdG9yLCBidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUsIGVudHJ5Tm9kZSkge1xuICB2YXIgb3B0aW9ucyA9IHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcbiAgYWRkRW1wdHlQYXJhbWV0ZXIob3B0aW9ucyk7XG4gIHZhciBzZWxlY3RCb3ggPSBkb21RdWVyeShkb21TZWxlY3RvciwgZW50cnlOb2RlKTtcbiAgZG9tQ2xlYXIoc2VsZWN0Qm94KTtcblxuICBmb3JFYWNoKG9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgIHZhciBvcHRpb25FbnRyeSA9IGRvbWlmeSgnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbi52YWx1ZSkgKyAnXCI+JyArIGVzY2FwZUhUTUwob3B0aW9uLmxhYmVsKSArICc8L29wdGlvbj4nKTtcbiAgICBzZWxlY3RCb3guYXBwZW5kQ2hpbGQob3B0aW9uRW50cnkpO1xuICB9KTtcbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbm1vZHVsZS5leHBvcnRzLnVwZGF0ZU9wdGlvbnNEcm9wRG93biA9IHVwZGF0ZU9wdGlvbnNEcm9wRG93bjtcblxuXG4vKipcbiAqIGNoZWNrcyB3aGV0aGVyIHRoZSBpZCB2YWx1ZSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpIHtcbiAgdmFyIGFzc2lnbmVkID0gYm8uJG1vZGVsLmlkcy5hc3NpZ25lZChpZFZhbHVlKTtcblxuICB2YXIgaWRFeGlzdHMgPSBhc3NpZ25lZCAmJiBhc3NpZ25lZCAhPT0gYm87XG5cbiAgaWYgKCFpZFZhbHVlIHx8IGlkRXhpc3RzKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnRWxlbWVudCBtdXN0IGhhdmUgYW4gdW5pcXVlIGlkLicpO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuaXNJZFZhbGlkID0gaXNJZFZhbGlkO1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKSB7XG5cbiAgaWRWYWx1ZSA9IHN0cmlwUGxhY2Vob2xkZXJzKGlkVmFsdWUpO1xuXG4gIGlmIChjb250YWluc1NwYWNlKGlkVmFsdWUpKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBub3QgY29udGFpbiBzcGFjZXMuJyk7XG4gIH1cblxuICBpZiAoIUlEX1JFR0VYLnRlc3QoaWRWYWx1ZSkpIHtcblxuICAgIGlmIChRTkFNRV9SRUdFWC50ZXN0KGlkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdJZCBtdXN0IG5vdCBjb250YWluIHByZWZpeC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNsYXRlKCdJZCBtdXN0IGJlIGEgdmFsaWQgUU5hbWUuJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVJZCA9IHZhbGlkYXRlSWQ7XG5cblxuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xuICByZXR1cm4gU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbnRhaW5zU3BhY2UgPSBjb250YWluc1NwYWNlO1xuXG5cbmZ1bmN0aW9uIHN0cmlwUGxhY2Vob2xkZXJzKGlkVmFsdWUpIHtcblxuICAvLyByZXBsYWNlIGV4cHJlc3Npb24gZS5nLiAke1ZFUlNJT05fVEFHfVxuICAvLyB1c2Ugb25seSB0aGUgY29udGVudCBiZXR3ZWVuICR7fVxuICAvLyBmb3IgdGhlIFJFR0VYIGNoZWNrXG4gIHJldHVybiBpZFZhbHVlLnJlcGxhY2UoUExBQ0VIT0xERVJfUkVHRVgsICckMScpO1xufVxuXG4vKipcbiAqIGdlbmVyYXRlIGEgc2VtYW50aWMgaWQgd2l0aCBnaXZlbiBwcmVmaXhcbiAqL1xuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xuICB2YXIgaWRzID0gbmV3IElkcyhbMzIsMzIsMV0pO1xuXG4gIHJldHVybiBpZHMubmV4dFByZWZpeGVkKHByZWZpeCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLm5leHRJZCA9IG5leHRJZDtcblxuXG5mdW5jdGlvbiB0cmlnZ2VyQ2xpY2tFdmVudChlbGVtZW50KSB7XG4gIHZhciBldnQ7XG4gIHZhciBldmVudFR5cGUgPSAnY2xpY2snO1xuXG4gIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveFxuICAgICAgZXZ0ID0gbmV3IE1vdXNlRXZlbnQoKGV2ZW50VHlwZSksIHsgdmlldzogd2luZG93LCBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElFIDExLCBQaGFudG9tSlMgKHdhdCEpXG4gICAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuXG4gICAgICBldnQuaW5pdEV2ZW50KChldmVudFR5cGUpLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlbGNvbWUgSUVcbiAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQuZmlyZUV2ZW50KCdvbicgKyBldmVudFR5cGUsIGV2dCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMudHJpZ2dlckNsaWNrRXZlbnQgPSB0cmlnZ2VyQ2xpY2tFdmVudDtcblxuXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHN0cikge1xuICBzdHIgPSAnJyArIHN0cjtcblxuICByZXR1cm4gc3RyICYmIHN0ci5yZXBsYWNlKC9bJjw+XCInXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBIVE1MX0VTQ0FQRV9NQVBbbWF0Y2hdO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZXNjYXBlSFRNTCA9IGVzY2FwZUhUTUw7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIGNhcGFibGUgb2YgY3JlYXRpbmcgYSBuZXcgZWxlbWVudCB1bmRlciBhIHByb3ZpZGVkIHBhcmVudFxuICogYW5kIHVwZGF0aW5nIC8gY3JlYXRpbmcgYSByZWZlcmVuY2UgdG8gaXQgaW4gb25lIGF0b21pYyBhY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5LCBicG1uRmFjdG9yeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG59XG5cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnYnBtbkZhY3RvcnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXI7XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlbGVtZW50IHVuZGVyIGEgcHJvdmlkZWQgcGFyZW50IGFuZCB1cGRhdGVzIC8gY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBpdCBpblxuICogb25lIGF0b21pYyBhY3Rpb24uXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXIjZXhlY3V0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBjb250ZXh0LmVsZW1lbnQgd2hpY2ggaXMgdGhlIGNvbnRleHQgZm9yIHRoZSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bW9kZGxlLnJlZmVyZW5jaW5nT2JqZWN0fSBjb250ZXh0LnJlZmVyZW5jaW5nT2JqZWN0IHRoZSBvYmplY3Qgd2hpY2ggY3JlYXRlcyB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSB0aGUgcHJvcGVydHkgb2YgdGhlIHJlZmVyZW5jaW5nT2JqZWN0IHdoaWNoIG1ha2VzIHRoZSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bW9kZGxlLm5ld09iamVjdH0gY29udGV4dC5uZXdPYmplY3QgdGhlIG5ldyBvYmplY3QgdG8gYWRkXG4gKiBAcGFyYW0ge21vZGRsZS5uZXdPYmplY3RDb250YWluZXJ9IGNvbnRleHQubmV3T2JqZWN0Q29udGFpbmVyIHRoZSBjb250YWluZXIgZm9yIHRoZSBuZXcgb2JqZWN0XG4gKlxuICogQHJldHVybnMge0FycmF5PGRqcy5tb2RlLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciByZWZlcmVuY2luZ09iamVjdCA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCwgJ3JlZmVyZW5jaW5nT2JqZWN0JyksXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eSA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSwgJ3JlZmVyZW5jZVByb3BlcnR5JyksXG4gICAgICBuZXdPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0LCAnbmV3T2JqZWN0JyksXG4gICAgICBuZXdPYmplY3RDb250YWluZXIgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0Q29udGFpbmVyLCAnbmV3T2JqZWN0Q29udGFpbmVyJyksXG4gICAgICBuZXdPYmplY3RQYXJlbnQgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0UGFyZW50LCAnbmV3T2JqZWN0UGFyZW50JyksXG4gICAgICBjaGFuZ2VkID0gWyBjb250ZXh0LmVsZW1lbnQgXTsgLy8gdGhpcyB3aWxsIG5vdCBjaGFuZ2UgYW55IGRpYWdyYW0tanMgZWxlbWVudHNcblxuICAvLyBjcmVhdGUgbmV3IG9iamVjdFxuICB2YXIgcmVmZXJlbmNlZE9iamVjdCA9IGVsZW1lbnRIZWxwZXJcbiAgICAuY3JlYXRlRWxlbWVudChuZXdPYmplY3QudHlwZSwgbmV3T2JqZWN0LnByb3BlcnRpZXMsIG5ld09iamVjdFBhcmVudCwgdGhpcy5fYnBtbkZhY3RvcnkpO1xuICBjb250ZXh0LnJlZmVyZW5jZWRPYmplY3QgPSByZWZlcmVuY2VkT2JqZWN0O1xuXG4gIC8vIGFkZCB0byBjb250YWluaW5nIGxpc3RcbiAgbmV3T2JqZWN0Q29udGFpbmVyLnB1c2gocmVmZXJlbmNlZE9iamVjdCk7XG5cbiAgLy8gYWRqdXN0IHJlZmVyZW5jZSBhdHRyaWJ1dGVcbiAgY29udGV4dC5wcmV2aW91c1JlZmVyZW5jZSA9IHJlZmVyZW5jaW5nT2JqZWN0W3JlZmVyZW5jZVByb3BlcnR5XTtcbiAgcmVmZXJlbmNpbmdPYmplY3RbcmVmZXJlbmNlUHJvcGVydHldID0gcmVmZXJlbmNlZE9iamVjdDtcblxuICBjb250ZXh0LmNoYW5nZWQgPSBjaGFuZ2VkO1xuXG4gIC8vIGluZGljYXRlIGNoYW5nZWQgb24gb2JqZWN0cyBhZmZlY3RlZCBieSB0aGUgdXBkYXRlXG4gIHJldHVybiBjaGFuZ2VkO1xufTtcblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB1cGRhdGVcbiAqXG4gKiBAbWV0aG9kICBDcmVhdGVBbmRSZWZlcmVuY2VFbGVtZW50SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZS5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHJlZmVyZW5jaW5nT2JqZWN0ID0gY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCxcbiAgICAgIHJlZmVyZW5jZVByb3BlcnR5ID0gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSxcbiAgICAgIHByZXZpb3VzUmVmZXJlbmNlID0gY29udGV4dC5wcmV2aW91c1JlZmVyZW5jZSxcbiAgICAgIHJlZmVyZW5jZWRPYmplY3QgPSBjb250ZXh0LnJlZmVyZW5jZWRPYmplY3QsXG4gICAgICBuZXdPYmplY3RDb250YWluZXIgPSBjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lcjtcblxuICAvLyByZXNldCByZWZlcmVuY2VcbiAgcmVmZXJlbmNpbmdPYmplY3Quc2V0KHJlZmVyZW5jZVByb3BlcnR5LCBwcmV2aW91c1JlZmVyZW5jZSk7XG5cbiAgLy8gcmVtb3ZlIG5ldyBlbGVtZW50XG4gIG5ld09iamVjdENvbnRhaW5lci5zcGxpY2UobmV3T2JqZWN0Q29udGFpbmVyLmluZGV4T2YocmVmZXJlbmNlZE9iamVjdCksIDEpO1xuXG4gIHJldHVybiBjb250ZXh0LmNoYW5nZWQ7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVOb3ROdWxsKHByb3AsIG5hbWUpIHtcbiAgaWYgKCFwcm9wKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcblxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgYSBCUE1OIDIuMCBwcm9wZXJ0eSB1cGRhdGVcbiAqIGZvciBidXNpbmVzcyBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlXG4gKiBkaWFncmFtLlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsIGluXG4gKiBvcmRlciB0byB1cGRhdGUgY2hpbGQgZWxlbWVudHMgb2YgZWxlbWVudHMgdmlzaWJsZSBpblxuICogdGhlIGRpYWdyYW0uXG4gKlxuICogRXhhbXBsZTogcGVyZm9ybSBhbiB1cGRhdGUgb2YgYSBzcGVjaWZpYyBldmVudCBkZWZpbml0aW9uXG4gKiBvZiBhbiBpbnRlcm1lZGlhdGUgZXZlbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcihlbGVtZW50UmVnaXN0cnksIGJwbW5GYWN0b3J5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbn1cblxuQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci4kaW5qZWN0ID0gWyAnZWxlbWVudFJlZ2lzdHJ5JywgJ2JwbW5GYWN0b3J5JyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXI7XG5cbmZ1bmN0aW9uIGVuc3VyZU5vdE51bGwocHJvcCwgbmFtZSkge1xuICBpZiAoIXByb3ApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgcmVxdWlyZWQnKTtcbiAgfVxuICByZXR1cm4gcHJvcDtcblxufVxuZnVuY3Rpb24gZW5zdXJlTGlzdChwcm9wLCBuYW1lKSB7XG4gIGlmICghcHJvcCB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvcCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbmVlZHMgdG8gYmUgYSBsaXN0Jyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgdW5kZXIgYSBwcm92aWRlZCBwYXJlbnQgYW5kIHVwZGF0ZXMgLyBjcmVhdGVzIGEgcmVmZXJlbmNlIHRvIGl0IGluXG4gKiBvbmUgYXRvbWljIGFjdGlvbi5cbiAqXG4gKiBAbWV0aG9kICBDcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50IHdoaWNoIGlzIHRoZSBjb250ZXh0IGZvciB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5yZWZlcmVuY2luZ09iamVjdH0gY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCB0aGUgb2JqZWN0IHdoaWNoIGNyZWF0ZXMgdGhlIHJlZmVyZW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHkgdGhlIHByb3BlcnR5IG9mIHRoZSByZWZlcmVuY2luZ09iamVjdCB3aGljaCBtYWtlcyB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5uZXdPYmplY3R9IGNvbnRleHQubmV3T2JqZWN0IHRoZSBuZXcgb2JqZWN0IHRvIGFkZFxuICogQHBhcmFtIHttb2RkbGUubmV3T2JqZWN0Q29udGFpbmVyfSBjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lciB0aGUgY29udGFpbmVyIGZvciB0aGUgbmV3IG9iamVjdFxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGN1cnJlbnRPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQuY3VycmVudE9iamVjdCwgJ2N1cnJlbnRPYmplY3QnKSxcbiAgICAgIHByb3BlcnR5TmFtZSA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5wcm9wZXJ0eU5hbWUsICdwcm9wZXJ0eU5hbWUnKSxcbiAgICAgIG5ld09iamVjdHMgPSBlbnN1cmVMaXN0KGNvbnRleHQubmV3T2JqZWN0cywgJ25ld09iamVjdHMnKSxcbiAgICAgIGNoYW5nZWQgPSBbIGNvbnRleHQuZWxlbWVudCBdOyAvLyB0aGlzIHdpbGwgbm90IGNoYW5nZSBhbnkgZGlhZ3JhbS1qcyBlbGVtZW50c1xuXG5cbiAgdmFyIGNoaWxkT2JqZWN0cyA9IFtdO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gY3JlYXRlIG5ldyBhcnJheSBvZiBidXNpbmVzcyBvYmplY3RzXG4gIGZvckVhY2gobmV3T2JqZWN0cywgZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQob2JqLnR5cGUsIG9iai5wcm9wZXJ0aWVzLCBjdXJyZW50T2JqZWN0LCBzZWxmLl9icG1uRmFjdG9yeSk7XG5cbiAgICBjaGlsZE9iamVjdHMucHVzaChlbGVtZW50KTtcbiAgfSk7XG4gIGNvbnRleHQuY2hpbGRPYmplY3QgPSBjaGlsZE9iamVjdHM7XG5cbiAgLy8gYWRqdXN0IGFycmF5IHJlZmVyZW5jZSBpbiB0aGUgcGFyZW50IGJ1c2luZXNzIG9iamVjdFxuICBjb250ZXh0LnByZXZpb3VzQ2hpbGRzID0gY3VycmVudE9iamVjdFtwcm9wZXJ0eU5hbWVdO1xuICBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSBjaGlsZE9iamVjdHM7XG5cbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjdXJyZW50T2JqZWN0ID0gY29udGV4dC5jdXJyZW50T2JqZWN0LFxuICAgICAgcHJvcGVydHlOYW1lID0gY29udGV4dC5wcm9wZXJ0eU5hbWUsXG4gICAgICBwcmV2aW91c0NoaWxkcyA9IGNvbnRleHQucHJldmlvdXNDaGlsZHM7XG5cbiAgLy8gcmVtb3ZlIG5ldyBlbGVtZW50XG4gIGN1cnJlbnRPYmplY3Quc2V0KHByb3BlcnR5TmFtZSwgcHJldmlvdXNDaGlsZHMpO1xuXG4gIHJldHVybiBjb250ZXh0LmNoYW5nZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgY29tYmluZXMgYW5kIGV4ZWN1dGVzIG11bHRpcGxlIGNvbW1hbmRzLlxuICpcbiAqIEFsbCB1cGRhdGVzIGFyZSBidW5kbGVkIG9uIHRoZSBjb21tYW5kIHN0YWNrIGFuZCBleGVjdXRlZCBpbiBvbmUgc3RlcC5cbiAqIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXZlcnQgdGhlIGNoYW5nZXMgaW4gb25lIHN0ZXAuXG4gKlxuICogRXhhbXBsZSB1c2UgY2FzZTogcmVtb3ZlIHRoZSBjYW11bmRhOmZvcm1LZXkgYXR0cmlidXRlIGFuZCBpbiBhZGRpdGlvblxuICogYWRkIGFsbCBmb3JtIGZpZWxkcyBuZWVkZWQgZm9yIHRoZSBjYW11bmRhOmZvcm1EYXRhIHByb3BlcnR5LlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIE11bHRpQ29tbWFuZEhhbmRsZXIoY29tbWFuZFN0YWNrKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbn1cblxuTXVsdGlDb21tYW5kSGFuZGxlci4kaW5qZWN0ID0gWyAnY29tbWFuZFN0YWNrJyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpQ29tbWFuZEhhbmRsZXI7XG5cbk11bHRpQ29tbWFuZEhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcblxuICBmb3JFYWNoKGNvbnRleHQsIGZ1bmN0aW9uKGNvbW1hbmQpIHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLmNtZCwgY29tbWFuZC5jb250ZXh0KTtcbiAgfSk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZHVjZSA9IHJlcXVpcmUoJ2xvZGFzaC90cmFuc2Zvcm0nKSxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyksXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyBhIEJQTU4gMi4wIHByb3BlcnR5IHVwZGF0ZVxuICogZm9yIGJ1c2luZXNzIG9iamVjdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRlZCBpbiB0aGVcbiAqIGRpYWdyYW0uXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb3BlcnRpZXMgcGFuZWwgaW5cbiAqIG9yZGVyIHRvIHVwZGF0ZSBjaGlsZCBlbGVtZW50cyBvZiBlbGVtZW50cyB2aXNpYmxlIGluXG4gKiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBFeGFtcGxlOiBwZXJmb3JtIGFuIHVwZGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50IGRlZmluaXRpb25cbiAqIG9mIGFuIGludGVybWVkaWF0ZSBldmVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbn1cblxuVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyO1xuXG4vKipcbiAqIHJldHVybnMgdGhlIHJvb3QgZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRSb290KGJ1c2luZXNzT2JqZWN0KSB7XG4gIHZhciBwYXJlbnQgPSBidXNpbmVzc09iamVjdDtcbiAgd2hpbGUgKHBhcmVudC4kcGFyZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcmVudDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydHlOYW1lcykge1xuICByZXR1cm4gcmVkdWNlKHByb3BlcnR5TmFtZXMsIGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSBidXNpbmVzc09iamVjdC5nZXQoa2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICBidXNpbmVzc09iamVjdC5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0pO1xufVxuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgYnVzaW5lc3Mgb2JqZWN0IHdpdGggYSBsaXN0IG9mIG5ldyBwcm9wZXJ0aWVzXG4gKlxuICogQG1ldGhvZCAgVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIGhhcyBhIGNoaWxkIGJ1c2luZXNzIG9iamVjdCB1cGRhdGVkXG4gKiBAcGFyYW0ge21vZGRsZS5idXNpbmVzc09iamVjdH0gY29udGV4dC5idXNpbmVzc09iamVjdCB0aGUgYnVzaW5lc3NPYmplY3QgdG8gdXBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5wcm9wZXJ0aWVzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgYnVzaW5lc3NPYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZS5CYXNlPn0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5VcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBidXNpbmVzc09iamVjdCA9IGNvbnRleHQuYnVzaW5lc3NPYmplY3QsXG4gICAgICByb290RWxlbWVudHMgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KS5yb290RWxlbWVudHMsXG4gICAgICByZWZlcmVuY2VUeXBlID0gY29udGV4dC5yZWZlcmVuY2VUeXBlLFxuICAgICAgcmVmZXJlbmNlUHJvcGVydHkgPSBjb250ZXh0LnJlZmVyZW5jZVByb3BlcnR5LFxuICAgICAgY2hhbmdlZCA9IFsgZWxlbWVudCBdOyAvLyB0aGlzIHdpbGwgbm90IGNoYW5nZSBhbnkgZGlhZ3JhbS1qcyBlbGVtZW50c1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnVzaW5lc3NPYmplY3QgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyB8fCBnZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBrZXlzKHByb3BlcnRpZXMpKTtcblxuICAvLyBjaGVjayBpZiB0aGVyZSB0aGUgdXBkYXRlIG5lZWRzIGFuIGV4dGVybmFsIGVsZW1lbnQgZm9yIHJlZmVyZW5jZVxuICBpZiAodHlwZW9mIHJlZmVyZW5jZVR5cGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiByZWZlcmVuY2VQcm9wZXJ0eSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmb3JFYWNoKHJvb3RFbGVtZW50cywgZnVuY3Rpb24ocm9vdEVsZW1lbnQpIHtcbiAgICAgIGlmIChpcyhyb290RWxlbWVudCwgcmVmZXJlbmNlVHlwZSkpIHtcbiAgICAgICAgaWYgKHJvb3RFbGVtZW50LmlkID09PSBwcm9wZXJ0aWVzW3JlZmVyZW5jZVByb3BlcnR5XSkge1xuICAgICAgICAgIHByb3BlcnRpZXNbcmVmZXJlbmNlUHJvcGVydHldID0gcm9vdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gIHNldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIHByb3BlcnRpZXMpO1xuXG4gIC8vIHN0b3JlIG9sZCB2YWx1ZXNcbiAgY29udGV4dC5vbGRQcm9wZXJ0aWVzID0gb2xkUHJvcGVydGllcztcbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyI3JldmVydFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGUuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5VcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyxcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gY29udGV4dC5idXNpbmVzc09iamVjdDtcblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0aWVzKTtcblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgYSBCUE1OIDIuMCBwcm9wZXJ0eSB1cGRhdGVcbiAqIGZvciBidXNpbmVzcyBvYmplY3QgbGlzdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRlZCBpbiB0aGVcbiAqIGRpYWdyYW0uXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb3BlcnRpZXMgcGFuZWwgaW5cbiAqIG9yZGVyIHRvIHVwZGF0ZSBjaGlsZCBlbGVtZW50cyBvZiBlbGVtZW50cyB2aXNpYmxlIGluXG4gKiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBFeGFtcGxlOiBwZXJmb3JtIGFuIHVwZGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50IGRlZmluaXRpb25cbiAqIG9mIGFuIGludGVybWVkaWF0ZSBldmVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVcGRhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSwgYnBtbkZhY3RvcnkpIHtcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xufVxuXG5VcGRhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnYnBtbkZhY3RvcnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcjtcblxuZnVuY3Rpb24gZW5zdXJlTm90TnVsbChwcm9wLCBuYW1lKSB7XG4gIGlmICghcHJvcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJ3JlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgZWxlbWVudCB1bmRlciBhIHByb3ZpZGVkIHBhcmVudC5cbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY3VycmVudE9iamVjdCA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5jdXJyZW50T2JqZWN0LCAnY3VycmVudE9iamVjdCcpLFxuICAgICAgcHJvcGVydHlOYW1lID0gZW5zdXJlTm90TnVsbChjb250ZXh0LnByb3BlcnR5TmFtZSwgJ3Byb3BlcnR5TmFtZScpLFxuICAgICAgdXBkYXRlZE9iamVjdExpc3QgPSBjb250ZXh0LnVwZGF0ZWRPYmplY3RMaXN0LFxuICAgICAgb2JqZWN0c1RvUmVtb3ZlID0gY29udGV4dC5vYmplY3RzVG9SZW1vdmUgfHwgW10sXG4gICAgICBvYmplY3RzVG9BZGQgPSBjb250ZXh0Lm9iamVjdHNUb0FkZCB8fCBbXSxcbiAgICAgIGNoYW5nZWQgPSBbIGNvbnRleHQuZWxlbWVudF0sIC8vIHRoaXMgd2lsbCBub3QgY2hhbmdlIGFueSBkaWFncmFtLWpzIGVsZW1lbnRzXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU7XG5cbiAgaWYgKGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lKSB7XG4gICAgcmVmZXJlbmNlUHJvcGVydHlOYW1lID0gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eU5hbWU7XG4gIH1cblxuICB2YXIgb2JqZWN0TGlzdCA9IGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXTtcbiAgLy8gYWRqdXN0IGFycmF5IHJlZmVyZW5jZSBpbiB0aGUgcGFyZW50IGJ1c2luZXNzIG9iamVjdFxuICBjb250ZXh0LnByZXZpb3VzTGlzdCA9IGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXTtcblxuICBpZiAodXBkYXRlZE9iamVjdExpc3QpIHtcbiAgICBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSB1cGRhdGVkT2JqZWN0TGlzdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGlzdENvcHkgPSBbXTtcbiAgICAvLyByZW1vdmUgYWxsIG9iamVjdHMgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWRcbiAgICBmb3JFYWNoKG9iamVjdExpc3QsIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdHNUb1JlbW92ZS5pbmRleE9mKG9iamVjdCkgPT0gLTEpIHtcbiAgICAgICAgbGlzdENvcHkucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGFkZCBhbGwgb2JqZWN0cyB3aGljaCBzaG91bGQgYmUgYWRkZWRcbiAgICBsaXN0Q29weSA9IGxpc3RDb3B5LmNvbmNhdChvYmplY3RzVG9BZGQpO1xuXG4gICAgLy8gc2V0IHByb3BlcnR5IHRvIG5ldyBsaXN0XG4gICAgaWYgKGxpc3RDb3B5Lmxlbmd0aCA+IDAgfHwgIXJlZmVyZW5jZVByb3BlcnR5TmFtZSkge1xuXG4gICAgICAvLyBhcyBsb25nIGFzIHRoZXJlIGFyZSBlbGVtZW50cyBpbiB0aGUgbGlzdCB1cGRhdGUgdGhlIGxpc3RcbiAgICAgIGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXSA9IGxpc3RDb3B5O1xuICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlUHJvcGVydHlOYW1lKSB7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGlzdCB3aGVuIGl0IGlzIGVtcHR5XG4gICAgICB2YXIgcGFyZW50T2JqZWN0ID0gY3VycmVudE9iamVjdC4kcGFyZW50O1xuICAgICAgcGFyZW50T2JqZWN0LnNldChyZWZlcmVuY2VQcm9wZXJ0eU5hbWUsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjdXJyZW50T2JqZWN0ID0gY29udGV4dC5jdXJyZW50T2JqZWN0LFxuICAgICAgcHJvcGVydHlOYW1lID0gY29udGV4dC5wcm9wZXJ0eU5hbWUsXG4gICAgICBwcmV2aW91c0xpc3QgPSBjb250ZXh0LnByZXZpb3VzTGlzdCxcbiAgICAgIHBhcmVudE9iamVjdCA9IGN1cnJlbnRPYmplY3QuJHBhcmVudDtcblxuICBpZiAoY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eU5hbWUpIHtcbiAgICBwYXJlbnRPYmplY3Quc2V0KGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lLCBjdXJyZW50T2JqZWN0KTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBuZXcgZWxlbWVudFxuICBjdXJyZW50T2JqZWN0LnNldChwcm9wZXJ0eU5hbWUsIHByZXZpb3VzTGlzdCk7XG5cbiAgcmV0dXJuIGNvbnRleHQuY2hhbmdlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcblxudmFyIEhBTkRMRVJTID0ge1xuICAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnOiByZXF1aXJlKCcuL1VwZGF0ZUJ1c2luZXNzT2JqZWN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5jcmVhdGUtYW5kLXJlZmVyZW5jZSc6IHJlcXVpcmUoJy4vQ3JlYXRlQW5kUmVmZXJlbmNlSGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5jcmVhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCc6IHJlcXVpcmUoJy4vQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCc6IHJlcXVpcmUoJy4vVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJzogcmVxdWlyZSgnLi9NdWx0aUNvbW1hbmRIYW5kbGVyJylcbn07XG5cblxuZnVuY3Rpb24gQ29tbWFuZEluaXRpYWxpemVyKGV2ZW50QnVzLCBjb21tYW5kU3RhY2spIHtcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAgZm9yRWFjaChIQU5ETEVSUywgZnVuY3Rpb24oaGFuZGxlciwgaWQpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoaWQsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuQ29tbWFuZEluaXRpYWxpemVyLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjb21tYW5kU3RhY2snIF07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBfX2luaXRfXzogWyBDb21tYW5kSW5pdGlhbGl6ZXIgXVxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBFbGVtZW50SGVscGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRIZWxwZXI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlbGVtZW50IGFuZCBzZXQgdGhlIHBhcmVudCB0byBpdFxuICpcbiAqIEBtZXRob2QgRWxlbWVudEhlbHBlciNjcmVhdGVFbGVtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnRUeXBlIG9mIHRoZSBuZXcgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgb2YgdGhlIG5ldyBlbGVtZW50IGluIGtleS12YWx1ZSBwYWlyc1xuICogQHBhcmFtIHttb2RkbGUub2JqZWN0fSBwYXJlbnQgb2YgdGhlIG5ldyBlbGVtZW50XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgdGhlIG5ldyBlbGVtZW50XG4gKlxuICogQHJldHVybnMge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50IHdoaWNoIGlzIGNyZWF0ZWRcbiAqL1xuRWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudFR5cGUsIHByb3BlcnRpZXMsIHBhcmVudCwgZmFjdG9yeSkge1xuICB2YXIgZWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlKGVsZW1lbnRUeXBlLCBwcm9wZXJ0aWVzKTtcbiAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIHJlcXVpcmUoJy4vY21kJyksXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XG4gIF0sXG4gIF9faW5pdF9fOiBbICdwcm9wZXJ0aWVzUGFuZWwnIF0sXG4gIHByb3BlcnRpZXNQYW5lbDogWyAndHlwZScsIHJlcXVpcmUoJy4vUHJvcGVydGllc1BhbmVsJykgXVxufTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBJZHMgZnJvbSAnaWRzJztcblxuaW1wb3J0IEJhc2VWaWV3ZXIgZnJvbSAnLi9CYXNlVmlld2VyJztcblxuXG4vKipcbiAqIEEgYmFzZSBtb2RlbGVyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKiBIYXZlIGEgbG9vayBhdCB7QGxpbmsgTW9kZWxlcn0gZm9yIGEgYnVuZGxlIHRoYXQgaW5jbHVkZXMgYWN0dWFsIGZlYXR1cmVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2VNb2RlbGVyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIC8vIGhvb2sgSUQgY29sbGVjdGlvbiBpbnRvIHRoZSBtb2RlbGVyXG4gIHRoaXMub24oJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5lcnJvcikge1xuICAgICAgdGhpcy5fY29sbGVjdElkcyhldmVudC5kZWZpbml0aW9ucywgZXZlbnQuZWxlbWVudHNCeUlkKTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIHRoaXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZ2V0KCdtb2RkbGUnKS5pZHMuY2xlYXIoKTtcbiAgfSwgdGhpcyk7XG59XG5cbmluaGVyaXRzKEJhc2VNb2RlbGVyLCBCYXNlVmlld2VyKTtcblxuXG4vKipcbiAqIENyZWF0ZSBhIG1vZGRsZSBpbnN0YW5jZSwgYXR0YWNoaW5nIGlkcyB0byBpdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5CYXNlTW9kZWxlci5wcm90b3R5cGUuX2NyZWF0ZU1vZGRsZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIG1vZGRsZSA9IEJhc2VWaWV3ZXIucHJvdG90eXBlLl9jcmVhdGVNb2RkbGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICAvLyBhdHRhY2ggaWRzIHRvIG1vZGRsZSB0byBiZSBhYmxlIHRvIHRyYWNrXG4gIC8vIGFuZCB2YWxpZGF0ZWQgaWRzIGluIHRoZSBCUE1OIDIuMCBYTUwgZG9jdW1lbnRcbiAgLy8gdHJlZVxuICBtb2RkbGUuaWRzID0gbmV3IElkcyhbIDMyLCAzNiwgMSBdKTtcblxuICByZXR1cm4gbW9kZGxlO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0IGlkcyBwcm9jZXNzZWQgZHVyaW5nIHBhcnNpbmcgb2YgdGhlXG4gKiBkZWZpbml0aW9ucyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtDb250ZXh0fSBjb250ZXh0XG4gKi9cbkJhc2VNb2RlbGVyLnByb3RvdHlwZS5fY29sbGVjdElkcyA9IGZ1bmN0aW9uKGRlZmluaXRpb25zLCBlbGVtZW50c0J5SWQpIHtcblxuICB2YXIgbW9kZGxlID0gZGVmaW5pdGlvbnMuJG1vZGVsLFxuICAgICAgaWRzID0gbW9kZGxlLmlkcyxcbiAgICAgIGlkO1xuXG4gIC8vIHJlbW92ZSByZWZlcmVuY2VzIGZyb20gcHJldmlvdXMgaW1wb3J0XG4gIGlkcy5jbGVhcigpO1xuXG4gIGZvciAoaWQgaW4gZWxlbWVudHNCeUlkKSB7XG4gICAgaWRzLmNsYWltKGlkLCBlbGVtZW50c0J5SWRbaWRdKTtcbiAgfVxufTtcbiIsIi8qKlxuICogVGhlIGNvZGUgaW4gdGhlIDxwcm9qZWN0LWxvZ28+PC9wcm9qZWN0LWxvZ28+IGFyZWFcbiAqIG11c3Qgbm90IGJlIGNoYW5nZWQuXG4gKlxuICogQHNlZSBodHRwOi8vYnBtbi5pby9saWNlbnNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbmQsXG4gIGlzTnVtYmVyLFxuICBvbWl0XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgaW5uZXJTVkdcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgRGlhZ3JhbSBmcm9tICdkaWFncmFtLWpzJztcbmltcG9ydCBCcG1uTW9kZGxlIGZyb20gJ2JwbW4tbW9kZGxlJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaW1wb3J0QnBtbkRpYWdyYW1cbn0gZnJvbSAnLi9pbXBvcnQvSW1wb3J0ZXInO1xuXG5pbXBvcnQge1xuICB3cmFwRm9yQ29tcGF0aWJpbGl0eVxufSBmcm9tICcuL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwnO1xuXG4vKipcbiAqIEEgYmFzZSB2aWV3ZXIgZm9yIEJQTU4gMi4wIGRpYWdyYW1zLlxuICpcbiAqIEhhdmUgYSBsb29rIGF0IHtAbGluayBWaWV3ZXJ9LCB7QGxpbmsgTmF2aWdhdGVkVmlld2VyfSBvciB7QGxpbmsgTW9kZWxlcn0gZm9yXG4gKiBidW5kbGVzIHRoYXQgaW5jbHVkZSBhY3R1YWwgZmVhdHVyZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gdGhlIGNvbnRhaW5lciB0byByZW5kZXIgdGhlIHZpZXdlciBpbiwgZGVmYXVsdHMgdG8gYm9keS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMud2lkdGhdIHRoZSB3aWR0aCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gdGhlIGhlaWdodCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMubW9kZGxlRXh0ZW5zaW9uc10gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIHByb3ZpZGVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5tb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMuYWRkaXRpb25hbE1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIHVzZSB3aXRoIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzZVZpZXdlcihvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IGFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcblxuICB0aGlzLl9tb2RkbGUgPSB0aGlzLl9jcmVhdGVNb2RkbGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fY29udGFpbmVyID0gdGhpcy5fY3JlYXRlQ29udGFpbmVyKG9wdGlvbnMpO1xuXG4gIC8qIDxwcm9qZWN0LWxvZ28+ICovXG5cbiAgYWRkUHJvamVjdExvZ28odGhpcy5fY29udGFpbmVyKTtcblxuICAvKiA8L3Byb2plY3QtbG9nbz4gKi9cblxuICB0aGlzLl9pbml0KHRoaXMuX2NvbnRhaW5lciwgdGhpcy5fbW9kZGxlLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoQmFzZVZpZXdlciwgRGlhZ3JhbSk7XG5cbi8qKlxuKiBUaGUgaW1wb3J0WE1MIHJlc3VsdC5cbipcbiogQHR5cGVkZWYge09iamVjdH0gSW1wb3J0WE1MUmVzdWx0XG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuKiBUaGUgaW1wb3J0WE1MIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydFhNTEVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogUGFyc2UgYW5kIHJlbmRlciBhIEJQTU4gMi4wIGRpYWdyYW0uXG4gKlxuICogT25jZSBmaW5pc2hlZCB0aGUgdmlld2VyIHJlcG9ydHMgYmFjayB0aGUgcmVzdWx0IHRvIHRoZVxuICogcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCAoZXJyLCB3YXJuaW5ncykuXG4gKlxuICogIyMgTGlmZS1DeWNsZSBFdmVudHNcbiAqXG4gKiBEdXJpbmcgaW1wb3J0IHRoZSB2aWV3ZXIgd2lsbCBmaXJlIGxpZmUtY3ljbGUgZXZlbnRzOlxuICpcbiAqICAgKiBpbXBvcnQucGFyc2Uuc3RhcnQgKGFib3V0IHRvIHJlYWQgbW9kZWwgZnJvbSB4bWwpXG4gKiAgICogaW1wb3J0LnBhcnNlLmNvbXBsZXRlIChtb2RlbCByZWFkOyBtYXkgaGF2ZSB3b3JrZWQgb3Igbm90KVxuICogICAqIGltcG9ydC5yZW5kZXIuc3RhcnQgKGdyYXBoaWNhbCBpbXBvcnQgc3RhcnQpXG4gKiAgICogaW1wb3J0LnJlbmRlci5jb21wbGV0ZSAoZ3JhcGhpY2FsIGltcG9ydCBmaW5pc2hlZClcbiAqICAgKiBpbXBvcnQuZG9uZSAoZXZlcnl0aGluZyBkb25lKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbCB0aGUgQlBNTiAyLjAgeG1sXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fHN0cmluZ30gW2JwbW5EaWFncmFtXSBCUE1OIGRpYWdyYW0gb3IgaWQgb2YgZGlhZ3JhbSB0byByZW5kZXIgKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0WE1MUmVzdWx0LCBJbXBvcnRYTUxFcnJvcj59XG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmltcG9ydFhNTCA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIGltcG9ydFhNTCh4bWwsIGJwbW5EaWFncmFtKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIFBhcnNlQ29tcGxldGVFdmVudChkYXRhKSB7XG5cbiAgICB2YXIgZXZlbnQgPSBzZWxmLmdldCgnZXZlbnRCdXMnKS5jcmVhdGVFdmVudChkYXRhKTtcblxuICAgIC8vIFRPRE8obmlra3UpOiByZW1vdmUgd2l0aCBmdXR1cmUgYnBtbi1qcyB2ZXJzaW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnY29udGV4dCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoXG4gICAgICAgICAgJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZSA8Y29udGV4dD4gaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgbGlicmFyeSB2ZXJzaW9ucydcbiAgICAgICAgKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YXJuaW5nczogZGF0YS53YXJuaW5ncyxcbiAgICAgICAgICByZWZlcmVuY2VzOiBkYXRhLnJlZmVyZW5jZXMsXG4gICAgICAgICAgZWxlbWVudHNCeUlkOiBkYXRhLmVsZW1lbnRzQnlJZFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgLy8gaG9vayBpbiBwcmUtcGFyc2UgbGlzdGVuZXJzICtcbiAgICAvLyBhbGxvdyB4bWwgbWFuaXB1bGF0aW9uXG4gICAgeG1sID0gc2VsZi5fZW1pdCgnaW1wb3J0LnBhcnNlLnN0YXJ0JywgeyB4bWw6IHhtbCB9KSB8fCB4bWw7XG5cbiAgICBzZWxmLl9tb2RkbGUuZnJvbVhNTCh4bWwsICdicG1uOkRlZmluaXRpb25zJykudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgIHZhciBkZWZpbml0aW9ucyA9IHJlc3VsdC5yb290RWxlbWVudDtcbiAgICAgIHZhciByZWZlcmVuY2VzID0gcmVzdWx0LnJlZmVyZW5jZXM7XG4gICAgICB2YXIgcGFyc2VXYXJuaW5ncyA9IHJlc3VsdC53YXJuaW5ncztcbiAgICAgIHZhciBlbGVtZW50c0J5SWQgPSByZXN1bHQuZWxlbWVudHNCeUlkO1xuXG4gICAgICAvLyBob29rIGluIHBvc3QgcGFyc2UgbGlzdGVuZXJzICtcbiAgICAgIC8vIGFsbG93IGRlZmluaXRpb25zIG1hbmlwdWxhdGlvblxuICAgICAgZGVmaW5pdGlvbnMgPSBzZWxmLl9lbWl0KCdpbXBvcnQucGFyc2UuY29tcGxldGUnLCBQYXJzZUNvbXBsZXRlRXZlbnQoe1xuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgZGVmaW5pdGlvbnM6IGRlZmluaXRpb25zLFxuICAgICAgICBlbGVtZW50c0J5SWQ6IGVsZW1lbnRzQnlJZCxcbiAgICAgICAgcmVmZXJlbmNlczogcmVmZXJlbmNlcyxcbiAgICAgICAgd2FybmluZ3M6IHBhcnNlV2FybmluZ3NcbiAgICAgIH0pKSB8fCBkZWZpbml0aW9ucztcblxuICAgICAgc2VsZi5pbXBvcnREZWZpbml0aW9ucyhkZWZpbml0aW9ucywgYnBtbkRpYWdyYW0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHZhciBhbGxXYXJuaW5ncyA9IFtdLmNvbmNhdChwYXJzZVdhcm5pbmdzLCByZXN1bHQud2FybmluZ3MgfHwgW10pO1xuXG4gICAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogbnVsbCwgd2FybmluZ3M6IGFsbFdhcm5pbmdzIH0pO1xuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IGFsbFdhcm5pbmdzIH0pO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIHZhciBhbGxXYXJuaW5ncyA9IFtdLmNvbmNhdChwYXJzZVdhcm5pbmdzLCBlcnIud2FybmluZ3MgfHwgW10pO1xuXG4gICAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogZXJyLCB3YXJuaW5nczogYWxsV2FybmluZ3MgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlamVjdChhZGRXYXJuaW5nc1RvRXJyb3IoZXJyLCBhbGxXYXJuaW5ncykpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG5cbiAgICAgIGVyciA9IGNoZWNrVmFsaWRhdGlvbkVycm9yKGVycik7XG5cbiAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogZXJyLCB3YXJuaW5nczogZXJyLndhcm5pbmdzIH0pO1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuKiBUaGUgaW1wb3J0RGVmaW5pdGlvbnMgcmVzdWx0LlxuKlxuKiBAdHlwZWRlZiB7T2JqZWN0fSBJbXBvcnREZWZpbml0aW9uc1Jlc3VsdFxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiogVGhlIGltcG9ydERlZmluaXRpb25zIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydERlZmluaXRpb25zRXJyb3JcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4gKiBJbXBvcnQgcGFyc2VkIGRlZmluaXRpb25zIGFuZCByZW5kZXIgYSBCUE1OIDIuMCBkaWFncmFtLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIGltcG9ydCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnJlbmRlci5zdGFydCAoZ3JhcGhpY2FsIGltcG9ydCBzdGFydClcbiAqICAgKiBpbXBvcnQucmVuZGVyLmNvbXBsZXRlIChncmFwaGljYWwgaW1wb3J0IGZpbmlzaGVkKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PERlZmluaXRpb25zPn0gZGVmaW5pdGlvbnMgcGFyc2VkIEJQTU4gMi4wIGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fHN0cmluZ30gW2JwbW5EaWFncmFtXSBCUE1OIGRpYWdyYW0gb3IgaWQgb2YgZGlhZ3JhbSB0byByZW5kZXIgKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0RGVmaW5pdGlvbnNSZXN1bHQsIEltcG9ydERlZmluaXRpb25zRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5pbXBvcnREZWZpbml0aW9ucyA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIGltcG9ydERlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICBzZWxmLl9zZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucyk7XG5cbiAgICBzZWxmLm9wZW4oYnBtbkRpYWdyYW0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG5cbiAgICAgIHZhciB3YXJuaW5ncyA9IHJlc3VsdC53YXJuaW5ncztcblxuICAgICAgcmV0dXJuIHJlc29sdmUoeyB3YXJuaW5nczogd2FybmluZ3MgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBUaGUgb3BlbiByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gT3BlblJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiogVGhlIG9wZW4gZXJyb3IuXG4qXG4qIEB0eXBlZGVmIHtFcnJvcn0gT3BlbkVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogT3BlbiBkaWFncmFtIG9mIHByZXZpb3VzbHkgaW1wb3J0ZWQgWE1MLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIHN3aXRjaCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnJlbmRlci5zdGFydCAoZ3JhcGhpY2FsIGltcG9ydCBzdGFydClcbiAqICAgKiBpbXBvcnQucmVuZGVyLmNvbXBsZXRlIChncmFwaGljYWwgaW1wb3J0IGZpbmlzaGVkKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8TW9kZGxlRWxlbWVudDxCUE1ORGlhZ3JhbT59IFticG1uRGlhZ3JhbU9ySWRdIGlkIG9yIHRoZSBkaWFncmFtIHRvIG9wZW5cbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPE9wZW5SZXN1bHQsIE9wZW5FcnJvcj59XG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9wZW4gPSB3cmFwRm9yQ29tcGF0aWJpbGl0eShmdW5jdGlvbiBvcGVuKGJwbW5EaWFncmFtT3JJZCkge1xuXG4gIHZhciBkZWZpbml0aW9ucyA9IHRoaXMuX2RlZmluaXRpb25zO1xuICB2YXIgYnBtbkRpYWdyYW0gPSBicG1uRGlhZ3JhbU9ySWQ7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAoIWRlZmluaXRpb25zKSB7XG4gICAgICB2YXIgZXJyMSA9IG5ldyBFcnJvcignbm8gWE1MIGltcG9ydGVkJyk7XG5cbiAgICAgIHJldHVybiByZWplY3QoYWRkV2FybmluZ3NUb0Vycm9yKGVycjEsIFtdKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBicG1uRGlhZ3JhbU9ySWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBicG1uRGlhZ3JhbSA9IGZpbmRCUE1ORGlhZ3JhbShkZWZpbml0aW9ucywgYnBtbkRpYWdyYW1PcklkKTtcblxuICAgICAgaWYgKCFicG1uRGlhZ3JhbSkge1xuICAgICAgICB2YXIgZXJyMiA9IG5ldyBFcnJvcignQlBNTkRpYWdyYW0gPCcgKyBicG1uRGlhZ3JhbU9ySWQgKyAnPiBub3QgZm91bmQnKTtcblxuICAgICAgICByZXR1cm4gcmVqZWN0KGFkZFdhcm5pbmdzVG9FcnJvcihlcnIyLCBbXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFyIGV4aXN0aW5nIHJlbmRlcmVkIGRpYWdyYW1cbiAgICAvLyBjYXRjaCBzeW5jaHJvbm91cyBleGNlcHRpb25zIGR1cmluZyAjY2xlYXIoKVxuICAgIHRyeSB7XG4gICAgICBzZWxmLmNsZWFyKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgcmV0dXJuIHJlamVjdChhZGRXYXJuaW5nc1RvRXJyb3IoZXJyb3IsIFtdKSk7XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybSBncmFwaGljYWwgaW1wb3J0XG4gICAgaW1wb3J0QnBtbkRpYWdyYW0oc2VsZiwgZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXG4gICAgICB2YXIgd2FybmluZ3MgPSByZXN1bHQud2FybmluZ3M7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IHdhcm5pbmdzIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIHNhdmVYTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhdmVYTUxSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBFeHBvcnQgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgQlBNTiAyLjAgZGlhZ3JhbSBhc1xuICogYSBCUE1OIDIuMCBYTUwgZG9jdW1lbnQuXG4gKlxuICogIyMgTGlmZS1DeWNsZSBFdmVudHNcbiAqXG4gKiBEdXJpbmcgWE1MIHNhdmluZyB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogc2F2ZVhNTC5zdGFydCAoYmVmb3JlIHNlcmlhbGl6YXRpb24pXG4gKiAgICogc2F2ZVhNTC5zZXJpYWxpemVkIChhZnRlciB4bWwgZ2VuZXJhdGlvbilcbiAqICAgKiBzYXZlWE1MLmRvbmUgKGV2ZXJ5dGhpbmcgZG9uZSlcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gZXhwb3J0IG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9ybWF0PWZhbHNlXSBvdXRwdXQgZm9ybWF0dGVkIFhNTFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmVhbWJsZT10cnVlXSBvdXRwdXQgcHJlYW1ibGVcbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPFNhdmVYTUxSZXN1bHQsIEVycm9yPn1cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuc2F2ZVhNTCA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIHNhdmVYTUwob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZGVmaW5pdGlvbnMgPSB0aGlzLl9kZWZpbml0aW9ucztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICBpZiAoIWRlZmluaXRpb25zKSB7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdubyBkZWZpbml0aW9ucyBsb2FkZWQnKTtcblxuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIC8vIGFsbG93IHRvIGZpZGRsZSBhcm91bmQgd2l0aCBkZWZpbml0aW9uc1xuICAgIGRlZmluaXRpb25zID0gc2VsZi5fZW1pdCgnc2F2ZVhNTC5zdGFydCcsIHtcbiAgICAgIGRlZmluaXRpb25zOiBkZWZpbml0aW9uc1xuICAgIH0pIHx8IGRlZmluaXRpb25zO1xuXG4gICAgc2VsZi5fbW9kZGxlLnRvWE1MKGRlZmluaXRpb25zLCBvcHRpb25zKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXG4gICAgICB2YXIgeG1sID0gcmVzdWx0LnhtbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgeG1sID0gc2VsZi5fZW1pdCgnc2F2ZVhNTC5zZXJpYWxpemVkJywge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHhtbDogeG1sXG4gICAgICAgIH0pIHx8IHhtbDtcblxuICAgICAgICBzZWxmLl9lbWl0KCdzYXZlWE1MLmRvbmUnLCB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgeG1sOiB4bWxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGluIHNhdmVYTUwgbGlmZS1jeWNsZSBsaXN0ZW5lcicsIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IHhtbDogeG1sIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIHNhdmVTVkcgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhdmVTVkdSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ZnXG4gKi9cblxuLyoqXG4gKiBFeHBvcnQgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgQlBNTiAyLjAgZGlhZ3JhbSBhc1xuICogYW4gU1ZHIGltYWdlLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIFNWRyBzYXZpbmcgdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIHNhdmVTVkcuc3RhcnQgKGJlZm9yZSBzZXJpYWxpemF0aW9uKVxuICogICAqIHNhdmVTVkcuZG9uZSAoZXZlcnl0aGluZyBkb25lKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8U2F2ZVNWR1Jlc3VsdCwgRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5zYXZlU1ZHID0gd3JhcEZvckNvbXBhdGliaWxpdHkoZnVuY3Rpb24gc2F2ZVNWRyhvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgIHNlbGYuX2VtaXQoJ3NhdmVTVkcuc3RhcnQnKTtcblxuICAgIHZhciBzdmcsIGVycjtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgY2FudmFzID0gc2VsZi5nZXQoJ2NhbnZhcycpO1xuXG4gICAgICB2YXIgY29udGVudE5vZGUgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksXG4gICAgICAgICAgZGVmc05vZGUgPSBkb21RdWVyeSgnZGVmcycsIGNhbnZhcy5fc3ZnKTtcblxuICAgICAgdmFyIGNvbnRlbnRzID0gaW5uZXJTVkcoY29udGVudE5vZGUpLFxuICAgICAgICAgIGRlZnMgPSBkZWZzTm9kZSA/ICc8ZGVmcz4nICsgaW5uZXJTVkcoZGVmc05vZGUpICsgJzwvZGVmcz4nIDogJyc7XG5cbiAgICAgIHZhciBiYm94ID0gY29udGVudE5vZGUuZ2V0QkJveCgpO1xuXG4gICAgICBzdmcgPVxuICAgICAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIj8+XFxuJyArXG4gICAgICAgICc8IS0tIGNyZWF0ZWQgd2l0aCBicG1uLWpzIC8gaHR0cDovL2JwbW4uaW8gLS0+XFxuJyArXG4gICAgICAgICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIj5cXG4nICtcbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiICcgK1xuICAgICAgICAgICAgICd3aWR0aD1cIicgKyBiYm94LndpZHRoICsgJ1wiIGhlaWdodD1cIicgKyBiYm94LmhlaWdodCArICdcIiAnICtcbiAgICAgICAgICAgICAndmlld0JveD1cIicgKyBiYm94LnggKyAnICcgKyBiYm94LnkgKyAnICcgKyBiYm94LndpZHRoICsgJyAnICsgYmJveC5oZWlnaHQgKyAnXCIgdmVyc2lvbj1cIjEuMVwiPicgK1xuICAgICAgICAgIGRlZnMgKyBjb250ZW50cyArXG4gICAgICAgICc8L3N2Zz4nO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVyciA9IGU7XG4gICAgfVxuXG4gICAgc2VsZi5fZW1pdCgnc2F2ZVNWRy5kb25lJywge1xuICAgICAgZXJyb3I6IGVycixcbiAgICAgIHN2Zzogc3ZnXG4gICAgfSk7XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdmc6IHN2ZyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogR2V0IGEgbmFtZWQgZGlhZ3JhbSBzZXJ2aWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGVsZW1lbnRSZWdpc3RyeSA9IHZpZXdlci5nZXQoJ2VsZW1lbnRSZWdpc3RyeScpO1xuICogdmFyIHN0YXJ0RXZlbnRTaGFwZSA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoJ1N0YXJ0RXZlbnRfMScpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkaWFncmFtIHNlcnZpY2UgaW5zdGFuY2VcbiAqXG4gKiBAbWV0aG9kIEJhc2VWaWV3ZXIjZ2V0XG4gKi9cblxuLyoqXG4gKiBJbnZva2UgYSBmdW5jdGlvbiBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHZpZXdlci5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZpZXdlci5pbnZva2UoZnVuY3Rpb24oZWxlbWVudFJlZ2lzdHJ5KSB7XG4gKiAgIHZhciBzdGFydEV2ZW50U2hhcGUgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KCdTdGFydEV2ZW50XzEnKTtcbiAqIH0pO1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGludm9rZWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBmdW5jdGlvbnMgcmV0dXJuIHZhbHVlXG4gKlxuICogQG1ldGhvZCBCYXNlVmlld2VyI2ludm9rZVxuICovXG5cblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX3NldERlZmluaXRpb25zID0gZnVuY3Rpb24oZGVmaW5pdGlvbnMpIHtcbiAgdGhpcy5fZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmdldE1vZHVsZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX21vZHVsZXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgZHJhd24gZWxlbWVudHMgZnJvbSB0aGUgdmlld2VyLlxuICpcbiAqIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIHZpZXdlciBjYW4gc3RpbGxcbiAqIGJlIHJldXNlZCBmb3Igb3BlbmluZyBhbm90aGVyIGRpYWdyYW0uXG4gKlxuICogQG1ldGhvZCBCYXNlVmlld2VyI2NsZWFyXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5nZXREZWZpbml0aW9ucygpKSB7XG5cbiAgICAvLyBubyBkaWFncmFtIHRvIGNsZWFyXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gcmVtb3ZlIGJ1c2luZXNzT2JqZWN0I2RpIGJpbmRpbmdcbiAgLy9cbiAgLy8gdGhpcyBpcyBuZWNlc3NhcnksIGFzIHdlIGVzdGFibGlzaCB0aGUgYmluZGluZ3NcbiAgLy8gaW4gdGhlIEJwbW5UcmVlV2Fsa2VyIChhbmQgYXNzdW1lIG5vbmUgYXJlIGdpdmVuXG4gIC8vIG9uIHJlaW1wb3J0KVxuICB0aGlzLmdldCgnZWxlbWVudFJlZ2lzdHJ5JykuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIGJvID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChibyAmJiBiby5kaSkge1xuICAgICAgZGVsZXRlIGJvLmRpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGRyYXduIGVsZW1lbnRzXG4gIERpYWdyYW0ucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIHZpZXdlciBpbnN0YW5jZSBhbmQgcmVtb3ZlIGFsbCBpdHNcbiAqIHJlbWFpbmRlcnMgZnJvbSB0aGUgZG9jdW1lbnQgdHJlZS5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuXG4gIC8vIGRpYWdyYW0gZGVzdHJveVxuICBEaWFncmFtLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgLy8gZG9tIGRldGFjaFxuICBkb21SZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXJcbiAqXG4gKiBSZW1vdmUgYSBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVyIHZpYSB7QGxpbmsgI29mZihldmVudCwgY2FsbGJhY2spfS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50LCBwcmlvcml0eSwgY2FsbGJhY2ssIHRhcmdldCkge1xuICByZXR1cm4gdGhpcy5nZXQoJ2V2ZW50QnVzJykub24oZXZlbnQsIHByaW9yaXR5LCBjYWxsYmFjaywgdGFyZ2V0KTtcbn07XG5cbi8qKlxuICogRGUtcmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjaykge1xuICB0aGlzLmdldCgnZXZlbnRCdXMnKS5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24ocGFyZW50Tm9kZSkge1xuXG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50Tm9kZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIGRldGFjaCBmcm9tIHRoZVxuICAvLyBwcmV2aW91cywgb2xkIHBhcmVudFxuICB0aGlzLmRldGFjaCgpO1xuXG4gIC8vIHVud3JhcCBqUXVlcnkgaWYgcHJvdmlkZWRcbiAgaWYgKHBhcmVudE5vZGUuZ2V0ICYmIHBhcmVudE5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLmpxdWVyeSkge1xuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLmdldCgwKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyZW50Tm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJlbnROb2RlID0gZG9tUXVlcnkocGFyZW50Tm9kZSk7XG4gIH1cblxuICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgdGhpcy5fZW1pdCgnYXR0YWNoJywge30pO1xuXG4gIHRoaXMuZ2V0KCdjYW52YXMnKS5yZXNpemVkKCk7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5nZXREZWZpbml0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbnM7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLFxuICAgICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2RldGFjaCcsIHt9KTtcblxuICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbW9kZGxlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGJhc2VNb2R1bGVzID0gb3B0aW9ucy5tb2R1bGVzIHx8IHRoaXMuZ2V0TW9kdWxlcygpLFxuICAgICAgYWRkaXRpb25hbE1vZHVsZXMgPSBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzIHx8IFtdLFxuICAgICAgc3RhdGljTW9kdWxlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGJwbW5qczogWyAndmFsdWUnLCB0aGlzIF0sXG4gICAgICAgICAgbW9kZGxlOiBbICd2YWx1ZScsIG1vZGRsZSBdXG4gICAgICAgIH1cbiAgICAgIF07XG5cbiAgdmFyIGRpYWdyYW1Nb2R1bGVzID0gW10uY29uY2F0KHN0YXRpY01vZHVsZXMsIGJhc2VNb2R1bGVzLCBhZGRpdGlvbmFsTW9kdWxlcyk7XG5cbiAgdmFyIGRpYWdyYW1PcHRpb25zID0gYXNzaWduKG9taXQob3B0aW9ucywgWyAnYWRkaXRpb25hbE1vZHVsZXMnIF0pLCB7XG4gICAgY2FudmFzOiBhc3NpZ24oe30sIG9wdGlvbnMuY2FudmFzLCB7IGNvbnRhaW5lcjogY29udGFpbmVyIH0pLFxuICAgIG1vZHVsZXM6IGRpYWdyYW1Nb2R1bGVzXG4gIH0pO1xuXG4gIC8vIGludm9rZSBkaWFncmFtIGNvbnN0cnVjdG9yXG4gIERpYWdyYW0uY2FsbCh0aGlzLCBkaWFncmFtT3B0aW9ucyk7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIpIHtcbiAgICB0aGlzLmF0dGFjaFRvKG9wdGlvbnMuY29udGFpbmVyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbWl0IGFuIGV2ZW50IG9uIHRoZSB1bmRlcmx5aW5nIHtAbGluayBFdmVudEJ1c31cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50IHByb2Nlc3NpbmcgcmVzdWx0IChpZiBhbnkpXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLl9lbWl0ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0KCdldmVudEJ1cycpLmZpcmUodHlwZSwgZXZlbnQpO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblxuICB2YXIgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYmpzLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuXG4gIGFzc2lnbihjb250YWluZXIuc3R5bGUsIHtcbiAgICB3aWR0aDogZW5zdXJlVW5pdChvcHRpb25zLndpZHRoKSxcbiAgICBoZWlnaHQ6IGVuc3VyZVVuaXQob3B0aW9ucy5oZWlnaHQpLFxuICAgIHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uXG4gIH0pO1xuXG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fY3JlYXRlTW9kZGxlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgbW9kZGxlT3B0aW9ucyA9IGFzc2lnbih7fSwgdGhpcy5fbW9kZGxlRXh0ZW5zaW9ucywgb3B0aW9ucy5tb2RkbGVFeHRlbnNpb25zKTtcblxuICByZXR1cm4gbmV3IEJwbW5Nb2RkbGUobW9kZGxlT3B0aW9ucyk7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fbW9kdWxlcyA9IFtdO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRXYXJuaW5nc1RvRXJyb3IoZXJyLCB3YXJuaW5nc0FyeSkge1xuICBlcnIud2FybmluZ3MgPSB3YXJuaW5nc0FyeTtcbiAgcmV0dXJuIGVycjtcbn1cblxuZnVuY3Rpb24gY2hlY2tWYWxpZGF0aW9uRXJyb3IoZXJyKSB7XG5cbiAgLy8gY2hlY2sgaWYgd2UgY2FuIGhlbHAgdGhlIHVzZXIgYnkgaW5kaWNhdGluZyB3cm9uZyBCUE1OIDIuMCB4bWxcbiAgLy8gKGluIGNhc2UgaGUgb3IgdGhlIGV4cG9ydGluZyB0b29sIGRpZCBub3QgZ2V0IHRoYXQgcmlnaHQpXG5cbiAgdmFyIHBhdHRlcm4gPSAvdW5wYXJzYWJsZSBjb250ZW50IDwoW14+XSspPiBkZXRlY3RlZChbXFxzXFxTXSopJC87XG4gIHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyhlcnIubWVzc2FnZSk7XG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgZXJyLm1lc3NhZ2UgPVxuICAgICAgJ3VucGFyc2FibGUgY29udGVudCA8JyArIG1hdGNoWzFdICsgJz4gZGV0ZWN0ZWQ7ICcgK1xuICAgICAgJ3RoaXMgbWF5IGluZGljYXRlIGFuIGludmFsaWQgQlBNTiAyLjAgZGlhZ3JhbSBmaWxlJyArIG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn1cblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59O1xuXG5cbi8qKlxuICogRW5zdXJlIHRoZSBwYXNzZWQgYXJndW1lbnQgaXMgYSBwcm9wZXIgdW5pdCAoZGVmYXVsdGluZyB0byBweClcbiAqL1xuZnVuY3Rpb24gZW5zdXJlVW5pdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCArIChpc051bWJlcih2YWwpID8gJ3B4JyA6ICcnKTtcbn1cblxuXG4vKipcbiAqIEZpbmQgQlBNTkRpYWdyYW0gaW4gZGVmaW5pdGlvbnMgYnkgSURcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8RGVmaW5pdGlvbnM+fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGRpYWdyYW1JZFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZpbmRCUE1ORGlhZ3JhbShkZWZpbml0aW9ucywgZGlhZ3JhbUlkKSB7XG4gIGlmICghZGlhZ3JhbUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmluZChkZWZpbml0aW9ucy5kaWFncmFtcywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmlkID09PSBkaWFncmFtSWQ7XG4gIH0pIHx8IG51bGw7XG59XG5cblxuLyogPHByb2plY3QtbG9nbz4gKi9cblxuaW1wb3J0IHtcbiAgb3BlbiBhcyBvcGVuUG93ZXJlZEJ5LFxuICBCUE1OSU9fSU1HLFxuICBMSU5LX1NUWUxFUyBhcyBCUE1OSU9fTElOS19TVFlMRVNcbn0gZnJvbSAnLi91dGlsL1Bvd2VyZWRCeVV0aWwnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudFxufSBmcm9tICdtaW4tZG9tJztcblxuLyoqXG4gKiBBZGRzIHRoZSBwcm9qZWN0IGxvZ28gdG8gdGhlIGRpYWdyYW0gY29udGFpbmVyIGFzXG4gKiByZXF1aXJlZCBieSB0aGUgYnBtbi5pbyBsaWNlbnNlLlxuICpcbiAqIEBzZWUgaHR0cDovL2JwbW4uaW8vbGljZW5zZVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gKi9cbmZ1bmN0aW9uIGFkZFByb2plY3RMb2dvKGNvbnRhaW5lcikge1xuICB2YXIgaW1nID0gQlBNTklPX0lNRztcblxuICB2YXIgbGlua01hcmt1cCA9XG4gICAgJzxhIGhyZWY9XCJodHRwOi8vYnBtbi5pb1wiICcgK1xuICAgICAgICd0YXJnZXQ9XCJfYmxhbmtcIiAnICtcbiAgICAgICAnY2xhc3M9XCJianMtcG93ZXJlZC1ieVwiICcgK1xuICAgICAgICd0aXRsZT1cIlBvd2VyZWQgYnkgYnBtbi5pb1wiICcgK1xuICAgICAgICdzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAxNXB4OyByaWdodDogMTVweDsgei1pbmRleDogMTAwOyAnICsgQlBNTklPX0xJTktfU1RZTEVTICsgJ1wiPicgK1xuICAgICAgaW1nICtcbiAgICAnPC9hPic7XG5cbiAgdmFyIGxpbmtFbGVtZW50ID0gZG9taWZ5KGxpbmtNYXJrdXApO1xuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsaW5rRWxlbWVudCk7XG5cbiAgZG9tRXZlbnQuYmluZChsaW5rRWxlbWVudCwgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBvcGVuUG93ZXJlZEJ5KCk7XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9KTtcbn1cblxuLyogPC9wcm9qZWN0LWxvZ28+ICovXG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZU1vZGVsZXIgZnJvbSAnLi9CYXNlTW9kZWxlcic7XG5cbmltcG9ydCBWaWV3ZXIgZnJvbSAnLi9WaWV3ZXInO1xuaW1wb3J0IE5hdmlnYXRlZFZpZXdlciBmcm9tICcuL05hdmlnYXRlZFZpZXdlcic7XG5cbmltcG9ydCBLZXlib2FyZE1vdmVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi9rZXlib2FyZC1tb3ZlJztcbmltcG9ydCBNb3ZlQ2FudmFzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vbW92ZWNhbnZhcyc7XG5pbXBvcnQgVG91Y2hNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi90b3VjaCc7XG5pbXBvcnQgWm9vbVNjcm9sbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwnO1xuXG5pbXBvcnQgQWxpZ25FbGVtZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cyc7XG5pbXBvcnQgQXV0b1BsYWNlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvYXV0by1wbGFjZSc7XG5pbXBvcnQgQXV0b1Jlc2l6ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2F1dG8tcmVzaXplJztcbmltcG9ydCBBdXRvU2Nyb2xsTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tc2Nyb2xsJztcbmltcG9ydCBCZW5kcG9pbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMnO1xuaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdCc7XG5pbXBvcnQgQ29ubmVjdGlvblByZXZpZXdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3JztcbmltcG9ydCBDb250ZXh0UGFkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvY29udGV4dC1wYWQnO1xuaW1wb3J0IENvcHlQYXN0ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2NvcHktcGFzdGUnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUnO1xuaW1wb3J0IERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2Rpc3RyaWJ1dGUtZWxlbWVudHMnO1xuaW1wb3J0IEVkaXRvckFjdGlvbnNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucyc7XG5pbXBvcnQgR3JpZFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvZ3JpZC1zbmFwcGluZyc7XG5pbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMva2V5Ym9hcmQnO1xuaW1wb3J0IEtleWJvYXJkTW92ZVNlbGVjdGlvbk1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbic7XG5pbXBvcnQgTGFiZWxFZGl0aW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZyc7XG5pbXBvcnQgTW9kZWxpbmdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9tb2RlbGluZyc7XG5pbXBvcnQgTW92ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb3ZlJztcbmltcG9ydCBQYWxldHRlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvcGFsZXR0ZSc7XG5pbXBvcnQgUmVwbGFjZVByZXZpZXdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9yZXBsYWNlLXByZXZpZXcnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUnO1xuaW1wb3J0IFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvc25hcHBpbmcnO1xuaW1wb3J0IFNlYXJjaE1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL3NlYXJjaCc7XG5cbmltcG9ydCB7XG4gIHdyYXBGb3JDb21wYXRpYmlsaXR5XG59IGZyb20gJy4vdXRpbC9Db21wYXRpYmlsaXR5VXRpbCc7XG5cbnZhciBpbml0aWFsRGlhZ3JhbSA9XG4gICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4nICtcbiAgJzxicG1uOmRlZmluaXRpb25zIHhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICd4bWxuczpicG1uPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6YnBtbmRpPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6ZGM9XCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiICcgK1xuICAgICAgICAgICAgICAgICAgICAndGFyZ2V0TmFtZXNwYWNlPVwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW5cIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2lkPVwiRGVmaW5pdGlvbnNfMVwiPicgK1xuICAgICc8YnBtbjpwcm9jZXNzIGlkPVwiUHJvY2Vzc18xXCIgaXNFeGVjdXRhYmxlPVwiZmFsc2VcIj4nICtcbiAgICAgICc8YnBtbjpzdGFydEV2ZW50IGlkPVwiU3RhcnRFdmVudF8xXCIvPicgK1xuICAgICc8L2JwbW46cHJvY2Vzcz4nICtcbiAgICAnPGJwbW5kaTpCUE1ORGlhZ3JhbSBpZD1cIkJQTU5EaWFncmFtXzFcIj4nICtcbiAgICAgICc8YnBtbmRpOkJQTU5QbGFuZSBpZD1cIkJQTU5QbGFuZV8xXCIgYnBtbkVsZW1lbnQ9XCJQcm9jZXNzXzFcIj4nICtcbiAgICAgICAgJzxicG1uZGk6QlBNTlNoYXBlIGlkPVwiX0JQTU5TaGFwZV9TdGFydEV2ZW50XzJcIiBicG1uRWxlbWVudD1cIlN0YXJ0RXZlbnRfMVwiPicgK1xuICAgICAgICAgICc8ZGM6Qm91bmRzIGhlaWdodD1cIjM2LjBcIiB3aWR0aD1cIjM2LjBcIiB4PVwiMTczLjBcIiB5PVwiMTAyLjBcIi8+JyArXG4gICAgICAgICc8L2JwbW5kaTpCUE1OU2hhcGU+JyArXG4gICAgICAnPC9icG1uZGk6QlBNTlBsYW5lPicgK1xuICAgICc8L2JwbW5kaTpCUE1ORGlhZ3JhbT4nICtcbiAgJzwvYnBtbjpkZWZpbml0aW9ucz4nO1xuXG5cbi8qKlxuICogQSBtb2RlbGVyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKlxuICogIyMgRXh0ZW5kaW5nIHRoZSBNb2RlbGVyXG4gKlxuICogSW4gb3JkZXIgdG8gZXh0ZW5kIHRoZSB2aWV3ZXIgcGFzcyBleHRlbnNpb24gbW9kdWxlcyB0byBib290c3RyYXAgdmlhIHRoZVxuICogYGFkZGl0aW9uYWxNb2R1bGVzYCBvcHRpb24uIEFuIGV4dGVuc2lvbiBtb2R1bGUgaXMgYW4gb2JqZWN0IHRoYXQgZXhwb3Nlc1xuICogbmFtZWQgc2VydmljZXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlcGljdHMgdGhlIGludGVncmF0aW9uIG9mIGEgc2ltcGxlXG4gKiBsb2dnaW5nIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCBpbnRlcmFjdGlvbiBldmVudHM6XG4gKlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsb2dnaW5nIGNvbXBvbmVudFxuICogZnVuY3Rpb24gSW50ZXJhY3Rpb25Mb2dnZXIoZXZlbnRCdXMpIHtcbiAqICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKClcbiAqICAgfSlcbiAqIH1cbiAqXG4gKiBJbnRlcmFjdGlvbkxvZ2dlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IC8vIG1pbmlmaWNhdGlvbiBzYXZlXG4gKlxuICogLy8gZXh0ZW5zaW9uIG1vZHVsZVxuICogdmFyIGV4dGVuc2lvbk1vZHVsZSA9IHtcbiAqICAgX19pbml0X186IFsgJ2ludGVyYWN0aW9uTG9nZ2VyJyBdLFxuICogICBpbnRlcmFjdGlvbkxvZ2dlcjogWyAndHlwZScsIEludGVyYWN0aW9uTG9nZ2VyIF1cbiAqIH07XG4gKlxuICogLy8gZXh0ZW5kIHRoZSB2aWV3ZXJcbiAqIHZhciBicG1uTW9kZWxlciA9IG5ldyBNb2RlbGVyKHsgYWRkaXRpb25hbE1vZHVsZXM6IFsgZXh0ZW5zaW9uTW9kdWxlIF0gfSk7XG4gKiBicG1uTW9kZWxlci5pbXBvcnRYTUwoLi4uKTtcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyBDdXN0b21pemluZyAvIFJlcGxhY2luZyBDb21wb25lbnRzXG4gKlxuICogWW91IGNhbiByZXBsYWNlIGluZGl2aWR1YWwgZGlhZ3JhbSBjb21wb25lbnRzIGJ5IHJlZGVmaW5pbmcgdGhlbSBpbiBvdmVycmlkZSBtb2R1bGVzLlxuICogVGhpcyB3b3JrcyBmb3IgYWxsIGNvbXBvbmVudHMsIGluY2x1ZGluZyB0aG9zZSBkZWZpbmVkIGluIHRoZSBjb3JlLlxuICpcbiAqIFBhc3MgaW4gb3ZlcnJpZGUgbW9kdWxlcyB2aWEgdGhlIGBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzYCBmbGFnIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIoY29udGV4dFBhZCkge1xuICpcbiAqICAgY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuICpcbiAqICAgdGhpcy5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAqICAgICAvLyBubyBlbnRyaWVzLCBlZmZlY3RpdmVseSBkaXNhYmxlIHRoZSBjb250ZXh0IHBhZFxuICogICAgIHJldHVybiB7fTtcbiAqICAgfTtcbiAqIH1cbiAqXG4gKiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIuJGluamVjdCA9IFsgJ2NvbnRleHRQYWQnIF07XG4gKlxuICogdmFyIG92ZXJyaWRlTW9kdWxlID0ge1xuICogICBjb250ZXh0UGFkUHJvdmlkZXI6IFsgJ3R5cGUnLCBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIgXVxuICogfTtcbiAqXG4gKiB2YXIgYnBtbk1vZGVsZXIgPSBuZXcgTW9kZWxlcih7IGFkZGl0aW9uYWxNb2R1bGVzOiBbIG92ZXJyaWRlTW9kdWxlIF19KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsZXIob3B0aW9ucykge1xuICBCYXNlTW9kZWxlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhNb2RlbGVyLCBCYXNlTW9kZWxlcik7XG5cblxuTW9kZWxlci5WaWV3ZXIgPSBWaWV3ZXI7XG5Nb2RlbGVyLk5hdmlnYXRlZFZpZXdlciA9IE5hdmlnYXRlZFZpZXdlcjtcblxuLyoqXG4qIFRoZSBjcmVhdGVEaWFncmFtIHJlc3VsdC5cbipcbiogQHR5cGVkZWYge09iamVjdH0gQ3JlYXRlRGlhZ3JhbVJlc3VsdFxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiogVGhlIGNyZWF0ZURpYWdyYW0gZXJyb3IuXG4qXG4qIEB0eXBlZGVmIHtFcnJvcn0gQ3JlYXRlRGlhZ3JhbUVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGRpYWdyYW0gdG8gc3RhcnQgbW9kZWxpbmcuXG4gKlxuICogUmV0dXJucyB7UHJvbWlzZTxDcmVhdGVEaWFncmFtUmVzdWx0LCBDcmVhdGVEaWFncmFtRXJyb3I+fVxuICovXG5Nb2RlbGVyLnByb3RvdHlwZS5jcmVhdGVEaWFncmFtID0gd3JhcEZvckNvbXBhdGliaWxpdHkoZnVuY3Rpb24gY3JlYXRlRGlhZ3JhbSgpIHtcbiAgcmV0dXJuIHRoaXMuaW1wb3J0WE1MKGluaXRpYWxEaWFncmFtKTtcbn0pO1xuXG5cbk1vZGVsZXIucHJvdG90eXBlLl9pbnRlcmFjdGlvbk1vZHVsZXMgPSBbXG5cbiAgLy8gbm9uLW1vZGVsaW5nIGNvbXBvbmVudHNcbiAgS2V5Ym9hcmRNb3ZlTW9kdWxlLFxuICBNb3ZlQ2FudmFzTW9kdWxlLFxuICBUb3VjaE1vZHVsZSxcbiAgWm9vbVNjcm9sbE1vZHVsZVxuXTtcblxuTW9kZWxlci5wcm90b3R5cGUuX21vZGVsaW5nTW9kdWxlcyA9IFtcblxuICAvLyBtb2RlbGluZyBjb21wb25lbnRzXG4gIEFsaWduRWxlbWVudHNNb2R1bGUsXG4gIEF1dG9QbGFjZU1vZHVsZSxcbiAgQXV0b1Njcm9sbE1vZHVsZSxcbiAgQXV0b1Jlc2l6ZU1vZHVsZSxcbiAgQmVuZHBvaW50c01vZHVsZSxcbiAgQ29ubmVjdE1vZHVsZSxcbiAgQ29ubmVjdGlvblByZXZpZXdNb2R1bGUsXG4gIENvbnRleHRQYWRNb2R1bGUsXG4gIENvcHlQYXN0ZU1vZHVsZSxcbiAgQ3JlYXRlTW9kdWxlLFxuICBEaXN0cmlidXRlRWxlbWVudHNNb2R1bGUsXG4gIEVkaXRvckFjdGlvbnNNb2R1bGUsXG4gIEdyaWRTbmFwcGluZ01vZHVsZSxcbiAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gIEtleWJvYXJkTW9kdWxlLFxuICBLZXlib2FyZE1vdmVTZWxlY3Rpb25Nb2R1bGUsXG4gIExhYmVsRWRpdGluZ01vZHVsZSxcbiAgTW9kZWxpbmdNb2R1bGUsXG4gIE1vdmVNb2R1bGUsXG4gIFBhbGV0dGVNb2R1bGUsXG4gIFJlcGxhY2VQcmV2aWV3TW9kdWxlLFxuICBSZXNpemVNb2R1bGUsXG4gIFNuYXBwaW5nTW9kdWxlLFxuICBTZWFyY2hNb2R1bGVcbl07XG5cblxuLy8gbW9kdWxlcyB0aGUgbW9kZWxlciBpcyBjb21wb3NlZCBvZlxuLy9cbi8vIC0gdmlld2VyIG1vZHVsZXNcbi8vIC0gaW50ZXJhY3Rpb24gbW9kdWxlc1xuLy8gLSBtb2RlbGluZyBtb2R1bGVzXG5cbk1vZGVsZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW10uY29uY2F0KFxuICBWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzLFxuICBNb2RlbGVyLnByb3RvdHlwZS5faW50ZXJhY3Rpb25Nb2R1bGVzLFxuICBNb2RlbGVyLnByb3RvdHlwZS5fbW9kZWxpbmdNb2R1bGVzXG4pO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IFZpZXdlciBmcm9tICcuL1ZpZXdlcic7XG5cbmltcG9ydCBLZXlib2FyZE1vdmVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi9rZXlib2FyZC1tb3ZlJztcbmltcG9ydCBNb3ZlQ2FudmFzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vbW92ZWNhbnZhcyc7XG5pbXBvcnQgWm9vbVNjcm9sbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwnO1xuXG5cbi8qKlxuICogQSB2aWV3ZXIgdGhhdCBpbmNsdWRlcyBtb3VzZSBuYXZpZ2F0aW9uIGZhY2lsaXRpZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOYXZpZ2F0ZWRWaWV3ZXIob3B0aW9ucykge1xuICBWaWV3ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoTmF2aWdhdGVkVmlld2VyLCBWaWV3ZXIpO1xuXG5cbk5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX25hdmlnYXRpb25Nb2R1bGVzID0gW1xuICBLZXlib2FyZE1vdmVNb2R1bGUsXG4gIE1vdmVDYW52YXNNb2R1bGUsXG4gIFpvb21TY3JvbGxNb2R1bGVcbl07XG5cbk5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXS5jb25jYXQoXG4gIFZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMsXG4gIE5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX25hdmlnYXRpb25Nb2R1bGVzXG4pOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb3JlTW9kdWxlIGZyb20gJy4vY29yZSc7XG5pbXBvcnQgVHJhbnNsYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcbmltcG9ydCBPdmVybGF5c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cyc7XG5cbmltcG9ydCBCYXNlVmlld2VyIGZyb20gJy4vQmFzZVZpZXdlcic7XG5cblxuLyoqXG4gKiBBIHZpZXdlciBmb3IgQlBNTiAyLjAgZGlhZ3JhbXMuXG4gKlxuICogSGF2ZSBhIGxvb2sgYXQge0BsaW5rIE5hdmlnYXRlZFZpZXdlcn0gb3Ige0BsaW5rIE1vZGVsZXJ9IGZvciBidW5kbGVzIHRoYXQgaW5jbHVkZVxuICogYWRkaXRpb25hbCBmZWF0dXJlcy5cbiAqXG4gKlxuICogIyMgRXh0ZW5kaW5nIHRoZSBWaWV3ZXJcbiAqXG4gKiBJbiBvcmRlciB0byBleHRlbmQgdGhlIHZpZXdlciBwYXNzIGV4dGVuc2lvbiBtb2R1bGVzIHRvIGJvb3RzdHJhcCB2aWEgdGhlXG4gKiBgYWRkaXRpb25hbE1vZHVsZXNgIG9wdGlvbi4gQW4gZXh0ZW5zaW9uIG1vZHVsZSBpcyBhbiBvYmplY3QgdGhhdCBleHBvc2VzXG4gKiBuYW1lZCBzZXJ2aWNlcy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVwaWN0cyB0aGUgaW50ZWdyYXRpb24gb2YgYSBzaW1wbGVcbiAqIGxvZ2dpbmcgY29tcG9uZW50IHRoYXQgaW50ZWdyYXRlcyB3aXRoIGludGVyYWN0aW9uIGV2ZW50czpcbiAqXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICpcbiAqIC8vIGxvZ2dpbmcgY29tcG9uZW50XG4gKiBmdW5jdGlvbiBJbnRlcmFjdGlvbkxvZ2dlcihldmVudEJ1cykge1xuICogICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coKVxuICogICB9KVxuICogfVxuICpcbiAqIEludGVyYWN0aW9uTG9nZ2VyLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTsgLy8gbWluaWZpY2F0aW9uIHNhdmVcbiAqXG4gKiAvLyBleHRlbnNpb24gbW9kdWxlXG4gKiB2YXIgZXh0ZW5zaW9uTW9kdWxlID0ge1xuICogICBfX2luaXRfXzogWyAnaW50ZXJhY3Rpb25Mb2dnZXInIF0sXG4gKiAgIGludGVyYWN0aW9uTG9nZ2VyOiBbICd0eXBlJywgSW50ZXJhY3Rpb25Mb2dnZXIgXVxuICogfTtcbiAqXG4gKiAvLyBleHRlbmQgdGhlIHZpZXdlclxuICogdmFyIGJwbW5WaWV3ZXIgPSBuZXcgVmlld2VyKHsgYWRkaXRpb25hbE1vZHVsZXM6IFsgZXh0ZW5zaW9uTW9kdWxlIF0gfSk7XG4gKiBicG1uVmlld2VyLmltcG9ydFhNTCguLi4pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gdGhlIGNvbnRhaW5lciB0byByZW5kZXIgdGhlIHZpZXdlciBpbiwgZGVmYXVsdHMgdG8gYm9keS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMud2lkdGhdIHRoZSB3aWR0aCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gdGhlIGhlaWdodCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMubW9kZGxlRXh0ZW5zaW9uc10gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIHByb3ZpZGVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5tb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMuYWRkaXRpb25hbE1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIHVzZSB3aXRoIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVmlld2VyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhWaWV3ZXIsIEJhc2VWaWV3ZXIpO1xuXG4vLyBtb2R1bGVzIHRoZSB2aWV3ZXIgaXMgY29tcG9zZWQgb2ZcblZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXG4gIENvcmVNb2R1bGUsXG4gIFRyYW5zbGF0ZU1vZHVsZSxcbiAgU2VsZWN0aW9uTW9kdWxlLFxuICBPdmVybGF5c01vZHVsZVxuXTtcblxuLy8gZGVmYXVsdCBtb2RkbGUgZXh0ZW5zaW9ucyB0aGUgdmlld2VyIGlzIGNvbXBvc2VkIG9mXG5WaWV3ZXIucHJvdG90eXBlLl9tb2RkbGVFeHRlbnNpb25zID0ge307IiwiaW1wb3J0IERyYXdNb2R1bGUgZnJvbSAnLi4vZHJhdyc7XG5pbXBvcnQgSW1wb3J0TW9kdWxlIGZyb20gJy4uL2ltcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmF3TW9kdWxlLFxuICAgIEltcG9ydE1vZHVsZVxuICBdXG59OyIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgY29tcG9uZW50c1RvUGF0aFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwnO1xuXG5cbi8vIGVsZW1lbnQgdXRpbHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENoZWNrcyBpZiBldmVudERlZmluaXRpb24gb2YgdGhlIGdpdmVuIGVsZW1lbnQgbWF0Y2hlcyB3aXRoIHNlbWFudGljIHR5cGUuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbGVtZW50IGlzIG9mIHRoZSBnaXZlbiBzZW1hbnRpYyB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVkRXZlbnQoZXZlbnQsIGV2ZW50RGVmaW5pdGlvblR5cGUsIGZpbHRlcikge1xuXG4gIGZ1bmN0aW9uIG1hdGNoZXMoZGVmaW5pdGlvbiwgZmlsdGVyKSB7XG4gICAgcmV0dXJuIGV2ZXJ5KGZpbHRlciwgZnVuY3Rpb24odmFsLCBrZXkpIHtcblxuICAgICAgLy8gd2Ugd2FudCBhID09IGNvbnZlcnNpb24gaGVyZSwgdG8gYmUgYWJsZSB0byBjYXRjaFxuICAgICAgLy8gdW5kZWZpbmVkID09IGZhbHNlIGFuZCBmcmllbmRzXG4gICAgICAvKiBqc2hpbnQgLVcxMTYgKi9cbiAgICAgIHJldHVybiBkZWZpbml0aW9uW2tleV0gPT0gdmFsO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNvbWUoZXZlbnQuZXZlbnREZWZpbml0aW9ucywgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBkZWZpbml0aW9uLiR0eXBlID09PSBldmVudERlZmluaXRpb25UeXBlICYmIG1hdGNoZXMoZXZlbnQsIGZpbHRlcik7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaHJvd0V2ZW50KGV2ZW50KSB7XG4gIHJldHVybiAoZXZlbnQuJHR5cGUgPT09ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKSB8fCAoZXZlbnQuJHR5cGUgPT09ICdicG1uOkVuZEV2ZW50Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZGF0YU9iamVjdCA9IGVsZW1lbnQuZGF0YU9iamVjdFJlZjtcblxuICByZXR1cm4gZWxlbWVudC5pc0NvbGxlY3Rpb24gfHwgKGRhdGFPYmplY3QgJiYgZGF0YU9iamVjdC5pc0NvbGxlY3Rpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGkoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5idXNpbmVzc09iamVjdC5kaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbWFudGljKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG59XG5cblxuLy8gY29sb3IgYWNjZXNzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0Q29sb3IpIHtcbiAgcmV0dXJuIGdldERpKGVsZW1lbnQpLmdldCgnYmlvYzpmaWxsJykgfHwgZGVmYXVsdENvbG9yIHx8ICd3aGl0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0Q29sb3IpIHtcbiAgcmV0dXJuIGdldERpKGVsZW1lbnQpLmdldCgnYmlvYzpzdHJva2UnKSB8fCBkZWZhdWx0Q29sb3IgfHwgJ2JsYWNrJztcbn1cblxuXG4vLyBjcm9wcGluZyBwYXRoIGN1c3RvbWl6YXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmNsZVBhdGgoc2hhcGUpIHtcblxuICB2YXIgY3ggPSBzaGFwZS54ICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgY3kgPSBzaGFwZS55ICsgc2hhcGUuaGVpZ2h0IC8gMixcbiAgICAgIHJhZGl1cyA9IHNoYXBlLndpZHRoIC8gMjtcblxuICB2YXIgY2lyY2xlUGF0aCA9IFtcbiAgICBbJ00nLCBjeCwgY3ldLFxuICAgIFsnbScsIDAsIC1yYWRpdXNdLFxuICAgIFsnYScsIHJhZGl1cywgcmFkaXVzLCAwLCAxLCAxLCAwLCAyICogcmFkaXVzXSxcbiAgICBbJ2EnLCByYWRpdXMsIHJhZGl1cywgMCwgMSwgMSwgMCwgLTIgKiByYWRpdXNdLFxuICAgIFsneiddXG4gIF07XG5cbiAgcmV0dXJuIGNvbXBvbmVudHNUb1BhdGgoY2lyY2xlUGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZFJlY3RQYXRoKHNoYXBlLCBib3JkZXJSYWRpdXMpIHtcblxuICB2YXIgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIHdpZHRoID0gc2hhcGUud2lkdGgsXG4gICAgICBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG5cbiAgdmFyIHJvdW5kUmVjdFBhdGggPSBbXG4gICAgWydNJywgeCArIGJvcmRlclJhZGl1cywgeV0sXG4gICAgWydsJywgd2lkdGggLSBib3JkZXJSYWRpdXMgKiAyLCAwXSxcbiAgICBbJ2EnLCBib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cywgMCwgMCwgMSwgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIDAsIGhlaWdodCAtIGJvcmRlclJhZGl1cyAqIDJdLFxuICAgIFsnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCAtYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIGJvcmRlclJhZGl1cyAqIDIgLSB3aWR0aCwgMF0sXG4gICAgWydhJywgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMsIDAsIDAsIDEsIC1ib3JkZXJSYWRpdXMsIC1ib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIDAsIGJvcmRlclJhZGl1cyAqIDIgLSBoZWlnaHRdLFxuICAgIFsnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCBib3JkZXJSYWRpdXMsIC1ib3JkZXJSYWRpdXNdLFxuICAgIFsneiddXG4gIF07XG5cbiAgcmV0dXJuIGNvbXBvbmVudHNUb1BhdGgocm91bmRSZWN0UGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaWFtb25kUGF0aChzaGFwZSkge1xuXG4gIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0LFxuICAgICAgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIGhhbGZXaWR0aCA9IHdpZHRoIC8gMixcbiAgICAgIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuXG4gIHZhciBkaWFtb25kUGF0aCA9IFtcbiAgICBbJ00nLCB4ICsgaGFsZldpZHRoLCB5XSxcbiAgICBbJ2wnLCBoYWxmV2lkdGgsIGhhbGZIZWlnaHRdLFxuICAgIFsnbCcsIC1oYWxmV2lkdGgsIGhhbGZIZWlnaHRdLFxuICAgIFsnbCcsIC1oYWxmV2lkdGgsIC1oYWxmSGVpZ2h0XSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKGRpYW1vbmRQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY3RQYXRoKHNoYXBlKSB7XG4gIHZhciB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcblxuICB2YXIgcmVjdFBhdGggPSBbXG4gICAgWydNJywgeCwgeV0sXG4gICAgWydsJywgd2lkdGgsIDBdLFxuICAgIFsnbCcsIDAsIGhlaWdodF0sXG4gICAgWydsJywgLXdpZHRoLCAwXSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKHJlY3RQYXRoKTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IEJhc2VSZW5kZXJlciBmcm9tICdkaWFncmFtLWpzL2xpYi9kcmF3L0Jhc2VSZW5kZXJlcic7XG5cbmltcG9ydCB7XG4gIGlzRXhwYW5kZWQsXG4gIGlzRXZlbnRTdWJQcm9jZXNzXG59IGZyb20gJy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGluZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1R5cGVkRXZlbnQsXG4gIGlzVGhyb3dFdmVudCxcbiAgaXNDb2xsZWN0aW9uLFxuICBnZXREaSxcbiAgZ2V0U2VtYW50aWMsXG4gIGdldENpcmNsZVBhdGgsXG4gIGdldFJvdW5kUmVjdFBhdGgsXG4gIGdldERpYW1vbmRQYXRoLFxuICBnZXRSZWN0UGF0aCxcbiAgZ2V0RmlsbENvbG9yLFxuICBnZXRTdHJva2VDb2xvclxufSBmcm9tICcuL0JwbW5SZW5kZXJVdGlsJztcblxuaW1wb3J0IHtcbiAgcXVlcnkgYXMgZG9tUXVlcnlcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgcm90YXRlLFxuICB0cmFuc2Zvcm0sXG4gIHRyYW5zbGF0ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5pbXBvcnQgSWRzIGZyb20gJ2lkcyc7XG5cbnZhciBSRU5ERVJFUl9JRFMgPSBuZXcgSWRzKCk7XG5cbnZhciBUQVNLX0JPUkRFUl9SQURJVVMgPSAxMDtcbnZhciBJTk5FUl9PVVRFUl9ESVNUID0gMztcblxudmFyIERFRkFVTFRfRklMTF9PUEFDSVRZID0gLjk1LFxuICAgIEhJR0hfRklMTF9PUEFDSVRZID0gLjM1O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5SZW5kZXJlcihcbiAgICBjb25maWcsIGV2ZW50QnVzLCBzdHlsZXMsIHBhdGhNYXAsXG4gICAgY2FudmFzLCB0ZXh0UmVuZGVyZXIsIHByaW9yaXR5KSB7XG5cbiAgQmFzZVJlbmRlcmVyLmNhbGwodGhpcywgZXZlbnRCdXMsIHByaW9yaXR5KTtcblxuICB2YXIgZGVmYXVsdEZpbGxDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdEZpbGxDb2xvcixcbiAgICAgIGRlZmF1bHRTdHJva2VDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdFN0cm9rZUNvbG9yO1xuXG4gIHZhciByZW5kZXJlcklkID0gUkVOREVSRVJfSURTLm5leHQoKTtcblxuICB2YXIgbWFya2VycyA9IHt9O1xuXG4gIHZhciBjb21wdXRlU3R5bGUgPSBzdHlsZXMuY29tcHV0ZVN0eWxlO1xuXG4gIGZ1bmN0aW9uIGFkZE1hcmtlcihpZCwgb3B0aW9ucykge1xuICAgIHZhciBhdHRycyA9IGFzc2lnbih7XG4gICAgICBmaWxsOiAnYmxhY2snLFxuICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnbm9uZSdcbiAgICB9LCBvcHRpb25zLmF0dHJzKTtcblxuICAgIHZhciByZWYgPSBvcHRpb25zLnJlZiB8fCB7IHg6IDAsIHk6IDAgfTtcblxuICAgIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwgMTtcblxuICAgIC8vIGZpeCBmb3Igc2FmYXJpIC8gY2hyb21lIC8gZmlyZWZveCBidWcgbm90IGNvcnJlY3RseVxuICAgIC8vIHJlc2V0dGluZyBzdHJva2UgZGFzaCBhcnJheVxuICAgIGlmIChhdHRycy5zdHJva2VEYXNoYXJyYXkgPT09ICdub25lJykge1xuICAgICAgYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID0gWzEwMDAwLCAxXTtcbiAgICB9XG5cbiAgICB2YXIgbWFya2VyID0gc3ZnQ3JlYXRlKCdtYXJrZXInKTtcblxuICAgIHN2Z0F0dHIob3B0aW9ucy5lbGVtZW50LCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQobWFya2VyLCBvcHRpb25zLmVsZW1lbnQpO1xuXG4gICAgc3ZnQXR0cihtYXJrZXIsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHZpZXdCb3g6ICcwIDAgMjAgMjAnLFxuICAgICAgcmVmWDogcmVmLngsXG4gICAgICByZWZZOiByZWYueSxcbiAgICAgIG1hcmtlcldpZHRoOiAyMCAqIHNjYWxlLFxuICAgICAgbWFya2VySGVpZ2h0OiAyMCAqIHNjYWxlLFxuICAgICAgb3JpZW50OiAnYXV0bydcbiAgICB9KTtcblxuICAgIHZhciBkZWZzID0gZG9tUXVlcnkoJ2RlZnMnLCBjYW52YXMuX3N2Zyk7XG5cbiAgICBpZiAoIWRlZnMpIHtcbiAgICAgIGRlZnMgPSBzdmdDcmVhdGUoJ2RlZnMnKTtcblxuICAgICAgc3ZnQXBwZW5kKGNhbnZhcy5fc3ZnLCBkZWZzKTtcbiAgICB9XG5cbiAgICBzdmdBcHBlbmQoZGVmcywgbWFya2VyKTtcblxuICAgIG1hcmtlcnNbaWRdID0gbWFya2VyO1xuICB9XG5cbiAgZnVuY3Rpb24gY29sb3JFc2NhcGUoc3RyKSB7XG5cbiAgICAvLyBvbmx5IGFsbG93IGNoYXJhY3RlcnMgYW5kIG51bWJlcnNcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teMC05YS16QS16XSsvZywgJ18nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtlcih0eXBlLCBmaWxsLCBzdHJva2UpIHtcbiAgICB2YXIgaWQgPSB0eXBlICsgJy0nICsgY29sb3JFc2NhcGUoZmlsbCkgKyAnLScgKyBjb2xvckVzY2FwZShzdHJva2UpICsgJy0nICsgcmVuZGVyZXJJZDtcblxuICAgIGlmICghbWFya2Vyc1tpZF0pIHtcbiAgICAgIGNyZWF0ZU1hcmtlcihpZCwgdHlwZSwgZmlsbCwgc3Ryb2tlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VybCgjJyArIGlkICsgJyknO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTWFya2VyKGlkLCB0eXBlLCBmaWxsLCBzdHJva2UpIHtcblxuICAgIGlmICh0eXBlID09PSAnc2VxdWVuY2VmbG93LWVuZCcpIHtcbiAgICAgIHZhciBzZXF1ZW5jZWZsb3dFbmQgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIoc2VxdWVuY2VmbG93RW5kLCB7IGQ6ICdNIDEgNSBMIDExIDEwIEwgMSAxNSBaJyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IHNlcXVlbmNlZmxvd0VuZCxcbiAgICAgICAgcmVmOiB7IHg6IDExLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ21lc3NhZ2VmbG93LXN0YXJ0Jykge1xuICAgICAgdmFyIG1lc3NhZ2VmbG93U3RhcnQgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICAgICAgc3ZnQXR0cihtZXNzYWdlZmxvd1N0YXJ0LCB7IGN4OiA2LCBjeTogNiwgcjogMy41IH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dTdGFydCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogeyB4OiA2LCB5OiA2IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnbWVzc2FnZWZsb3ctZW5kJykge1xuICAgICAgdmFyIG1lc3NhZ2VmbG93RW5kID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKG1lc3NhZ2VmbG93RW5kLCB7IGQ6ICdtIDEgNSBsIDAgLTMgbCA3IDMgbCAtNyAzIHonIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dFbmQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2VMaW5lY2FwOiAnYnV0dCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDguNSwgeTogNSB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2Fzc29jaWF0aW9uLXN0YXJ0Jykge1xuICAgICAgdmFyIGFzc29jaWF0aW9uU3RhcnQgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIoYXNzb2NpYXRpb25TdGFydCwgeyBkOiAnTSAxMSA1IEwgMSAxMCBMIDExIDE1JyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IGFzc29jaWF0aW9uU3RhcnQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLjVcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDEsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXNzb2NpYXRpb24tZW5kJykge1xuICAgICAgdmFyIGFzc29jaWF0aW9uRW5kID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKGFzc29jaWF0aW9uRW5kLCB7IGQ6ICdNIDEgNSBMIDExIDEwIEwgMSAxNScgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBhc3NvY2lhdGlvbkVuZCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2UsXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEuNVxuICAgICAgICB9LFxuICAgICAgICByZWY6IHsgeDogMTIsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnY29uZGl0aW9uYWwtZmxvdy1tYXJrZXInKSB7XG4gICAgICB2YXIgY29uZGl0aW9uYWxmbG93TWFya2VyID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKGNvbmRpdGlvbmFsZmxvd01hcmtlciwgeyBkOiAnTSAwIDEwIEwgOCA2IEwgMTYgMTAgTCA4IDE0IFonIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogY29uZGl0aW9uYWxmbG93TWFya2VyLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IC0xLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2NvbmRpdGlvbmFsLWRlZmF1bHQtZmxvdy1tYXJrZXInKSB7XG4gICAgICB2YXIgY29uZGl0aW9uYWxkZWZhdWx0Zmxvd01hcmtlciA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihjb25kaXRpb25hbGRlZmF1bHRmbG93TWFya2VyLCB7IGQ6ICdNIDYgNCBMIDEwIDE2JyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IGNvbmRpdGlvbmFsZGVmYXVsdGZsb3dNYXJrZXIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDAsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdDaXJjbGUocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCBvZmZzZXQsIGF0dHJzKSB7XG5cbiAgICBpZiAoaXNPYmplY3Qob2Zmc2V0KSkge1xuICAgICAgYXR0cnMgPSBvZmZzZXQ7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgYXR0cnMgPSBjb21wdXRlU3R5bGUoYXR0cnMsIHtcbiAgICAgIHN0cm9rZTogJ2JsYWNrJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgZmlsbDogJ3doaXRlJ1xuICAgIH0pO1xuXG4gICAgaWYgKGF0dHJzLmZpbGwgPT09ICdub25lJykge1xuICAgICAgZGVsZXRlIGF0dHJzLmZpbGxPcGFjaXR5O1xuICAgIH1cblxuICAgIHZhciBjeCA9IHdpZHRoIC8gMixcbiAgICAgICAgY3kgPSBoZWlnaHQgLyAyO1xuXG4gICAgdmFyIGNpcmNsZSA9IHN2Z0NyZWF0ZSgnY2lyY2xlJyk7XG4gICAgc3ZnQXR0cihjaXJjbGUsIHtcbiAgICAgIGN4OiBjeCxcbiAgICAgIGN5OiBjeSxcbiAgICAgIHI6IE1hdGgucm91bmQoKHdpZHRoICsgaGVpZ2h0KSAvIDQgLSBvZmZzZXQpXG4gICAgfSk7XG4gICAgc3ZnQXR0cihjaXJjbGUsIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIGNpcmNsZSk7XG5cbiAgICByZXR1cm4gY2lyY2xlO1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd1JlY3QocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCByLCBvZmZzZXQsIGF0dHJzKSB7XG5cbiAgICBpZiAoaXNPYmplY3Qob2Zmc2V0KSkge1xuICAgICAgYXR0cnMgPSBvZmZzZXQ7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgYXR0cnMgPSBjb21wdXRlU3R5bGUoYXR0cnMsIHtcbiAgICAgIHN0cm9rZTogJ2JsYWNrJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgZmlsbDogJ3doaXRlJ1xuICAgIH0pO1xuXG4gICAgdmFyIHJlY3QgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgICBzdmdBdHRyKHJlY3QsIHtcbiAgICAgIHg6IG9mZnNldCxcbiAgICAgIHk6IG9mZnNldCxcbiAgICAgIHdpZHRoOiB3aWR0aCAtIG9mZnNldCAqIDIsXG4gICAgICBoZWlnaHQ6IGhlaWdodCAtIG9mZnNldCAqIDIsXG4gICAgICByeDogcixcbiAgICAgIHJ5OiByXG4gICAgfSk7XG4gICAgc3ZnQXR0cihyZWN0LCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCByZWN0KTtcblxuICAgIHJldHVybiByZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd0RpYW1vbmQocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCBhdHRycykge1xuXG4gICAgdmFyIHhfMiA9IHdpZHRoIC8gMjtcbiAgICB2YXIgeV8yID0gaGVpZ2h0IC8gMjtcblxuICAgIHZhciBwb2ludHMgPSBbeyB4OiB4XzIsIHk6IDAgfSwgeyB4OiB3aWR0aCwgeTogeV8yIH0sIHsgeDogeF8yLCB5OiBoZWlnaHQgfSwgeyB4OiAwLCB5OiB5XzIgfV07XG5cbiAgICB2YXIgcG9pbnRzU3RyaW5nID0gcG9pbnRzLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgICAgcmV0dXJuIHBvaW50LnggKyAnLCcgKyBwb2ludC55O1xuICAgIH0pLmpvaW4oJyAnKTtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICB9KTtcblxuICAgIHZhciBwb2x5Z29uID0gc3ZnQ3JlYXRlKCdwb2x5Z29uJyk7XG4gICAgc3ZnQXR0cihwb2x5Z29uLCB7XG4gICAgICBwb2ludHM6IHBvaW50c1N0cmluZ1xuICAgIH0pO1xuICAgIHN2Z0F0dHIocG9seWdvbiwgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgcG9seWdvbik7XG5cbiAgICByZXR1cm4gcG9seWdvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdMaW5lKHBhcmVudEdmeCwgd2F5cG9pbnRzLCBhdHRycykge1xuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCBbICduby1maWxsJyBdLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICdub25lJ1xuICAgIH0pO1xuXG4gICAgdmFyIGxpbmUgPSBjcmVhdGVMaW5lKHdheXBvaW50cywgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgbGluZSk7XG5cbiAgICByZXR1cm4gbGluZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdQYXRoKHBhcmVudEdmeCwgZCwgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCBbICduby1maWxsJyBdLCB7XG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIHN0cm9rZTogJ2JsYWNrJ1xuICAgIH0pO1xuXG4gICAgdmFyIHBhdGggPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICBzdmdBdHRyKHBhdGgsIHsgZDogZCB9KTtcbiAgICBzdmdBdHRyKHBhdGgsIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHBhdGgpO1xuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3TWFya2VyKHR5cGUsIHBhcmVudEdmeCwgcGF0aCwgYXR0cnMpIHtcbiAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoLCBhc3NpZ24oeyAnZGF0YS1tYXJrZXInOiB0eXBlIH0sIGF0dHJzKSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcyh0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGhhbmRsZXJzW3R5cGVdKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcmVyKHR5cGUpIHtcbiAgICByZXR1cm4gaGFuZGxlcnNbdHlwZV07XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcbiAgICB2YXIgaXNUaHJvd2luZyA9IGlzVGhyb3dFdmVudChldmVudCk7XG5cbiAgICBpZiAoZXZlbnQuZXZlbnREZWZpbml0aW9ucyAmJiBldmVudC5ldmVudERlZmluaXRpb25zLmxlbmd0aD4xKSB7XG4gICAgICBpZiAoZXZlbnQucGFyYWxsZWxNdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46UGFyYWxsZWxNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOk11bHRpcGxlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgbGFiZWwsIG9wdGlvbnMpIHtcblxuICAgIG9wdGlvbnMgPSBhc3NpZ24oe1xuICAgICAgc2l6ZToge1xuICAgICAgICB3aWR0aDogMTAwXG4gICAgICB9XG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICB2YXIgdGV4dCA9IHRleHRSZW5kZXJlci5jcmVhdGVUZXh0KGxhYmVsIHx8ICcnLCBvcHRpb25zKTtcblxuICAgIHN2Z0NsYXNzZXModGV4dCkuYWRkKCdkanMtbGFiZWwnKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHRleHQpO1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFbWJlZGRlZExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCwgYWxpZ24pIHtcbiAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgIHJldHVybiByZW5kZXJMYWJlbChwYXJlbnRHZngsIHNlbWFudGljLm5hbWUsIHtcbiAgICAgIGJveDogZWxlbWVudCxcbiAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgIHBhZGRpbmc6IDUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFeHRlcm5hbExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgdmFyIGJveCA9IHtcbiAgICAgIHdpZHRoOiA5MCxcbiAgICAgIGhlaWdodDogMzAsXG4gICAgICB4OiBlbGVtZW50LndpZHRoIC8gMiArIGVsZW1lbnQueCxcbiAgICAgIHk6IGVsZW1lbnQuaGVpZ2h0IC8gMiArIGVsZW1lbnQueVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBnZXRMYWJlbChlbGVtZW50KSwge1xuICAgICAgYm94OiBib3gsXG4gICAgICBmaXRCb3g6IHRydWUsXG4gICAgICBzdHlsZTogYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsU3R5bGUoKSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyTGFuZUxhYmVsKHBhcmVudEdmeCwgdGV4dCwgZWxlbWVudCkge1xuICAgIHZhciB0ZXh0Qm94ID0gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCB7XG4gICAgICBib3g6IHtcbiAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9LFxuICAgICAgYWxpZ246ICdjZW50ZXItbWlkZGxlJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB0b3AgPSAtMSAqIGVsZW1lbnQuaGVpZ2h0O1xuXG4gICAgdHJhbnNmb3JtKHRleHRCb3gsIDAsIC10b3AsIDI3MCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQYXRoRnJvbUNvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICAgIHZhciBwYXRoRGF0YSA9ICdtICAnICsgd2F5cG9pbnRzWzBdLnggKyAnLCcgKyB3YXlwb2ludHNbMF0ueTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdheXBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGF0aERhdGEgKz0gJ0wnICsgd2F5cG9pbnRzW2ldLnggKyAnLCcgKyB3YXlwb2ludHNbaV0ueSArICcgJztcbiAgICB9XG4gICAgcmV0dXJuIHBhdGhEYXRhO1xuICB9XG5cbiAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycyA9IHtcbiAgICAnYnBtbjpFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcblxuICAgICAgaWYgKCEoJ2ZpbGxPcGFjaXR5JyBpbiBhdHRycykpIHtcbiAgICAgICAgYXR0cnMuZmlsbE9wYWNpdHkgPSBERUZBVUxUX0ZJTExfT1BBQ0lUWTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgYXR0cnMpO1xuICAgIH0sXG4gICAgJ2JwbW46U3RhcnRFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIGlmICghc2VtYW50aWMuaXNJbnRlcnJ1cHRpbmcpIHtcbiAgICAgICAgYXR0cnMgPSB7XG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnNicsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBjaXJjbGUgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KTtcblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfTUVTU0FHRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjksXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMzUsXG4gICAgICAgICAgbXk6IDAuMzE1XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpO1xuICAgICAgdmFyIHN0cm9rZSA9IGlzVGhyb3dpbmcgPyBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcikgOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICB2YXIgbWVzc2FnZVBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlUGF0aDtcbiAgICB9LFxuICAgICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgY2lyY2xlID0gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLjIgKiBlbGVtZW50LmhlaWdodCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX1RJTUVSX1dIJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC43NSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICBteTogMC41XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAnc3F1YXJlJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDEyOyBpKyspIHtcblxuICAgICAgICB2YXIgbGluZVBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9USU1FUl9MSU5FJywge1xuICAgICAgICAgIHhTY2FsZUZhY3RvcjogMC43NSxcbiAgICAgICAgICB5U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICAgIG15OiAwLjVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQud2lkdGggLyAyO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQgLyAyO1xuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgbGluZVBhdGhEYXRhLCB7XG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3NxdWFyZScsXG4gICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlKCcgKyAoaSAqIDMwKSArICcsJyArIGhlaWdodCArICcsJyArIHdpZHRoICsgJyknLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0VTQ0FMQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9DT05ESVRJT05BTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICBteTogMC4yMjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0xJTksnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjU3LFxuICAgICAgICAgIG15OiAwLjI2M1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9FUlJPUicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjIsXG4gICAgICAgICAgbXk6IDAuNzIyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9DQU5DRUxfNDUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4wLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMCxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC42MzgsXG4gICAgICAgICAgbXk6IC0wLjA1NVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHZhciBwYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJvdGF0ZShwYXRoLCA0NSk7XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfQ09NUEVOU0FUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMixcbiAgICAgICAgICBteTogMC41XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9TSUdOQUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC41LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfTVVMVElQTEUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMjIsXG4gICAgICAgICAgbXk6IDAuMzZcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbFxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpQYXJhbGxlbE11bHRpcGxlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9QQVJBTExFTF9NVUxUSVBMRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjIsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4yLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ1OCxcbiAgICAgICAgICBteTogMC4xOTRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpFbmRFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGNpcmNsZSA9IHJlbmRlcmVyKCdicG1uOkV2ZW50JykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJlbmRlckV2ZW50Q29udGVudChlbGVtZW50LCBwYXJlbnRHZngsIHRydWUpO1xuXG4gICAgICByZXR1cm4gY2lyY2xlO1xuICAgIH0sXG4gICAgJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgY2lyY2xlID0gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCA4LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY2lyY2xlO1xuICAgIH0sXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlRXZlbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBvdXRlciA9IHJlbmRlcmVyKCdicG1uOkV2ZW50JykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIC8qIGlubmVyICovXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIElOTkVSX09VVEVSX0RJU1QsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCAnbm9uZScpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KTtcblxuICAgICAgcmV0dXJuIG91dGVyO1xuICAgIH0sXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCc6IGFzKCdicG1uOkludGVybWVkaWF0ZUV2ZW50JyksXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCc6IGFzKCdicG1uOkludGVybWVkaWF0ZUV2ZW50JyksXG5cbiAgICAnYnBtbjpBY3Rpdml0eSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcblxuICAgICAgYXR0cnMgPSBhdHRycyB8fCB7fTtcblxuICAgICAgaWYgKCEoJ2ZpbGxPcGFjaXR5JyBpbiBhdHRycykpIHtcbiAgICAgICAgYXR0cnMuZmlsbE9wYWNpdHkgPSBERUZBVUxUX0ZJTExfT1BBQ0lUWTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIFRBU0tfQk9SREVSX1JBRElVUywgYXR0cnMpO1xuICAgIH0sXG5cbiAgICAnYnBtbjpUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVjdCA9IHJlbmRlcmVyKCdicG1uOkFjdGl2aXR5JykocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCAnY2VudGVyLW1pZGRsZScpO1xuICAgICAgYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpTZXJ2aWNlVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhQkcgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRVJWSUNFJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxMixcbiAgICAgICAgICB5OiAxOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSBiZyAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhQkcsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGxQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NFUlZJQ0VfRklMTCcsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTcuMixcbiAgICAgICAgICB5OiAxOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSBmaWxsICovIGRyYXdQYXRoKHBhcmVudEdmeCwgZmlsbFBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRVJWSUNFJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxNyxcbiAgICAgICAgICB5OiAyMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46VXNlclRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciB4ID0gMTU7XG4gICAgICB2YXIgeSA9IDEyO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9VU0VSXzEnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogdXNlciBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEyID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8yJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHVzZXIyIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YTIsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEzID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8zJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHVzZXIzIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YTMsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpNYW51YWxUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgdGFzayA9IHJlbmRlcmVyKCdicG1uOlRhc2snKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9NQU5VQUwnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDE3LFxuICAgICAgICAgIHk6IDE1XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBtYW51YWwgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjUsIC8vIDAuMjUsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpTZW5kVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VORCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiAyMSxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiAxNCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yODUsXG4gICAgICAgICAgbXk6IDAuMzU3XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBzZW5kIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlJlY2VpdmVUYXNrJyA6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgICB2YXIgcGF0aERhdGE7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5pbnN0YW50aWF0ZSkge1xuICAgICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgMjgsIDI4LCAyMCAqIDAuMjIsIHsgc3Ryb2tlV2lkdGg6IDEgfSk7XG5cbiAgICAgICAgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9JTlNUQU5USUFUSU5HX1NFTkQnLCB7XG4gICAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgICB4OiA3Ljc3LFxuICAgICAgICAgICAgeTogOS41MlxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VORCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogMjEsXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0OiAxNCxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbXg6IDAuMyxcbiAgICAgICAgICAgIG15OiAwLjRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvKiByZWNlaXZlIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlNjcmlwdFRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NDUklQVCcsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTUsXG4gICAgICAgICAgeTogMjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHNjcmlwdCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46QnVzaW5lc3NSdWxlVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIGhlYWRlclBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfQlVTSU5FU1NfUlVMRV9IRUFERVInLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDgsXG4gICAgICAgICAgeTogOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGJ1c2luZXNzSGVhZGVyUGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgaGVhZGVyUGF0aERhdGEpO1xuICAgICAgc3ZnQXR0cihidXNpbmVzc0hlYWRlclBhdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCAnI2FhYWFhYScpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgaGVhZGVyRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfTUFJTicsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogOCxcbiAgICAgICAgICB5OiA4XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgYnVzaW5lc3NQYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBoZWFkZXJEYXRhKTtcbiAgICAgIHN2Z0F0dHIoYnVzaW5lc3NQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlN1YlByb2Nlc3MnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycyk7XG5cbiAgICAgIHZhciByZWN0ID0gcmVuZGVyZXIoJ2JwbW46QWN0aXZpdHknKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIGV4cGFuZGVkID0gaXNFeHBhbmRlZChlbGVtZW50KTtcblxuICAgICAgaWYgKGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgICAgIHN2Z0F0dHIocmVjdCwge1xuICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzEsMidcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCBleHBhbmRlZCA/ICdjZW50ZXItdG9wJyA6ICdjZW50ZXItbWlkZGxlJyk7XG5cbiAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICBhdHRhY2hUYXNrTWFya2VycyhwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50LCBbJ1N1YlByb2Nlc3NNYXJrZXInXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46U3ViUHJvY2VzcycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfSxcbiAgICAnYnBtbjpUcmFuc2FjdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG91dGVyID0gcmVuZGVyZXIoJ2JwbW46U3ViUHJvY2VzcycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBpbm5lckF0dHJzID0gc3R5bGVzLnN0eWxlKFsgJ25vLWZpbGwnLCAnbm8tZXZlbnRzJyBdLCB7XG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIC8qIGlubmVyIHBhdGggKi8gZHJhd1JlY3QocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgVEFTS19CT1JERVJfUkFESVVTIC0gMiwgSU5ORVJfT1VURVJfRElTVCwgaW5uZXJBdHRycyk7XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkNhbGxBY3Rpdml0eSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOlN1YlByb2Nlc3MnKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46UGFydGljaXBhbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9GSUxMX09QQUNJVFksXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgbGFuZSA9IHJlbmRlcmVyKCdicG1uOkxhbmUnKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIGV4cGFuZGVkUG9vbCA9IGlzRXhwYW5kZWQoZWxlbWVudCk7XG5cbiAgICAgIGlmIChleHBhbmRlZFBvb2wpIHtcbiAgICAgICAgZHJhd0xpbmUocGFyZW50R2Z4LCBbXG4gICAgICAgICAgeyB4OiAzMCwgeTogMCB9LFxuICAgICAgICAgIHsgeDogMzAsIHk6IGVsZW1lbnQuaGVpZ2h0IH1cbiAgICAgICAgXSwge1xuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHRleHQgPSBnZXRTZW1hbnRpYyhlbGVtZW50KS5uYW1lO1xuICAgICAgICByZW5kZXJMYW5lTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCBlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gQ29sbGFwc2VkIHBvb2wgZHJhdyB0ZXh0IGlubGluZVxuICAgICAgICB2YXIgdGV4dDIgPSBnZXRTZW1hbnRpYyhlbGVtZW50KS5uYW1lO1xuICAgICAgICByZW5kZXJMYWJlbChwYXJlbnRHZngsIHRleHQyLCB7XG4gICAgICAgICAgYm94OiBlbGVtZW50LCBhbGlnbjogJ2NlbnRlci1taWRkbGUnLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcnRpY2lwYW50TXVsdGlwbGljaXR5ID0gISEoZ2V0U2VtYW50aWMoZWxlbWVudCkucGFydGljaXBhbnRNdWx0aXBsaWNpdHkpO1xuXG4gICAgICBpZiAocGFydGljaXBhbnRNdWx0aXBsaWNpdHkpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1BhcnRpY2lwYW50TXVsdGlwbGljaXR5TWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfSxcbiAgICAnYnBtbjpMYW5lJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuICAgICAgdmFyIHJlY3QgPSBkcmF3UmVjdChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLCBhc3NpZ24oe1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIGZpbGxPcGFjaXR5OiBISUdIX0ZJTExfT1BBQ0lUWSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycykpO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbWFudGljLiR0eXBlID09PSAnYnBtbjpMYW5lJykge1xuICAgICAgICB2YXIgdGV4dCA9IHNlbWFudGljLm5hbWU7XG4gICAgICAgIHJlbmRlckxhbmVMYWJlbChwYXJlbnRHZngsIHRleHQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjdDtcbiAgICB9LFxuICAgICdicG1uOkluY2x1c2l2ZUdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIC8qIGNpcmNsZSBwYXRoICovXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIGVsZW1lbnQuaGVpZ2h0ICogMC4yNCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMi41LFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkaWFtb25kO1xuICAgIH0sXG4gICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGRpYW1vbmQgPSByZW5kZXJlcignYnBtbjpHYXRld2F5JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdHQVRFV0FZX0VYQ0xVU0lWRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjQsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC40LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4zMixcbiAgICAgICAgICBteTogMC4zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoKGdldERpKGVsZW1lbnQpLmlzTWFya2VyVmlzaWJsZSkpIHtcbiAgICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlhbW9uZDtcbiAgICB9LFxuICAgICdicG1uOkNvbXBsZXhHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZGlhbW9uZCA9IHJlbmRlcmVyKCdicG1uOkdhdGV3YXknKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfQ09NUExFWCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjUsXG4gICAgICAgIHlTY2FsZUZhY3RvcjowLjUsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ2LFxuICAgICAgICAgIG15OiAwLjI2XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBjb21wbGV4IHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpQYXJhbGxlbEdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjYsXG4gICAgICAgIHlTY2FsZUZhY3RvcjowLjYsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ2LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHBhcmFsbGVsIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIGRpYW1vbmQgPSByZW5kZXJlcignYnBtbjpHYXRld2F5JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogb3V0ZXIgY2lyY2xlIHBhdGggKi8gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBlbGVtZW50LmhlaWdodCAqIDAuMjAsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHR5cGUgPSBzZW1hbnRpYy5ldmVudEdhdGV3YXlUeXBlO1xuICAgICAgdmFyIGluc3RhbnRpYXRlID0gISFzZW1hbnRpYy5pbnN0YW50aWF0ZTtcblxuICAgICAgZnVuY3Rpb24gZHJhd0V2ZW50KCkge1xuXG4gICAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9FVkVOVF9CQVNFRCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuMTgsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjE4LFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG14OiAwLjM2LFxuICAgICAgICAgICAgbXk6IDAuNDRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBhdHRycyA9IHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgJ25vbmUnKSxcbiAgICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfTtcblxuICAgICAgICAvKiBldmVudCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIGF0dHJzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdQYXJhbGxlbCcpIHtcblxuICAgICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfUEFSQUxMRUwnLCB7XG4gICAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjQsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOjAuNCxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBteDogMC40NzQsXG4gICAgICAgICAgICBteTogMC4yOTZcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBwYXJhbGxlbFBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhKTtcbiAgICAgICAgc3ZnQXR0cihwYXJhbGxlbFBhdGgsIHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICBmaWxsOiAnbm9uZSdcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdFeGNsdXNpdmUnKSB7XG5cbiAgICAgICAgaWYgKCFpbnN0YW50aWF0ZSkge1xuICAgICAgICAgIHZhciBpbm5lckNpcmNsZSA9IGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgZWxlbWVudC5oZWlnaHQgKiAwLjI2KTtcbiAgICAgICAgICBzdmdBdHRyKGlubmVyQ2lyY2xlLCB7XG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZHJhd0V2ZW50KCk7XG4gICAgICB9XG5cblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBkcmF3RGlhbW9uZChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBhdHRycyk7XG4gICAgfSxcbiAgICAnYnBtbjpTZXF1ZW5jZUZsb3cnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IGNyZWF0ZVBhdGhGcm9tQ29ubmVjdGlvbihlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ3NlcXVlbmNlZmxvdy1lbmQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIHZhciBwYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwgYXR0cnMpO1xuXG4gICAgICB2YXIgc2VxdWVuY2VGbG93ID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBzb3VyY2U7XG5cbiAgICAgIGlmIChlbGVtZW50LnNvdXJjZSkge1xuICAgICAgICBzb3VyY2UgPSBlbGVtZW50LnNvdXJjZS5idXNpbmVzc09iamVjdDtcblxuICAgICAgICAvLyBjb25kaXRpb25hbCBmbG93IG1hcmtlclxuICAgICAgICBpZiAoc2VxdWVuY2VGbG93LmNvbmRpdGlvbkV4cHJlc3Npb24gJiYgc291cmNlLiRpbnN0YW5jZU9mKCdicG1uOkFjdGl2aXR5JykpIHtcbiAgICAgICAgICBzdmdBdHRyKHBhdGgsIHtcbiAgICAgICAgICAgIG1hcmtlclN0YXJ0OiBtYXJrZXIoJ2NvbmRpdGlvbmFsLWZsb3ctbWFya2VyJywgZmlsbCwgc3Ryb2tlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtYXJrZXJcbiAgICAgICAgaWYgKHNvdXJjZS5kZWZhdWx0ICYmIChzb3VyY2UuJGluc3RhbmNlT2YoJ2JwbW46R2F0ZXdheScpIHx8IHNvdXJjZS4kaW5zdGFuY2VPZignYnBtbjpBY3Rpdml0eScpKSAmJlxuICAgICAgICAgICAgc291cmNlLmRlZmF1bHQgPT09IHNlcXVlbmNlRmxvdykge1xuICAgICAgICAgIHN2Z0F0dHIocGF0aCwge1xuICAgICAgICAgICAgbWFya2VyU3RhcnQ6IG1hcmtlcignY29uZGl0aW9uYWwtZGVmYXVsdC1mbG93LW1hcmtlcicsIGZpbGwsIHN0cm9rZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9LFxuICAgICdicG1uOkFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcwLjUsIDUnLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycyB8fCB7fSk7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5hc3NvY2lhdGlvbkRpcmVjdGlvbiA9PT0gJ09uZScgfHxcbiAgICAgICAgICBzZW1hbnRpYy5hc3NvY2lhdGlvbkRpcmVjdGlvbiA9PT0gJ0JvdGgnKSB7XG4gICAgICAgIGF0dHJzLm1hcmtlckVuZCA9IG1hcmtlcignYXNzb2NpYXRpb24tZW5kJywgZmlsbCwgc3Ryb2tlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbWFudGljLmFzc29jaWF0aW9uRGlyZWN0aW9uID09PSAnQm90aCcpIHtcbiAgICAgICAgYXR0cnMubWFya2VyU3RhcnQgPSBtYXJrZXIoJ2Fzc29jaWF0aW9uLXN0YXJ0JywgZmlsbCwgc3Ryb2tlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdMaW5lKHBhcmVudEdmeCwgZWxlbWVudC53YXlwb2ludHMsIGF0dHJzKTtcbiAgICB9LFxuICAgICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgICBzdHJva2UgPSBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46QXNzb2NpYXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ2Fzc29jaWF0aW9uLWVuZCcsIGZpbGwsIHN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgICBzdHJva2UgPSBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46QXNzb2NpYXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ2Fzc29jaWF0aW9uLWVuZCcsIGZpbGwsIHN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46TWVzc2FnZUZsb3cnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCksXG4gICAgICAgICAgZGkgPSBnZXREaShlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gY3JlYXRlUGF0aEZyb21Db25uZWN0aW9uKGVsZW1lbnQpO1xuXG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdtZXNzYWdlZmxvdy1lbmQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBtYXJrZXJTdGFydDogbWFya2VyKCdtZXNzYWdlZmxvdy1zdGFydCcsIGZpbGwsIHN0cm9rZSksXG4gICAgICAgIHN0cm9rZURhc2hhcnJheTogJzEwLCAxMicsXG4gICAgICAgIHN0cm9rZUxpbmVjYXA6ICdyb3VuZCcsXG4gICAgICAgIHN0cm9rZUxpbmVqb2luOiAncm91bmQnLFxuICAgICAgICBzdHJva2VXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIGF0dHJzKTtcblxuICAgICAgaWYgKHNlbWFudGljLm1lc3NhZ2VSZWYpIHtcbiAgICAgICAgdmFyIG1pZFBvaW50ID0gcGF0aC5nZXRQb2ludEF0TGVuZ3RoKHBhdGguZ2V0VG90YWxMZW5ndGgoKSAvIDIpO1xuXG4gICAgICAgIHZhciBtYXJrZXJQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUVTU0FHRV9GTE9XX01BUktFUicsIHtcbiAgICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICAgIHg6IG1pZFBvaW50LngsXG4gICAgICAgICAgICB5OiBtaWRQb2ludC55XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgbWVzc2FnZUF0dHJzID0geyBzdHJva2VXaWR0aDogMSB9O1xuXG4gICAgICAgIGlmIChkaS5tZXNzYWdlVmlzaWJsZUtpbmQgPT09ICdpbml0aWF0aW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VBdHRycy5maWxsID0gJ3doaXRlJztcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuc3Ryb2tlID0gJ2JsYWNrJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuZmlsbCA9ICcjODg4JztcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuc3Ryb2tlID0gJ3doaXRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgbWFya2VyUGF0aERhdGEsIG1lc3NhZ2VBdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdEQVRBX09CSkVDVF9QQVRIJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNDc0LFxuICAgICAgICAgIG15OiAwLjI5NlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgaWYgKGlzQ29sbGVjdGlvbihzZW1hbnRpYykpIHtcbiAgICAgICAgcmVuZGVyRGF0YUl0ZW1Db2xsZWN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50T2JqZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZSc6IGFzKCdicG1uOkRhdGFPYmplY3QnKSxcbiAgICAnYnBtbjpEYXRhSW5wdXQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIGFycm93UGF0aERhdGEgPSBwYXRoTWFwLmdldFJhd1BhdGgoJ0RBVEFfQVJST1cnKTtcblxuICAgICAgLy8gcGFnZVxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSByZW5kZXJlcignYnBtbjpEYXRhT2JqZWN0JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogaW5wdXQgYXJyb3cgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIGFycm93UGF0aERhdGEsIHsgc3Ryb2tlV2lkdGg6IDEgfSk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50T2JqZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU91dHB1dCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGFycm93UGF0aERhdGEgPSBwYXRoTWFwLmdldFJhd1BhdGgoJ0RBVEFfQVJST1cnKTtcblxuICAgICAgLy8gcGFnZVxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSByZW5kZXJlcignYnBtbjpEYXRhT2JqZWN0JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogb3V0cHV0IGFycm93IHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBhcnJvd1BhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiAnYmxhY2snXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGVsZW1lbnRPYmplY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBEQVRBX1NUT1JFX1BBVEggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfU1RPUkUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMCxcbiAgICAgICAgICBteTogMC4xMzNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBlbGVtZW50U3RvcmUgPSBkcmF3UGF0aChwYXJlbnRHZngsIERBVEFfU1RPUkVfUEFUSCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9GSUxMX09QQUNJVFksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50U3RvcmU7XG4gICAgfSxcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpLFxuICAgICAgICAgIGNhbmNlbCA9IHNlbWFudGljLmNhbmNlbEFjdGl2aXR5O1xuXG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgaWYgKCFjYW5jZWwpIHtcbiAgICAgICAgYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID0gJzYnO1xuICAgICAgICBhdHRycy5zdHJva2VMaW5lY2FwID0gJ3JvdW5kJztcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgZmlsbE9wYWNpdHlcbiAgICAgIHZhciBvdXRlckF0dHJzID0gYXNzaWduKHt9LCBhdHRycywge1xuICAgICAgICBmaWxsT3BhY2l0eTogMVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFwcGx5IG5vLWZpbGxcbiAgICAgIHZhciBpbm5lckF0dHJzID0gYXNzaWduKHt9LCBhdHRycywge1xuICAgICAgICBmaWxsOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgb3V0ZXIgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwgb3V0ZXJBdHRycyk7XG5cbiAgICAgIC8qIGlubmVyIHBhdGggKi8gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBJTk5FUl9PVVRFUl9ESVNULCBpbm5lckF0dHJzKTtcblxuICAgICAgcmVuZGVyRXZlbnRDb250ZW50KGVsZW1lbnQsIHBhcmVudEdmeCk7XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkdyb3VwJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBncm91cCA9IGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIFRBU0tfQk9SREVSX1JBRElVUywge1xuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICc4LDMsMSwzJyxcbiAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfSxcbiAgICAnbGFiZWwnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiByZW5kZXJFeHRlcm5hbExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfSxcbiAgICAnYnBtbjpUZXh0QW5ub3RhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHN0eWxlID0ge1xuICAgICAgICAnZmlsbCc6ICdub25lJyxcbiAgICAgICAgJ3N0cm9rZSc6ICdub25lJ1xuICAgICAgfTtcblxuICAgICAgdmFyIHRleHRFbGVtZW50ID0gZHJhd1JlY3QocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgMCwgMCwgc3R5bGUpO1xuXG4gICAgICB2YXIgdGV4dFBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdURVhUX0FOTk9UQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4wLFxuICAgICAgICAgIG15OiAwLjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgdGV4dFBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHZhciB0ZXh0ID0gZ2V0U2VtYW50aWMoZWxlbWVudCkudGV4dCB8fCAnJztcbiAgICAgIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgdGV4dCwge1xuICAgICAgICBib3g6IGVsZW1lbnQsXG4gICAgICAgIGFsaWduOiAnbGVmdC10b3AnLFxuICAgICAgICBwYWRkaW5nOiA1LFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0ZXh0RWxlbWVudDtcbiAgICB9LFxuICAgICdQYXJ0aWNpcGFudE11bHRpcGxpY2l0eU1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxNSkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcigncGFydGljaXBhbnQtbXVsdGlwbGljaXR5JywgcGFyZW50R2Z4LCBtYXJrZXJQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnU3ViUHJvY2Vzc01hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1hcmtlclJlY3QgPSBkcmF3UmVjdChwYXJlbnRHZngsIDE0LCAxNCwgMCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcm9jZXNzIG1hcmtlciBpcyBwbGFjZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYm94XG4gICAgICAvLyB0aGVyZWZvcmUgZml4ZWQgdmFsdWVzIGNhbiBiZSB1c2VkIGhlcmVcbiAgICAgIHRyYW5zbGF0ZShtYXJrZXJSZWN0LCBlbGVtZW50LndpZHRoIC8gMiAtIDcuNSwgZWxlbWVudC5oZWlnaHQgLSAyMCk7XG5cbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfU1VCX1BST0NFU1MnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS41LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuNSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IChlbGVtZW50LndpZHRoIC8gMiAtIDcuNSkgLyBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAyMCkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignc3ViLXByb2Nlc3MnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ1BhcmFsbGVsTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24ucGFyYWxsZWwpIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDIwKSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdwYXJhbGxlbCcsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnU2VxdWVudGlhbE1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pIHtcbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfU0VRVUVOVElBTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24uc2VxKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxOSkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignc2VxdWVudGlhbCcsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnQ29tcGVuc2F0aW9uTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlck1hdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9DT01QRU5TQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLmNvbXBlbnNhdGlvbikgLyBlbGVtZW50LndpZHRoKSxcbiAgICAgICAgICBteTogKGVsZW1lbnQuaGVpZ2h0IC0gMTMpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ2NvbXBlbnNhdGlvbicsIHBhcmVudEdmeCwgbWFya2VyTWF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0xvb3BNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKSB7XG4gICAgICB2YXIgbWFya2VyUGF0aCA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUFSS0VSX0xPT1AnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLmxvb3ApIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDcpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ2xvb3AnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICBzdHJva2VNaXRlcmxpbWl0OiAwLjVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0FkaG9jTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9BREhPQycsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24uYWRob2MpIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDE1KSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdhZGhvYycsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50LCB0YXNrTWFya2Vycykge1xuICAgIHZhciBvYmogPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgIHZhciBzdWJwcm9jZXNzID0gdGFza01hcmtlcnMgJiYgdGFza01hcmtlcnMuaW5kZXhPZignU3ViUHJvY2Vzc01hcmtlcicpICE9PSAtMTtcbiAgICB2YXIgcG9zaXRpb247XG5cbiAgICBpZiAoc3VicHJvY2Vzcykge1xuICAgICAgcG9zaXRpb24gPSB7XG4gICAgICAgIHNlcTogLTIxLFxuICAgICAgICBwYXJhbGxlbDogLTIyLFxuICAgICAgICBjb21wZW5zYXRpb246IC00MixcbiAgICAgICAgbG9vcDogLTE4LFxuICAgICAgICBhZGhvYzogMTBcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc2l0aW9uID0ge1xuICAgICAgICBzZXE6IC0zLFxuICAgICAgICBwYXJhbGxlbDogLTYsXG4gICAgICAgIGNvbXBlbnNhdGlvbjogLTI3LFxuICAgICAgICBsb29wOiAwLFxuICAgICAgICBhZGhvYzogMTBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yRWFjaCh0YXNrTWFya2VycywgZnVuY3Rpb24obWFya2VyKSB7XG4gICAgICByZW5kZXJlcihtYXJrZXIpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKG9iai5pc0ZvckNvbXBlbnNhdGlvbikge1xuICAgICAgcmVuZGVyZXIoJ0NvbXBlbnNhdGlvbk1hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChvYmouJHR5cGUgPT09ICdicG1uOkFkSG9jU3ViUHJvY2VzcycpIHtcbiAgICAgIHJlbmRlcmVyKCdBZGhvY01hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gb2JqLmxvb3BDaGFyYWN0ZXJpc3RpY3MsXG4gICAgICAgIGlzU2VxdWVudGlhbCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MgJiYgbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG5cbiAgICBpZiAobG9vcENoYXJhY3RlcmlzdGljcykge1xuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVuZGVyZXIoJ0xvb3BNYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2VxdWVudGlhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1BhcmFsbGVsTWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NlcXVlbnRpYWwgPT09IHRydWUpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1NlcXVlbnRpYWxNYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJEYXRhSXRlbUNvbGxlY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICB2YXIgeVBvc2l0aW9uID0gKGVsZW1lbnQuaGVpZ2h0IC0gMTYpIC8gZWxlbWVudC5oZWlnaHQ7XG5cbiAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCcsIHtcbiAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIG14OiAwLjQ1MSxcbiAgICAgICAgbXk6IHlQb3NpdGlvblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyogY29sbGVjdGlvbiBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGV4dGVuc2lvbiBBUEksIHVzZSBhdCB5b3VyIG93biByaXNrXG4gIHRoaXMuX2RyYXdQYXRoID0gZHJhd1BhdGg7XG5cbn1cblxuXG5pbmhlcml0cyhCcG1uUmVuZGVyZXIsIEJhc2VSZW5kZXJlcik7XG5cbkJwbW5SZW5kZXJlci4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmJwbW5SZW5kZXJlcicsXG4gICdldmVudEJ1cycsXG4gICdzdHlsZXMnLFxuICAncGF0aE1hcCcsXG4gICdjYW52YXMnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG5CcG1uUmVuZGVyZXIucHJvdG90eXBlLmNhblJlbmRlciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkJhc2VFbGVtZW50Jyk7XG59O1xuXG5CcG1uUmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGggPSB0aGlzLmhhbmRsZXJzW3R5cGVdO1xuXG4gIC8qIGpzaGludCAtVzA0MCAqL1xuICByZXR1cm4gaChwYXJlbnRHZngsIGVsZW1lbnQpO1xufTtcblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGggPSB0aGlzLmhhbmRsZXJzW3R5cGVdO1xuXG4gIC8qIGpzaGludCAtVzA0MCAqL1xuICByZXR1cm4gaChwYXJlbnRHZngsIGVsZW1lbnQpO1xufTtcblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gZ2V0Q2lyY2xlUGF0aChlbGVtZW50KTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIGdldFJvdW5kUmVjdFBhdGgoZWxlbWVudCwgVEFTS19CT1JERVJfUkFESVVTKTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICByZXR1cm4gZ2V0RGlhbW9uZFBhdGgoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZ2V0UmVjdFBhdGgoZWxlbWVudCk7XG59O1xuIiwiLyoqXG4gKiBNYXAgY29udGFpbmluZyBTVkcgcGF0aHMgbmVlZGVkIGJ5IEJwbW5SZW5kZXJlci5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYXRoTWFwKCkge1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBhIG1hcCBvZiBwYXRoIGVsZW1lbnRzXG4gICAqXG4gICAqIDxoMT5QYXRoIGRlZmluaXRpb248L2gxPlxuICAgKiBBIHBhcmFtZXRlcml6ZWQgcGF0aCBpcyBkZWZpbmVkIGxpa2UgdGhpczpcbiAgICogPHByZT5cbiAgICogJ0dBVEVXQVlfUEFSQUxMRUwnOiB7XG4gICAqICAgZDogJ20ge214fSx7bXl9IHtlLngwfSwwIDAse2UueDF9IHtlLngxfSwwIDAse2UueTB9IC17ZS54MX0sMCAwLHtlLnkxfSAnICtcbiAgICAgICAgICAnLXtlLngwfSwwIDAsLXtlLnkxfSAte2UueDF9LDAgMCwte2UueTB9IHtlLngxfSwwIHonLFxuICAgKiAgIGhlaWdodDogMTcuNSxcbiAgICogICB3aWR0aDogIDE3LjUsXG4gICAqICAgaGVpZ2h0RWxlbWVudHM6IFsyLjUsIDcuNV0sXG4gICAqICAgd2lkdGhFbGVtZW50czogWzIuNSwgNy41XVxuICAgKiB9XG4gICAqIDwvcHJlPlxuICAgKiA8cD5JdCdzIGltcG9ydGFudCB0byBzcGVjaWZ5IGEgY29ycmVjdCA8Yj5oZWlnaHQgYW5kIHdpZHRoPC9iPiBmb3IgdGhlIHBhdGggYXMgdGhlIHNjYWxpbmdcbiAgICogaXMgYmFzZWQgb24gdGhlIHJhdGlvIGJldHdlZW4gdGhlIHNwZWNpZmllZCBoZWlnaHQgYW5kIHdpZHRoIGluIHRoaXMgb2JqZWN0IGFuZCB0aGVcbiAgICogaGVpZ2h0IGFuZCB3aWR0aCB0aGF0IGlzIHNldCBhcyBzY2FsZSB0YXJnZXQgKE5vdGUgeCx5IGNvb3JkaW5hdGVzIHdpbGwgYmUgc2NhbGVkIHdpdGhcbiAgICogaW5kaXZpZHVhbCByYXRpb3MpLjwvcD5cbiAgICogPHA+VGhlICc8Yj5oZWlnaHRFbGVtZW50czwvYj4nIGFuZCAnPGI+d2lkdGhFbGVtZW50czwvYj4nIGFycmF5IG11c3QgY29udGFpbiB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBzY2FsZWQuXG4gICAqIFRoZSBzY2FsaW5nIGlzIGJhc2VkIG9uIHRoZSBjb21wdXRlZCByYXRpb3MuXG4gICAqIENvb3JkaW5hdGVzIG9uIHRoZSB5IGF4aXMgc2hvdWxkIGJlIGluIHRoZSA8Yj5oZWlnaHRFbGVtZW50PC9iPidzIGFycmF5LCB0aGV5IHdpbGwgYmUgc2NhbGVkIHVzaW5nXG4gICAqIHRoZSBjb21wdXRlZCByYXRpbyBjb2VmZmljaWVudC5cbiAgICogSW4gdGhlIHBhcmFtZXRlcml6ZWQgcGF0aCB0aGUgc2NhbGVkIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgJ2UnIG9iamVjdCBpbiB7fSBicmFja2V0cy5cbiAgICogICA8dWw+XG4gICAqICAgIDxsaT5UaGUgdmFsdWVzIGZvciB0aGUgeSBheGlzIGNhbiBiZSBhY2Nlc3NlZCBpbiB0aGUgcGF0aCBzdHJpbmcgdXNpbmcge2UueTB9LCB7ZS55MX0sIC4uLi48L2xpPlxuICAgKiAgICA8bGk+VGhlIHZhbHVlcyBmb3IgdGhlIHggYXhpcyBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHBhdGggc3RyaW5nIHVzaW5nIHtlLngwfSwge2UueDF9LCAuLi4uPC9saT5cbiAgICogICA8L3VsPlxuICAgKiAgIFRoZSBudW1iZXJzIHgwLCB4MSByZXNwZWN0aXZlbHkgeTAsIHkxLCAuLi4gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LlxuICAgKiA8L3A+XG4gICAqL1xuICB0aGlzLnBhdGhNYXAgPSB7XG4gICAgJ0VWRU5UX01FU1NBR0UnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbCAwLHtlLnkxfSBsIHtlLngxfSwwIGwgMCwte2UueTF9IHogbCB7ZS54MH0se2UueTB9IGwge2UueDB9LC17ZS55MH0nLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYsIDE0XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMC41LCAyMV1cbiAgICB9LFxuICAgICdFVkVOVF9TSUdOQUwnOiB7XG4gICAgICBkOiAnTSB7bXh9LHtteX0gbCB7ZS54MH0se2UueTB9IGwgLXtlLngxfSwwIFonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMThdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwLCAyMF1cbiAgICB9LFxuICAgICdFVkVOVF9FU0NBTEFUSU9OJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LHtlLnkwfSBsIC17ZS54MH0sLXtlLnkxfSBsIC17ZS54MH0se2UueTF9IFonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMjAsIDddLFxuICAgICAgd2lkdGhFbGVtZW50czogWzhdXG4gICAgfSxcbiAgICAnRVZFTlRfQ09ORElUSU9OQUwnOiB7XG4gICAgICBkOiAnTSB7ZS54MH0se2UueTB9IGwge2UueDF9LDAgbCAwLHtlLnkyfSBsIC17ZS54MX0sMCBaICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnkzfSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk0fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk1fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk2fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk3fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk4fSBsIHtlLngwfSwwICcsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6ICAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbOC41LCAxNC41LCAxOCwgMTEuNSwgMTQuNSwgMTcuNSwgMjAuNSwgMjMuNSwgMjYuNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWzEwLjUsIDE0LjUsIDEyLjVdXG4gICAgfSxcbiAgICAnRVZFTlRfTElOSyc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLHtlLnkwfSAte2UueDF9LDAgMCx7ZS55MX0ge2UueDF9LDAgMCx7ZS55MH0ge2UueDB9LC17ZS55Mn0gLXtlLngwfSwte2UueTJ9IHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNC40Mzc1LCA2Ljc1LCA3LjgxMjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzkuODQzNzUsIDEzLjVdXG4gICAgfSxcbiAgICAnRVZFTlRfRVJST1InOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0ge2UueDB9LC17ZS55MH0ge2UueDF9LC17ZS55MX0ge2UueDJ9LHtlLnkyfSB7ZS54M30sLXtlLnkzfSAte2UueDR9LHtlLnk0fSAte2UueDV9LC17ZS55NX0geicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFswLjAyMywgOC43MzcsIDguMTUxLCAxNi41NjQsIDEwLjU5MSwgOC43MTRdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzAuMDg1LCA2LjY3MiwgNi45NywgNC4yNzMsIDUuMzM3LCA2LjYzNl1cbiAgICB9LFxuICAgICdFVkVOVF9DQU5DRUxfNDUnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gLXtlLngxfSwwIDAse2UueDB9IHtlLngxfSwwIDAse2UueTF9IHtlLngwfSwwICcgK1xuICAgICAgICAnMCwte2UueTF9IHtlLngxfSwwIDAsLXtlLnkwfSAte2UueDF9LDAgMCwte2UueTF9IC17ZS54MH0sMCB6JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzQuNzUsIDguNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbNC43NSwgOC41XVxuICAgIH0sXG4gICAgJ0VWRU5UX0NPTVBFTlNBVElPTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSB7ZS54MH0sLXtlLnkwfSAwLHtlLnkxfSB6IG0ge2UueDF9LC17ZS55Mn0ge2UueDJ9LC17ZS55M30gMCx7ZS55MX0gLXtlLngyfSwte2UueTN9IHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNi41LCAxMywgMC40LCA2LjFdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzksIDkuMywgOC43XVxuICAgIH0sXG4gICAgJ0VWRU5UX1RJTUVSX1dIJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LC17ZS55MH0gbSAte2UueDB9LHtlLnkwfSBsIHtlLngxfSx7ZS55MX0gJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMCwgMl0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMywgN11cbiAgICB9LFxuICAgICdFVkVOVF9USU1FUl9MSU5FJzoge1xuICAgICAgZDogICdNIHtteH0se215fSAnICtcbiAgICAgICAgICAnbSB7ZS54MH0se2UueTB9IGwgLXtlLngxfSx7ZS55MX0gJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMCwgM10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMCwgMF1cbiAgICB9LFxuICAgICdFVkVOVF9NVUxUSVBMRSc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngxfSwte2UueTB9IHtlLngxfSx7ZS55MH0gLXtlLngwfSx7ZS55MX0gLXtlLngyfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYuMjgwOTksIDEyLjU2MTk5XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFszLjE0MDUsIDkuNDIxNDksIDEyLjU2MTk4XVxuICAgIH0sXG4gICAgJ0VWRU5UX1BBUkFMTEVMX01VTFRJUExFJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0ge2UueDB9LDAgMCx7ZS55MX0ge2UueDF9LDAgMCx7ZS55MH0gLXtlLngxfSwwIDAse2UueTF9ICcgK1xuICAgICAgICAnLXtlLngwfSwwIDAsLXtlLnkxfSAte2UueDF9LDAgMCwte2UueTB9IHtlLngxfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzIuNTYyMjgsIDcuNjg2ODNdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzIuNTYyMjgsIDcuNjg2ODNdXG4gICAgfSxcbiAgICAnR0FURVdBWV9FWENMVVNJVkUnOiB7XG4gICAgICBkOidtIHtteH0se215fSB7ZS54MH0se2UueTB9IHtlLngxfSx7ZS55MH0ge2UueDJ9LDAge2UueDR9LHtlLnkyfSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3tlLng0fSx7ZS55MX0ge2UueDJ9LDAge2UueDF9LHtlLnkzfSB7ZS54MH0se2UueTN9ICcgK1xuICAgICAgICAgICAgICAgICAgICAne2UueDN9LDAge2UueDV9LHtlLnkxfSB7ZS54NX0se2UueTJ9IHtlLngzfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxNy41LFxuICAgICAgd2lkdGg6ICAxNy41LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs4LjUsIDYuNTMxMiwgLTYuNTMxMiwgLTguNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWzYuNSwgLTYuNSwgMywgLTMsIDUsIC01XVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfUEFSQUxMRUwnOiB7XG4gICAgICBkOidtIHtteH0se215fSAwLHtlLnkxfSAte2UueDF9LDAgMCx7ZS55MH0ge2UueDF9LDAgMCx7ZS55MX0ge2UueDB9LDAgJyArXG4gICAgICAgICcwLC17ZS55MX0ge2UueDF9LDAgMCwte2UueTB9IC17ZS54MX0sMCAwLC17ZS55MX0gLXtlLngwfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgIHdpZHRoOiAgMzAsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzUsIDEyLjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzUsIDEyLjVdXG4gICAgfSxcbiAgICAnR0FURVdBWV9FVkVOVF9CQVNFRCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngwfSx7ZS55MH0ge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTJ9IHtlLngyfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxMSxcbiAgICAgIHdpZHRoOiAgMTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWy02LCA2LCAxMiwgLTEyXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFs5LCAtMywgLTEyXVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfQ09NUExFWCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IDAse2UueTB9IC17ZS54MH0sLXtlLnkxfSAte2UueDF9LHtlLnkyfSB7ZS54MH0se2UueTF9IC17ZS54Mn0sMCAwLHtlLnkzfSAnICtcbiAgICAgICAgJ3tlLngyfSwwICAte2UueDB9LHtlLnkxfSBsIHtlLngxfSx7ZS55Mn0ge2UueDB9LC17ZS55MX0gMCx7ZS55MH0ge2UueDN9LDAgMCwte2UueTB9IHtlLngwfSx7ZS55MX0gJyArXG4gICAgICAgICd7ZS54MX0sLXtlLnkyfSAte2UueDB9LC17ZS55MX0ge2UueDJ9LDAgMCwte2UueTN9IC17ZS54Mn0sMCB7ZS54MH0sLXtlLnkxfSAte2UueDF9LC17ZS55Mn0gJyArXG4gICAgICAgICcte2UueDB9LHtlLnkxfSAwLC17ZS55MH0gLXtlLngzfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxNy4xMjUsXG4gICAgICB3aWR0aDogIDE3LjEyNSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNC44NzUsIDMuNDM3NSwgMi4xMjUsIDNdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzMuNDM3NSwgMi4xMjUsIDQuODc1LCAzXVxuICAgIH0sXG4gICAgJ0RBVEFfT0JKRUNUX1BBVEgnOiB7XG4gICAgICBkOidtIDAsMCB7ZS54MX0sMCB7ZS54MH0se2UueTB9IDAse2UueTF9IC17ZS54Mn0sMCAwLC17ZS55Mn0ge2UueDF9LDAgMCx7ZS55MH0ge2UueDB9LDAnLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzEwLCA1MCwgNjBdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwLCA0MCwgNTAsIDYwXVxuICAgIH0sXG4gICAgJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCc6IHtcbiAgICAgIGQ6J20ge214fSwge215fSAnICtcbiAgICAgICAgJ20gIDAgMTUgIGwgMCAtMTUgJyArXG4gICAgICAgICdtICA0IDE1ICBsIDAgLTE1ICcgK1xuICAgICAgICAnbSAgNCAxNSAgbCAwIC0xNSAnLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzEyXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxLCA2LCAxMiwgMTVdXG4gICAgfSxcbiAgICAnREFUQV9BUlJPVyc6IHtcbiAgICAgIGQ6J20gNSw5IDksMCAwLC0zIDUsNSAtNSw1IDAsLTMgLTksMCB6JyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDUxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdEQVRBX1NUT1JFJzoge1xuICAgICAgZDonbSAge214fSx7bXl9ICcgK1xuICAgICAgICAnbCAgMCx7ZS55Mn0gJyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0gIHtlLngyfSwwICcgK1xuICAgICAgICAnbCAgMCwte2UueTJ9ICcgK1xuICAgICAgICAnYyAte2UueDB9LC17ZS55MX0gLXtlLngxfSwte2UueTF9IC17ZS54Mn0sMCcgK1xuICAgICAgICAnYyAge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTF9ICB7ZS54Mn0sMCAnICtcbiAgICAgICAgJ20gIC17ZS54Mn0se2UueTB9JyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0ge2UueDJ9LDAnICtcbiAgICAgICAgJ20gIC17ZS54Mn0se2UueTB9JyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0gIHtlLngyfSwwJyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDYxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs3LCAxMCwgNDVdLFxuICAgICAgd2lkdGhFbGVtZW50czogIFsyLCA1OCwgNjBdXG4gICAgfSxcbiAgICAnVEVYVF9BTk5PVEFUSU9OJzoge1xuICAgICAgZDogJ20ge214fSwge215fSBtIDEwLDAgbCAtMTAsMCBsIDAse2UueTB9IGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDMwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFszMF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTBdXG4gICAgfSxcbiAgICAnTUFSS0VSX1NVQl9QUk9DRVNTJzoge1xuICAgICAgZDogJ217bXh9LHtteX0gbSA3LDIgbCAwLDEwIG0gLTUsLTUgbCAxMCwwJyxcbiAgICAgIGhlaWdodDogMTAsXG4gICAgICB3aWR0aDogMTAsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ01BUktFUl9QQVJBTExFTCc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gMywyIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfU0VRVUVOVElBTCc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gMCwzIGwgMTAsMCBtIC0xMCwzIGwgMTAsMCBtIC0xMCwzIGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfQ09NUEVOU0FUSU9OJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IDcsLTUgMCwxMCB6IG0gNy4xLC0wLjMgNi45LC00LjcgMCwxMCAtNi45LC00LjcgeicsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDIxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfTE9PUCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDMuNTI2OTc5LDAgNi4zODYxNjEsLTIuODI5ODU4IDYuMzg2MTYxLC02LjMyMDY2MSAwLC0zLjQ5MDgwNiAtMi44NTkxODIsLTYuMzIwNjYxICcgK1xuICAgICAgICAnLTYuMzg2MTYxLC02LjMyMDY2MSAtMy41MjY5NzgsMCAtNi4zODYxNiwyLjgyOTg1NSAtNi4zODYxNiw2LjMyMDY2MSAwLDEuNzQ1NDAyICcgK1xuICAgICAgICAnMC43MTQ3OTcsMy4zMjU1NjcgMS44NzA0NjMsNC40NjkzODEgMC41Nzc4MzQsMC41NzE5MDggMS4yNjU4ODUsMS4wMzQ3MjggMi4wMjk5MTYsMS4zNTQ1NyAnICtcbiAgICAgICAgJ2wgLTAuNzE4MTYzLC0zLjkwOTc5MyBtIDAuNzE4MTYzLDMuOTA5NzkzIC0zLjg4NTIxMSwwLjgwMjkwMicsXG4gICAgICBoZWlnaHQ6IDEzLjksXG4gICAgICB3aWR0aDogMTMuNyxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX0FESE9DJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gMC44NDQ2MSwyLjY0NDExIGMgMS4wNTUzMywtMS4yMzc4MDk5NiAyLjY0MzM3LC0yLjA3ODgyIDQuMjk2NTMsLTEuOTc5OTc5OTYgMi4wNTE2MywwLjA4MDUgJyArXG4gICAgICAgICczLjg1NTc5LDEuMTU4MDMgNS43NjA4MiwxLjc5MTA3IDEuMDYzODUsMC4zNDEzOTk5NiAyLjI0NDU0LDAuMTQzOCAzLjE4NzU5LC0wLjQzNzY3IDAuNjE3NDMsLTAuMzM2NDIgJyArXG4gICAgICAgICcxLjI3NzUsLTAuNjQwNzggMS43NTQyLC0xLjE3NTExIDAsMC41NjAyMyAwLDEuMTIwNDYgMCwxLjY4MDcgLTAuOTg3MDYsMC45NjIzNzk5NiAtMi4yOTc5MiwxLjYyMzkzOTk2ICcgK1xuICAgICAgICAnLTMuNjkxOCwxLjY2MTgxOTk2IC0xLjI0NDU5LDAuMDkyNyAtMi40NjY3MSwtMC4yNDkxIC0zLjU5NTA1LC0wLjc0ODEyIC0xLjM1Nzg5LC0wLjU1OTY1ICcgK1xuICAgICAgICAnLTIuNzUxMzMsLTEuMzM0MzY5OTYgLTQuMjcwMjcsLTEuMTgxMjE5OTYgLTEuMzc3NDEsMC4xNDYwMSAtMi40MTg0MiwxLjEzNjg1OTk2IC0zLjQ0Mjg4LDEuOTY3ODI5OTYgeicsXG4gICAgICBoZWlnaHQ6IDQsXG4gICAgICB3aWR0aDogMTUsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9TRU5EJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGwgMCx7ZS55MX0gbCB7ZS54MX0sMCBsIDAsLXtlLnkxfSB6IGwge2UueDB9LHtlLnkwfSBsIHtlLngwfSwte2UueTB9JyxcbiAgICAgIGhlaWdodDogMTQsXG4gICAgICB3aWR0aDogIDIxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs2LCAxNF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTAuNSwgMjFdXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NDUklQVCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDkuOTY2NTUzLC02LjI3Mjc2IC04LjAwMDkyNiwtNy45MTkzMiAyLjk2ODk2OCwtMTQuOTM4IGwgLTguODAyNzI4LDAgJyArXG4gICAgICAgICdjIC0xMC45Njk4OTQsNy4wMTg2OCA2Ljk5NzU4NSw4LjY2NTI0IC0yLjk2ODk2NywxNC45MzggeiAnICtcbiAgICAgICAgJ20gLTcsLTEyIGwgNSwwICcgK1xuICAgICAgICAnbSAtNC41LDMgbCA0LjUsMCAnICtcbiAgICAgICAgJ20gLTMsMyBsIDUsMCcgK1xuICAgICAgICAnbSAtNCwzIGwgNSwwJyxcbiAgICAgIGhlaWdodDogMTUsXG4gICAgICB3aWR0aDogIDEyLjYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYsIDE0XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMC41LCAyMV1cbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8xJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC45MDksLTAuODQ1IDEuNTk0LC0yLjA0OSAxLjU5NCwtMy4zODUgMCwtMi41NTQgLTEuODA1LC00LjYyMTk5OTk5ICcgK1xuICAgICAgICAnLTQuMzU3LC00LjYyMTk5OTk5IC0yLjU1MTk5OTk4LDAgLTQuMjg3OTk5OTgsMi4wNjc5OTk5OSAtNC4yODc5OTk5OCw0LjYyMTk5OTk5IDAsMS4zNDggJyArXG4gICAgICAgICcwLjk3NCwyLjU2MiAxLjg5NTk5OTk4LDMuNDA1IC0wLjUyODk5OTk4LDAuMTg3IC01LjY2OSwyLjA5NyAtNS43OTQsNC43NTYwMDA1IHYgNi43MTggJyArXG4gICAgICAgICdoIDE3IHYgLTYuNzE4IGMgMCwtMi4yOTgwMDA1IC01LjUyNzk5OTYsLTQuNTk1MDAwNSAtNi4wNTA5OTk2LC00Ljc3NjAwMDUgeicgK1xuICAgICAgICAnbSAtOCw2IGwgMCw1LjUgbSAxMSwwIGwgMCwtNSdcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8yJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gMi4xNjIsMS4wMDkgYyAwLDIuNDQ3MDAwNSAtMi4xNTgsNC40MzEwMDA1IC00LjgyMSw0LjQzMTAwMDUgJyArXG4gICAgICAgICctMi42NjQ5OTk5OCwwIC00LjgyMiwtMS45ODEgLTQuODIyLC00LjQzMTAwMDUgJ1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9VU0VSXzMnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbSAtNi45LC0zLjgwIGMgMCwwIDIuMjUwOTk5OTgsLTIuMzU4IDQuMjczOTk5OTgsLTEuMTc3IDIuMDI0LDEuMTgxIDQuMjIxLDEuNTM3ICcgK1xuICAgICAgICAnNC4xMjQsMC45NjUgLTAuMDk4LC0wLjU3IC0wLjExNywtMy43OTA5OTk5OSAtNC4xOTEsLTQuMTM1OTk5OTkgLTMuNTc0OTk5OTgsMC4wMDEgJyArXG4gICAgICAgICctNC4yMDc5OTk5OCwzLjM2Njk5OTk5IC00LjIwNjk5OTk4LDQuMzQ3OTk5OTkgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfTUFOVUFMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC4yMzQsLTAuMDEgNS42MDQsMC4wMDggOC4wMjksMC4wMDQgMC44MDgsMCAxLjI3MSwtMC4xNzIgMS40MTcsLTAuNzUyIDAuMjI3LC0wLjg5OCAnICtcbiAgICAgICAgJy0wLjMzNCwtMS4zMTQgLTEuMzM4LC0xLjMxNiAtMi40NjcsLTAuMDEgLTcuODg2LC0wLjAwNCAtOC4xMDgsLTAuMDA0IC0wLjAxNCwtMC4wNzkgMC4wMTYsLTAuNTMzIDAsLTAuNjEgJyArXG4gICAgICAgICcwLjE5NSwtMC4wNDIgOC41MDcsMC4wMDYgOS42MTYsMC4wMDIgMC44NzcsLTAuMDA3IDEuMzUsLTAuNDM4IDEuMzUzLC0xLjIwOCAwLjAwMywtMC43NjggLTAuNDc5LC0xLjA5ICcgK1xuICAgICAgICAnLTEuMzUsLTEuMDkxIC0yLjk2OCwtMC4wMDIgLTkuNjE5LC0wLjAxMyAtOS42MTksLTAuMDEzIHYgLTAuNTkxIGMgMCwwIDUuMDUyLC0wLjAxNiA3LjIyNSwtMC4wMTYgJyArXG4gICAgICAgICcwLjg4OCwtMC4wMDIgMS4zNTQsLTAuNDE2IDEuMzUxLC0xLjE5MyAtMC4wMDYsLTAuNzYxIC0wLjQ5MiwtMS4xOTYgLTEuMzYxLC0xLjE5NiAtMy40NzMsLTAuMDA1ICcgK1xuICAgICAgICAnLTEwLjg2LC0wLjAwMyAtMTEuMDgyOTk5NSwtMC4wMDMgLTAuMDIyLC0wLjA0NyAtMC4wNDUsLTAuMDk0IC0wLjA2OSwtMC4xMzkgMC4zOTM5OTk1LC0wLjMxOSAnICtcbiAgICAgICAgJzIuMDQwOTk5NSwtMS42MjYgMi40MTQ5OTk1LC0yLjAxNyAwLjQ2OSwtMC40ODcwMDA1IDAuNTE5LC0xLjE2NTAwMDUgMC4xNjIsLTEuNjA0MDAwNSAtMC40MTQsLTAuNTExICcgK1xuICAgICAgICAnLTAuOTczLC0wLjUgLTEuNDgsLTAuMjM2IC0xLjQ2MDk5OTUsMC43NjQgLTYuNTk5OTk5NSwzLjY0MzAwMDUgLTcuNzMyOTk5NSw0LjI3MTAwMDUgLTAuOSwwLjQ5OSAnICtcbiAgICAgICAgJy0xLjUxNiwxLjI1MyAtMS44ODIsMi4xOSAtMC4zNzAwMDAwMiwwLjk1IC0wLjE3LDIuMDEgLTAuMTY2LDIuOTc5IDAuMDA0LDAuNzE4IC0wLjI3MzAwMDAyLDEuMzQ1ICcgK1xuICAgICAgICAnLTAuMDU1LDIuMDYzIDAuNjI5LDIuMDg3IDIuNDI1LDMuMzEyIDQuODU5LDMuMzE4IDQuNjE3OTk5NSwwLjAxNCA5LjIzNzk5OTUsLTAuMTM5IDEzLjg1Njk5OTUsLTAuMTU4ICcgK1xuICAgICAgICAnMC43NTUsLTAuMDA0IDEuMTcxLC0wLjMwMSAxLjE4MiwtMS4wMzMgMC4wMTIsLTAuNzU0IC0wLjQyMywtMC45NjkgLTEuMTgzLC0wLjk3MyAtMS43NzgsLTAuMDEgJyArXG4gICAgICAgICctNS44MjQsLTAuMDA0IC02LjA0LC0wLjAwNCAxMGUtNCwtMC4wODQgMC4wMDMsLTAuNTg2IDEwZS00LC0wLjY3IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0lOU1RBTlRJQVRJTkdfU0VORCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBsIDAsOC40IGwgMTIuNiwwIGwgMCwtOC40IHogbCA2LjMsMy42IGwgNi4zLC0zLjYnXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NFUlZJQ0UnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gdiAtMS43MTMzNSBjIDAuMzUyMzI2LC0wLjA3MDUgMC43MDM5MzIsLTAuMTc4MzggMS4wNDc2MjgsLTAuMzIxMzMgJyArXG4gICAgICAgICcwLjM0NDQxNiwtMC4xNDQ2NSAwLjY2NTgyMiwtMC4zMjEzMyAwLjk2NjM3NywtMC41MjE0NSBsIDEuMTk0MzEsMS4xODAwNSAxLjU2NzQ4NywtMS41NzY4OCAnICtcbiAgICAgICAgJy0xLjE5NTAyOCwtMS4xODAxNCBjIDAuNDAzMzc2LC0wLjYxMzk0IDAuNjgzMDc5LC0xLjI5OTA4IDAuODI1NDQ3LC0yLjAxODI0IGwgMS42MjIxMzMsLTAuMDEgJyArXG4gICAgICAgICd2IC0yLjIxOTYgbCAtMS42MzY1MTQsMC4wMSBjIC0wLjA3MzMzLC0wLjM1MTUzIC0wLjE3ODMxOSwtMC43MDAyNCAtMC4zMjM1NjQsLTEuMDQzNzIgJyArXG4gICAgICAgICctMC4xNDUyNDQsLTAuMzQ0MDYgLTAuMzIxNDA3LC0wLjY2NDQgLTAuNTIyNzM1LC0wLjk2MjE3IGwgMS4xMzEwMzUsLTEuMTM2MzEgLTEuNTgzMzA1LC0xLjU2MjkzICcgK1xuICAgICAgICAnLTEuMTI5NTk4LDEuMTM1ODkgYyAtMC42MTQwNTIsLTAuNDAxMDggLTEuMzAyODgzLC0wLjY4MDkzIC0yLjAyMjYzMywtMC44MjI0NyBsIDAuMDA5MywtMS42MTg1MiAnICtcbiAgICAgICAgJ2ggLTIuMjQxMTczIGwgMC4wMDQyLDEuNjMxMjQgYyAtMC4zNTM3NjMsMC4wNzM2IC0wLjcwNTM2OSwwLjE3OTc3IC0xLjA0OTc4NSwwLjMyMzcxIC0wLjM0NDQxNSwwLjE0NDM3ICcgK1xuICAgICAgICAnLTAuNjY1MTAyLDAuMzIwOTIgLTAuOTYzNTAwNiwwLjUyMDQ2IGwgLTEuMTY5ODYyOCwtMS4xNTgyMyAtMS41NjY3NjkxLDEuNTc5MiAxLjE2ODQyNjUsMS4xNTY2OSAnICtcbiAgICAgICAgJ2MgLTAuNDAyNjU3MywwLjYxMjgzIC0wLjY4MzA4LDEuMjk3OTcgLTAuODI0NzI4NywyLjAxNzEzIGwgLTEuNjU4ODA0MSwwLjAwMyB2IDIuMjIxNzQgJyArXG4gICAgICAgICdsIDEuNjcyNDY0OCwtMC4wMDYgYyAwLjA3MzMyNywwLjM1MDc3IDAuMTc5NzU5OCwwLjcwMjQzIDAuMzI0Mjg1MSwxLjA0NDcyIDAuMTQ1MjQyOCwwLjM0NDQ4ICcgK1xuICAgICAgICAnMC4zMjE0MDY0LDAuNjY0NCAwLjUyMjczMzksMC45NjA2NiBsIC0xLjE5OTM0MzEsMS4xOTcyMyAxLjU4NDAyNTYsMS41NjAxMSAxLjE5NjQ2NjgsLTEuMTkzNDggJyArXG4gICAgICAgICdjIDAuNjE0MDUxNywwLjQwMzQ2IDEuMzAyODgyNywwLjY4MjMyIDIuMDIzMzUxNywwLjgyMzMxIGwgNy4xOWUtNCwxLjY5ODkyIGggMi4yMjY4NDggeiAnICtcbiAgICAgICAgJ20gMC4yMjE0NjIsLTMuOTk1NyBjIC0xLjc4ODk0OCwwLjc1MDIgLTMuODU3NiwtMC4wOTI4IC00LjYwOTcwNTUsLTEuODc0MzggLTAuNzUyMTA2NSwtMS43ODMyMSAnICtcbiAgICAgICAgJzAuMDkwNTk4LC0zLjg0NjI3IDEuODgwMjY0NSwtNC41OTYwNCAxLjc4ODIzLC0wLjc0OTM2IDMuODU2ODgxLDAuMDkyOSA0LjYwODk4NywxLjg3NDM3ICcgK1xuICAgICAgICAnMC43NTIxMDYsMS43ODE2NSAtMC4wOTA2LDMuODQ2MTIgLTEuODc5NTQ2LDQuNTk2MDUgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfU0VSVklDRV9GSUxMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgLTEuNzg4OTQ4LDAuNzUwMiAtMy44NTc2LC0wLjA5MjggLTQuNjA5NzA1NSwtMS44NzQzOCAtMC43NTIxMDY1LC0xLjc4MzIxICcgK1xuICAgICAgICAnMC4wOTA1OTgsLTMuODQ2MjcgMS44ODAyNjQ1LC00LjU5NjA0IDEuNzg4MjMsLTAuNzQ5MzYgMy44NTY4ODEsMC4wOTI5IDQuNjA4OTg3LDEuODc0MzcgJyArXG4gICAgICAgICcwLjc1MjEwNiwxLjc4MTY1IC0wLjA5MDYsMy44NDYxMiAtMS44Nzk1NDYsNC41OTYwNSB6J1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9CVVNJTkVTU19SVUxFX0hFQURFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDQgMjAsMCAwLC00IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfTUFJTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDEyIDIwLDAgMCwtMTIgeicgK1xuICAgICAgICAnbSAwLDggbCAyMCwwICcgK1xuICAgICAgICAnbSAtMTMsLTQgbCAwLDgnXG4gICAgfSxcbiAgICAnTUVTU0FHRV9GTE9XX01BUktFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBtIC0xMC41ICwtNyBsIDAsMTQgbCAyMSwwIGwgMCwtMTQgeiBsIDEwLjUsNiBsIDEwLjUsLTYnXG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZ2V0UmF3UGF0aCA9IGZ1bmN0aW9uIGdldFJhd1BhdGgocGF0aElkKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aE1hcFtwYXRoSWRdLmQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNjYWxlcyB0aGUgcGF0aCB0byB0aGUgZ2l2ZW4gaGVpZ2h0IGFuZCB3aWR0aC5cbiAgICogPGgxPlVzZSBjYXNlPC9oMT5cbiAgICogPHA+VXNlIGNhc2UgaXMgdG8gc2NhbGUgdGhlIGNvbnRlbnQgb2YgZWxlbWVudHMgKGV2ZW50LCBnYXRld2F5cykgYmFzZWRcbiAgICogb24gdGhlIGVsZW1lbnQgYm91bmRpbmcgYm94J3Mgc2l6ZS5cbiAgICogPC9wPlxuICAgKiA8aDE+V2h5IG5vdCB0cmFuc2Zvcm08L2gxPlxuICAgKiA8cD5TY2FsaW5nIGEgcGF0aCB3aXRoIHRyYW5zZm9ybSgpIHdpbGwgYWxzbyBzY2FsZSB0aGUgc3Ryb2tlIGFuZCBJRSBkb2VzIG5vdCBzdXBwb3J0XG4gICAqIHRoZSBvcHRpb24gJ25vbi1zY2FsaW5nLXN0cm9rZScgdG8gcHJldmVudCB0aGlzLlxuICAgKiBBbHNvIHRoZXJlIGFyZSB1c2UgY2FzZXMgd2hlcmUgb25seSBzb21lIHBhcnRzIG9mIGEgcGF0aCBzaG91bGQgYmVcbiAgICogc2NhbGVkLjwvcD5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhJZCBUaGUgSUQgb2YgdGhlIHBhdGguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSA8cD5cbiAgICogICBFeGFtcGxlIHBhcmFtIG9iamVjdCBzY2FsZXMgdGhlIHBhdGggdG8gNjAlIHNpemUgb2YgdGhlIGNvbnRhaW5lciAoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLlxuICAgKiAgIDxwcmU+XG4gICAqICAge1xuICAgKiAgICAgeFNjYWxlRmFjdG9yOiAwLjYsXG4gICAqICAgICB5U2NhbGVGYWN0b3I6MC42LFxuICAgKiAgICAgY29udGFpbmVyV2lkdGg6IGRhdGEud2lkdGgsXG4gICAqICAgICBjb250YWluZXJIZWlnaHQ6IGRhdGEuaGVpZ2h0LFxuICAgKiAgICAgcG9zaXRpb246IHtcbiAgICogICAgICAgbXg6IDAuNDYsXG4gICAqICAgICAgIG15OiAwLjIsXG4gICAqICAgICB9XG4gICAqICAgfVxuICAgKiAgIDwvcHJlPlxuICAgKiAgIDx1bD5cbiAgICogICAgPGxpPnRhcmdldHBhdGh3aWR0aCA9IHhTY2FsZUZhY3RvciAqIGNvbnRhaW5lcldpZHRoPC9saT5cbiAgICogICAgPGxpPnRhcmdldHBhdGhoZWlnaHQgPSB5U2NhbGVGYWN0b3IgKiBjb250YWluZXJIZWlnaHQ8L2xpPlxuICAgKiAgICA8bGk+UG9zaXRpb24gaXMgdXNlZCB0byBzZXQgdGhlIHN0YXJ0aW5nIGNvb3JkaW5hdGUgb2YgdGhlIHBhdGguIE0gaXMgY29tcHV0ZWQ6XG4gICAgKiAgICA8dWw+XG4gICAgKiAgICAgIDxsaT5wb3NpdGlvbi54ICogY29udGFpbmVyV2lkdGg8L2xpPlxuICAgICogICAgICA8bGk+cG9zaXRpb24ueSAqIGNvbnRhaW5lckhlaWdodDwvbGk+XG4gICAgKiAgICA8L3VsPlxuICAgICogICAgQ2VudGVyIG9mIHRoZSBjb250YWluZXIgPHByZT4gcG9zaXRpb246IHtcbiAgICogICAgICAgbXg6IDAuNSxcbiAgICogICAgICAgbXk6IDAuNSxcbiAgICogICAgIH08L3ByZT5cbiAgICogICAgIFVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBjb250YWluZXJcbiAgICogICAgIDxwcmU+IHBvc2l0aW9uOiB7XG4gICAqICAgICAgIG14OiAwLjAsXG4gICAqICAgICAgIG15OiAwLjAsXG4gICAqICAgICB9PC9wcmU+XG4gICAqICAgIDwvbGk+XG4gICAqICAgPC91bD5cbiAgICogPC9wPlxuICAgKlxuICAgKi9cbiAgdGhpcy5nZXRTY2FsZWRQYXRoID0gZnVuY3Rpb24gZ2V0U2NhbGVkUGF0aChwYXRoSWQsIHBhcmFtKSB7XG4gICAgdmFyIHJhd1BhdGggPSB0aGlzLnBhdGhNYXBbcGF0aElkXTtcblxuICAgIC8vIHBvc2l0aW9uaW5nXG4gICAgLy8gY29tcHV0ZSB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIHBhdGhcbiAgICB2YXIgbXgsIG15O1xuXG4gICAgaWYgKHBhcmFtLmFic3Bvcykge1xuICAgICAgbXggPSBwYXJhbS5hYnNwb3MueDtcbiAgICAgIG15ID0gcGFyYW0uYWJzcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG14ID0gcGFyYW0uY29udGFpbmVyV2lkdGggKiBwYXJhbS5wb3NpdGlvbi5teDtcbiAgICAgIG15ID0gcGFyYW0uY29udGFpbmVySGVpZ2h0ICogcGFyYW0ucG9zaXRpb24ubXk7XG4gICAgfVxuXG4gICAgdmFyIGNvb3JkaW5hdGVzID0ge307IC8vIG1hcCBmb3IgdGhlIHNjYWxlZCBjb29yZGluYXRlc1xuICAgIGlmIChwYXJhbS5wb3NpdGlvbikge1xuXG4gICAgICAvLyBwYXRoXG4gICAgICB2YXIgaGVpZ2h0UmF0aW8gPSAocGFyYW0uY29udGFpbmVySGVpZ2h0IC8gcmF3UGF0aC5oZWlnaHQpICogcGFyYW0ueVNjYWxlRmFjdG9yO1xuICAgICAgdmFyIHdpZHRoUmF0aW8gPSAocGFyYW0uY29udGFpbmVyV2lkdGggLyByYXdQYXRoLndpZHRoKSAqIHBhcmFtLnhTY2FsZUZhY3RvcjtcblxuXG4gICAgICAvLyBBcHBseSBoZWlnaHQgcmF0aW9cbiAgICAgIGZvciAodmFyIGhlaWdodEluZGV4ID0gMDsgaGVpZ2h0SW5kZXggPCByYXdQYXRoLmhlaWdodEVsZW1lbnRzLmxlbmd0aDsgaGVpZ2h0SW5kZXgrKykge1xuICAgICAgICBjb29yZGluYXRlc1sneScgKyBoZWlnaHRJbmRleF0gPSByYXdQYXRoLmhlaWdodEVsZW1lbnRzW2hlaWdodEluZGV4XSAqIGhlaWdodFJhdGlvO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSB3aWR0aCByYXRpb1xuICAgICAgZm9yICh2YXIgd2lkdGhJbmRleCA9IDA7IHdpZHRoSW5kZXggPCByYXdQYXRoLndpZHRoRWxlbWVudHMubGVuZ3RoOyB3aWR0aEluZGV4KyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXNbJ3gnICsgd2lkdGhJbmRleF0gPSByYXdQYXRoLndpZHRoRWxlbWVudHNbd2lkdGhJbmRleF0gKiB3aWR0aFJhdGlvO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHZhbHVlIHRvIHJhdyBwYXRoXG4gICAgdmFyIHBhdGggPSBmb3JtYXQoXG4gICAgICByYXdQYXRoLmQsIHtcbiAgICAgICAgbXg6IG14LFxuICAgICAgICBteTogbXksXG4gICAgICAgIGU6IGNvb3JkaW5hdGVzXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hZG9iZS13ZWJwbGF0Zm9ybS9TbmFwLnN2Zy9ibG9iL21hc3Rlci9zcmMvc3ZnLmpzXG52YXIgdG9rZW5SZWdleCA9IC9cXHsoW159XSspXFx9L2csXG4gICAgb2JqTm90YXRpb25SZWdleCA9IC8oPzooPzpefFxcLikoLis/KSg/PVxcW3xcXC58JHxcXCgpfFxcWygnfFwiKSguKz8pXFwyXFxdKShcXChcXCkpPy9nOyAvLyBtYXRjaGVzIC54eHh4eCBvciBbXCJ4eHh4eFwiXSB0byBydW4gb3ZlciBvYmplY3QgcHJvcGVydGllc1xuXG5mdW5jdGlvbiByZXBsYWNlcihhbGwsIGtleSwgb2JqKSB7XG4gIHZhciByZXMgPSBvYmo7XG4gIGtleS5yZXBsYWNlKG9iak5vdGF0aW9uUmVnZXgsIGZ1bmN0aW9uKGFsbCwgbmFtZSwgcXVvdGUsIHF1b3RlZE5hbWUsIGlzRnVuYykge1xuICAgIG5hbWUgPSBuYW1lIHx8IHF1b3RlZE5hbWU7XG4gICAgaWYgKHJlcykge1xuICAgICAgaWYgKG5hbWUgaW4gcmVzKSB7XG4gICAgICAgIHJlcyA9IHJlc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHR5cGVvZiByZXMgPT0gJ2Z1bmN0aW9uJyAmJiBpc0Z1bmMgJiYgKHJlcyA9IHJlcygpKTtcbiAgICB9XG4gIH0pO1xuICByZXMgPSAocmVzID09IG51bGwgfHwgcmVzID09IG9iaiA/IGFsbCA6IHJlcykgKyAnJztcblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoc3RyLCBvYmopIHtcbiAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UodG9rZW5SZWdleCwgZnVuY3Rpb24oYWxsLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZXIoYWxsLCBrZXksIG9iaik7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgVGV4dFV0aWwgZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9UZXh0JztcblxudmFyIERFRkFVTFRfRk9OVF9TSVpFID0gMTI7XG52YXIgTElORV9IRUlHSFRfUkFUSU8gPSAxLjI7XG5cbnZhciBNSU5fVEVYVF9BTk5PVEFUSU9OX0hFSUdIVCA9IDMwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRleHRSZW5kZXJlcihjb25maWcpIHtcblxuICB2YXIgZGVmYXVsdFN0eWxlID0gYXNzaWduKHtcbiAgICBmb250RmFtaWx5OiAnQXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgIGZvbnRTaXplOiBERUZBVUxUX0ZPTlRfU0laRSxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBsaW5lSGVpZ2h0OiBMSU5FX0hFSUdIVF9SQVRJT1xuICB9LCBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRTdHlsZSB8fCB7fSk7XG5cbiAgdmFyIGZvbnRTaXplID0gcGFyc2VJbnQoZGVmYXVsdFN0eWxlLmZvbnRTaXplLCAxMCkgLSAxO1xuXG4gIHZhciBleHRlcm5hbFN0eWxlID0gYXNzaWduKHt9LCBkZWZhdWx0U3R5bGUsIHtcbiAgICBmb250U2l6ZTogZm9udFNpemVcbiAgfSwgY29uZmlnICYmIGNvbmZpZy5leHRlcm5hbFN0eWxlIHx8IHt9KTtcblxuICB2YXIgdGV4dFV0aWwgPSBuZXcgVGV4dFV0aWwoe1xuICAgIHN0eWxlOiBkZWZhdWx0U3R5bGVcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV3IGJvdW5kcyBvZiBhbiBleHRlcm5hbGx5IHJlbmRlcmVkLFxuICAgKiBsYXlvdXRlZCBsYWJlbC5cbiAgICpcbiAgICogQHBhcmFtICB7Qm91bmRzfSBib3VuZHNcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0XG4gICAqXG4gICAqIEByZXR1cm4ge0JvdW5kc31cbiAgICovXG4gIHRoaXMuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyA9IGZ1bmN0aW9uKGJvdW5kcywgdGV4dCkge1xuXG4gICAgdmFyIGxheW91dGVkRGltZW5zaW9ucyA9IHRleHRVdGlsLmdldERpbWVuc2lvbnModGV4dCwge1xuICAgICAgYm94OiB7XG4gICAgICAgIHdpZHRoOiA5MCxcbiAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgeDogYm91bmRzLndpZHRoIC8gMiArIGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMuaGVpZ2h0IC8gMiArIGJvdW5kcy55XG4gICAgICB9LFxuICAgICAgc3R5bGU6IGV4dGVybmFsU3R5bGVcbiAgICB9KTtcblxuICAgIC8vIHJlc2l6ZSBsYWJlbCBzaGFwZSB0byBmaXQgbGFiZWwgdGV4dFxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMiAtIGxheW91dGVkRGltZW5zaW9ucy53aWR0aCAvIDIpLFxuICAgICAgeTogTWF0aC5yb3VuZChib3VuZHMueSksXG4gICAgICB3aWR0aDogTWF0aC5jZWlsKGxheW91dGVkRGltZW5zaW9ucy53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGguY2VpbChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KVxuICAgIH07XG5cbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBuZXcgYm91bmRzIG9mIHRleHQgYW5ub3RhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtICB7Qm91bmRzfSBib3VuZHNcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0XG4gICAqXG4gICAqIEByZXR1cm4ge0JvdW5kc31cbiAgICovXG4gIHRoaXMuZ2V0VGV4dEFubm90YXRpb25Cb3VuZHMgPSBmdW5jdGlvbihib3VuZHMsIHRleHQpIHtcblxuICAgIHZhciBsYXlvdXRlZERpbWVuc2lvbnMgPSB0ZXh0VXRpbC5nZXREaW1lbnNpb25zKHRleHQsIHtcbiAgICAgIGJveDogYm91bmRzLFxuICAgICAgc3R5bGU6IGRlZmF1bHRTdHlsZSxcbiAgICAgIGFsaWduOiAnbGVmdC10b3AnLFxuICAgICAgcGFkZGluZzogNVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgeTogYm91bmRzLnksXG4gICAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBNYXRoLm1heChNSU5fVEVYVF9BTk5PVEFUSU9OX0hFSUdIVCwgTWF0aC5yb3VuZChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KSlcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsYXlvdXRlZCB0ZXh0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gcmVuZGVyZWQgdGV4dFxuICAgKi9cbiAgdGhpcy5jcmVhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiB0ZXh0VXRpbC5jcmVhdGVUZXh0KHRleHQsIG9wdGlvbnMgfHwge30pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCB0ZXh0IHN0eWxlLlxuICAgKi9cbiAgdGhpcy5nZXREZWZhdWx0U3R5bGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdFN0eWxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dGVybmFsIHRleHQgc3R5bGUuXG4gICAqL1xuICB0aGlzLmdldEV4dGVybmFsU3R5bGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZXh0ZXJuYWxTdHlsZTtcbiAgfTtcblxufVxuXG5UZXh0UmVuZGVyZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy50ZXh0UmVuZGVyZXInXG5dOyIsImltcG9ydCBCcG1uUmVuZGVyZXIgZnJvbSAnLi9CcG1uUmVuZGVyZXInO1xuaW1wb3J0IFRleHRSZW5kZXJlciBmcm9tICcuL1RleHRSZW5kZXJlcic7XG5cbmltcG9ydCBQYXRoTWFwIGZyb20gJy4vUGF0aE1hcCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2JwbW5SZW5kZXJlcicgXSxcbiAgYnBtblJlbmRlcmVyOiBbICd0eXBlJywgQnBtblJlbmRlcmVyIF0sXG4gIHRleHRSZW5kZXJlcjogWyAndHlwZScsIFRleHRSZW5kZXJlciBdLFxuICBwYXRoTWFwOiBbICd0eXBlJywgUGF0aE1hcCBdXG59O1xuIiwiaW1wb3J0IHsgZ2V0TmV3U2hhcGVQb3NpdGlvbiB9IGZyb20gJy4vQnBtbkF1dG9QbGFjZVV0aWwnO1xuXG5cbi8qKlxuICogQlBNTiBhdXRvLXBsYWNlIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZShldmVudEJ1cykge1xuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBzaGFwZSk7XG4gIH0pO1xufVxuXG5BdXRvUGxhY2UuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgYXNUUkJMLFxuICBnZXRPcmllbnRhdGlvblxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmRGcmVlUG9zaXRpb24sXG4gIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uLFxuICBnZXRDb25uZWN0ZWREaXN0YW5jZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0F1dG9QbGFjZVV0aWwnO1xuXG5cbi8qKlxuICogRmluZCB0aGUgbmV3IHBvc2l0aW9uIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQgdG9cbiAqIGNvbm5lY3QgdG8gc291cmNlLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gc291cmNlXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICByZXR1cm4gZ2V0VGV4dEFubm90YXRpb25Qb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkpIHtcbiAgICByZXR1cm4gZ2V0RGF0YUVsZW1lbnRQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICByZXR1cm4gZ2V0Rmxvd05vZGVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogQWx3YXlzIHRyeSB0byBwbGFjZSBlbGVtZW50IHJpZ2h0IG9mIHNvdXJjZTtcbiAqIGNvbXB1dGUgYWN0dWFsIGRpc3RhbmNlIGZyb20gcHJldmlvdXMgbm9kZXMgaW4gZmxvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dOb2RlUG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgdmFyIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcbiAgdmFyIHNvdXJjZU1pZCA9IGdldE1pZChzb3VyY2UpO1xuXG4gIHZhciBob3Jpem9udGFsRGlzdGFuY2UgPSBnZXRDb25uZWN0ZWREaXN0YW5jZShzb3VyY2UsIHtcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBtYXJnaW4gPSAzMCxcbiAgICAgIG1pbkRpc3RhbmNlID0gODAsXG4gICAgICBvcmllbnRhdGlvbiA9ICdsZWZ0JztcblxuICBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHNvdXJjZSwgc291cmNlLmhvc3QsIC0yNSk7XG5cbiAgICBpZiAob3JpZW50YXRpb24uaW5kZXhPZigndG9wJykgIT09IC0xKSB7XG4gICAgICBtYXJnaW4gKj0gLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBvc2l0aW9uID0ge1xuICAgIHg6IHNvdXJjZVRyYmwucmlnaHQgKyBob3Jpem9udGFsRGlzdGFuY2UgKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICB5OiBzb3VyY2VNaWQueSArIGdldFZlcnRpY2FsRGlzdGFuY2Uob3JpZW50YXRpb24sIG1pbkRpc3RhbmNlKVxuICB9O1xuXG4gIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb24gPSB7XG4gICAgeToge1xuICAgICAgbWFyZ2luOiBtYXJnaW4sXG4gICAgICBtaW5EaXN0YW5jZTogbWluRGlzdGFuY2VcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSk7XG59XG5cblxuZnVuY3Rpb24gZ2V0VmVydGljYWxEaXN0YW5jZShvcmllbnRhdGlvbiwgbWluRGlzdGFuY2UpIHtcbiAgaWYgKG9yaWVudGF0aW9uLmluZGV4T2YoJ3RvcCcpICE9IC0xKSB7XG4gICAgcmV0dXJuIC0xICogbWluRGlzdGFuY2U7XG4gIH0gZWxzZSBpZiAob3JpZW50YXRpb24uaW5kZXhPZignYm90dG9tJykgIT0gLTEpIHtcbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vKipcbiAqIEFsd2F5cyB0cnkgdG8gcGxhY2UgdGV4dCBhbm5vdGF0aW9ucyB0b3AgcmlnaHQgb2Ygc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEFubm90YXRpb25Qb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHtcblxuICB2YXIgc291cmNlVHJibCA9IGFzVFJCTChzb3VyY2UpO1xuXG4gIHZhciBwb3NpdGlvbiA9IHtcbiAgICB4OiBzb3VyY2VUcmJsLnJpZ2h0ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlVHJibC50b3AgLSA1MCAtIGVsZW1lbnQuaGVpZ2h0IC8gMlxuICB9O1xuXG4gIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb24gPSB7XG4gICAgeToge1xuICAgICAgbWFyZ2luOiAtMzAsXG4gICAgICBtaW5EaXN0YW5jZTogMjBcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSk7XG59XG5cblxuLyoqXG4gKiBBbHdheXMgcHV0IGVsZW1lbnQgYm90dG9tIHJpZ2h0IG9mIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFFbGVtZW50UG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgdmFyIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCAtIDEwICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlVHJibC5ib3R0b20gKyA0MCArIGVsZW1lbnQud2lkdGggLyAyXG4gIH07XG5cbiAgdmFyIG5leHRQb3NpdGlvbkRpcmVjdGlvbiA9IHtcbiAgICB4OiB7XG4gICAgICBtYXJnaW46IDMwLFxuICAgICAgbWluRGlzdGFuY2U6IDMwXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBmaW5kRnJlZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgcG9zaXRpb24sIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uKG5leHRQb3NpdGlvbkRpcmVjdGlvbikpO1xufSIsImltcG9ydCBBdXRvUGxhY2VNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZSc7XG5cbmltcG9ydCBCcG1uQXV0b1BsYWNlIGZyb20gJy4vQnBtbkF1dG9QbGFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgQXV0b1BsYWNlTW9kdWxlIF0sXG4gIF9faW5pdF9fOiBbICdicG1uQXV0b1BsYWNlJyBdLFxuICBicG1uQXV0b1BsYWNlOiBbICd0eXBlJywgQnBtbkF1dG9QbGFjZSBdXG59OyIsImltcG9ydCBBdXRvUmVzaXplIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemUnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIFN1YiBjbGFzcyBvZiB0aGUgQXV0b1Jlc2l6ZSBtb2R1bGUgd2hpY2ggaW1wbGVtZW50cyBhIEJQTU5cbiAqIHNwZWNpZmljIHJlc2l6ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkF1dG9SZXNpemUoaW5qZWN0b3IpIHtcblxuICBpbmplY3Rvci5pbnZva2UoQXV0b1Jlc2l6ZSwgdGhpcyk7XG59XG5cbkJwbW5BdXRvUmVzaXplLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cbmluaGVyaXRzKEJwbW5BdXRvUmVzaXplLCBBdXRvUmVzaXplKTtcblxuXG4vKipcbiAqIFJlc2l6ZSBzaGFwZXMgYW5kIGxhbmVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBoaW50c1xuICovXG5CcG1uQXV0b1Jlc2l6ZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24odGFyZ2V0LCBuZXdCb3VuZHMsIGhpbnRzKSB7XG5cbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHRoaXMuX21vZGVsaW5nLnJlc2l6ZUxhbmUodGFyZ2V0LCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9tb2RlbGluZy5yZXNpemVTaGFwZSh0YXJnZXQsIG5ld0JvdW5kcywgbnVsbCwgaGludHMpO1xuICB9XG59OyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQXV0b1Jlc2l6ZVByb3ZpZGVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemVQcm92aWRlcic7XG5cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBpcyBhIHByb3ZpZGVyIGZvciBhdXRvbWF0aWNhbGx5IHJlc2l6aW5nIHBhcmVudCBCUE1OIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5BdXRvUmVzaXplUHJvdmlkZXIoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG4gIEF1dG9SZXNpemVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5pbmhlcml0cyhCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLCBBdXRvUmVzaXplUHJvdmlkZXIpO1xuXG5CcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdGFyZ2V0IGNhbiBiZSBleHBhbmRlZFxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gdGFyZ2V0XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQnBtbkF1dG9SZXNpemVQcm92aWRlci5wcm90b3R5cGUuY2FuUmVzaXplID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCkge1xuXG4gIGlmICghaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpcyh0YXJnZXQsICdicG1uOkxhbmUnKSAmJiAhKGlzKHRhcmdldCwgJ2JwbW46U3ViUHJvY2VzcycpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjYW5SZXNpemUgPSB0cnVlO1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgY2FuUmVzaXplID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2FuUmVzaXplO1xufTtcbiIsImltcG9ydCBCcG1uQXV0b1Jlc2l6ZSBmcm9tICcuL0JwbW5BdXRvUmVzaXplJztcbmltcG9ydCBCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyIGZyb20gJy4vQnBtbkF1dG9SZXNpemVQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdicG1uQXV0b1Jlc2l6ZScsXG4gICAgJ2JwbW5BdXRvUmVzaXplUHJvdmlkZXInXG4gIF0sXG4gIGJwbW5BdXRvUmVzaXplOiBbICd0eXBlJywgQnBtbkF1dG9SZXNpemUgXSxcbiAgYnBtbkF1dG9SZXNpemVQcm92aWRlcjogWyAndHlwZScsIEJwbW5BdXRvUmVzaXplUHJvdmlkZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZCxcbiAgaXNFdmVudFN1YlByb2Nlc3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldENoaWxkTGFuZXNcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9MYW5lVXRpbCc7XG5cbmltcG9ydCB7XG4gIGhhc1ByaW1hcnlNb2RpZmllclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vdXNlJztcblxuXG4vKipcbiAqIEEgcHJvdmlkZXIgZm9yIEJQTU4gMi4wIGVsZW1lbnRzIGNvbnRleHQgcGFkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbnRleHRQYWRQcm92aWRlcihcbiAgICBjb25maWcsIGluamVjdG9yLCBldmVudEJ1cyxcbiAgICBjb250ZXh0UGFkLCBtb2RlbGluZywgZWxlbWVudEZhY3RvcnksXG4gICAgY29ubmVjdCwgY3JlYXRlLCBwb3B1cE1lbnUsXG4gICAgY2FudmFzLCBydWxlcywgdHJhbnNsYXRlKSB7XG5cbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcblxuICB0aGlzLl9jb250ZXh0UGFkID0gY29udGV4dFBhZDtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuXG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2Nvbm5lY3QgPSBjb25uZWN0O1xuICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgaWYgKGNvbmZpZy5hdXRvUGxhY2UgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5fYXV0b1BsYWNlID0gaW5qZWN0b3IuZ2V0KCdhdXRvUGxhY2UnLCBmYWxzZSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY3JlYXRlLmVuZCcsIDI1MCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmICghaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KSB8fCAhY29udGV4dFBhZC5pc09wZW4oc2hhcGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVudHJpZXMgPSBjb250ZXh0UGFkLmdldEVudHJpZXMoc2hhcGUpO1xuXG4gICAgaWYgKGVudHJpZXMucmVwbGFjZSkge1xuICAgICAgZW50cmllcy5yZXBsYWNlLmFjdGlvbi5jbGljayhldmVudCwgc2hhcGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbkNvbnRleHRQYWRQcm92aWRlci4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmNvbnRleHRQYWQnLFxuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY29udGV4dFBhZCcsXG4gICdtb2RlbGluZycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdjb25uZWN0JyxcbiAgJ2NyZWF0ZScsXG4gICdwb3B1cE1lbnUnLFxuICAnY2FudmFzJyxcbiAgJ3J1bGVzJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuQ29udGV4dFBhZFByb3ZpZGVyLnByb3RvdHlwZS5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgY29udGV4dFBhZCA9IHRoaXMuX2NvbnRleHRQYWQsXG4gICAgICBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuXG4gICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LFxuICAgICAgY29ubmVjdCA9IHRoaXMuX2Nvbm5lY3QsXG4gICAgICBjcmVhdGUgPSB0aGlzLl9jcmVhdGUsXG4gICAgICBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnUsXG4gICAgICBjYW52YXMgPSB0aGlzLl9jYW52YXMsXG4gICAgICBydWxlcyA9IHRoaXMuX3J1bGVzLFxuICAgICAgYXV0b1BsYWNlID0gdGhpcy5fYXV0b1BsYWNlLFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIHZhciBhY3Rpb25zID0ge307XG5cbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2xhYmVsJykge1xuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICBmdW5jdGlvbiBzdGFydENvbm5lY3QoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25uZWN0LnN0YXJ0KGV2ZW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZSkge1xuICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKFsgZWxlbWVudCBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJlcGxhY2VNZW51UG9zaXRpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIFlfT0ZGU0VUID0gNTtcblxuICAgIHZhciBkaWFncmFtQ29udGFpbmVyID0gY2FudmFzLmdldENvbnRhaW5lcigpLFxuICAgICAgICBwYWQgPSBjb250ZXh0UGFkLmdldFBhZChlbGVtZW50KS5odG1sO1xuXG4gICAgdmFyIGRpYWdyYW1SZWN0ID0gZGlhZ3JhbUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgcGFkUmVjdCA9IHBhZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciB0b3AgPSBwYWRSZWN0LnRvcCAtIGRpYWdyYW1SZWN0LnRvcDtcbiAgICB2YXIgbGVmdCA9IHBhZFJlY3QubGVmdCAtIGRpYWdyYW1SZWN0LmxlZnQ7XG5cbiAgICB2YXIgcG9zID0ge1xuICAgICAgeDogbGVmdCxcbiAgICAgIHk6IHRvcCArIHBhZFJlY3QuaGVpZ2h0ICsgWV9PRkZTRVRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBvcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcHBlbmQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0aXRsZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGRlc2NyaXB0b3JcbiAgICovXG4gIGZ1bmN0aW9uIGFwcGVuZEFjdGlvbih0eXBlLCBjbGFzc05hbWUsIHRpdGxlLCBvcHRpb25zKSB7XG5cbiAgICBpZiAodHlwZW9mIHRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IHRpdGxlO1xuICAgICAgdGl0bGUgPSB0cmFuc2xhdGUoJ0FwcGVuZCB7dHlwZX0nLCB7IHR5cGU6IHR5cGUucmVwbGFjZSgvXmJwbW46LywgJycpIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGVuZFN0YXJ0KGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGFzc2lnbih7IHR5cGU6IHR5cGUgfSwgb3B0aW9ucykpO1xuICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwge1xuICAgICAgICBzb3VyY2U6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgdmFyIGFwcGVuZCA9IGF1dG9QbGFjZSA/IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICB2YXIgc2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZShhc3NpZ24oeyB0eXBlOiB0eXBlIH0sIG9wdGlvbnMpKTtcblxuICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XG4gICAgfSA6IGFwcGVuZFN0YXJ0O1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXA6ICdtb2RlbCcsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGFwcGVuZFN0YXJ0LFxuICAgICAgICBjbGljazogYXBwZW5kXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNwbGl0TGFuZUhhbmRsZXIoY291bnQpIHtcblxuICAgIHJldHVybiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuXG4gICAgICAvLyBhY3R1YWwgc3BsaXRcbiAgICAgIG1vZGVsaW5nLnNwbGl0TGFuZShlbGVtZW50LCBjb3VudCk7XG5cbiAgICAgIC8vIHJlZnJlc2ggY29udGV4dCBwYWQgYWZ0ZXIgc3BsaXQgdG9cbiAgICAgIC8vIGdldCByaWQgb2Ygc3BsaXQgaWNvbnNcbiAgICAgIGNvbnRleHRQYWQub3BlbihlbGVtZW50LCB0cnVlKTtcbiAgICB9O1xuICB9XG5cblxuICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46TGFuZScsICdicG1uOlBhcnRpY2lwYW50JyBdKSAmJiBpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKGVsZW1lbnQpO1xuXG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdsYW5lLWluc2VydC1hYm92ZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdsYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1sYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FkZCBMYW5lIGFib3ZlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuICAgICAgICAgICAgbW9kZWxpbmcuYWRkTGFuZShlbGVtZW50LCAndG9wJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGggPCAyKSB7XG5cbiAgICAgIGlmIChlbGVtZW50LmhlaWdodCA+PSAxMjApIHtcbiAgICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgICAnbGFuZS1kaXZpZGUtdHdvJzoge1xuICAgICAgICAgICAgZ3JvdXA6ICdsYW5lLWRpdmlkZScsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1kaXZpZGUtdHdvJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHR3byBMYW5lcycpLFxuICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBzcGxpdExhbmVIYW5kbGVyKDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQuaGVpZ2h0ID49IDE4MCkge1xuICAgICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAgICdsYW5lLWRpdmlkZS10aHJlZSc6IHtcbiAgICAgICAgICAgIGdyb3VwOiAnbGFuZS1kaXZpZGUnLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxhbmUtZGl2aWRlLXRocmVlJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHRocmVlIExhbmVzJyksXG4gICAgICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IHNwbGl0TGFuZUhhbmRsZXIoMylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnbGFuZS1pbnNlcnQtYmVsb3cnOiB7XG4gICAgICAgIGdyb3VwOiAnbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdBZGQgTGFuZSBiZWxvdycpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLmFkZExhbmUoZWxlbWVudCwgJ2JvdHRvbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dOb2RlJykpIHtcblxuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuXG4gICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAnYXBwZW5kLnJlY2VpdmUtdGFzayc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpSZWNlaXZlVGFzaycsXG4gICAgICAgICAgJ2JwbW4taWNvbi1yZWNlaXZlLXRhc2snLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIFJlY2VpdmVUYXNrJylcbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5tZXNzYWdlLWludGVybWVkaWF0ZS1ldmVudCc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1tZXNzYWdlJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBNZXNzYWdlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpLFxuICAgICAgICAgIHsgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLnRpbWVyLWludGVybWVkaWF0ZS1ldmVudCc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgVGltZXJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLmNvbmRpdGlvbi1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBDb25kaXRpb25JbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLnNpZ25hbC1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtc2lnbmFsJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBTaWduYWxJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXNFdmVudFR5cGUoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnLCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJykpIHtcblxuICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgJ2FwcGVuZC5jb21wZW5zYXRpb24tYWN0aXZpdHknOlxuICAgICAgICAgICAgYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICAgICAnYnBtbjpUYXNrJyxcbiAgICAgICAgICAgICAgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgY29tcGVuc2F0aW9uIGFjdGl2aXR5JyksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0ZvckNvbXBlbnNhdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICB9KTtcbiAgICB9IGVsc2VcblxuICAgIGlmICghaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkVuZEV2ZW50JykgJiZcbiAgICAgICAgIWJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uICYmXG4gICAgICAgICFpc0V2ZW50VHlwZShidXNpbmVzc09iamVjdCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSAmJlxuICAgICAgICAhaXNFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAgICdhcHBlbmQuZW5kLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkVuZEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBFbmRFdmVudCcpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuZ2F0ZXdheSc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWdhdGV3YXktbm9uZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgR2F0ZXdheScpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuYXBwZW5kLXRhc2snOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46VGFzaycsXG4gICAgICAgICAgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBUYXNrJylcbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgSW50ZXJtZWRpYXRlL0JvdW5kYXJ5IEV2ZW50JylcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwb3B1cE1lbnUuaXNFbXB0eShlbGVtZW50LCAnYnBtbi1yZXBsYWNlJykpIHtcblxuICAgIC8vIFJlcGxhY2UgbWVudSBlbnRyeVxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAncmVwbGFjZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdlZGl0JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNjcmV3LXdyZW5jaCcsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NoYW5nZSB0eXBlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBhc3NpZ24oZ2V0UmVwbGFjZU1lbnVQb3NpdGlvbihlbGVtZW50KSwge1xuICAgICAgICAgICAgICBjdXJzb3I6IHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcG9wdXBNZW51Lm9wZW4oZWxlbWVudCwgJ2JwbW4tcmVwbGFjZScsIHBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc0FueShidXNpbmVzc09iamVjdCwgW1xuICAgICdicG1uOkZsb3dOb2RlJyxcbiAgICAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnLFxuICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLFxuICAgICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZSdcbiAgXSkpIHtcblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbignYnBtbjpUZXh0QW5ub3RhdGlvbicsICdicG1uLWljb24tdGV4dC1hbm5vdGF0aW9uJyksXG5cbiAgICAgICdjb25uZWN0Jzoge1xuICAgICAgICBncm91cDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbi1tdWx0aScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Nvbm5lY3QgdXNpbmcgJyArXG4gICAgICAgICAgICAgICAgICAoYnVzaW5lc3NPYmplY3QuaXNGb3JDb21wZW5zYXRpb24gPyAnJyA6ICdTZXF1ZW5jZS9NZXNzYWdlRmxvdyBvciAnKSArXG4gICAgICAgICAgICAgICAgICAnQXNzb2NpYXRpb24nKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IHN0YXJ0Q29ubmVjdCxcbiAgICAgICAgICBkcmFnc3RhcnQ6IHN0YXJ0Q29ubmVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkpIHtcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2Nvbm5lY3QnOiB7XG4gICAgICAgIGdyb3VwOiAnY29ubmVjdCcsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jb25uZWN0aW9uLW11bHRpJyxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ29ubmVjdCB1c2luZyBEYXRhSW5wdXRBc3NvY2lhdGlvbicpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogc3RhcnRDb25uZWN0LFxuICAgICAgICAgIGRyYWdzdGFydDogc3RhcnRDb25uZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46R3JvdXAnKSkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbignYnBtbjpUZXh0QW5ub3RhdGlvbicsICdicG1uLWljb24tdGV4dC1hbm5vdGF0aW9uJylcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGRlbGV0ZSBlbGVtZW50IGVudHJ5LCBvbmx5IHNob3cgaWYgYWxsb3dlZCBieSBydWxlc1xuICB2YXIgZGVsZXRlQWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmRlbGV0ZScsIHsgZWxlbWVudHM6IFsgZWxlbWVudCBdIH0pO1xuXG4gIGlmIChpc0FycmF5KGRlbGV0ZUFsbG93ZWQpKSB7XG5cbiAgICAvLyB3YXMgdGhlIGVsZW1lbnQgcmV0dXJuZWQgYXMgYSBkZWxldGlvbiBjYW5kaWRhdGU/XG4gICAgZGVsZXRlQWxsb3dlZCA9IGRlbGV0ZUFsbG93ZWRbMF0gPT09IGVsZW1lbnQ7XG4gIH1cblxuICBpZiAoZGVsZXRlQWxsb3dlZCkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnZGVsZXRlJzoge1xuICAgICAgICBncm91cDogJ2VkaXQnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhc2gnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdSZW1vdmUnKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IHJlbW92ZUVsZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzRXZlbnRUeXBlKGV2ZW50Qm8sIHR5cGUsIGRlZmluaXRpb24pIHtcblxuICB2YXIgaXNUeXBlID0gZXZlbnRCby4kaW5zdGFuY2VPZih0eXBlKTtcbiAgdmFyIGlzRGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gIHZhciBkZWZpbml0aW9ucyA9IGV2ZW50Qm8uZXZlbnREZWZpbml0aW9ucyB8fCBbXTtcbiAgZm9yRWFjaChkZWZpbml0aW9ucywgZnVuY3Rpb24oZGVmKSB7XG4gICAgaWYgKGRlZi4kdHlwZSA9PT0gZGVmaW5pdGlvbikge1xuICAgICAgaXNEZWZpbml0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1R5cGUgJiYgaXNEZWZpbml0aW9uO1xufVxuIiwiaW1wb3J0IERpcmVjdEVkaXRpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZyc7XG5pbXBvcnQgQ29udGV4dFBhZE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZCc7XG5pbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlbGVjdGlvbic7XG5pbXBvcnQgQ29ubmVjdE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0JztcbmltcG9ydCBDcmVhdGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlJztcbmltcG9ydCBQb3B1cE1lbnVNb2R1bGUgZnJvbSAnLi4vcG9wdXAtbWVudSc7XG5cbmltcG9ydCBDb250ZXh0UGFkUHJvdmlkZXIgZnJvbSAnLi9Db250ZXh0UGFkUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRGlyZWN0RWRpdGluZ01vZHVsZSxcbiAgICBDb250ZXh0UGFkTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZSxcbiAgICBDb25uZWN0TW9kdWxlLFxuICAgIENyZWF0ZU1vZHVsZSxcbiAgICBQb3B1cE1lbnVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2NvbnRleHRQYWRQcm92aWRlcicgXSxcbiAgY29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQ29udGV4dFBhZFByb3ZpZGVyIF1cbn07IiwiaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNVbmRlZmluZWQsXG4gIG9taXQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZSwgdGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XG4gIGlmICghaXNBcnJheShwcm9wZXJ0aWVzKSkge1xuICAgIHByb3BlcnRpZXMgPSBbIHByb3BlcnRpZXMgXTtcbiAgfVxuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHNvdXJjZVtwcm9wZXJ0eV0pKSB7XG4gICAgICB0YXJnZXRbcHJvcGVydHldID0gc291cmNlW3Byb3BlcnR5XTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcbiAgaWYgKCFpc0FycmF5KHByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydGllcyA9IFsgcHJvcGVydGllcyBdO1xuICB9XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0eSkge1xuICAgIGlmIChlbGVtZW50W3Byb3BlcnR5XSkge1xuICAgICAgZGVsZXRlIGVsZW1lbnRbcHJvcGVydHldO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA3NTA7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkNvcHlQYXN0ZShicG1uRmFjdG9yeSwgZXZlbnRCdXMsIG1vZGRsZUNvcHkpIHtcblxuICBldmVudEJ1cy5vbignY29weVBhc3RlLmNvcHlFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLm9sZEJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICBkZXNjcmlwdG9yLnR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBjb3B5UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgZGVzY3JpcHRvciwgJ25hbWUnKTtcblxuICAgIGRlc2NyaXB0b3IuZGkgPSB7fTtcblxuICAgIC8vIGZpbGwgYW5kIHN0cm9rZSB3aWxsIGJlIHNldCB0byBESVxuICAgIGNvcHlQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LmRpLCBkZXNjcmlwdG9yLmRpLCBbXG4gICAgICAnZmlsbCcsXG4gICAgICAnc3Ryb2tlJ1xuICAgIF0pO1xuXG4gICAgY29weVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QuZGksIGRlc2NyaXB0b3IsICdpc0V4cGFuZGVkJyk7XG5cbiAgICBpZiAoaXNMYWJlbChkZXNjcmlwdG9yKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBzZXF1ZW5jZSBmbG93XG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LmRlZmF1bHQpIHtcbiAgICAgIGRlc2NyaXB0b3IuZGVmYXVsdCA9IGJ1c2luZXNzT2JqZWN0LmRlZmF1bHQuaWQ7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQucHJvcGVydHksXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lLFxuICAgICAgICBicG1uUHJvY2VzcztcblxuICAgIGlmIChcbiAgICAgIHByb3BlcnR5TmFtZSA9PT0gJ3Byb2Nlc3NSZWYnICYmXG4gICAgICBpcyhwYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiZcbiAgICAgIGlzKHByb3BlcnR5LCAnYnBtbjpQcm9jZXNzJylcbiAgICApIHtcbiAgICAgIGJwbW5Qcm9jZXNzID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlByb2Nlc3MnKTtcblxuICAgICAgLy8gcmV0dXJuIGNvcHkgb2YgcHJvY2Vzc1xuICAgICAgcmV0dXJuIG1vZGRsZUNvcHkuY29weUVsZW1lbnQocHJvcGVydHksIGJwbW5Qcm9jZXNzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciByZWZlcmVuY2VzO1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VzKGRlc2NyaXB0b3IsIGNhY2hlKSB7XG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZGVzY3JpcHRvcik7XG5cbiAgICAvLyBkZWZhdWx0IHNlcXVlbmNlIGZsb3dzXG4gICAgaWYgKGRlc2NyaXB0b3IuZGVmYXVsdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2Fubm90IGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICByZWZlcmVuY2VzWyBkZXNjcmlwdG9yLmRlZmF1bHQgXSA9IHtcbiAgICAgICAgZWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnR5OiAnZGVmYXVsdCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKGRlc2NyaXB0b3IuaG9zdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2FuIGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICBnZXRCdXNpbmVzc09iamVjdChkZXNjcmlwdG9yKS5hdHRhY2hlZFRvUmVmID0gZ2V0QnVzaW5lc3NPYmplY3QoY2FjaGVbIGRlc2NyaXB0b3IuaG9zdCBdKTtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VzID0gb21pdChyZWZlcmVuY2VzLCByZWR1Y2UocmVmZXJlbmNlcywgZnVuY3Rpb24oYXJyYXksIHJlZmVyZW5jZSwga2V5KSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHJlZmVyZW5jZS5lbGVtZW50LFxuICAgICAgICAgIHByb3BlcnR5ID0gcmVmZXJlbmNlLnByb3BlcnR5O1xuXG4gICAgICBpZiAoa2V5ID09PSBkZXNjcmlwdG9yLmlkKSB7XG4gICAgICAgIGVsZW1lbnRbIHByb3BlcnR5IF0gPSBidXNpbmVzc09iamVjdDtcblxuICAgICAgICBhcnJheS5wdXNoKGRlc2NyaXB0b3IuaWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfSwgW10pKTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50cycsIGZ1bmN0aW9uKCkge1xuICAgIHJlZmVyZW5jZXMgPSB7fTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGNhY2hlID0gY29udGV4dC5jYWNoZSxcbiAgICAgICAgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcbiAgICAgICAgb2xkQnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLm9sZEJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBuZXdCdXNpbmVzc09iamVjdDtcblxuICAgIC8vIGRvIE5PVCBjb3B5IGJ1c2luZXNzIG9iamVjdCBpZiBleHRlcm5hbCBsYWJlbFxuICAgIGlmIChpc0xhYmVsKGRlc2NyaXB0b3IpKSB7XG4gICAgICBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY2FjaGVbIGRlc2NyaXB0b3IubGFiZWxUYXJnZXQgXSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXdCdXNpbmVzc09iamVjdCA9IGJwbW5GYWN0b3J5LmNyZWF0ZShvbGRCdXNpbmVzc09iamVjdC4kdHlwZSk7XG5cbiAgICBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0ID0gbW9kZGxlQ29weS5jb3B5RWxlbWVudChcbiAgICAgIG9sZEJ1c2luZXNzT2JqZWN0LFxuICAgICAgbmV3QnVzaW5lc3NPYmplY3RcbiAgICApO1xuXG4gICAgLy8gcmVzb2x2ZSByZWZlcmVuY2VzIGUuZy4gZGVmYXVsdCBzZXF1ZW5jZSBmbG93XG4gICAgcmVzb2x2ZVJlZmVyZW5jZXMoZGVzY3JpcHRvciwgY2FjaGUpO1xuXG4gICAgY29weVByb3BlcnRpZXMoZGVzY3JpcHRvciwgbmV3QnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICdpc0V4cGFuZGVkJyxcbiAgICAgICduYW1lJ1xuICAgIF0pO1xuXG4gICAgcmVtb3ZlUHJvcGVydGllcyhkZXNjcmlwdG9yLCAnb2xkQnVzaW5lc3NPYmplY3QnKTtcbiAgfSk7XG5cbn1cblxuXG5CcG1uQ29weVBhc3RlLiRpbmplY3QgPSBbXG4gICdicG1uRmFjdG9yeScsXG4gICdldmVudEJ1cycsXG4gICdtb2RkbGVDb3B5J1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xufVxuIiwiaW1wb3J0IHtcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNEZWZpbmVkLFxuICBpc09iamVjdCxcbiAgbWF0Y2hQYXR0ZXJuLFxuICByZWR1Y2UsXG4gIGhhcyxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIERJU0FMTE9XRURfUFJPUEVSVElFUyA9IFtcbiAgJ2FydGlmYWN0cycsXG4gICdkYXRhSW5wdXRBc3NvY2lhdGlvbnMnLFxuICAnZGF0YU91dHB1dEFzc29jaWF0aW9ucycsXG4gICdkZWZhdWx0JyxcbiAgJ2Zsb3dFbGVtZW50cycsXG4gICdsYW5lcycsXG4gICdpbmNvbWluZycsXG4gICdvdXRnb2luZydcbl07XG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcz4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBjb250ZXh0LnByb3BlcnR5TmFtZXNcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5zb3VyY2VFbGVtZW50XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNvbnRleHQudGFyZ2V0RWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fGJvb2xlYW59IC0gUmV0dXJuIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHk+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5wYXJlbnRcbiAqIEBwYXJhbSB7Kn0gY29udGV4dC5wcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQucHJvcGVydHlOYW1lXG4gKlxuICogQHJldHVybnMgeyp8Ym9vbGVhbn0gLSBSZXR1cm4gY29waWVkIHByb3BlcnR5IG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5TZXRDb3BpZWRQcm9wZXJ0eT4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjb250ZXh0LnBhcmVudFxuICogQHBhcmFtIHsqfSBjb250ZXh0LnByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dC5wcm9wZXJ0eU5hbWVcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm4gZmFsc2UgdG8gZGlzYWxsb3dcbiAqIHNldHRpbmcgY29waWVkIHByb3BlcnR5LlxuICovXG5cbi8qKlxuICogVXRpbGl0eSBmb3IgY29weWluZyBtb2RlbCBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGVsZW1lbnQgdG8gdGFyZ2V0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge0JwbW5Nb2RkbGV9IG1vZGRsZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RkbGVDb3B5KGV2ZW50QnVzLCBicG1uRmFjdG9yeSwgbW9kZGxlKSB7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcblxuICAvLyBjb3B5IGV4dGVuc2lvbiBlbGVtZW50cyBsYXN0XG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0aWVzJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWVzID0gY29udGV4dC5wcm9wZXJ0eU5hbWVzO1xuXG4gICAgaWYgKCFwcm9wZXJ0eU5hbWVzIHx8ICFwcm9wZXJ0eU5hbWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0QnkocHJvcGVydHlOYW1lcywgZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7XG4gICAgICByZXR1cm4gcHJvcGVydHlOYW1lID09PSAnZXh0ZW5zaW9uRWxlbWVudHMnO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBkZWZhdWx0IGNoZWNrIHdoZXRoZXIgcHJvcGVydHkgY2FuIGJlIGNvcGllZFxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwYXJlbnREZXNjcmlwdG9yID0gaXNPYmplY3QocGFyZW50KSAmJiBwYXJlbnQuJGRlc2NyaXB0b3IsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHByb3BlcnR5TmFtZSAmJiBESVNBTExPV0VEX1BST1BFUlRJRVMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuXG4gICAgICAvLyBkaXNhbGxvdyBjb3B5aW5nIHByb3BlcnR5XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5TmFtZSAmJlxuICAgICAgcGFyZW50RGVzY3JpcHRvciAmJlxuICAgICAgIWZpbmQocGFyZW50RGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBtYXRjaFBhdHRlcm4oeyBuYW1lOiBwcm9wZXJ0eU5hbWUgfSkpKSB7XG5cbiAgICAgIC8vIGRpc2FsbG93IGNvcHlpbmcgcHJvcGVydHlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGRvIE5PVCBhbGxvdyB0byBjb3B5IGVtcHR5IGV4dGVuc2lvbiBlbGVtZW50c1xuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5TZXRDb3BpZWRQcm9wZXJ0eScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xuXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpICYmICghcHJvcGVydHkudmFsdWVzIHx8ICFwcm9wZXJ0eS52YWx1ZXMubGVuZ3RoKSkge1xuXG4gICAgICAvLyBkaXNhbGxvdyBzZXR0aW5nIGNvcGllZCBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cbk1vZGRsZUNvcHkuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ21vZGRsZSdcbl07XG5cbi8qKlxuICogQ29weSBtb2RlbCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBlbGVtZW50IHRvIHRhcmdldCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gc291cmNlRWxlbWVudFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSB0YXJnZXRFbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtwcm9wZXJ0eU5hbWVzXVxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH1cbiAqL1xuTW9kZGxlQ29weS5wcm90b3R5cGUuY29weUVsZW1lbnQgPSBmdW5jdGlvbihzb3VyY2VFbGVtZW50LCB0YXJnZXRFbGVtZW50LCBwcm9wZXJ0eU5hbWVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAocHJvcGVydHlOYW1lcyAmJiAhaXNBcnJheShwcm9wZXJ0eU5hbWVzKSkge1xuICAgIHByb3BlcnR5TmFtZXMgPSBbIHByb3BlcnR5TmFtZXMgXTtcbiAgfVxuXG4gIHByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVzIHx8IGdldFByb3BlcnR5TmFtZXMoc291cmNlRWxlbWVudC4kZGVzY3JpcHRvcik7XG5cbiAgdmFyIGNhbkNvcHlQcm9wZXJ0aWVzID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcycsIHtcbiAgICBwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzLFxuICAgIHNvdXJjZUVsZW1lbnQ6IHNvdXJjZUVsZW1lbnQsXG4gICAgdGFyZ2V0RWxlbWVudDogdGFyZ2V0RWxlbWVudFxuICB9KTtcblxuICBpZiAoY2FuQ29weVByb3BlcnRpZXMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICBpZiAoaXNBcnJheShjYW5Db3B5UHJvcGVydGllcykpIHtcbiAgICBwcm9wZXJ0eU5hbWVzID0gY2FuQ29weVByb3BlcnRpZXM7XG4gIH1cblxuICAvLyBjb3B5IHByb3BlcnRpZXNcbiAgZm9yRWFjaChwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHtcbiAgICB2YXIgc291cmNlUHJvcGVydHk7XG5cbiAgICBpZiAoaGFzKHNvdXJjZUVsZW1lbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlRWxlbWVudC5nZXQocHJvcGVydHlOYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgY29waWVkUHJvcGVydHkgPSBzZWxmLmNvcHlQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0RWxlbWVudCwgcHJvcGVydHlOYW1lKTtcblxuICAgIHZhciBjYW5TZXRQcm9wZXJ0eSA9IHNlbGYuX2V2ZW50QnVzLmZpcmUoJ21vZGRsZUNvcHkuY2FuU2V0Q29waWVkUHJvcGVydHknLCB7XG4gICAgICBwYXJlbnQ6IHRhcmdldEVsZW1lbnQsXG4gICAgICBwcm9wZXJ0eTogY29waWVkUHJvcGVydHksXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZVxuICAgIH0pO1xuXG4gICAgaWYgKGNhblNldFByb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQoY29waWVkUHJvcGVydHkpKSB7XG4gICAgICB0YXJnZXRFbGVtZW50LnNldChwcm9wZXJ0eU5hbWUsIGNvcGllZFByb3BlcnR5KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXRFbGVtZW50O1xufTtcblxuLyoqXG4gKiBDb3B5IG1vZGVsIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydHlcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lXG4gKlxuICogQHJldHVybnMgeyp9XG4gKi9cbk1vZGRsZUNvcHkucHJvdG90eXBlLmNvcHlQcm9wZXJ0eSA9IGZ1bmN0aW9uKHByb3BlcnR5LCBwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gYWxsb3cgb3RoZXJzIHRvIGNvcHkgcHJvcGVydHlcbiAgdmFyIGNvcGllZFByb3BlcnR5ID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCB7XG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lXG4gIH0pO1xuXG4gIC8vIHJldHVybiBpZiBjb3B5aW5nIGlzIE5PVCBhbGxvd2VkXG4gIGlmIChjb3BpZWRQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICBpZiAoaXNPYmplY3QoY29waWVkUHJvcGVydHkpICYmIGNvcGllZFByb3BlcnR5LiR0eXBlICYmICFjb3BpZWRQcm9wZXJ0eS4kcGFyZW50KSB7XG4gICAgICBjb3BpZWRQcm9wZXJ0eS4kcGFyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBjb3BpZWRQcm9wZXJ0eTtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0eURlc2NyaXB0b3IgPSB0aGlzLl9tb2RkbGUuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcblxuICAvLyBkbyBOT1QgY29weSBJZHMgYW5kIHJlZmVyZW5jZXNcbiAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5pc0lkIHx8IHByb3BlcnR5RGVzY3JpcHRvci5pc1JlZmVyZW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNvcHkgYXJyYXlzXG4gIGlmIChpc0FycmF5KHByb3BlcnR5KSkge1xuICAgIHJldHVybiByZWR1Y2UocHJvcGVydHksIGZ1bmN0aW9uKGNoaWxkUHJvcGVydGllcywgY2hpbGRQcm9wZXJ0eSkge1xuXG4gICAgICAvLyByZWN1cnNpb25cbiAgICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5UHJvcGVydHkoY2hpbGRQcm9wZXJ0eSwgcGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAvLyBjb3B5aW5nIG1pZ2h0IE5PVCBiZSBhbGxvd2VkXG4gICAgICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICAgICAgY29waWVkUHJvcGVydHkuJHBhcmVudCA9IHBhcmVudDtcblxuICAgICAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzLmNvbmNhdChjb3BpZWRQcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZFByb3BlcnRpZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gY29weSBtb2RlbCBlbGVtZW50c1xuICBpZiAoaXNPYmplY3QocHJvcGVydHkpICYmIHByb3BlcnR5LiR0eXBlKSB7XG4gICAgaWYgKHRoaXMuX21vZGRsZS5nZXRFbGVtZW50RGVzY3JpcHRvcihwcm9wZXJ0eSkuaXNHZW5lcmljKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29waWVkUHJvcGVydHkgPSBzZWxmLl9icG1uRmFjdG9yeS5jcmVhdGUocHJvcGVydHkuJHR5cGUpO1xuXG4gICAgY29waWVkUHJvcGVydHkuJHBhcmVudCA9IHBhcmVudDtcblxuICAgIC8vIHJlY3Vyc2lvblxuICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5RWxlbWVudChwcm9wZXJ0eSwgY29waWVkUHJvcGVydHkpO1xuXG4gICAgcmV0dXJuIGNvcGllZFByb3BlcnR5O1xuICB9XG5cbiAgLy8gY29weSBwcmltaXRpdmUgcHJvcGVydGllc1xuICByZXR1cm4gcHJvcGVydHk7XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZXMoZGVzY3JpcHRvciwga2VlcERlZmF1bHRQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiByZWR1Y2UoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkge1xuXG4gICAgaWYgKGtlZXBEZWZhdWx0UHJvcGVydGllcyAmJiBwcm9wZXJ0eS5kZWZhdWx0KSB7XG4gICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcy5jb25jYXQocHJvcGVydHkubmFtZSk7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gaXMoZWxlbWVudCwgdHlwZSkge1xuICByZXR1cm4gZWxlbWVudCAmJiAodHlwZW9mIGVsZW1lbnQuJGluc3RhbmNlT2YgPT09ICdmdW5jdGlvbicpICYmIGVsZW1lbnQuJGluc3RhbmNlT2YodHlwZSk7XG59IiwiaW1wb3J0IENvcHlQYXN0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlJztcblxuaW1wb3J0IEJwbW5Db3B5UGFzdGUgZnJvbSAnLi9CcG1uQ29weVBhc3RlJztcbmltcG9ydCBNb2RkbGVDb3B5IGZyb20gJy4vTW9kZGxlQ29weSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDb3B5UGFzdGVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5Db3B5UGFzdGUnLCAnbW9kZGxlQ29weScgXSxcbiAgYnBtbkNvcHlQYXN0ZTogWyAndHlwZScsIEJwbW5Db3B5UGFzdGUgXSxcbiAgbW9kZGxlQ29weTogWyAndHlwZScsIE1vZGRsZUNvcHkgXVxufTtcbiIsImltcG9ydCB7IGdldERpIH0gZnJvbSAnLi4vLi4vZHJhdy9CcG1uUmVuZGVyVXRpbCc7XG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBzZWxmQW5kQWxsQ2hpbGRyZW4gfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5EaU9yZGVyaW5nKGV2ZW50QnVzLCBjYW52YXMpIHtcblxuICBldmVudEJ1cy5vbignc2F2ZVhNTC5zdGFydCcsIEhJR0hfUFJJT1JJVFksIG9yZGVyRGkpO1xuXG4gIGZ1bmN0aW9uIG9yZGVyRGkoKSB7XG4gICAgdmFyIHJvb3QgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgcm9vdERpID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdCkuZGksXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBkaUVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMgPSBzZWxmQW5kQWxsQ2hpbGRyZW4oWyByb290IF0sIGZhbHNlKTtcblxuICAgIC8vIG9ubHkgYnBtbmRpOlNoYXBlIGFuZCBicG1uZGk6RWRnZSBjYW4gYmUgZGlyZWN0IGNoaWxkcmVuIG9mIGJwbW5kaTpQbGFuZVxuICAgIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdCAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbiAgICB9KTtcblxuICAgIGRpRWxlbWVudHMgPSBtYXAoZWxlbWVudHMsIGdldERpKTtcblxuICAgIHJvb3REaS5zZXQoJ3BsYW5lRWxlbWVudCcsIGRpRWxlbWVudHMpO1xuICB9XG59XG5cbkJwbW5EaU9yZGVyaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG4iLCJpbXBvcnQgQnBtbkRpT3JkZXJpbmcgZnJvbSAnLi4vZGktb3JkZXJpbmcvQnBtbkRpT3JkZXJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2JwbW5EaU9yZGVyaW5nJ1xuICBdLFxuICBicG1uRGlPcmRlcmluZzogWyAndHlwZScsIEJwbW5EaU9yZGVyaW5nIF1cbn07IiwiaW1wb3J0IHtcbiAgZmlsdGVyXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5cbi8qKlxuICogUmVnaXN0ZXJzIGVsZW1lbnQgZXhjbHVkZSBmaWx0ZXJzIGZvciBlbGVtZW50cyB0aGF0XG4gKiBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzKGRpc3RyaWJ1dGVFbGVtZW50cykge1xuXG4gIGRpc3RyaWJ1dGVFbGVtZW50cy5yZWdpc3RlckZpbHRlcihmdW5jdGlvbihlbGVtZW50cykge1xuICAgIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5ub3REaXN0cmlidXRlID0gaXNBbnkoZWxlbWVudCwgW1xuICAgICAgICAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgICAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkxhbmUnLFxuICAgICAgICAnYnBtbjpNZXNzYWdlRmxvdycsXG4gICAgICAgICdicG1uOlBhcnRpY2lwYW50JyxcbiAgICAgICAgJ2JwbW46U2VxdWVuY2VGbG93JyxcbiAgICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuICEoZWxlbWVudC5sYWJlbFRhcmdldCB8fCBjYW5ub3REaXN0cmlidXRlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbkJwbW5EaXN0cmlidXRlRWxlbWVudHMuJGluamVjdCA9IFsgJ2Rpc3RyaWJ1dGVFbGVtZW50cycgXTsiLCJpbXBvcnQgRGlzdHJpYnV0ZUVsZW1lbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Rpc3RyaWJ1dGUtZWxlbWVudHMnO1xuXG5pbXBvcnQgQnBtbkRpc3RyaWJ1dGVFbGVtZW50cyBmcm9tICcuL0JwbW5EaXN0cmlidXRlRWxlbWVudHMnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEaXN0cmlidXRlRWxlbWVudHNNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5EaXN0cmlidXRlRWxlbWVudHMnIF0sXG4gIGJwbW5EaXN0cmlidXRlRWxlbWVudHM6IFsgJ3R5cGUnLCBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzIF1cbn07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgRWRpdG9yQWN0aW9ucyBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zJztcblxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QkJveFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbmQgZXhlY3V0ZXMgQlBNTiBzcGVjaWZpYyBlZGl0b3IgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRWRpdG9yQWN0aW9ucyhpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoRWRpdG9yQWN0aW9ucywgdGhpcyk7XG59XG5cbmluaGVyaXRzKEJwbW5FZGl0b3JBY3Rpb25zLCBFZGl0b3JBY3Rpb25zKTtcblxuQnBtbkVkaXRvckFjdGlvbnMuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciBkZWZhdWx0IGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuQnBtbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zID0gZnVuY3Rpb24oaW5qZWN0b3IpIHtcblxuICAvLyAoMCkgaW52b2tlIHN1cGVyIG1ldGhvZFxuXG4gIEVkaXRvckFjdGlvbnMucHJvdG90eXBlLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zLmNhbGwodGhpcywgaW5qZWN0b3IpO1xuXG4gIC8vICgxKSByZXRyaWV2ZSBvcHRpb25hbCBjb21wb25lbnRzIHRvIGludGVncmF0ZSB3aXRoXG5cbiAgdmFyIGNhbnZhcyA9IGluamVjdG9yLmdldCgnY2FudmFzJywgZmFsc2UpO1xuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gaW5qZWN0b3IuZ2V0KCdlbGVtZW50UmVnaXN0cnknLCBmYWxzZSk7XG4gIHZhciBzZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ3NlbGVjdGlvbicsIGZhbHNlKTtcbiAgdmFyIHNwYWNlVG9vbCA9IGluamVjdG9yLmdldCgnc3BhY2VUb29sJywgZmFsc2UpO1xuICB2YXIgbGFzc29Ub29sID0gaW5qZWN0b3IuZ2V0KCdsYXNzb1Rvb2wnLCBmYWxzZSk7XG4gIHZhciBoYW5kVG9vbCA9IGluamVjdG9yLmdldCgnaGFuZFRvb2wnLCBmYWxzZSk7XG4gIHZhciBnbG9iYWxDb25uZWN0ID0gaW5qZWN0b3IuZ2V0KCdnbG9iYWxDb25uZWN0JywgZmFsc2UpO1xuICB2YXIgZGlzdHJpYnV0ZUVsZW1lbnRzID0gaW5qZWN0b3IuZ2V0KCdkaXN0cmlidXRlRWxlbWVudHMnLCBmYWxzZSk7XG4gIHZhciBhbGlnbkVsZW1lbnRzID0gaW5qZWN0b3IuZ2V0KCdhbGlnbkVsZW1lbnRzJywgZmFsc2UpO1xuICB2YXIgZGlyZWN0RWRpdGluZyA9IGluamVjdG9yLmdldCgnZGlyZWN0RWRpdGluZycsIGZhbHNlKTtcbiAgdmFyIHNlYXJjaFBhZCA9IGluamVjdG9yLmdldCgnc2VhcmNoUGFkJywgZmFsc2UpO1xuICB2YXIgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJywgZmFsc2UpO1xuXG4gIC8vICgyKSBjaGVjayBjb21wb25lbnRzIGFuZCByZWdpc3RlciBhY3Rpb25zXG5cbiAgaWYgKGNhbnZhcyAmJiBlbGVtZW50UmVnaXN0cnkgJiYgc2VsZWN0aW9uKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NlbGVjdEVsZW1lbnRzJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlbGVjdCBhbGwgZWxlbWVudHMgZXhjZXB0IGZvciB0aGUgaW52aXNpYmxlXG4gICAgICAvLyByb290IGVsZW1lbnRcbiAgICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT09IHJvb3RFbGVtZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc3BhY2VUb29sKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NwYWNlVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgc3BhY2VUb29sLnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGxhc3NvVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdsYXNzb1Rvb2wnLCBmdW5jdGlvbigpIHtcbiAgICAgIGxhc3NvVG9vbC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYW5kVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdoYW5kVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaGFuZFRvb2wudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZ2xvYmFsQ29ubmVjdCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdnbG9iYWxDb25uZWN0VG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZ2xvYmFsQ29ubmVjdC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgZGlzdHJpYnV0ZUVsZW1lbnRzKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ2Rpc3RyaWJ1dGVFbGVtZW50cycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpLFxuICAgICAgICAgIHR5cGUgPSBvcHRzLnR5cGU7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXN0cmlidXRlRWxlbWVudHMudHJpZ2dlcihjdXJyZW50U2VsZWN0aW9uLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgYWxpZ25FbGVtZW50cykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdhbGlnbkVsZW1lbnRzJywgZnVuY3Rpb24ob3B0cykge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCksXG4gICAgICAgICAgYWxpZ25lYWJsZUVsZW1lbnRzID0gW10sXG4gICAgICAgICAgdHlwZSA9IG9wdHMudHlwZTtcblxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIGFsaWduZWFibGVFbGVtZW50cyA9IGZpbHRlcihjdXJyZW50U2VsZWN0aW9uLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuICFpcyhlbGVtZW50LCAnYnBtbjpMYW5lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFsaWduRWxlbWVudHMudHJpZ2dlcihhbGlnbmVhYmxlRWxlbWVudHMsIHR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvbiAmJiBtb2RlbGluZykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdzZXRDb2xvcicsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpO1xuXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgbW9kZWxpbmcuc2V0Q29sb3IoY3VycmVudFNlbGVjdGlvbiwgb3B0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uICYmIGRpcmVjdEVkaXRpbmcpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignZGlyZWN0RWRpdGluZycsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXJlY3RFZGl0aW5nLmFjdGl2YXRlKGN1cnJlbnRTZWxlY3Rpb25bMF0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlYXJjaFBhZCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdmaW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWFyY2hQYWQudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY2FudmFzICYmIG1vZGVsaW5nKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ21vdmVUb09yaWdpbicsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgICAgYm91bmRpbmdCb3gsXG4gICAgICAgICAgZWxlbWVudHM7XG5cbiAgICAgIGlmIChpcyhyb290RWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdEVsZW1lbnQgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBib3VuZGluZ0JveCA9IGdldEJCb3goZWxlbWVudHMpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICB7IHg6IC1ib3VuZGluZ0JveC54LCB5OiAtYm91bmRpbmdCb3gueSB9LFxuICAgICAgICByb290RWxlbWVudFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG59OyIsImltcG9ydCBFZGl0b3JBY3Rpb25zTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zJztcblxuaW1wb3J0IEJwbW5FZGl0b3JBY3Rpb25zIGZyb20gJy4vQnBtbkVkaXRvckFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRWRpdG9yQWN0aW9uc01vZHVsZVxuICBdLFxuICBlZGl0b3JBY3Rpb25zOiBbICd0eXBlJywgQnBtbkVkaXRvckFjdGlvbnMgXVxufTtcbiIsImltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkdyaWRTbmFwcGluZyhldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuaW5pdCcsXHJcbiAgICAnc2hhcGUubW92ZS5pbml0J1xyXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBldmVudC5zaGFwZTtcclxuXHJcbiAgICBpZiAoaXNBbnkoc2hhcGUsIFtcclxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxyXG4gICAgICAnYnBtbjpTdWJQcm9jZXNzJyxcclxuICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nXHJcbiAgICBdKSkge1xyXG4gICAgICBpZiAoIWNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCkge1xyXG4gICAgICAgIGNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQuc25hcExvY2F0aW9uID0gJ3RvcC1sZWZ0JztcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuQnBtbkdyaWRTbmFwcGluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IiwiaW1wb3J0IHsgZ2V0TmV3U2hhcGVQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2F1dG8tcGxhY2UvQnBtbkF1dG9QbGFjZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgZ2V0TWlkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xyXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvUGxhY2VCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcclxuICAgICAgICBzb3VyY2VNaWQgPSBnZXRNaWQoc291cmNlKSxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XHJcblxyXG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0TmV3U2hhcGVQb3NpdGlvbihzb3VyY2UsIHNoYXBlKTtcclxuXHJcbiAgICBbICd4JywgJ3knIF0uZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XHJcbiAgICAgIHZhciBvcHRpb25zID0ge307XHJcblxyXG4gICAgICAvLyBkbyBub3Qgc25hcCBpZiB4L3kgZXF1YWxcclxuICAgICAgaWYgKHBvc2l0aW9uWyBheGlzIF0gPT09IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocG9zaXRpb25bIGF4aXMgXSA+IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgb3B0aW9ucy5taW4gPSBwb3NpdGlvblsgYXhpcyBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbnMubWF4ID0gcG9zaXRpb25bIGF4aXMgXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XHJcblxyXG4gICAgICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuICAgICAgICAgIG9wdGlvbnMub2Zmc2V0ID0gLXNoYXBlLndpZHRoIC8gMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3B0aW9ucy5vZmZzZXQgPSAtc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBwb3NpdGlvblsgYXhpcyBdID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShwb3NpdGlvblsgYXhpcyBdLCBvcHRpb25zKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBtdXN0IGJlIHJldHVybmVkIHRvIGJlIGNvbnNpZGVyZWQgYnkgYXV0byBwbGFjZVxyXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gIH0pO1xyXG59XHJcblxyXG5BdXRvUGxhY2VCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyaWRTbmFwcGluZydcclxuXTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNIb3Jpem9udGFsKGF4aXMpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnO1xyXG59IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTc1MDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yKGNhbnZhcywgZXZlbnRCdXMsIGdyaWRTbmFwcGluZykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuc3RhcnQnLFxyXG4gICAgJ3NoYXBlLm1vdmUuc3RhcnQnXHJcbiAgXSwgSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgfHxcclxuICAgICAgIWlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHxcclxuICAgICAgIXJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNyZWF0ZUNvbnN0cmFpbnRzID0gY29udGV4dC5jcmVhdGVDb25zdHJhaW50cztcclxuXHJcbiAgICBpZiAoIWNyZWF0ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzaGFwZS53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUud2lkdGgsIHsgbWluOiBzaGFwZS53aWR0aCB9KTtcclxuICAgIHNoYXBlLmhlaWdodCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUuaGVpZ2h0LCB7IG1pbjogc2hhcGUuaGVpZ2h0IH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJ1xyXG5dOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBwb2ludHNBbGlnbmVkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMzAwMDtcblxuXG4vKipcbiAqIFNuYXBzIGNvbm5lY3Rpb25zIHdpdGggTWFuaGF0dGFuIGxheW91dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBncmlkU25hcHBpbmcsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9ncmlkU25hcHBpbmcgPSBncmlkU25hcHBpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLmxheW91dCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGhpbnRzLmNvbm5lY3Rpb25FbmQgfHwgaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWhhc01pZGRsZVNlZ21lbnRzKHdheXBvaW50cykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgc2VsZi5zbmFwTWlkZGxlU2VnbWVudHMod2F5cG9pbnRzKSk7XG4gIH0pO1xufVxuXG5MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2dyaWRTbmFwcGluZycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKExheW91dENvbm5lY3Rpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLyoqXG4gKiBTbmFwIG1pZGRsZSBzZWdtZW50cyBvZiBhIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxQb2ludD59XG4gKi9cbkxheW91dENvbm5lY3Rpb25CZWhhdmlvci5wcm90b3R5cGUuc25hcE1pZGRsZVNlZ21lbnRzID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmcsXG4gICAgICBzbmFwcGVkO1xuXG4gIHdheXBvaW50cyA9IHdheXBvaW50cy5zbGljZSgpO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgd2F5cG9pbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuXG4gICAgc25hcHBlZCA9IHNuYXBTZWdtZW50KGdyaWRTbmFwcGluZywgd2F5cG9pbnRzW2ldLCB3YXlwb2ludHNbaSArIDFdKTtcblxuICAgIHdheXBvaW50c1tpXSA9IHNuYXBwZWRbMF07XG4gICAgd2F5cG9pbnRzW2kgKyAxXSA9IHNuYXBwZWRbMV07XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgY29ubmVjdGlvbiBoYXMgYSBtaWRkbGUgc2VnbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gd2F5cG9pbnRzXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc01pZGRsZVNlZ21lbnRzKHdheXBvaW50cykge1xuICByZXR1cm4gd2F5cG9pbnRzLmxlbmd0aCA+IDM7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBhbGlnbm1lbnQgaXMgaG9yaXpvbnRhbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25lZFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBob3Jpem9udGFsbHlBbGlnbmVkKGFsaWduZWQpIHtcbiAgcmV0dXJuIGFsaWduZWQgPT09ICdoJztcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIGFsaWdubWVudCBpcyB2ZXJ0aWNhbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25lZFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSB7XG4gIHJldHVybiBhbGlnbmVkID09PSAndic7XG59XG5cbi8qKlxuICogR2V0IG1pZGRsZSBzZWdtZW50cyBmcm9tIGEgZ2l2ZW4gY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHNuYXBTZWdtZW50KGdyaWRTbmFwcGluZywgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSB7XG5cbiAgdmFyIGFsaWduZWQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgdmFyIHNuYXBwZWQgPSB7fTtcblxuICBpZiAoaG9yaXpvbnRhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCBob3Jpem9udGFsbHlcbiAgICBzbmFwcGVkLnkgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKHNlZ21lbnRTdGFydC55KTtcbiAgfVxuXG4gIGlmICh2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCB2ZXJ0aWNhbGx5XG4gICAgc25hcHBlZC54ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShzZWdtZW50U3RhcnQueCk7XG4gIH1cblxuICBpZiAoJ3gnIGluIHNuYXBwZWQgfHwgJ3knIGluIHNuYXBwZWQpIHtcbiAgICBzZWdtZW50U3RhcnQgPSBhc3NpZ24oe30sIHNlZ21lbnRTdGFydCwgc25hcHBlZCk7XG4gICAgc2VnbWVudEVuZCA9IGFzc2lnbih7fSwgc2VnbWVudEVuZCwgc25hcHBlZCk7XG4gIH1cblxuICByZXR1cm4gWyBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQgXTtcbn0iLCJpbXBvcnQgQXV0b1BsYWNlQmVoYXZpb3IgZnJvbSAnLi9BdXRvUGxhY2VCZWhhdmlvcic7XHJcbmltcG9ydCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcic7XHJcbmltcG9ydCBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9faW5pdF9fOiBbXHJcbiAgICAnZ3JpZFNuYXBwaW5nQXV0b1BsYWNlQmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ0xheW91dENvbm5lY3Rpb25CZWhhdmlvcicsXHJcbiAgXSxcclxuICBncmlkU25hcHBpbmdBdXRvUGxhY2VCZWhhdmlvcjogWyAndHlwZScsIEF1dG9QbGFjZUJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcjogWyAndHlwZScsIENyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IgXSxcclxuICBncmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgXVxyXG59OyIsImltcG9ydCBCcG1uR3JpZFNuYXBwaW5nIGZyb20gJy4vQnBtbkdyaWRTbmFwcGluZyc7XHJcbmltcG9ydCBHcmlkU25hcHBpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZyc7XHJcblxyXG5pbXBvcnQgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgZnJvbSAnLi9iZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19kZXBlbmRzX186IFtcclxuICAgIEdyaWRTbmFwcGluZ01vZHVsZSxcclxuICAgIEdyaWRTbmFwcGluZ0JlaGF2aW9yTW9kdWxlXHJcbiAgXSxcclxuICBfX2luaXRfXzogWyAnYnBtbkdyaWRTbmFwcGluZycgXSxcclxuICBicG1uR3JpZFNuYXBwaW5nOiBbICd0eXBlJywgQnBtbkdyaWRTbmFwcGluZyBdXHJcbn07IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbnZhciBMQUJFTF9XSURUSCA9IDMwLFxuICAgIExBQkVMX0hFSUdIVCA9IDMwO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyBoaXQgem9uZXMgYW5kIGludGVyYWN0aW9uIGZpeGVzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0ludGVyYWN0aW9uRXZlbnRzfSBpbnRlcmFjdGlvbkV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uSW50ZXJhY3Rpb25FdmVudHMoZXZlbnRCdXMsIGludGVyYWN0aW9uRXZlbnRzKSB7XG5cbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMgPSBpbnRlcmFjdGlvbkV2ZW50cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLFxuICAgICdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnXG4gIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gY29udGV4dC5nZng7XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpKSB7XG4gICAgICByZXR1cm4gc2VsZi5jcmVhdGVQYXJ0aWNpcGFudEhpdChlbGVtZW50LCBnZngpO1xuICAgIH0gZWxzZVxuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGlmIChpc0V4cGFuZGVkKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNyZWF0ZVBhcnRpY2lwYW50SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgICBpZiAoaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVTdWJQcm9jZXNzSGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxufVxuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2ludGVyYWN0aW9uRXZlbnRzJ1xuXTtcblxuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRIaXQgPSBmdW5jdGlvbihlbGVtZW50LCBnZngpIHtcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMucmVtb3ZlSGl0cyhnZngpO1xuXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLmNyZWF0ZVBhcnRpY2lwYW50SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG5cbiAgLy8gcmVtb3ZlIGV4aXN0aW5nIGhpdHNcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMucmVtb3ZlSGl0cyhnZngpO1xuXG4gIC8vIGFkZCBvdXRsaW5lIGhpdFxuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVCb3hIaXQoZ2Z4LCAnY2xpY2stc3Ryb2tlJywge1xuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgfSk7XG5cbiAgLy8gYWRkIGxhYmVsIGhpdFxuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVCb3hIaXQoZ2Z4LCAnYWxsJywge1xuICAgIHdpZHRoOiBMQUJFTF9XSURUSCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGluZGljYXRlIHRoYXQgd2UgY3JlYXRlZCBhIGhpdFxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkJwbW5JbnRlcmFjdGlvbkV2ZW50cy5wcm90b3R5cGUuY3JlYXRlU3ViUHJvY2Vzc0hpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gIC8vIHJlbW92ZSBleGlzdGluZyBoaXRzXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLnJlbW92ZUhpdHMoZ2Z4KTtcblxuICAvLyBhZGQgb3V0bGluZSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2NsaWNrLXN0cm9rZScsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGFkZCBsYWJlbCBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2FsbCcsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IExBQkVMX0hFSUdIVFxuICB9KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59OyIsImltcG9ydCBCcG1uSW50ZXJhY3Rpb25FdmVudHMgZnJvbSAnLi9CcG1uSW50ZXJhY3Rpb25FdmVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdicG1uSW50ZXJhY3Rpb25FdmVudHMnIF0sXG4gIGJwbW5JbnRlcmFjdGlvbkV2ZW50czogWyAndHlwZScsIEJwbW5JbnRlcmFjdGlvbkV2ZW50cyBdXG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBLZXlib2FyZEJpbmRpbmdzIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0tleWJvYXJkQmluZGluZ3MnO1xuXG5cbi8qKlxuICogQlBNTiAyLjAgc3BlY2lmaWMga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbktleWJvYXJkQmluZGluZ3MoaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKEtleWJvYXJkQmluZGluZ3MsIHRoaXMpO1xufVxuXG5pbmhlcml0cyhCcG1uS2V5Ym9hcmRCaW5kaW5ncywgS2V5Ym9hcmRCaW5kaW5ncyk7XG5cbkJwbW5LZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5CcG1uS2V5Ym9hcmRCaW5kaW5ncy5wcm90b3R5cGUucmVnaXN0ZXJCaW5kaW5ncyA9IGZ1bmN0aW9uKGtleWJvYXJkLCBlZGl0b3JBY3Rpb25zKSB7XG5cbiAgLy8gaW5oZXJpdCBkZWZhdWx0IGJpbmRpbmdzXG4gIEtleWJvYXJkQmluZGluZ3MucHJvdG90eXBlLnJlZ2lzdGVyQmluZGluZ3MuY2FsbCh0aGlzLCBrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEFkZCBrZXlib2FyZCBiaW5kaW5nIGlmIHJlc3BlY3RpdmUgZWRpdG9yIGFjdGlvblxuICAgKiBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgYmluZGluZ1xuICAgKi9cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoYWN0aW9uLCBmbikge1xuXG4gICAgaWYgKGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICAgIGtleWJvYXJkLmFkZExpc3RlbmVyKGZuKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzXG4gIC8vIENUUkwgKyBBXG4gIGFkZExpc3RlbmVyKCdzZWxlY3RFbGVtZW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydhJywgJ0EnXSwgZXZlbnQpICYmIGtleWJvYXJkLmlzQ21kKGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdzZWxlY3RFbGVtZW50cycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHNlYXJjaCBsYWJlbHNcbiAgLy8gQ1RSTCArIEZcbiAgYWRkTGlzdGVuZXIoJ2ZpbmQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnZicsICdGJ10sIGV2ZW50KSAmJiBrZXlib2FyZC5pc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZmluZCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIHNwYWNlIHRvb2xcbiAgLy8gU1xuICBhZGRMaXN0ZW5lcignc3BhY2VUb29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydzJywgJ1MnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3NwYWNlVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGxhc3NvIHRvb2xcbiAgLy8gTFxuICBhZGRMaXN0ZW5lcignbGFzc29Ub29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydsJywgJ0wnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2xhc3NvVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGhhbmQgdG9vbFxuICAvLyBIXG4gIGFkZExpc3RlbmVyKCdoYW5kVG9vbCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnaCcsICdIJ10sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdoYW5kVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGdsb2JhbCBjb25uZWN0IHRvb2xcbiAgLy8gQ1xuICBhZGRMaXN0ZW5lcignZ2xvYmFsQ29ubmVjdFRvb2wnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmhhc01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlib2FyZC5pc0tleShbJ2MnLCAnQyddLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZ2xvYmFsQ29ubmVjdFRvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBkaXJlY3QgZWRpdGluZ1xuICAvLyBFXG4gIGFkZExpc3RlbmVyKCdkaXJlY3RFZGl0aW5nJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydlJywgJ0UnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2RpcmVjdEVkaXRpbmcnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxufTsiLCJpbXBvcnQgS2V5Ym9hcmRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQnO1xuXG5pbXBvcnQgQnBtbktleWJvYXJkQmluZGluZ3MgZnJvbSAnLi9CcG1uS2V5Ym9hcmRCaW5kaW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBLZXlib2FyZE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAna2V5Ym9hcmRCaW5kaW5ncycgXSxcbiAga2V5Ym9hcmRCaW5kaW5nczogWyAndHlwZScsIEJwbW5LZXlib2FyZEJpbmRpbmdzIF1cbn07XG4iLCJpbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxudmFyIE1BUktFUl9ISURERU4gPSAnZGpzLWVsZW1lbnQtaGlkZGVuJyxcbiAgICBNQVJLRVJfTEFCRUxfSElEREVOID0gJ2Rqcy1sYWJlbC1oaWRkZW4nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsRWRpdGluZ1ByZXZpZXcoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIHBhdGhNYXApIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGRlZmF1bHRMYXllciA9IGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKTtcblxuICB2YXIgZWxlbWVudCwgYWJzb2x1dGVFbGVtZW50QkJveCwgZ2Z4O1xuXG4gIGV2ZW50QnVzLm9uKCdkaXJlY3RFZGl0aW5nLmFjdGl2YXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBhY3RpdmVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgZWxlbWVudCA9IGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQubGFiZWwgfHwgYWN0aXZlUHJvdmlkZXIuZWxlbWVudDtcblxuICAgIC8vIHRleHQgYW5ub3RhdGlvblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBhYnNvbHV0ZUVsZW1lbnRCQm94ID0gY2FudmFzLmdldEFic29sdXRlQkJveChlbGVtZW50KTtcblxuICAgICAgZ2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgICAgIHZhciB0ZXh0UGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RFWFRfQU5OT1RBVElPTicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjAsXG4gICAgICAgICAgbXk6IDAuMFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGggPSBzZWxmLnBhdGggPSBzdmdDcmVhdGUoJ3BhdGgnKTtcblxuICAgICAgc3ZnQXR0cihwYXRoLCB7XG4gICAgICAgIGQ6IHRleHRQYXRoRGF0YSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudClcbiAgICAgIH0pO1xuXG4gICAgICBzdmdBcHBlbmQoZ2Z4LCBwYXRoKTtcblxuICAgICAgc3ZnQXBwZW5kKGRlZmF1bHRMYXllciwgZ2Z4KTtcblxuICAgICAgdHJhbnNsYXRlKGdmeCwgZWxlbWVudC54LCBlbGVtZW50LnkpO1xuICAgIH1cblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpIHx8XG4gICAgICAgIGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0hJRERFTik7XG4gICAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUYXNrJykgfHxcbiAgICAgICAgICAgICAgIGlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpIHx8XG4gICAgICAgICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgfHxcbiAgICAgICAgICAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0xBQkVMX0hJRERFTik7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZGlyZWN0RWRpdGluZy5yZXNpemUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICAvLyB0ZXh0IGFubm90YXRpb25cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgICAgdmFyIGhlaWdodCA9IGNvbnRleHQuaGVpZ2h0LFxuICAgICAgICAgIGR5ID0gY29udGV4dC5keTtcblxuICAgICAgdmFyIG5ld0VsZW1lbnRIZWlnaHQgPSBNYXRoLm1heChlbGVtZW50LmhlaWdodCAvIGFic29sdXRlRWxlbWVudEJCb3guaGVpZ2h0ICogKGhlaWdodCArIGR5KSwgMCk7XG5cbiAgICAgIHZhciB0ZXh0UGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RFWFRfQU5OT1RBVElPTicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IG5ld0VsZW1lbnRIZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMCxcbiAgICAgICAgICBteTogMC4wXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdmdBdHRyKHNlbGYucGF0aCwge1xuICAgICAgICBkOiB0ZXh0UGF0aERhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZGlyZWN0RWRpdGluZy5jb21wbGV0ZScsICdkaXJlY3RFZGl0aW5nLmNhbmNlbCcgXSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBhY3RpdmVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgaWYgKGFjdGl2ZVByb3ZpZGVyKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQubGFiZWwgfHwgYWN0aXZlUHJvdmlkZXIuZWxlbWVudCwgTUFSS0VSX0hJRERFTik7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGVsZW1lbnQsIE1BUktFUl9MQUJFTF9ISURERU4pO1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgYWJzb2x1dGVFbGVtZW50QkJveCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChnZngpIHtcbiAgICAgIHN2Z1JlbW92ZShnZngpO1xuXG4gICAgICBnZnggPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcbn1cblxuTGFiZWxFZGl0aW5nUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdwYXRoTWFwJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdENvbG9yKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiBiby5kaS5nZXQoJ3N0cm9rZScpIHx8IGRlZmF1bHRDb2xvciB8fCAnYmxhY2snO1xufSIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4vTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlQ2F0ZWdvcnlWYWx1ZVxufSBmcm9tICcuLi9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbCc7XG5cbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxMYWJlbE1pZCxcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYWJlbEVkaXRpbmdQcm92aWRlcihcbiAgICBldmVudEJ1cywgYnBtbkZhY3RvcnksIGNhbnZhcywgZGlyZWN0RWRpdGluZyxcbiAgICBtb2RlbGluZywgcmVzaXplSGFuZGxlcywgdGV4dFJlbmRlcmVyKSB7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90ZXh0UmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXI7XG5cbiAgZGlyZWN0RWRpdGluZy5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuXG4gIC8vIGxpc3RlbiB0byBkYmxjbGljayBvbiBub24tcm9vdCBlbGVtZW50c1xuICBldmVudEJ1cy5vbignZWxlbWVudC5kYmxjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgYWN0aXZhdGVEaXJlY3RFZGl0KGV2ZW50LmVsZW1lbnQsIHRydWUpO1xuICB9KTtcblxuICAvLyBjb21wbGV0ZSBvbiBmb2xsb3d1cCBjYW52YXMgb3BlcmF0aW9uXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYXV0b1BsYWNlLnN0YXJ0JyxcbiAgICAnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLFxuICAgICdkcmFnLmluaXQnLFxuICAgICdlbGVtZW50Lm1vdXNlZG93bicsXG4gICAgJ3BvcHVwTWVudS5vcGVuJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgaWYgKGRpcmVjdEVkaXRpbmcuaXNBY3RpdmUoKSkge1xuICAgICAgZGlyZWN0RWRpdGluZy5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY2FuY2VsIG9uIGNvbW1hbmQgc3RhY2sgY2hhbmdlc1xuICBldmVudEJ1cy5vbihbICdjb21tYW5kU3RhY2suY2hhbmdlZCcgXSwgZnVuY3Rpb24oZSkge1xuICAgIGlmIChkaXJlY3RFZGl0aW5nLmlzQWN0aXZlKCkpIHtcbiAgICAgIGRpcmVjdEVkaXRpbmcuY2FuY2VsKCk7XG4gICAgfVxuICB9KTtcblxuXG4gIGV2ZW50QnVzLm9uKCdkaXJlY3RFZGl0aW5nLmFjdGl2YXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXNpemVIYW5kbGVzLnJlbW92ZVJlc2l6ZXJzKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuZW5kJywgNTAwLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGV2ZW50LmNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgaXNUb3VjaCA9IGV2ZW50LmlzVG91Y2g7XG5cbiAgICAvLyBUT0RPKG5pa2t1KTogd2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gZGlyZWN0IGVkaXRpbmcgb24gbW9iaWxlIGRldmljZXM7IHJpZ2h0IG5vdyB0aGlzIHdpbGxcbiAgICAvLyBicmVhayBmb3IgZGVzd29ya2Zsb3dlZGl0aW5nIG9uIG1vYmlsZSBkZXZpY2VzXG4gICAgLy8gYXMgaXQgYnJlYWtzIHRoZSB1c2VyIGludGVyYWN0aW9uIHdvcmtmbG93XG5cbiAgICAvLyBUT0RPKG5yZSk6IHdlIHNob3VsZCB0ZW1wb3JhcmlseSBmb2N1cyB0aGUgZWRpdGVkIGVsZW1lbnRcbiAgICAvLyBoZXJlIGFuZCByZWxlYXNlIHRoZSBmb2N1c2VkIHZpZXdwb3J0IGFmdGVyIHRoZSBkaXJlY3QgZWRpdFxuICAgIC8vIG9wZXJhdGlvbiBpcyBmaW5pc2hlZFxuICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjYW5FeGVjdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuaGludHMgJiYgY29udGV4dC5oaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFjdGl2YXRlRGlyZWN0RWRpdChlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgYWN0aXZhdGVEaXJlY3RFZGl0KGV2ZW50LnNoYXBlKTtcbiAgfSk7XG5cblxuICBmdW5jdGlvbiBhY3RpdmF0ZURpcmVjdEVkaXQoZWxlbWVudCwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgfHxcbiAgICAgICAgaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpUYXNrJywgJ2JwbW46VGV4dEFubm90YXRpb24nLCAnYnBtbjpHcm91cCcgXSkgfHxcbiAgICAgICAgaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG5cbiAgICAgIGRpcmVjdEVkaXRpbmcuYWN0aXZhdGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbn1cblxuTGFiZWxFZGl0aW5nUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdkaXJlY3RFZGl0aW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3Jlc2l6ZUhhbmRsZXMnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG4vKipcbiAqIEFjdGl2YXRlIGRpcmVjdCBlZGl0aW5nIGZvciBhY3Rpdml0aWVzIGFuZCB0ZXh0IGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGJvdW5kcyAocG9zaXRpb24gYW5kIHNpemUpLCB0ZXh0IGFuZCBvcHRpb25zXG4gKi9cbkxhYmVsRWRpdGluZ1Byb3ZpZGVyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAvLyB0ZXh0XG4gIHZhciB0ZXh0ID0gZ2V0TGFiZWwoZWxlbWVudCk7XG5cbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHRleHQ6IHRleHRcbiAgfTtcblxuICAvLyBib3VuZHNcbiAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0RWRpdGluZ0JCb3goZWxlbWVudCk7XG5cbiAgYXNzaWduKGNvbnRleHQsIGJvdW5kcyk7XG5cbiAgdmFyIG9wdGlvbnMgPSB7fTtcblxuICAvLyB0YXNrc1xuICBpZiAoXG4gICAgaXNBbnkoZWxlbWVudCwgW1xuICAgICAgJ2JwbW46VGFzaycsXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAnYnBtbjpMYW5lJyxcbiAgICAgICdicG1uOkNhbGxBY3Rpdml0eSdcbiAgICBdKSB8fFxuICAgIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KVxuICApIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgY2VudGVyVmVydGljYWxseTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZXh0ZXJuYWwgbGFiZWxzXG4gIGlmIChpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudCkpIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gdGV4dCBhbm5vdGF0aW9uc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIGFzc2lnbihvcHRpb25zLCB7XG4gICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICBhdXRvUmVzaXplOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBhc3NpZ24oY29udGV4dCwge1xuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5cbi8qKlxuICogR2V0IHRoZSBlZGl0aW5nIGJvdW5kaW5nIGJveCBiYXNlZCBvbiB0aGUgZWxlbWVudCdzIHNpemUgYW5kIHBvc2l0aW9uXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHBvc2l0aW9uXG4gKiAgICAgICAgICAgICAgICAgIGFuZCBzaXplIChmaXhlZCBvciBtaW5pbXVtIGFuZC9vciBtYXhpbXVtKVxuICovXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUuZ2V0RWRpdGluZ0JCb3ggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHRhcmdldCA9IGVsZW1lbnQubGFiZWwgfHwgZWxlbWVudDtcblxuICB2YXIgYmJveCA9IGNhbnZhcy5nZXRBYnNvbHV0ZUJCb3godGFyZ2V0KTtcblxuICB2YXIgbWlkID0ge1xuICAgIHg6IGJib3gueCArIGJib3gud2lkdGggLyAyLFxuICAgIHk6IGJib3gueSArIGJib3guaGVpZ2h0IC8gMlxuICB9O1xuXG4gIC8vIGRlZmF1bHQgcG9zaXRpb25cbiAgdmFyIGJvdW5kcyA9IHsgeDogYmJveC54LCB5OiBiYm94LnkgfTtcblxuICB2YXIgem9vbSA9IGNhbnZhcy56b29tKCk7XG5cbiAgdmFyIGRlZmF1bHRTdHlsZSA9IHRoaXMuX3RleHRSZW5kZXJlci5nZXREZWZhdWx0U3R5bGUoKSxcbiAgICAgIGV4dGVybmFsU3R5bGUgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxTdHlsZSgpO1xuXG4gIC8vIHRha2Ugem9vbSBpbnRvIGFjY291bnRcbiAgdmFyIGV4dGVybmFsRm9udFNpemUgPSBleHRlcm5hbFN0eWxlLmZvbnRTaXplICogem9vbSxcbiAgICAgIGV4dGVybmFsTGluZUhlaWdodCA9IGV4dGVybmFsU3R5bGUubGluZUhlaWdodCxcbiAgICAgIGRlZmF1bHRGb250U2l6ZSA9IGRlZmF1bHRTdHlsZS5mb250U2l6ZSAqIHpvb20sXG4gICAgICBkZWZhdWx0TGluZUhlaWdodCA9IGRlZmF1bHRTdHlsZS5saW5lSGVpZ2h0O1xuXG4gIHZhciBzdHlsZSA9IHtcbiAgICBmb250RmFtaWx5OiB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCkuZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0OiB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCkuZm9udFdlaWdodFxuICB9O1xuXG4gIC8vIGFkanVzdCBmb3IgZXhwYW5kZWQgcG9vbHMgQU5EIGxhbmVzXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgaXNFeHBhbmRlZFBvb2woZWxlbWVudCkpIHtcblxuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiBiYm94LmhlaWdodCxcbiAgICAgIGhlaWdodDogMzAgKiB6b29tLFxuICAgICAgeDogYmJveC54IC0gYmJveC5oZWlnaHQgLyAyICsgKDE1ICogem9vbSksXG4gICAgICB5OiBtaWQueSAtICgzMCAqIHpvb20pIC8gMlxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZGVmYXVsdEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGRlZmF1bHRMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdSaWdodDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoLTkwZGVnKSdcbiAgICB9KTtcbiAgfVxuXG5cbiAgLy8gaW50ZXJuYWwgbGFiZWxzIGZvciB0YXNrcyBhbmQgY29sbGFwc2VkIGNhbGwgYWN0aXZpdGllcyxcbiAgLy8gc3ViIHByb2Nlc3NlcyBhbmQgcGFydGljaXBhbnRzXG4gIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOlRhc2snLCAnYnBtbjpDYWxsQWN0aXZpdHknXSkgfHxcbiAgICAgIGlzQ29sbGFwc2VkUG9vbChlbGVtZW50KSB8fFxuICAgICAgaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG5cbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHRcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGludGVybmFsIGxhYmVscyBmb3IgZXhwYW5kZWQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXNFeHBhbmRlZFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIHg6IGJib3gueFxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZGVmYXVsdEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGRlZmF1bHRMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdSaWdodDogKDUgKiB6b29tKSArICdweCdcbiAgICB9KTtcbiAgfVxuXG4gIHZhciB3aWR0aCA9IDkwICogem9vbSxcbiAgICAgIHBhZGRpbmdUb3AgPSA3ICogem9vbSxcbiAgICAgIHBhZGRpbmdCb3R0b20gPSA0ICogem9vbTtcblxuICAvLyBleHRlcm5hbCBsYWJlbHMgZm9yIGV2ZW50cywgZGF0YSBlbGVtZW50cywgZ2F0ZXdheXMsIGdyb3VwcyBhbmQgY29ubmVjdGlvbnNcbiAgaWYgKHRhcmdldC5sYWJlbFRhcmdldCkge1xuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSxcbiAgICAgIHg6IG1pZC54IC0gd2lkdGggLyAyLFxuICAgICAgeTogYmJveC55IC0gcGFkZGluZ1RvcFxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZXh0ZXJuYWxGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBleHRlcm5hbExpbmVIZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wOiBwYWRkaW5nVG9wICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206IHBhZGRpbmdCb3R0b20gKyAncHgnXG4gICAgfSk7XG4gIH1cblxuICAvLyBleHRlcm5hbCBsYWJlbCBub3QgeWV0IGNyZWF0ZWRcbiAgaWYgKGlzTGFiZWxFeHRlcm5hbCh0YXJnZXQpXG4gICAgICAmJiAhaGFzRXh0ZXJuYWxMYWJlbCh0YXJnZXQpXG4gICAgICAmJiAhaXNMYWJlbCh0YXJnZXQpKSB7XG5cbiAgICB2YXIgZXh0ZXJuYWxMYWJlbE1pZCA9IGdldEV4dGVybmFsTGFiZWxNaWQoZWxlbWVudCk7XG5cbiAgICB2YXIgYWJzb2x1dGVCQm94ID0gY2FudmFzLmdldEFic29sdXRlQkJveCh7XG4gICAgICB4OiBleHRlcm5hbExhYmVsTWlkLngsXG4gICAgICB5OiBleHRlcm5hbExhYmVsTWlkLnksXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH0pO1xuXG4gICAgdmFyIGhlaWdodCA9IGV4dGVybmFsRm9udFNpemUgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbTtcblxuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgeDogYWJzb2x1dGVCQm94LnggLSB3aWR0aCAvIDIsXG4gICAgICB5OiBhYnNvbHV0ZUJCb3gueSAtIGhlaWdodCAvIDJcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGV4dGVybmFsRm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZXh0ZXJuYWxMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiBwYWRkaW5nQm90dG9tICsgJ3B4J1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdGV4dCBhbm5vdGF0aW9uc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiBiYm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiBiYm94LmhlaWdodCxcbiAgICAgIG1pbldpZHRoOiAzMCAqIHpvb20sXG4gICAgICBtaW5IZWlnaHQ6IDEwICogem9vbVxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgIHBhZGRpbmdUb3A6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgYm91bmRzOiBib3VuZHMsIHN0eWxlOiBzdHlsZSB9O1xufTtcblxuXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oXG4gICAgZWxlbWVudCwgbmV3TGFiZWwsXG4gICAgYWN0aXZlQ29udGV4dFRleHQsIGJvdW5kcykge1xuXG4gIHZhciBuZXdCb3VuZHMsXG4gICAgICBiYm94O1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG5cbiAgICBiYm94ID0gdGhpcy5fY2FudmFzLmdldEFic29sdXRlQkJveChlbGVtZW50KTtcblxuICAgIG5ld0JvdW5kcyA9IHtcbiAgICAgIHg6IGVsZW1lbnQueCxcbiAgICAgIHk6IGVsZW1lbnQueSxcbiAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoIC8gYmJveC53aWR0aCAqIGJvdW5kcy53aWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgLyBiYm94LmhlaWdodCAqIGJvdW5kcy5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykpIHtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBjYXRlZ29yeVZhbHVlIGlmIG5vdCBleGlzdGluZ1xuICAgIGlmICghYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZikge1xuXG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGdldEJ1c2luZXNzT2JqZWN0KHJvb3RFbGVtZW50KS4kcGFyZW50O1xuXG4gICAgICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIHRoaXMuX2JwbW5GYWN0b3J5KTtcblxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuY2F0ZWdvcnlWYWx1ZVJlZiA9IGNhdGVnb3J5VmFsdWU7XG4gICAgfVxuXG4gIH1cblxuICBpZiAoaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBudWxsO1xuICB9XG5cbiAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgbmV3TGFiZWwsIG5ld0JvdW5kcyk7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwYW5kZWRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0NvbGxhcHNlZFBvb2woZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiAhaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNFeHBhbmRlZFBvb2woZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5VGV4dChsYWJlbCkge1xuICByZXR1cm4gIWxhYmVsIHx8ICFsYWJlbC50cmltKCk7XG59IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmZ1bmN0aW9uIGdldExhYmVsQXR0cihzZW1hbnRpYykge1xuICBpZiAoXG4gICAgaXMoc2VtYW50aWMsICdicG1uOkZsb3dFbGVtZW50JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46UGFydGljaXBhbnQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46U2VxdWVuY2VGbG93JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46TWVzc2FnZUZsb3cnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhSW5wdXQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT3V0cHV0JylcbiAgKSB7XG4gICAgcmV0dXJuICduYW1lJztcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiAndGV4dCc7XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4gJ2NhdGVnb3J5VmFsdWVSZWYnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENhdGVnb3J5VmFsdWUoc2VtYW50aWMpIHtcbiAgdmFyIGNhdGVnb3J5VmFsdWVSZWYgPSBzZW1hbnRpY1snY2F0ZWdvcnlWYWx1ZVJlZiddO1xuXG4gIGlmICghY2F0ZWdvcnlWYWx1ZVJlZikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG5cbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWVSZWYudmFsdWUgfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbChlbGVtZW50KSB7XG4gIHZhciBzZW1hbnRpYyA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICBhdHRyID0gZ2V0TGFiZWxBdHRyKHNlbWFudGljKTtcblxuICBpZiAoYXR0cikge1xuXG4gICAgaWYgKGF0dHIgPT09ICdjYXRlZ29yeVZhbHVlUmVmJykge1xuXG4gICAgICByZXR1cm4gZ2V0Q2F0ZWdvcnlWYWx1ZShzZW1hbnRpYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbWFudGljW2F0dHJdIHx8ICcnO1xuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExhYmVsKGVsZW1lbnQsIHRleHQsIGlzRXh0ZXJuYWwpIHtcbiAgdmFyIHNlbWFudGljID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIGF0dHIgPSBnZXRMYWJlbEF0dHIoc2VtYW50aWMpO1xuXG4gIGlmIChhdHRyKSB7XG5cbiAgICBpZiAoYXR0ciA9PT0gJ2NhdGVnb3J5VmFsdWVSZWYnKSB7XG4gICAgICBzZW1hbnRpY1snY2F0ZWdvcnlWYWx1ZVJlZiddLnZhbHVlID0gdGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VtYW50aWNbYXR0cl0gPSB0ZXh0O1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59IiwiaW1wb3J0IHtcbiAgc2V0TGFiZWwsXG4gIGdldExhYmVsXG59IGZyb20gJy4uL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEV4dGVybmFsTGFiZWxNaWQsXG4gIGlzTGFiZWxFeHRlcm5hbCxcbiAgaGFzRXh0ZXJuYWxMYWJlbCxcbiAgaXNMYWJlbFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIE5VTExfRElNRU5TSU9OUyA9IHtcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMFxufTtcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHVwZGF0ZXMgdGhlIHRleHQgb2YgYSBCUE1OIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZUxhYmVsSGFuZGxlcihtb2RlbGluZywgdGV4dFJlbmRlcmVyKSB7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGFiZWwgYW5kIHJldHVybiB0aGUgY2hhbmdlZCBlbGVtZW50cy5cbiAgICpcbiAgICogRWxlbWVudCBwYXJhbWV0ZXIgY2FuIGJlIGxhYmVsIGl0c2VsZiBvciBjb25uZWN0aW9uIChpLmUuIHNlcXVlbmNlIGZsb3cpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRUZXh0KGVsZW1lbnQsIHRleHQpIHtcblxuICAgIC8vIGV4dGVybmFsIGxhYmVsIGlmIHByZXNlbnRcbiAgICB2YXIgbGFiZWwgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQ7XG5cbiAgICB2YXIgbGFiZWxUYXJnZXQgPSBlbGVtZW50LmxhYmVsVGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgICBzZXRMYWJlbChsYWJlbCwgdGV4dCwgbGFiZWxUYXJnZXQgIT09IGxhYmVsKTtcblxuICAgIHJldHVybiBbIGxhYmVsLCBsYWJlbFRhcmdldCBdO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlRXhlY3V0ZShjdHgpIHtcbiAgICB2YXIgZWxlbWVudCA9IGN0eC5lbGVtZW50LFxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG5ld0xhYmVsID0gY3R4Lm5ld0xhYmVsO1xuXG4gICAgaWYgKCFpc0xhYmVsKGVsZW1lbnQpXG4gICAgICAgICYmIGlzTGFiZWxFeHRlcm5hbChlbGVtZW50KVxuICAgICAgICAmJiAhaGFzRXh0ZXJuYWxMYWJlbChlbGVtZW50KVxuICAgICAgICAmJiAhaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG5cbiAgICAgIC8vIGNyZWF0ZSBsYWJlbFxuICAgICAgdmFyIHBhZGRpbmdUb3AgPSA3O1xuXG4gICAgICB2YXIgbGFiZWxDZW50ZXIgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgICBsYWJlbENlbnRlciA9IHtcbiAgICAgICAgeDogbGFiZWxDZW50ZXIueCxcbiAgICAgICAgeTogbGFiZWxDZW50ZXIueSArIHBhZGRpbmdUb3BcbiAgICAgIH07XG5cbiAgICAgIG1vZGVsaW5nLmNyZWF0ZUxhYmVsKGVsZW1lbnQsIGxhYmVsQ2VudGVyLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfbGFiZWwnLFxuICAgICAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3RcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGV4ZWN1dGUoY3R4KSB7XG4gICAgY3R4Lm9sZExhYmVsID0gZ2V0TGFiZWwoY3R4LmVsZW1lbnQpO1xuICAgIHJldHVybiBzZXRUZXh0KGN0eC5lbGVtZW50LCBjdHgubmV3TGFiZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJ0KGN0eCkge1xuICAgIHJldHVybiBzZXRUZXh0KGN0eC5lbGVtZW50LCBjdHgub2xkTGFiZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9zdEV4ZWN1dGUoY3R4KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjdHguZWxlbWVudCxcbiAgICAgICAgbGFiZWwgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQsXG4gICAgICAgIG5ld0xhYmVsID0gY3R4Lm5ld0xhYmVsLFxuICAgICAgICBuZXdCb3VuZHMgPSBjdHgubmV3Qm91bmRzLFxuICAgICAgICBoaW50cyA9IGN0eC5oaW50cyB8fCB7fTtcblxuICAgIC8vIGlnbm9yZSBpbnRlcm5hbCBsYWJlbHMgZm9yIGVsZW1lbnRzIGV4Y2VwdCB0ZXh0IGFubm90YXRpb25zXG4gICAgaWYgKCFpc0xhYmVsKGxhYmVsKSAmJiAhaXMobGFiZWwsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNMYWJlbChsYWJlbCkgJiYgaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG5cbiAgICAgIGlmIChoaW50cy5yZW1vdmVTaGFwZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUobGFiZWwsIHsgdW5zZXRMYWJlbDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGV4dCA9IGdldExhYmVsKGxhYmVsKTtcblxuICAgIC8vIHJlc2l6ZSBlbGVtZW50IGJhc2VkIG9uIGxhYmVsIF9vcl8gcHJlLWRlZmluZWQgYm91bmRzXG4gICAgaWYgKHR5cGVvZiBuZXdCb3VuZHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuZXdCb3VuZHMgPSB0ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhsYWJlbCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLy8gc2V0dGluZyBuZXdCb3VuZHMgdG8gZmFsc2Ugb3IgX251bGxfIHdpbGxcbiAgICAvLyBkaXNhYmxlIHRoZSBwb3N0RXhlY3V0ZSByZXNpemUgb3BlcmF0aW9uXG4gICAgaWYgKG5ld0JvdW5kcykge1xuICAgICAgbW9kZWxpbmcucmVzaXplU2hhcGUobGFiZWwsIG5ld0JvdW5kcywgTlVMTF9ESU1FTlNJT05TKTtcbiAgICB9XG4gIH1cblxuICAvLyBBUElcblxuICB0aGlzLnByZUV4ZWN1dGUgPSBwcmVFeGVjdXRlO1xuICB0aGlzLmV4ZWN1dGUgPSBleGVjdXRlO1xuICB0aGlzLnJldmVydCA9IHJldmVydDtcbiAgdGhpcy5wb3N0RXhlY3V0ZSA9IHBvc3RFeGVjdXRlO1xufVxuXG5VcGRhdGVMYWJlbEhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0VtcHR5VGV4dChsYWJlbCkge1xuICByZXR1cm4gIWxhYmVsIHx8ICFsYWJlbC50cmltKCk7XG59IiwiaW1wb3J0IENoYW5nZVN1cHBvcnRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2hhbmdlLXN1cHBvcnQnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUnO1xuaW1wb3J0IERpcmVjdEVkaXRpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZyc7XG5cbmltcG9ydCBMYWJlbEVkaXRpbmdQcm92aWRlciBmcm9tICcuL0xhYmVsRWRpdGluZ1Byb3ZpZGVyJztcbmltcG9ydCBMYWJlbEVkaXRpbmdQcmV2aWV3IGZyb20gJy4vTGFiZWxFZGl0aW5nUHJldmlldyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIENoYW5nZVN1cHBvcnRNb2R1bGUsXG4gICAgUmVzaXplTW9kdWxlLFxuICAgIERpcmVjdEVkaXRpbmdNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnbGFiZWxFZGl0aW5nUHJvdmlkZXInLFxuICAgICdsYWJlbEVkaXRpbmdQcmV2aWV3J1xuICBdLFxuICBsYWJlbEVkaXRpbmdQcm92aWRlcjogWyAndHlwZScsIExhYmVsRWRpdGluZ1Byb3ZpZGVyIF0sXG4gIGxhYmVsRWRpdGluZ1ByZXZpZXc6IFsgJ3R5cGUnLCBMYWJlbEVkaXRpbmdQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBtYXAsXG4gIGFzc2lnbixcbiAgcGlja1xufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkZhY3RvcnkobW9kZGxlKSB7XG4gIHRoaXMuX21vZGVsID0gbW9kZGxlO1xufVxuXG5CcG1uRmFjdG9yeS4kaW5qZWN0ID0gWyAnbW9kZGxlJyBdO1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5fbmVlZHNJZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpSb290RWxlbWVudCcsXG4gICAgJ2JwbW46Rmxvd0VsZW1lbnQnLFxuICAgICdicG1uOk1lc3NhZ2VGbG93JyxcbiAgICAnYnBtbjpEYXRhQXNzb2NpYXRpb24nLFxuICAgICdicG1uOkFydGlmYWN0JyxcbiAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgJ2JwbW46TGFuZScsXG4gICAgJ2JwbW46TGFuZVNldCcsXG4gICAgJ2JwbW46UHJvY2VzcycsXG4gICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgJ2JwbW5kaTpCUE1OU2hhcGUnLFxuICAgICdicG1uZGk6QlBNTkVkZ2UnLFxuICAgICdicG1uZGk6QlBNTkRpYWdyYW0nLFxuICAgICdicG1uZGk6QlBNTlBsYW5lJyxcbiAgICAnYnBtbjpQcm9wZXJ0eScsXG4gICAgJ2JwbW46Q2F0ZWdvcnlWYWx1ZSdcbiAgXSk7XG59O1xuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuX2Vuc3VyZUlkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIC8vIGdlbmVyYXRlIHNlbWFudGljIGlkcyBmb3IgZWxlbWVudHNcbiAgLy8gYnBtbjpTZXF1ZW5jZUZsb3cgLT4gU2VxdWVuY2VGbG93X0lEXG4gIHZhciBwcmVmaXg7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5JykpIHtcbiAgICBwcmVmaXggPSAnQWN0aXZpdHknO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykpIHtcbiAgICBwcmVmaXggPSAnRXZlbnQnO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdhdGV3YXknKSkge1xuICAgIHByZWZpeCA9ICdHYXRld2F5JztcbiAgfSBlbHNlIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOlNlcXVlbmNlRmxvdycsICdicG1uOk1lc3NhZ2VGbG93JyBdKSkge1xuICAgIHByZWZpeCA9ICdGbG93JztcbiAgfSBlbHNlIHtcbiAgICBwcmVmaXggPSAoZWxlbWVudC4kdHlwZSB8fCAnJykucmVwbGFjZSgvXlteOl0qOi9nLCAnJyk7XG4gIH1cblxuICBwcmVmaXggKz0gJ18nO1xuXG4gIGlmICghZWxlbWVudC5pZCAmJiB0aGlzLl9uZWVkc0lkKGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC5pZCA9IHRoaXMuX21vZGVsLmlkcy5uZXh0UHJlZml4ZWQocHJlZml4LCBlbGVtZW50KTtcbiAgfVxufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLl9tb2RlbC5jcmVhdGUodHlwZSwgYXR0cnMgfHwge30pO1xuXG4gIHRoaXMuX2Vuc3VyZUlkKGVsZW1lbnQpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlMYWJlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OTGFiZWwnLCB7XG4gICAgYm91bmRzOiB0aGlzLmNyZWF0ZURpQm91bmRzKClcbiAgfSk7XG59O1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEaVNoYXBlID0gZnVuY3Rpb24oc2VtYW50aWMsIGJvdW5kcywgYXR0cnMpIHtcblxuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OU2hhcGUnLCBhc3NpZ24oe1xuICAgIGJwbW5FbGVtZW50OiBzZW1hbnRpYyxcbiAgICBib3VuZHM6IHRoaXMuY3JlYXRlRGlCb3VuZHMoYm91bmRzKVxuICB9LCBhdHRycykpO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlCb3VuZHMgPSBmdW5jdGlvbihib3VuZHMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdkYzpCb3VuZHMnLCBib3VuZHMpO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlXYXlwb2ludHMgPSBmdW5jdGlvbih3YXlwb2ludHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBtYXAod2F5cG9pbnRzLCBmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gc2VsZi5jcmVhdGVEaVdheXBvaW50KHBvcyk7XG4gIH0pO1xufTtcblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpV2F5cG9pbnQgPSBmdW5jdGlvbihwb2ludCkge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2RjOlBvaW50JywgcGljayhwb2ludCwgWyAneCcsICd5JyBdKSk7XG59O1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEaUVkZ2UgPSBmdW5jdGlvbihzZW1hbnRpYywgd2F5cG9pbnRzLCBhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1ORWRnZScsIGFzc2lnbih7XG4gICAgYnBtbkVsZW1lbnQ6IHNlbWFudGljXG4gIH0sIGF0dHJzKSk7XG59O1xuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlQbGFuZSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnYnBtbmRpOkJQTU5QbGFuZScsIHtcbiAgICBicG1uRWxlbWVudDogc2VtYW50aWNcbiAgfSk7XG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBCYXNlTGF5b3V0ZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Jhc2VMYXlvdXRlcic7XG5cbmltcG9ydCB7XG4gIHJlcGFpckNvbm5lY3Rpb24sXG4gIHdpdGhvdXRSZWR1bmRhbnRQb2ludHNcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBBVFRBQ0hfT1JJRU5UQVRJT05fUEFERElORyA9IC0xMCxcbiAgICBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCA9IDQwO1xuXG52YXIgb3Bwb3NpdGVPcmllbnRhdGlvbk1hcHBpbmcgPSB7XG4gICd0b3AnOiAnYm90dG9tJyxcbiAgJ3RvcC1yaWdodCc6ICdib3R0b20tbGVmdCcsXG4gICd0b3AtbGVmdCc6ICdib3R0b20tcmlnaHQnLFxuICAncmlnaHQnOiAnbGVmdCcsXG4gICdib3R0b20nOiAndG9wJyxcbiAgJ2JvdHRvbS1yaWdodCc6ICd0b3AtbGVmdCcsXG4gICdib3R0b20tbGVmdCc6ICd0b3AtcmlnaHQnLFxuICAnbGVmdCc6ICdyaWdodCdcbn07XG5cbnZhciBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmcgPSB7XG4gIHRvcDogJ3QnLFxuICByaWdodDogJ3InLFxuICBib3R0b206ICdiJyxcbiAgbGVmdDogJ2wnXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5MYXlvdXRlcigpIHt9XG5cbmluaGVyaXRzKEJwbW5MYXlvdXRlciwgQmFzZUxheW91dGVyKTtcblxuXG5CcG1uTGF5b3V0ZXIucHJvdG90eXBlLmxheW91dENvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBoaW50cykge1xuICBpZiAoIWhpbnRzKSB7XG4gICAgaGludHMgPSB7fTtcbiAgfVxuXG4gIHZhciBzb3VyY2UgPSBoaW50cy5zb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICB0YXJnZXQgPSBoaW50cy50YXJnZXQgfHwgY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICB3YXlwb2ludHMgPSBoaW50cy53YXlwb2ludHMgfHwgY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICBjb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQsXG4gICAgICBjb25uZWN0aW9uRW5kID0gaGludHMuY29ubmVjdGlvbkVuZDtcblxuICB2YXIgbWFuaGF0dGFuT3B0aW9ucyxcbiAgICAgIHVwZGF0ZWRXYXlwb2ludHM7XG5cbiAgaWYgKCFjb25uZWN0aW9uU3RhcnQpIHtcbiAgICBjb25uZWN0aW9uU3RhcnQgPSBnZXRDb25uZWN0aW9uRG9ja2luZyh3YXlwb2ludHMgJiYgd2F5cG9pbnRzWyAwIF0sIHNvdXJjZSk7XG4gIH1cblxuICBpZiAoIWNvbm5lY3Rpb25FbmQpIHtcbiAgICBjb25uZWN0aW9uRW5kID0gZ2V0Q29ubmVjdGlvbkRvY2tpbmcod2F5cG9pbnRzICYmIHdheXBvaW50c1sgd2F5cG9pbnRzLmxlbmd0aCAtIDEgXSwgdGFyZ2V0KTtcbiAgfVxuXG4gIC8vIFRPRE8obmlra3UpOiBzdXBwb3J0IHZlcnRpY2FsIG1vZGVsaW5nXG4gIC8vIGFuZCBpbnZlcnQgcHJlZmVycmVkTGF5b3V0cyBhY2NvcmRpbmdseVxuXG4gIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpBc3NvY2lhdGlvbicpIHx8XG4gICAgICBpcyhjb25uZWN0aW9uLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgaWYgKHdheXBvaW50cyAmJiAhaXNDb21wZW5zYXRpb25Bc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoWyBjb25uZWN0aW9uU3RhcnQgXSwgd2F5cG9pbnRzLnNsaWNlKDEsIC0xKSwgWyBjb25uZWN0aW9uRW5kIF0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG4gICAgbWFuaGF0dGFuT3B0aW9ucyA9IGdldE1lc3NhZ2VGbG93TWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UsIHRhcmdldCk7XG4gIH0gZWxzZSBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgaXNDb21wZW5zYXRpb25Bc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcblxuICAgIC8vIGxheW91dCBhbGwgY29ubmVjdGlvbiBiZXR3ZWVuIGZsb3cgZWxlbWVudHMgaDpoLCBleGNlcHQgZm9yXG4gICAgLy8gKDEpIG91dGdvaW5nIG9mIGJvdW5kYXJ5IGV2ZW50cyAtPiBsYXlvdXQgYmFzZWQgb24gYXR0YWNoIG9yaWVudGF0aW9uIGFuZCB0YXJnZXQgb3JpZW50YXRpb25cbiAgICAvLyAoMikgaW5jb21pbmcvb3V0Z29pbmcgb2YgZ2F0ZXdheXMgLT4gdjpoIGZvciBvdXRnb2luZywgaDp2IGZvciBpbmNvbWluZ1xuICAgIC8vICgzKSBsb29wc1xuICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogZ2V0TG9vcFByZWZlcnJlZExheW91dChzb3VyY2UsIGNvbm5lY3Rpb24pXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IGdldEJvdW5kYXJ5RXZlbnRQcmVmZXJyZWRMYXlvdXRzKHNvdXJjZSwgdGFyZ2V0LCBjb25uZWN0aW9uRW5kKVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkgfHwgaXNFeHBhbmRlZFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IGdldFN1YlByb2Nlc3NNYW5oYXR0YW5PcHRpb25zKHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmIChpcyhzb3VyY2UsICdicG1uOkdhdGV3YXknKSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogWyAndjpoJyBdXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXModGFyZ2V0LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IFsgJ2g6dicgXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogWyAnaDpoJyBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW5oYXR0YW5PcHRpb25zKSB7XG4gICAgbWFuaGF0dGFuT3B0aW9ucyA9IGFzc2lnbihtYW5oYXR0YW5PcHRpb25zLCBoaW50cyk7XG5cbiAgICB1cGRhdGVkV2F5cG9pbnRzID0gd2l0aG91dFJlZHVuZGFudFBvaW50cyhyZXBhaXJDb25uZWN0aW9uKFxuICAgICAgc291cmNlLFxuICAgICAgdGFyZ2V0LFxuICAgICAgY29ubmVjdGlvblN0YXJ0LFxuICAgICAgY29ubmVjdGlvbkVuZCxcbiAgICAgIHdheXBvaW50cyxcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnNcbiAgICApKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkV2F5cG9pbnRzIHx8IFsgY29ubmVjdGlvblN0YXJ0LCBjb25uZWN0aW9uRW5kIF07XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRBdHRhY2hPcmllbnRhdGlvbihhdHRhY2hlZEVsZW1lbnQpIHtcbiAgdmFyIGhvc3RFbGVtZW50ID0gYXR0YWNoZWRFbGVtZW50Lmhvc3Q7XG5cbiAgcmV0dXJuIGdldE9yaWVudGF0aW9uKGdldE1pZChhdHRhY2hlZEVsZW1lbnQpLCBob3N0RWxlbWVudCwgQVRUQUNIX09SSUVOVEFUSU9OX1BBRERJTkcpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlRmxvd01hbmhhdHRhbk9wdGlvbnMoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdzdHJhaWdodCcsICd2OnYnIF0sXG4gICAgcHJlc2VydmVEb2NraW5nOiBnZXRNZXNzYWdlRmxvd1ByZXNlcnZlRG9ja2luZyhzb3VyY2UsIHRhcmdldClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZUZsb3dQcmVzZXJ2ZURvY2tpbmcoc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyAoMSkgZG9ja2luZyBlbGVtZW50IGNvbm5lY3RlZCB0byBwYXJ0aWNpcGFudCBoYXMgcHJlY2VkZW5jZVxuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICdzb3VyY2UnO1xuICB9XG5cbiAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiAndGFyZ2V0JztcbiAgfVxuXG4gIC8vICgyKSBkb2NraW5nIGVsZW1lbnQgY29ubmVjdGVkIHRvIGV4cGFuZGVkIHN1Yi1wcm9jZXNzIGhhcyBwcmVjZWRlbmNlXG4gIGlmIChpc0V4cGFuZGVkU3ViUHJvY2Vzcyh0YXJnZXQpKSB7XG4gICAgcmV0dXJuICdzb3VyY2UnO1xuICB9XG5cbiAgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkpIHtcbiAgICByZXR1cm4gJ3RhcmdldCc7XG4gIH1cblxuICAvLyAoMykgZG9ja2luZyBldmVudCBoYXMgcHJlY2VkZW5jZVxuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcmV0dXJuICd0YXJnZXQnO1xuICB9XG5cbiAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiAnc291cmNlJztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRTdWJQcm9jZXNzTWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdzdHJhaWdodCcsICdoOmgnIF0sXG4gICAgcHJlc2VydmVEb2NraW5nOiBnZXRTdWJQcm9jZXNzUHJlc2VydmVEb2NraW5nKHNvdXJjZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ViUHJvY2Vzc1ByZXNlcnZlRG9ja2luZyhzb3VyY2UpIHtcbiAgcmV0dXJuIGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkgPyAndGFyZ2V0JyA6ICdzb3VyY2UnO1xufVxuXG5mdW5jdGlvbiBnZXRDb25uZWN0aW9uRG9ja2luZyhwb2ludCwgc2hhcGUpIHtcbiAgcmV0dXJuIHBvaW50ID8gKHBvaW50Lm9yaWdpbmFsIHx8IHBvaW50KSA6IGdldE1pZChzaGFwZSk7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcGVuc2F0aW9uQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIGlzKHRhcmdldCwgJ2JwbW46QWN0aXZpdHknKSAmJlxuICAgIGlzKHNvdXJjZSwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgdGFyZ2V0LmJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uO1xufVxuXG5mdW5jdGlvbiBpc0V4cGFuZGVkU3ViUHJvY2VzcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbmZ1bmN0aW9uIGlzQW55T3JpZW50YXRpb24ob3JpZW50YXRpb24sIG9yaWVudGF0aW9ucykge1xuICByZXR1cm4gb3JpZW50YXRpb25zLmluZGV4T2Yob3JpZW50YXRpb24pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHZhciBtYXRjaGVzID0gL3JpZ2h0fGxlZnQvLmV4ZWMob3JpZW50YXRpb24pO1xuXG4gIHJldHVybiBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG59XG5cbmZ1bmN0aW9uIGdldFZlcnRpY2FsT3JpZW50YXRpb24ob3JpZW50YXRpb24pIHtcbiAgdmFyIG1hdGNoZXMgPSAvdG9wfGJvdHRvbS8uZXhlYyhvcmllbnRhdGlvbik7XG5cbiAgcmV0dXJuIG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcbn1cblxuZnVuY3Rpb24gaXNPcHBvc2l0ZU9yaWVudGF0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nW2FdID09PSBiO1xufVxuXG5mdW5jdGlvbiBpc09wcG9zaXRlSG9yaXpvbnRhbE9yaWVudGF0aW9uKGEsIGIpIHtcbiAgdmFyIGhvcml6b250YWxPcmllbnRhdGlvbiA9IGdldEhvcml6b250YWxPcmllbnRhdGlvbihhKTtcblxuICB2YXIgb3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24gPSBvcHBvc2l0ZU9yaWVudGF0aW9uTWFwcGluZ1tob3Jpem9udGFsT3JpZW50YXRpb25dO1xuXG4gIHJldHVybiBiLmluZGV4T2Yob3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNPcHBvc2l0ZVZlcnRpY2FsT3JpZW50YXRpb24oYSwgYikge1xuICB2YXIgdmVydGljYWxPcmllbnRhdGlvbiA9IGdldFZlcnRpY2FsT3JpZW50YXRpb24oYSk7XG5cbiAgdmFyIG9wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbiA9IG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nW3ZlcnRpY2FsT3JpZW50YXRpb25dO1xuXG4gIHJldHVybiBiLmluZGV4T2Yob3Bwb3NpdGVWZXJ0aWNhbE9yaWVudGF0aW9uKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHJldHVybiBvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0JyB8fCBvcmllbnRhdGlvbiA9PT0gJ2xlZnQnO1xufVxuXG5mdW5jdGlvbiBnZXRMb29wUHJlZmVycmVkTGF5b3V0KHNvdXJjZSwgY29ubmVjdGlvbikge1xuICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgdmFyIG9yaWVudGF0aW9uID0gd2F5cG9pbnRzICYmIHdheXBvaW50cy5sZW5ndGggJiYgZ2V0T3JpZW50YXRpb24od2F5cG9pbnRzWzBdLCBzb3VyY2UpO1xuXG4gIGlmIChvcmllbnRhdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICByZXR1cm4gWyAndDpyJyBdO1xuICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIFsgJ3I6YicgXTtcbiAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgcmV0dXJuIFsgJ2w6dCcgXTtcbiAgfVxuXG4gIHJldHVybiBbICdiOmwnIF07XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRQcmVmZXJyZWRMYXlvdXRzKHNvdXJjZSwgdGFyZ2V0LCBlbmQpIHtcbiAgdmFyIHNvdXJjZU1pZCA9IGdldE1pZChzb3VyY2UpLFxuICAgICAgdGFyZ2V0TWlkID0gZ2V0TWlkKHRhcmdldCksXG4gICAgICBhdHRhY2hPcmllbnRhdGlvbiA9IGdldEF0dGFjaE9yaWVudGF0aW9uKHNvdXJjZSksXG4gICAgICBzb3VyY2VMYXlvdXQsXG4gICAgICB0YXJnZXRMYXlvdXQ7XG5cbiAgdmFyIGlzTG9vcCA9IGlzU2FtZShzb3VyY2UuaG9zdCwgdGFyZ2V0KTtcblxuICB2YXIgYXR0YWNoZWRUb1NpZGUgPSBpc0FueU9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uLCBbICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnIF0pO1xuXG4gIHZhciB0YXJnZXRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHRhcmdldE1pZCwgc291cmNlTWlkLCB7XG4gICAgeDogc291cmNlLndpZHRoIC8gMiArIHRhcmdldC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlLmhlaWdodCAvIDIgKyB0YXJnZXQuaGVpZ2h0IC8gMlxuICB9KTtcblxuICBpZiAoaXNMb29wKSB7XG4gICAgcmV0dXJuIGdldEJvdW5kYXJ5RXZlbnRMb29wTGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSwgc291cmNlLCB0YXJnZXQsIGVuZCk7XG4gIH1cblxuICAvLyBzb3VyY2UgbGF5b3V0XG4gIHNvdXJjZUxheW91dCA9IGdldEJvdW5kYXJ5RXZlbnRTb3VyY2VMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSk7XG5cbiAgLy8gdGFyZ2V0IGxheW91dFxuICB0YXJnZXRMYXlvdXQgPSBnZXRCb3VuZGFyeUV2ZW50VGFyZ2V0TGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpO1xuXG4gIHJldHVybiBbIHNvdXJjZUxheW91dCArICc6JyArIHRhcmdldExheW91dCBdO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50TG9vcExheW91dChhdHRhY2hPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUsIHNvdXJjZSwgdGFyZ2V0LCBlbmQpIHtcbiAgdmFyIG9yaWVudGF0aW9uID0gYXR0YWNoZWRUb1NpZGUgPyBhdHRhY2hPcmllbnRhdGlvbiA6IGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLFxuICAgICAgc291cmNlTGF5b3V0ID0gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBvcmllbnRhdGlvbiBdLFxuICAgICAgdGFyZ2V0TGF5b3V0O1xuXG4gIGlmIChhdHRhY2hlZFRvU2lkZSkge1xuICAgIGlmIChpc0hvcml6b250YWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbikpIHtcbiAgICAgIHRhcmdldExheW91dCA9IHNob3VsZENvbm5lY3RUb1NhbWVTaWRlKCd5Jywgc291cmNlLCB0YXJnZXQsIGVuZCkgPyAnaCcgOiAnYic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldExheW91dCA9IHNob3VsZENvbm5lY3RUb1NhbWVTaWRlKCd4Jywgc291cmNlLCB0YXJnZXQsIGVuZCkgPyAndicgOiAnbCc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhcmdldExheW91dCA9ICd2JztcbiAgfVxuXG4gIHJldHVybiBbIHNvdXJjZUxheW91dCArICc6JyArIHRhcmdldExheW91dCBdO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDb25uZWN0VG9TYW1lU2lkZShheGlzLCBzb3VyY2UsIHRhcmdldCwgZW5kKSB7XG4gIHZhciB0aHJlc2hvbGQgPSBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRDtcblxuICByZXR1cm4gIShcbiAgICBhcmVDbG9zZU9uQXhpcyhheGlzLCBlbmQsIHRhcmdldCwgdGhyZXNob2xkKSB8fFxuICAgIGFyZUNsb3NlT25BeGlzKGF4aXMsIGVuZCwge1xuICAgICAgeDogdGFyZ2V0LnggKyB0YXJnZXQud2lkdGgsXG4gICAgICB5OiB0YXJnZXQueSArIHRhcmdldC5oZWlnaHRcbiAgICB9LCB0aHJlc2hvbGQpIHx8XG4gICAgYXJlQ2xvc2VPbkF4aXMoYXhpcywgZW5kLCBnZXRNaWQoc291cmNlKSwgdGhyZXNob2xkKVxuICApO1xufVxuXG5mdW5jdGlvbiBhcmVDbG9zZU9uQXhpcyhheGlzLCBhLCBiLCB0aHJlc2hvbGQpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGFbIGF4aXMgXSAtIGJbIGF4aXMgXSkgPCB0aHJlc2hvbGQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRTb3VyY2VMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSkge1xuXG4gIC8vIGF0dGFjaGVkIHRvIGVpdGhlciB0b3AsIHJpZ2h0LCBib3R0b20gb3IgbGVmdCBzaWRlXG4gIGlmIChhdHRhY2hlZFRvU2lkZSkge1xuICAgIHJldHVybiBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmdbIGF0dGFjaE9yaWVudGF0aW9uIF07XG4gIH1cblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLXJpZ2h0LCB0b3AtbGVmdCwgYm90dG9tLXJpZ2h0IG9yIGJvdHRvbS1sZWZ0IGNvcm5lclxuXG4gIC8vIHNhbWUgdmVydGljYWwgb3Igb3Bwb3NpdGUgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICBpZiAoaXNTYW1lKFxuICAgIGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLCBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKVxuICApIHx8IGlzT3Bwb3NpdGVPcmllbnRhdGlvbihcbiAgICBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLCBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pXG4gICkpIHtcbiAgICByZXR1cm4gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSBdO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgcmV0dXJuIG9yaWVudGF0aW9uRGlyZWN0aW9uTWFwcGluZ1sgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSBdO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50VGFyZ2V0TGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpIHtcblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLCByaWdodCwgYm90dG9tIG9yIGxlZnQgc2lkZVxuICBpZiAoYXR0YWNoZWRUb1NpZGUpIHtcbiAgICBpZiAoaXNIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pKSB7XG5cbiAgICAgIC8vIG9yaWVudGF0aW9uIGlzIHJpZ2h0IG9yIGxlZnRcblxuICAgICAgLy8gb3Bwb3NpdGUgaG9yaXpvbnRhbCBvcmllbnRhdGlvbiBvciBzYW1lIG9yaWVudGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGlzT3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKSB8fFxuICAgICAgICBpc1NhbWUoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAnaCc7XG4gICAgICB9XG5cbiAgICAgIC8vIGZhbGxiYWNrXG4gICAgICByZXR1cm4gJ3YnO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIG9yaWVudGF0aW9uIGlzIHRvcCBvciBib3R0b21cblxuICAgICAgLy8gb3Bwb3NpdGUgdmVydGljYWwgb3JpZW50YXRpb24gb3Igc2FtZSBvcmllbnRhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBpc09wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pIHx8XG4gICAgICAgIGlzU2FtZShhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICd2JztcbiAgICAgIH1cblxuICAgICAgLy8gZmFsbGJhY2tcbiAgICAgIHJldHVybiAnaCc7XG4gICAgfVxuICB9XG5cbiAgLy8gYXR0YWNoZWQgdG8gZWl0aGVyIHRvcC1yaWdodCwgdG9wLWxlZnQsIGJvdHRvbS1yaWdodCBvciBib3R0b20tbGVmdCBjb3JuZXJcblxuICAvLyBvcmllbnRhdGlvbiBpcyByaWdodCwgbGVmdFxuICAvLyBvciBzYW1lIHZlcnRpY2FsIG9yaWVudGF0aW9uIGJ1dCBhbHNvIHJpZ2h0IG9yIGxlZnRcbiAgaWYgKGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKSB8fFxuICAgIChpc1NhbWUoZ2V0VmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiksIGdldFZlcnRpY2FsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pKSAmJlxuICAgICAgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKSkpIHtcbiAgICByZXR1cm4gJ2gnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAndic7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlLFxuICBhZGQgYXMgY29sbGVjdGlvbkFkZFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgTGFiZWxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbW9kZWwnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQSBoYW5kbGVyIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgdW5kZXJseWluZyBCUE1OIDIuMCBYTUwgKyBESVxuICogb25jZSBjaGFuZ2VzIG9uIHRoZSBkaWFncmFtIGhhcHBlblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uVXBkYXRlcihcbiAgICBldmVudEJ1cywgYnBtbkZhY3RvcnksIGNvbm5lY3Rpb25Eb2NraW5nLFxuICAgIHRyYW5zbGF0ZSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG5cblxuICAvLyBjb25uZWN0aW9uIGNyb3BwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvLyBjcm9wIGNvbm5lY3Rpb24gZW5kcyBkdXJpbmcgY3JlYXRlL3VwZGF0ZVxuICBmdW5jdGlvbiBjcm9wQ29ubmVjdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgY29ubmVjdGlvbjtcblxuICAgIGlmICghY29udGV4dC5jcm9wcGVkICYmIGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgIT09IGZhbHNlKSB7XG4gICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuICAgICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb25uZWN0aW9uRG9ja2luZy5nZXRDcm9wcGVkV2F5cG9pbnRzKGNvbm5lY3Rpb24pO1xuICAgICAgY29udGV4dC5jcm9wcGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnLFxuICAgICdjb25uZWN0aW9uLmNyZWF0ZSdcbiAgXSwgY3JvcENvbm5lY3Rpb24pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnY29ubmVjdGlvbi5sYXlvdXQnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICBkZWxldGUgZS5jb250ZXh0LmNyb3BwZWQ7XG4gIH0pO1xuXG5cblxuICAvLyBCUE1OICsgREkgdXBkYXRlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4gIC8vIHVwZGF0ZSBwYXJlbnRcbiAgZnVuY3Rpb24gdXBkYXRlUGFyZW50KGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dDtcblxuICAgIHNlbGYudXBkYXRlUGFyZW50KGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLCBjb250ZXh0Lm9sZFBhcmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnNlVXBkYXRlUGFyZW50KGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dDtcblxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dC5zaGFwZSB8fCBjb250ZXh0LmNvbm5lY3Rpb24sXG5cbiAgICAgICAgLy8gb2xkUGFyZW50IGlzIHRoZSAob2xkKSBuZXcgcGFyZW50LCBiZWNhdXNlIHdlIGFyZSB1bmRvaW5nXG4gICAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQucGFyZW50IHx8IGNvbnRleHQubmV3UGFyZW50O1xuXG4gICAgc2VsZi51cGRhdGVQYXJlbnQoZWxlbWVudCwgb2xkUGFyZW50KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZSdcbiAgXSwgaWZCcG1uKHVwZGF0ZVBhcmVudCkpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoW1xuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZSdcbiAgXSwgaWZCcG1uKHJldmVyc2VVcGRhdGVQYXJlbnQpKTtcblxuICAvKlxuICAgKiAjIyBVcGRhdGluZyBQYXJlbnRcbiAgICpcbiAgICogV2hlbiBtb3JwaGluZyBhIFByb2Nlc3MgaW50byBhIENvbGxhYm9yYXRpb24gb3IgdmljZS12ZXJzYSxcbiAgICogbWFrZSBzdXJlIHRoYXQgYm90aCB0aGUgKnNlbWFudGljKiBhbmQgKmRpKiBwYXJlbnQgb2YgZWFjaCBlbGVtZW50XG4gICAqIGlzIHVwZGF0ZWQuXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVSb290KGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBvbGRSb290ID0gY29udGV4dC5vbGRSb290LFxuICAgICAgICBjaGlsZHJlbiA9IG9sZFJvb3QuY2hpbGRyZW47XG5cbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgaWYgKGlzKGNoaWxkLCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICAgIHNlbGYudXBkYXRlUGFyZW50KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoWyAnY2FudmFzLnVwZGF0ZVJvb3QnIF0sIHVwZGF0ZVJvb3QpO1xuICB0aGlzLnJldmVydGVkKFsgJ2NhbnZhcy51cGRhdGVSb290JyBdLCB1cGRhdGVSb290KTtcblxuXG4gIC8vIHVwZGF0ZSBib3VuZHNcbiAgZnVuY3Rpb24gdXBkYXRlQm91bmRzKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGVCb3VuZHMoc2hhcGUpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnIF0sIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuXG4gICAgLy8gZXhjbHVkZSBsYWJlbHMgYmVjYXVzZSB0aGV5J3JlIGhhbmRsZWQgc2VwYXJhdGVseSBkdXJpbmcgc2hhcGUuY2hhbmdlZFxuICAgIGlmIChldmVudC5jb250ZXh0LnNoYXBlLnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVCb3VuZHMoZXZlbnQpO1xuICB9KSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnIF0sIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuXG4gICAgLy8gZXhjbHVkZSBsYWJlbHMgYmVjYXVzZSB0aGV5J3JlIGhhbmRsZWQgc2VwYXJhdGVseSBkdXJpbmcgc2hhcGUuY2hhbmdlZFxuICAgIGlmIChldmVudC5jb250ZXh0LnNoYXBlLnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVCb3VuZHMoZXZlbnQpO1xuICB9KSk7XG5cbiAgLy8gSGFuZGxlIGxhYmVscyBzZXBhcmF0ZWx5LiBUaGlzIGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgbGFiZWwgYm91bmRzIGhhdmUgdG8gYmUgdXBkYXRlZFxuICAvLyBldmVyeSB0aW1lIGl0cyBzaGFwZSBjaGFuZ2VzLCBub3Qgb25seSBvbiBtb3ZlLCBjcmVhdGUgYW5kIHJlc2l6ZS5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChldmVudC5lbGVtZW50LnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHVwZGF0ZUJvdW5kcyh7IGNvbnRleHQ6IHsgc2hhcGU6IGV2ZW50LmVsZW1lbnQgfSB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGF0dGFjaCAvIGRldGFjaCBjb25uZWN0aW9uXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbm5lY3Rpb24oZSkge1xuICAgIHNlbGYudXBkYXRlQ29ubmVjdGlvbihlLmNvbnRleHQpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb24pKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ucmVjb25uZWN0J1xuICBdLCBpZkJwbW4odXBkYXRlQ29ubmVjdGlvbikpO1xuXG5cbiAgLy8gdXBkYXRlIHdheXBvaW50c1xuICBmdW5jdGlvbiB1cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKGUpIHtcbiAgICBzZWxmLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMoZS5jb250ZXh0LmNvbm5lY3Rpb24pO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnLFxuICBdLCBpZkJwbW4odXBkYXRlQ29ubmVjdGlvbldheXBvaW50cykpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyxcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMpKTtcblxuICAvLyB1cGRhdGUgY29uZGl0aW9uYWwvZGVmYXVsdCBmbG93c1xuICB0aGlzLmV4ZWN1dGVkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgb2xkU291cmNlID0gY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgICBjb25uZWN0aW9uQm8gPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uKSxcbiAgICAgICAgb2xkU291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChvbGRTb3VyY2UpLFxuICAgICAgICBuZXdTb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSk7XG5cbiAgICAvLyByZW1vdmUgY29uZGl0aW9uIGZyb20gY29ubmVjdGlvbiBvbiByZWNvbm5lY3QgdG8gbmV3IHNvdXJjZVxuICAgIC8vIGlmIG5ldyBzb3VyY2UgY2FuIE5PVCBoYXZlIGNvbmRpb25hbCBzZXF1ZW5jZSBmbG93XG4gICAgaWYgKGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uICYmICFpc0FueShuZXdTb3VyY2VCbywgW1xuICAgICAgJ2JwbW46QWN0aXZpdHknLFxuICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAnYnBtbjpJbmNsdXNpdmVHYXRld2F5J1xuICAgIF0pKSB7XG4gICAgICBjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb24gPSBjb25uZWN0aW9uQm8uY29uZGl0aW9uRXhwcmVzc2lvbjtcblxuICAgICAgZGVsZXRlIGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGZyb20gb2xkIHNvdXJjZSBmbG93IG9uIHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgLy8gaWYgc291cmNlIGNoYW5nZWRcbiAgICBpZiAob2xkU291cmNlICE9PSBuZXdTb3VyY2UgJiYgb2xkU291cmNlQm8uZGVmYXVsdCA9PT0gY29ubmVjdGlvbkJvKSB7XG4gICAgICBjb250ZXh0Lm9sZERlZmF1bHQgPSBvbGRTb3VyY2VCby5kZWZhdWx0O1xuXG4gICAgICBkZWxldGUgb2xkU291cmNlQm8uZGVmYXVsdDtcbiAgICB9XG4gIH0pKTtcblxuICB0aGlzLnJldmVydGVkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgb2xkU291cmNlID0gY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgICBjb25uZWN0aW9uQm8gPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uKSxcbiAgICAgICAgb2xkU291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChvbGRTb3VyY2UpLFxuICAgICAgICBuZXdTb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSk7XG5cbiAgICAvLyBhZGQgY29uZGl0aW9uIHRvIGNvbm5lY3Rpb24gb24gcmV2ZXJ0IHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgaWYgKGNvbnRleHQub2xkQ29uZGl0aW9uRXhwcmVzc2lvbikge1xuICAgICAgY29ubmVjdGlvbkJvLmNvbmRpdGlvbkV4cHJlc3Npb24gPSBjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgLy8gYWRkIGRlZmF1bHQgdG8gb2xkIHNvdXJjZSBvbiByZXZlcnQgcmVjb25uZWN0IHRvIG5ldyBzb3VyY2VcbiAgICBpZiAoY29udGV4dC5vbGREZWZhdWx0KSB7XG4gICAgICBvbGRTb3VyY2VCby5kZWZhdWx0ID0gY29udGV4dC5vbGREZWZhdWx0O1xuXG4gICAgICBkZWxldGUgbmV3U291cmNlQm8uZGVmYXVsdDtcbiAgICB9XG4gIH0pKTtcblxuICAvLyB1cGRhdGUgYXR0YWNobWVudHNcbiAgZnVuY3Rpb24gdXBkYXRlQXR0YWNobWVudChlKSB7XG4gICAgc2VsZi51cGRhdGVBdHRhY2htZW50KGUuY29udGV4dCk7XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ2VsZW1lbnQudXBkYXRlQXR0YWNobWVudCcgXSwgaWZCcG1uKHVwZGF0ZUF0dGFjaG1lbnQpKTtcbiAgdGhpcy5yZXZlcnRlZChbICdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnIF0sIGlmQnBtbih1cGRhdGVBdHRhY2htZW50KSk7XG59XG5cbmluaGVyaXRzKEJwbW5VcGRhdGVyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5CcG1uVXBkYXRlci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtbkZhY3RvcnknLFxuICAnY29ubmVjdGlvbkRvY2tpbmcnLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuXG4vLyBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVBdHRhY2htZW50ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBidXNpbmVzc09iamVjdCA9IHNoYXBlLmJ1c2luZXNzT2JqZWN0LFxuICAgICAgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgYnVzaW5lc3NPYmplY3QuYXR0YWNoZWRUb1JlZiA9IGhvc3QgJiYgaG9zdC5idXNpbmVzc09iamVjdDtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVQYXJlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBvbGRQYXJlbnQpIHtcblxuICAvLyBkbyBub3QgdXBkYXRlIEJQTU4gMi4wIGxhYmVsIHBhcmVudFxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIExhYmVsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZGF0YSBzdG9yZXMgaW4gY29sbGFib3JhdGlvbnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBieSBEYXRhU3RvcmVCZWhhdmlvclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcbiAgICAgIGVsZW1lbnQucGFyZW50ICYmXG4gICAgICBpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhcmVudFNoYXBlID0gZWxlbWVudC5wYXJlbnQ7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gcGFyZW50U2hhcGUgJiYgcGFyZW50U2hhcGUuYnVzaW5lc3NPYmplY3QsXG4gICAgICBwYXJlbnREaSA9IHBhcmVudEJ1c2luZXNzT2JqZWN0ICYmIHBhcmVudEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgdGhpcy51cGRhdGVGbG93Tm9kZVJlZnMoYnVzaW5lc3NPYmplY3QsIHBhcmVudEJ1c2luZXNzT2JqZWN0LCBvbGRQYXJlbnQgJiYgb2xkUGFyZW50LmJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nKSkge1xuICAgIGlmIChlbGVtZW50LnNvdXJjZSkge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LnNvdXJjZS5idXNpbmVzc09iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgaWYgKGVsZW1lbnQudGFyZ2V0KSB7XG4gICAgICBwYXJlbnRCdXNpbmVzc09iamVjdCA9IGVsZW1lbnQudGFyZ2V0LmJ1c2luZXNzT2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnRCdXNpbmVzc09iamVjdCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgcGFyZW50QnVzaW5lc3NPYmplY3QpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgJiYgYnVzaW5lc3NPYmplY3QuZGF0YU9iamVjdFJlZikge1xuICAgIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QuZGF0YU9iamVjdFJlZiwgcGFyZW50QnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgdGhpcy51cGRhdGVEaVBhcmVudChidXNpbmVzc09iamVjdC5kaSwgcGFyZW50RGkpO1xufTtcblxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQm91bmRzID0gZnVuY3Rpb24oc2hhcGUpIHtcblxuICB2YXIgZGkgPSBzaGFwZS5idXNpbmVzc09iamVjdC5kaTtcblxuICB2YXIgdGFyZ2V0ID0gKHNoYXBlIGluc3RhbmNlb2YgTGFiZWwpID8gdGhpcy5fZ2V0TGFiZWwoZGkpIDogZGk7XG5cbiAgdmFyIGJvdW5kcyA9IHRhcmdldC5ib3VuZHM7XG5cbiAgaWYgKCFib3VuZHMpIHtcbiAgICBib3VuZHMgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUJvdW5kcygpO1xuICAgIHRhcmdldC5zZXQoJ2JvdW5kcycsIGJvdW5kcyk7XG4gIH1cblxuICBhc3NpZ24oYm91bmRzLCB7XG4gICAgeDogc2hhcGUueCxcbiAgICB5OiBzaGFwZS55LFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodFxuICB9KTtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVGbG93Tm9kZVJlZnMgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCwgbmV3Q29udGFpbm1lbnQsIG9sZENvbnRhaW5tZW50KSB7XG5cbiAgaWYgKG9sZENvbnRhaW5tZW50ID09PSBuZXdDb250YWlubWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBvbGRSZWZzLCBuZXdSZWZzO1xuXG4gIGlmIChpcyAob2xkQ29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG9sZFJlZnMgPSBvbGRDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvblJlbW92ZShvbGRSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoaXMobmV3Q29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG5ld1JlZnMgPSBuZXdDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvbkFkZChuZXdSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cbn07XG5cblxuLy8gdXBkYXRlIGV4aXN0aW5nIHNvdXJjZUVsZW1lbnQgYW5kIHRhcmdldEVsZW1lbnQgZGkgaW5mb3JtYXRpb25cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVEaUNvbm5lY3Rpb24gPSBmdW5jdGlvbihkaSwgbmV3U291cmNlLCBuZXdUYXJnZXQpIHtcblxuICBpZiAoZGkuc291cmNlRWxlbWVudCAmJiBkaS5zb3VyY2VFbGVtZW50LmJwbW5FbGVtZW50ICE9PSBuZXdTb3VyY2UpIHtcbiAgICBkaS5zb3VyY2VFbGVtZW50ID0gbmV3U291cmNlICYmIG5ld1NvdXJjZS5kaTtcbiAgfVxuXG4gIGlmIChkaS50YXJnZXRFbGVtZW50ICYmIGRpLnRhcmdldEVsZW1lbnQuYnBtbkVsZW1lbnQgIT09IG5ld1RhcmdldCkge1xuICAgIGRpLnRhcmdldEVsZW1lbnQgPSBuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0LmRpO1xuICB9XG5cbn07XG5cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZURpUGFyZW50ID0gZnVuY3Rpb24oZGksIHBhcmVudERpKSB7XG5cbiAgaWYgKHBhcmVudERpICYmICFpcyhwYXJlbnREaSwgJ2JwbW5kaTpCUE1OUGxhbmUnKSkge1xuICAgIHBhcmVudERpID0gcGFyZW50RGkuJHBhcmVudDtcbiAgfVxuXG4gIGlmIChkaS4kcGFyZW50ID09PSBwYXJlbnREaSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwbGFuZUVsZW1lbnRzID0gKHBhcmVudERpIHx8IGRpLiRwYXJlbnQpLmdldCgncGxhbmVFbGVtZW50Jyk7XG5cbiAgaWYgKHBhcmVudERpKSB7XG4gICAgcGxhbmVFbGVtZW50cy5wdXNoKGRpKTtcbiAgICBkaS4kcGFyZW50ID0gcGFyZW50RGk7XG4gIH0gZWxzZSB7XG4gICAgY29sbGVjdGlvblJlbW92ZShwbGFuZUVsZW1lbnRzLCBkaSk7XG4gICAgZGkuJHBhcmVudCA9IG51bGw7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25zKGVsZW1lbnQpIHtcbiAgd2hpbGUgKGVsZW1lbnQgJiYgIWlzKGVsZW1lbnQsICdicG1uOkRlZmluaXRpb25zJykpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudC4kcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS5nZXRMYW5lU2V0ID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG5cbiAgdmFyIGxhbmVTZXQsIGxhbmVTZXRzO1xuXG4gIC8vIGJwbW46TGFuZVxuICBpZiAoaXMoY29udGFpbmVyLCAnYnBtbjpMYW5lJykpIHtcbiAgICBsYW5lU2V0ID0gY29udGFpbmVyLmNoaWxkTGFuZVNldDtcblxuICAgIGlmICghbGFuZVNldCkge1xuICAgICAgbGFuZVNldCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpMYW5lU2V0Jyk7XG4gICAgICBjb250YWluZXIuY2hpbGRMYW5lU2V0ID0gbGFuZVNldDtcbiAgICAgIGxhbmVTZXQuJHBhcmVudCA9IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFuZVNldDtcbiAgfVxuXG4gIC8vIGJwbW46UGFydGljaXBhbnRcbiAgaWYgKGlzKGNvbnRhaW5lciwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wcm9jZXNzUmVmO1xuICB9XG5cbiAgLy8gYnBtbjpGbG93RWxlbWVudHNDb250YWluZXJcbiAgbGFuZVNldHMgPSBjb250YWluZXIuZ2V0KCdsYW5lU2V0cycpO1xuICBsYW5lU2V0ID0gbGFuZVNldHNbMF07XG5cbiAgaWYgKCFsYW5lU2V0KSB7XG4gICAgbGFuZVNldCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpMYW5lU2V0Jyk7XG4gICAgbGFuZVNldC4kcGFyZW50ID0gY29udGFpbmVyO1xuICAgIGxhbmVTZXRzLnB1c2gobGFuZVNldCk7XG4gIH1cblxuICByZXR1cm4gbGFuZVNldDtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVTZW1hbnRpY1BhcmVudCA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0LCBuZXdQYXJlbnQsIHZpc3VhbFBhcmVudCkge1xuXG4gIHZhciBjb250YWlubWVudCxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBpZiAoYnVzaW5lc3NPYmplY3QuJHBhcmVudCA9PT0gbmV3UGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhSW5wdXQnKSB8fCBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YU91dHB1dCcpKSB7XG5cbiAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICdwcm9jZXNzUmVmJyBpbiBuZXdQYXJlbnQpIHtcbiAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC5wcm9jZXNzUmVmO1xuICAgIH1cblxuICAgIC8vIGFscmVhZHkgaW4gY29ycmVjdCBpb1NwZWNpZmljYXRpb25cbiAgICBpZiAoJ2lvU3BlY2lmaWNhdGlvbicgaW4gbmV3UGFyZW50ICYmIG5ld1BhcmVudC5pb1NwZWNpZmljYXRpb24gPT09IGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkxhbmUnKSkge1xuXG4gICAgaWYgKG5ld1BhcmVudCkge1xuICAgICAgbmV3UGFyZW50ID0gdGhpcy5nZXRMYW5lU2V0KG5ld1BhcmVudCk7XG4gICAgfVxuXG4gICAgY29udGFpbm1lbnQgPSAnbGFuZXMnO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dFbGVtZW50JykpIHtcblxuICAgIGlmIChuZXdQYXJlbnQpIHtcblxuICAgICAgaWYgKGlzKG5ld1BhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucHJvY2Vzc1JlZjtcbiAgICAgIH0gZWxzZVxuXG4gICAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpMYW5lJykpIHtcbiAgICAgICAgZG8ge1xuXG4gICAgICAgICAgLy8gdW53cmFwIExhbmUgLT4gTGFuZVNldCAtPiAoTGFuZSB8IEZsb3dFbGVtZW50c0NvbnRhaW5lcilcbiAgICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQuJHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9IHdoaWxlIChpcyhuZXdQYXJlbnQsICdicG1uOkxhbmUnKSk7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250YWlubWVudCA9ICdmbG93RWxlbWVudHMnO1xuXG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46QXJ0aWZhY3QnKSkge1xuXG4gICAgd2hpbGUgKG5ld1BhcmVudCAmJlxuICAgICAgICAgICAhaXMobmV3UGFyZW50LCAnYnBtbjpQcm9jZXNzJykgJiZcbiAgICAgICAgICAgIWlzKG5ld1BhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmXG4gICAgICAgICAgICFpcyhuZXdQYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuXG4gICAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC5wcm9jZXNzUmVmO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC4kcGFyZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5tZW50ID0gJ2FydGlmYWN0cyc7XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46TWVzc2FnZUZsb3cnKSkge1xuICAgIGNvbnRhaW5tZW50ID0gJ21lc3NhZ2VGbG93cyc7XG5cbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgY29udGFpbm1lbnQgPSAncGFydGljaXBhbnRzJztcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGFydGljaXBhbnRzIHByb2Nlc3MgaXMgcHJvcGVybHkgYXR0YWNoZWQgLyBkZXRhY2hlZFxuICAgIC8vIGZyb20gdGhlIFhNTCBkb2N1bWVudFxuXG4gICAgdmFyIHByb2Nlc3MgPSBidXNpbmVzc09iamVjdC5wcm9jZXNzUmVmLFxuICAgICAgICBkZWZpbml0aW9ucztcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBkZWZpbml0aW9ucyA9IGdldERlZmluaXRpb25zKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgfHwgbmV3UGFyZW50KTtcblxuICAgICAgaWYgKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcbiAgICAgICAgY29sbGVjdGlvblJlbW92ZShkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBwcm9jZXNzKTtcbiAgICAgICAgcHJvY2Vzcy4kcGFyZW50ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1BhcmVudCkge1xuICAgICAgICBjb2xsZWN0aW9uQWRkKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIHByb2Nlc3MpO1xuICAgICAgICBwcm9jZXNzLiRwYXJlbnQgPSBkZWZpbml0aW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJykpIHtcbiAgICBjb250YWlubWVudCA9ICdkYXRhT3V0cHV0QXNzb2NpYXRpb25zJztcbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgY29udGFpbm1lbnQgPSAnZGF0YUlucHV0QXNzb2NpYXRpb25zJztcbiAgfVxuXG4gIGlmICghY29udGFpbm1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKFxuICAgICAgJ25vIHBhcmVudCBmb3Ige2VsZW1lbnR9IGluIHtwYXJlbnR9JyxcbiAgICAgIHtcbiAgICAgICAgZWxlbWVudDogYnVzaW5lc3NPYmplY3QuaWQsXG4gICAgICAgIHBhcmVudDogbmV3UGFyZW50LmlkXG4gICAgICB9XG4gICAgKSk7XG4gIH1cblxuICB2YXIgY2hpbGRyZW47XG5cbiAgaWYgKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcblxuICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBwYXJlbnRcbiAgICBjaGlsZHJlbiA9IGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQuZ2V0KGNvbnRhaW5tZW50KTtcbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGNoaWxkcmVuLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoIW5ld1BhcmVudCkge1xuICAgIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBudWxsO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gYWRkIHRvIG5ldyBwYXJlbnRcbiAgICBjaGlsZHJlbiA9IG5ld1BhcmVudC5nZXQoY29udGFpbm1lbnQpO1xuICAgIGNoaWxkcmVuLnB1c2goYnVzaW5lc3NPYmplY3QpO1xuICAgIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBuZXdQYXJlbnQ7XG4gIH1cblxuICBpZiAodmlzdWFsUGFyZW50KSB7XG4gICAgdmFyIGRpQ2hpbGRyZW4gPSB2aXN1YWxQYXJlbnQuZ2V0KGNvbnRhaW5tZW50KTtcblxuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2hpbGRyZW4sIGJ1c2luZXNzT2JqZWN0KTtcblxuICAgIGlmIChuZXdQYXJlbnQpIHtcblxuICAgICAgaWYgKCFkaUNoaWxkcmVuKSB7XG4gICAgICAgIGRpQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgbmV3UGFyZW50LnNldChjb250YWlubWVudCwgZGlDaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIGRpQ2hpbGRyZW4ucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgfVxuICB9XG59O1xuXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICBjb25uZWN0aW9uLmJ1c2luZXNzT2JqZWN0LmRpLnNldCgnd2F5cG9pbnQnLCB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaVdheXBvaW50cyhjb25uZWN0aW9uLndheXBvaW50cykpO1xufTtcblxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbiksXG4gICAgICBuZXdTb3VyY2UgPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uLnNvdXJjZSksXG4gICAgICBuZXdUYXJnZXQgPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uLnRhcmdldCksXG4gICAgICB2aXN1YWxQYXJlbnQ7XG5cbiAgaWYgKCFpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YUFzc29jaWF0aW9uJykpIHtcblxuICAgIHZhciBpbnZlcnNlU2V0ID0gaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlNlcXVlbmNlRmxvdycpO1xuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiAhPT0gbmV3U291cmNlKSB7XG4gICAgICBpZiAoaW52ZXJzZVNldCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiAmJiBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYuZ2V0KCdvdXRnb2luZycpLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgaWYgKG5ld1NvdXJjZSAmJiBuZXdTb3VyY2UuZ2V0KCdvdXRnb2luZycpKSB7XG4gICAgICAgICAgbmV3U291cmNlLmdldCgnb3V0Z29pbmcnKS5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYgPSBuZXdTb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiAhPT0gbmV3VGFyZ2V0KSB7XG4gICAgICBpZiAoaW52ZXJzZVNldCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiAmJiBidXNpbmVzc09iamVjdC50YXJnZXRSZWYuZ2V0KCdpbmNvbWluZycpLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBuZXdUYXJnZXQuZ2V0KCdpbmNvbWluZycpKSB7XG4gICAgICAgICAgbmV3VGFyZ2V0LmdldCgnaW5jb21pbmcnKS5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidXNpbmVzc09iamVjdC50YXJnZXRSZWYgPSBuZXdUYXJnZXQ7XG4gICAgfVxuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykpIHtcblxuICAgIC8vIGhhbmRsZSBvYm5veGlvdXMgaXNNc29tZSBzb3VyY2VSZWZcbiAgICBidXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZVJlZicpWzBdID0gbmV3U291cmNlO1xuXG4gICAgdmlzdWFsUGFyZW50ID0gY29udGV4dC5wYXJlbnQgfHwgY29udGV4dC5uZXdQYXJlbnQgfHwgbmV3VGFyZ2V0O1xuXG4gICAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgbmV3VGFyZ2V0LCB2aXN1YWxQYXJlbnQpO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgdmlzdWFsUGFyZW50ID0gY29udGV4dC5wYXJlbnQgfHwgY29udGV4dC5uZXdQYXJlbnQgfHwgbmV3U291cmNlO1xuXG4gICAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgbmV3U291cmNlLCB2aXN1YWxQYXJlbnQpO1xuXG4gICAgLy8gdGFyZ2V0UmVmID0gbmV3IHRhcmdldFxuICAgIGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiA9IG5ld1RhcmdldDtcbiAgfVxuXG4gIHRoaXMudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICB0aGlzLnVwZGF0ZURpQ29ubmVjdGlvbihidXNpbmVzc09iamVjdC5kaSwgbmV3U291cmNlLCBuZXdUYXJnZXQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLl9nZXRMYWJlbCA9IGZ1bmN0aW9uKGRpKSB7XG4gIGlmICghZGkubGFiZWwpIHtcbiAgICBkaS5sYWJlbCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpTGFiZWwoKTtcbiAgfVxuXG4gIHJldHVybiBkaS5sYWJlbDtcbn07XG5cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhlIGV2ZW50IGxpc3RlbmVyIGlzIG9ubHkgY2FsbGVkXG4gKiBpZiB0aGUgdG91Y2hlZCBlbGVtZW50IGlzIGEgQlBNTiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259IGd1YXJkZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gaWZCcG1uKGZuKSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICBmbihldmVudCk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IEJhc2VFbGVtZW50RmFjdG9yeSBmcm9tICdkaWFncmFtLWpzL2xpYi9jb3JlL0VsZW1lbnRGYWN0b3J5JztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9MQUJFTF9TSVpFXG59IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuXG4vKipcbiAqIEEgYnBtbi1hd2FyZSBmYWN0b3J5IGZvciBkaWFncmFtLWpzIHNoYXBlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbGVtZW50RmFjdG9yeShicG1uRmFjdG9yeSwgbW9kZGxlLCB0cmFuc2xhdGUpIHtcbiAgQmFzZUVsZW1lbnRGYWN0b3J5LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cbmluaGVyaXRzKEVsZW1lbnRGYWN0b3J5LCBCYXNlRWxlbWVudEZhY3RvcnkpO1xuXG5FbGVtZW50RmFjdG9yeS4kaW5qZWN0ID0gW1xuICAnYnBtbkZhY3RvcnknLFxuICAnbW9kZGxlJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5iYXNlQ3JlYXRlID0gQmFzZUVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGU7XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgYXR0cnMpIHtcblxuICAvLyBubyBzcGVjaWFsIG1hZ2ljIGZvciBsYWJlbHMsXG4gIC8vIHdlIGFzc3VtZSB0aGVpciBidXNpbmVzc09iamVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlZFxuICAvLyBhbmQgd2lyZWQgdmlhIGF0dHJzXG4gIGlmIChlbGVtZW50VHlwZSA9PT0gJ2xhYmVsJykge1xuICAgIHJldHVybiB0aGlzLmJhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGFzc2lnbih7IHR5cGU6ICdsYWJlbCcgfSwgREVGQVVMVF9MQUJFTF9TSVpFLCBhdHRycykpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlQnBtbkVsZW1lbnQoZWxlbWVudFR5cGUsIGF0dHJzKTtcbn07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVCcG1uRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnRUeXBlLCBhdHRycykge1xuICB2YXIgc2l6ZSxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBhdHRycyA9IGF0dHJzIHx8IHt9O1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGF0dHJzLmJ1c2luZXNzT2JqZWN0O1xuXG4gIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICBpZiAoIWF0dHJzLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIHNoYXBlIHR5cGUgc3BlY2lmaWVkJykpO1xuICAgIH1cblxuICAgIGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKGF0dHJzLnR5cGUpO1xuICB9XG5cbiAgaWYgKCFidXNpbmVzc09iamVjdC5kaSkge1xuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gJ3Jvb3QnKSB7XG4gICAgICBidXNpbmVzc09iamVjdC5kaSA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpUGxhbmUoYnVzaW5lc3NPYmplY3QsIFtdLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfZGknXG4gICAgICB9KTtcbiAgICB9IGVsc2VcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgYnVzaW5lc3NPYmplY3QuZGkgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUVkZ2UoYnVzaW5lc3NPYmplY3QsIFtdLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfZGknXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVzaW5lc3NPYmplY3QuZGkgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaVNoYXBlKGJ1c2luZXNzT2JqZWN0LCB7fSwge1xuICAgICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2RpJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHcm91cCcpKSB7XG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgaXNGcmFtZTogdHJ1ZVxuICAgIH0sIGF0dHJzKTtcbiAgfVxuXG4gIGlmIChhdHRycy5kaSkge1xuICAgIGFzc2lnbihidXNpbmVzc09iamVjdC5kaSwgYXR0cnMuZGkpO1xuXG4gICAgZGVsZXRlIGF0dHJzLmRpO1xuICB9XG5cbiAgYXBwbHlBdHRyaWJ1dGVzKGJ1c2luZXNzT2JqZWN0LCBhdHRycywgW1xuICAgICdwcm9jZXNzUmVmJyxcbiAgICAnaXNJbnRlcnJ1cHRpbmcnLFxuICAgICdhc3NvY2lhdGlvbkRpcmVjdGlvbicsXG4gICAgJ2lzRm9yQ29tcGVuc2F0aW9uJ1xuICBdKTtcblxuICBpZiAoYXR0cnMuaXNFeHBhbmRlZCkge1xuICAgIGFwcGx5QXR0cmlidXRlKGJ1c2luZXNzT2JqZWN0LmRpLCBhdHRycywgJ2lzRXhwYW5kZWQnKTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScpKSB7XG4gICAgYnVzaW5lc3NPYmplY3QuZGkuaXNNYXJrZXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBldmVudERlZmluaXRpb25zLFxuICAgICAgbmV3RXZlbnREZWZpbml0aW9uO1xuXG4gIGlmIChhdHRycy5ldmVudERlZmluaXRpb25UeXBlKSB7XG4gICAgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpIHx8IFtdO1xuICAgIG5ld0V2ZW50RGVmaW5pdGlvbiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZShhdHRycy5ldmVudERlZmluaXRpb25UeXBlLCBhdHRycy5ldmVudERlZmluaXRpb25BdHRycyk7XG5cbiAgICBpZiAoYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSA9PT0gJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKSB7XG4gICAgICBuZXdFdmVudERlZmluaXRpb24uY29uZGl0aW9uID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nKTtcbiAgICB9XG5cbiAgICBldmVudERlZmluaXRpb25zLnB1c2gobmV3RXZlbnREZWZpbml0aW9uKTtcblxuICAgIG5ld0V2ZW50RGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucyA9IGV2ZW50RGVmaW5pdGlvbnM7XG5cbiAgICBkZWxldGUgYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZTtcbiAgfVxuXG4gIHNpemUgPSB0aGlzLl9nZXREZWZhdWx0U2l6ZShidXNpbmVzc09iamVjdCk7XG5cbiAgYXR0cnMgPSBhc3NpZ24oe1xuICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcbiAgICBpZDogYnVzaW5lc3NPYmplY3QuaWRcbiAgfSwgc2l6ZSwgYXR0cnMpO1xuXG4gIHJldHVybiB0aGlzLmJhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGF0dHJzKTtcbn07XG5cblxuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLl9nZXREZWZhdWx0U2l6ZSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcblxuICAgIGlmIChpc0V4cGFuZGVkKHNlbWFudGljKSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDM1MCwgaGVpZ2h0OiAyMDAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGFzaycpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNTAsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAzNiwgaGVpZ2h0OiAzNiB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgaWYgKGlzRXhwYW5kZWQoc2VtYW50aWMpKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogNjAwLCBoZWlnaHQ6IDI1MCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogNDAwLCBoZWlnaHQ6IDYwIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNDAwLCBoZWlnaHQ6IDEwMCB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMzYsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNTAsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAxMDAsIGhlaWdodDogMzAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46R3JvdXAnKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAzMDAsIGhlaWdodDogMzAwIH07XG4gIH1cblxuICByZXR1cm4geyB3aWR0aDogMTAwLCBoZWlnaHQ6IDgwIH07XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIHBhcnRpY2lwYW50LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFthdHRyc10gYXR0cnNcbiAqXG4gKiBAcmV0dXJucyB7ZGpzLm1vZGVsLlNoYXBlfVxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlUGFydGljaXBhbnRTaGFwZSA9IGZ1bmN0aW9uKGF0dHJzKSB7XG5cbiAgaWYgKCFpc09iamVjdChhdHRycykpIHtcbiAgICBhdHRycyA9IHsgaXNFeHBhbmRlZDogYXR0cnMgfTtcbiAgfVxuXG4gIGF0dHJzID0gYXNzaWduKHsgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnIH0sIGF0dHJzIHx8IHt9KTtcblxuICAvLyBwYXJ0aWNpcGFudHMgYXJlIGV4cGFuZGVkIGJ5IGRlZmF1bHRcbiAgaWYgKGF0dHJzLmlzRXhwYW5kZWQgIT09IGZhbHNlKSB7XG4gICAgYXR0cnMucHJvY2Vzc1JlZiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9jZXNzJyk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jcmVhdGVTaGFwZShhdHRycyk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEFwcGx5IGF0dHJpYnV0ZXMgZnJvbSBhIG1hcCB0byB0aGUgZ2l2ZW4gZWxlbWVudCxcbiAqIHJlbW92ZSBhdHRyaWJ1dGUgZnJvbSB0aGUgbWFwIG9uIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7QmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJzIChpbi9vdXQgbWFwIG9mIGF0dHJpYnV0ZXMpXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGF0dHJpYnV0ZU5hbWVzIG5hbWUgb2YgYXR0cmlidXRlcyB0byBhcHBseVxuICovXG5mdW5jdGlvbiBhcHBseUF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cnMsIGF0dHJpYnV0ZU5hbWVzKSB7XG5cbiAgZm9yRWFjaChhdHRyaWJ1dGVOYW1lcywgZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICBpZiAoYXR0cnNbcHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwcGx5QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJzLCBwcm9wZXJ0eSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBuYW1lZCBwcm9wZXJ0eSB0byBlbGVtZW50IGFuZCBkcmFpbiBpdCBmcm9tIHRoZSBhdHRyc1xuICogY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Jhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyAoaW4vb3V0IG1hcCBvZiBhdHRyaWJ1dGVzKVxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWUgdG8gYXBwbHlcbiAqL1xuZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cnMsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgZWxlbWVudFthdHRyaWJ1dGVOYW1lXSA9IGF0dHJzW2F0dHJpYnV0ZU5hbWVdO1xuXG4gIGRlbGV0ZSBhdHRyc1thdHRyaWJ1dGVOYW1lXTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZU1vZGVsaW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nJztcblxuaW1wb3J0IFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZVByb3BlcnRpZXNIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVDYW52YXNSb290SGFuZGxlciBmcm9tICcuL2NtZC9VcGRhdGVDYW52YXNSb290SGFuZGxlcic7XG5pbXBvcnQgQWRkTGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvQWRkTGFuZUhhbmRsZXInO1xuaW1wb3J0IFNwbGl0TGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvU3BsaXRMYW5lSGFuZGxlcic7XG5pbXBvcnQgUmVzaXplTGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvUmVzaXplTGFuZUhhbmRsZXInO1xuaW1wb3J0IFVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcic7XG5pbXBvcnQgSWRDbGFpbUhhbmRsZXIgZnJvbSAnLi9jbWQvSWRDbGFpbUhhbmRsZXInO1xuaW1wb3J0IFNldENvbG9ySGFuZGxlciBmcm9tICcuL2NtZC9TZXRDb2xvckhhbmRsZXInO1xuXG5pbXBvcnQgVXBkYXRlTGFiZWxIYW5kbGVyIGZyb20gJy4uL2xhYmVsLWVkaXRpbmcvY21kL1VwZGF0ZUxhYmVsSGFuZGxlcic7XG5cblxuLyoqXG4gKiBCUE1OIDIuMCBtb2RlbGluZyBmZWF0dXJlcyBhY3RpdmF0b3JcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50RmFjdG9yeX0gZWxlbWVudEZhY3RvcnlcbiAqIEBwYXJhbSB7Q29tbWFuZFN0YWNrfSBjb21tYW5kU3RhY2tcbiAqIEBwYXJhbSB7QnBtblJ1bGVzfSBicG1uUnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxpbmcoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBjb21tYW5kU3RhY2ssXG4gICAgYnBtblJ1bGVzKSB7XG5cbiAgQmFzZU1vZGVsaW5nLmNhbGwodGhpcywgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBjb21tYW5kU3RhY2spO1xuXG4gIHRoaXMuX2JwbW5SdWxlcyA9IGJwbW5SdWxlcztcbn1cblxuaW5oZXJpdHMoTW9kZWxpbmcsIEJhc2VNb2RlbGluZyk7XG5cbk1vZGVsaW5nLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdjb21tYW5kU3RhY2snLFxuICAnYnBtblJ1bGVzJ1xuXTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuZ2V0SGFuZGxlcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhhbmRsZXJzID0gQmFzZU1vZGVsaW5nLnByb3RvdHlwZS5nZXRIYW5kbGVycy5jYWxsKHRoaXMpO1xuXG4gIGhhbmRsZXJzWydlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnXSA9IFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyO1xuICBoYW5kbGVyc1snY2FudmFzLnVwZGF0ZVJvb3QnXSA9IFVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5hZGQnXSA9IEFkZExhbmVIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5yZXNpemUnXSA9IFJlc2l6ZUxhbmVIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5zcGxpdCddID0gU3BsaXRMYW5lSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2xhbmUudXBkYXRlUmVmcyddID0gVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2lkLnVwZGF0ZUNsYWltJ10gPSBJZENsYWltSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2VsZW1lbnQuc2V0Q29sb3InXSA9IFNldENvbG9ySGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2VsZW1lbnQudXBkYXRlTGFiZWwnXSA9IFVwZGF0ZUxhYmVsSGFuZGxlcjtcblxuICByZXR1cm4gaGFuZGxlcnM7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS51cGRhdGVMYWJlbCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0xhYmVsLCBuZXdCb3VuZHMsIGhpbnRzKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZUxhYmVsJywge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgbmV3TGFiZWw6IG5ld0xhYmVsLFxuICAgIG5ld0JvdW5kczogbmV3Qm91bmRzLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIGhpbnRzKSB7XG5cbiAgdmFyIGJwbW5SdWxlcyA9IHRoaXMuX2JwbW5SdWxlcztcblxuICBpZiAoIWF0dHJzKSB7XG4gICAgYXR0cnMgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBpZiAoIWF0dHJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZVByb3BlcnRpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXG4gIH0pO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlc2l6ZUxhbmUgPSBmdW5jdGlvbihsYW5lU2hhcGUsIG5ld0JvdW5kcywgYmFsYW5jZWQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUucmVzaXplJywge1xuICAgIHNoYXBlOiBsYW5lU2hhcGUsXG4gICAgbmV3Qm91bmRzOiBuZXdCb3VuZHMsXG4gICAgYmFsYW5jZWQ6IGJhbGFuY2VkXG4gIH0pO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmFkZExhbmUgPSBmdW5jdGlvbih0YXJnZXRMYW5lU2hhcGUsIGxvY2F0aW9uKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiB0YXJnZXRMYW5lU2hhcGUsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUuYWRkJywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnRleHQubmV3TGFuZTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5zcGxpdExhbmUgPSBmdW5jdGlvbih0YXJnZXRMYW5lLCBjb3VudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnbGFuZS5zcGxpdCcsIHtcbiAgICBzaGFwZTogdGFyZ2V0TGFuZSxcbiAgICBjb3VudDogY291bnRcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgY3VycmVudCBkaWFncmFtIGludG8gYSBjb2xsYWJvcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5Sb290fSB0aGUgbmV3IHJvb3QgZWxlbWVudFxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubWFrZUNvbGxhYm9yYXRpb24gPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY29sbGFib3JhdGlvbkVsZW1lbnQgPSB0aGlzLl9jcmVhdGUoJ3Jvb3QnLCB7XG4gICAgdHlwZTogJ2JwbW46Q29sbGFib3JhdGlvbidcbiAgfSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbmV3Um9vdDogY29sbGFib3JhdGlvbkVsZW1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29sbGFib3JhdGlvbkVsZW1lbnQ7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlTGFuZVJlZnMgPSBmdW5jdGlvbihmbG93Tm9kZVNoYXBlcywgbGFuZVNoYXBlcykge1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdsYW5lLnVwZGF0ZVJlZnMnLCB7XG4gICAgZmxvd05vZGVTaGFwZXM6IGZsb3dOb2RlU2hhcGVzLFxuICAgIGxhbmVTaGFwZXM6IGxhbmVTaGFwZXNcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgY3VycmVudCBkaWFncmFtIGludG8gYSBwcm9jZXNzLlxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5Sb290fSB0aGUgbmV3IHJvb3QgZWxlbWVudFxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubWFrZVByb2Nlc3MgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgcHJvY2Vzc0VsZW1lbnQgPSB0aGlzLl9jcmVhdGUoJ3Jvb3QnLCB7XG4gICAgdHlwZTogJ2JwbW46UHJvY2VzcydcbiAgfSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbmV3Um9vdDogcHJvY2Vzc0VsZW1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNsYWltSWQgPSBmdW5jdGlvbihpZCwgbW9kZGxlRWxlbWVudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnaWQudXBkYXRlQ2xhaW0nLCB7XG4gICAgaWQ6IGlkLFxuICAgIGVsZW1lbnQ6IG1vZGRsZUVsZW1lbnQsXG4gICAgY2xhaW1pbmc6IHRydWVcbiAgfSk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS51bmNsYWltSWQgPSBmdW5jdGlvbihpZCwgbW9kZGxlRWxlbWVudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnaWQudXBkYXRlQ2xhaW0nLCB7XG4gICAgaWQ6IGlkLFxuICAgIGVsZW1lbnQ6IG1vZGRsZUVsZW1lbnRcbiAgfSk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUuc2V0Q29sb3IgPSBmdW5jdGlvbihlbGVtZW50cywgY29sb3JzKSB7XG4gIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC5zZXRDb2xvcicsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgY29sb3JzOiBjb2xvcnNcbiAgfSk7XG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZCxcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgc3Vic3RyYWN0XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvTWF0aCc7XG5cbmltcG9ydCB7XG4gIGhhc0V4dGVybmFsTGFiZWxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxudmFyIEFMSUdOTUVOVFMgPSBbXG4gICd0b3AnLFxuICAnYm90dG9tJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnXG5dO1xuXG52YXIgRUxFTUVOVF9MQUJFTF9ESVNUQU5DRSA9IDEwO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFrZXMgc3VyZSB0aGF0IGV4dGVybmFsIGxhYmVscyBhcmUgYWRkZWRcbiAqIHRvZ2V0aGVyIHdpdGggcmVzcGVjdGl2ZSBlbGVtZW50cyBhbmQgcHJvcGVybHkgdXBkYXRlZCAoREkgd2lzZSlcbiAqIGR1cmluZyBtb3ZlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgY2hlY2tMYWJlbEFkanVzdG1lbnQoc291cmNlKTtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHRhcmdldCk7XG4gICAgfVxuICB9KTtcblxuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnbGFiZWwuY3JlYXRlJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHNoYXBlLmxhYmVsVGFyZ2V0KTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdlbGVtZW50cy5jcmVhdGUnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBjaGVja0xhYmVsQWRqdXN0bWVudChlbGVtZW50KSB7XG5cbiAgICAvLyBza2lwIG5vbi1leGlzdGluZyBsYWJlbHNcbiAgICBpZiAoIWhhc0V4dGVybmFsTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW1hbFBvc2l0aW9uID0gZ2V0T3B0aW1hbFBvc2l0aW9uKGVsZW1lbnQpO1xuXG4gICAgLy8gbm8gb3B0aW1hbCBwb3NpdGlvbiBmb3VuZFxuICAgIGlmICghb3B0aW1hbFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcHRpbWFsUG9zaXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcmllbnRhdGlvbikge1xuXG4gICAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCksXG4gICAgICAgIGxhYmVsID0gZWxlbWVudC5sYWJlbCxcbiAgICAgICAgbGFiZWxNaWQgPSBnZXRNaWQobGFiZWwpO1xuXG4gICAgLy8gaWdub3JlIGxhYmVscyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkXG4gICAgaWYgKCFsYWJlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudFRyYmwgPSBhc1RSQkwoZWxlbWVudCk7XG5cbiAgICB2YXIgbmV3TGFiZWxNaWQ7XG5cbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICAgIHk6IGVsZW1lbnRUcmJsLnRvcCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC5oZWlnaHQgLyAyXG4gICAgICB9O1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2xlZnQnOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudFRyYmwubGVmdCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdib3R0b20nOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudE1pZC54LFxuICAgICAgICB5OiBlbGVtZW50VHJibC5ib3R0b20gKyBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFICsgbGFiZWwuaGVpZ2h0IC8gMlxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyaWdodCc6XG5cbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50VHJibC5yaWdodCArIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgKyBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhID0gc3Vic3RyYWN0KG5ld0xhYmVsTWlkLCBsYWJlbE1pZCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlU2hhcGUobGFiZWwsIGRlbHRhKTtcbiAgfVxuXG59XG5cbmluaGVyaXRzKEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiBhbGlnbm1lbnRzIHdoaWNoIGFyZSB0YWtlbiBieSBhIGJvdW5kYXJ5J3MgaG9zdCBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFRha2VuSG9zdEFsaWdubWVudHMoZWxlbWVudCkge1xuXG4gIHZhciBob3N0RWxlbWVudCA9IGVsZW1lbnQuaG9zdCxcbiAgICAgIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCksXG4gICAgICBob3N0T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihlbGVtZW50TWlkLCBob3N0RWxlbWVudCk7XG5cbiAgdmFyIGZyZWVBbGlnbm1lbnRzO1xuXG4gIC8vIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBtdWx0aS1vcmllbnRhdGlvbiwgZS5nLiAndG9wLWxlZnQnXG4gIGlmIChob3N0T3JpZW50YXRpb24uaW5kZXhPZignLScpID49IDApIHtcbiAgICBmcmVlQWxpZ25tZW50cyA9IGhvc3RPcmllbnRhdGlvbi5zcGxpdCgnLScpO1xuICB9IGVsc2Uge1xuICAgIGZyZWVBbGlnbm1lbnRzID0gWyBob3N0T3JpZW50YXRpb24gXTtcbiAgfVxuXG4gIHZhciB0YWtlbkFsaWdubWVudHMgPSBBTElHTk1FTlRTLmZpbHRlcihmdW5jdGlvbihhbGlnbm1lbnQpIHtcblxuICAgIHJldHVybiBmcmVlQWxpZ25tZW50cy5pbmRleE9mKGFsaWdubWVudCkgPT09IC0xO1xuICB9KTtcblxuICByZXR1cm4gdGFrZW5BbGlnbm1lbnRzO1xuXG59XG5cbi8qKlxuICogUmV0dXJuIGFsaWdubWVudHMgd2hpY2ggYXJlIHRha2VuIGJ5IHJlbGF0ZWQgY29ubmVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFrZW5Db25uZWN0aW9uQWxpZ25tZW50cyhlbGVtZW50KSB7XG5cbiAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCk7XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IFtdLmNvbmNhdChcbiAgICBlbGVtZW50LmluY29taW5nLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYy53YXlwb2ludHNbYy53YXlwb2ludHMubGVuZ3RoIC0gMiBdO1xuICAgIH0pLFxuICAgIGVsZW1lbnQub3V0Z29pbmcubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjLndheXBvaW50c1sxXTtcbiAgICB9KVxuICApLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBnZXRBcHByb3hpbWF0ZU9yaWVudGF0aW9uKGVsZW1lbnRNaWQsIHBvaW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRha2VuQWxpZ25tZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG9wdGltYWwgbGFiZWwgcG9zaXRpb24gYXJvdW5kIGFuIGVsZW1lbnRcbiAqIG9yIF91bmRlZmluZWRfLCBpZiBub25lIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gcG9zaXRpb25pbmcgaWRlbnRpZmllclxuICovXG5mdW5jdGlvbiBnZXRPcHRpbWFsUG9zaXRpb24oZWxlbWVudCkge1xuXG4gIHZhciBsYWJlbE1pZCA9IGdldE1pZChlbGVtZW50LmxhYmVsKTtcblxuICB2YXIgZWxlbWVudE1pZCA9IGdldE1pZChlbGVtZW50KTtcblxuICB2YXIgbGFiZWxPcmllbnRhdGlvbiA9IGdldEFwcHJveGltYXRlT3JpZW50YXRpb24oZWxlbWVudE1pZCwgbGFiZWxNaWQpO1xuXG4gIGlmICghaXNBbGlnbmVkKGxhYmVsT3JpZW50YXRpb24pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IGdldFRha2VuQ29ubmVjdGlvbkFsaWdubWVudHMoZWxlbWVudCk7XG5cbiAgaWYgKGVsZW1lbnQuaG9zdCkge1xuICAgIHZhciB0YWtlbkhvc3RBbGlnbm1lbnRzID0gZ2V0VGFrZW5Ib3N0QWxpZ25tZW50cyhlbGVtZW50KTtcblxuICAgIHRha2VuQWxpZ25tZW50cyA9IHRha2VuQWxpZ25tZW50cy5jb25jYXQodGFrZW5Ib3N0QWxpZ25tZW50cyk7XG4gIH1cblxuICB2YXIgZnJlZUFsaWdubWVudHMgPSBBTElHTk1FTlRTLmZpbHRlcihmdW5jdGlvbihhbGlnbm1lbnQpIHtcblxuICAgIHJldHVybiB0YWtlbkFsaWdubWVudHMuaW5kZXhPZihhbGlnbm1lbnQpID09PSAtMTtcbiAgfSk7XG5cbiAgLy8gTk9USElORyBUTyBETzsgbGFiZWwgYWxyZWFkeSBhbGlnbmVkIGEuTy5LLlxuICBpZiAoZnJlZUFsaWdubWVudHMuaW5kZXhPZihsYWJlbE9yaWVudGF0aW9uKSAhPT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gZnJlZUFsaWdubWVudHNbMF07XG59XG5cbmZ1bmN0aW9uIGdldEFwcHJveGltYXRlT3JpZW50YXRpb24ocDAsIHAxKSB7XG4gIHJldHVybiBnZXRPcmllbnRhdGlvbihwMSwgcDAsIDUpO1xufVxuXG5mdW5jdGlvbiBpc0FsaWduZWQob3JpZW50YXRpb24pIHtcbiAgcmV0dXJuIEFMSUdOTUVOVFMuaW5kZXhPZihvcmllbnRhdGlvbikgIT09IC0xO1xufVxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcGVuZEJlaGF2aW9yKGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgYnBtblJ1bGVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIC8vIGFzc2lnbiBjb3JyZWN0IHNoYXBlIHBvc2l0aW9uIHVubGVzcyBhbHJlYWR5IHNldFxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuYXBwZW5kJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWNvbnRleHQucG9zaXRpb24pIHtcblxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICAgIGNvbnRleHQucG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogc291cmNlLnggKyBzb3VyY2Uud2lkdGggLyAyICsgNzUsXG4gICAgICAgICAgeTogc291cmNlLnkgLSAoNTApIC0gc2hhcGUuaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5wb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiBzb3VyY2UueCArIHNvdXJjZS53aWR0aCArIDgwICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IHNvdXJjZS55ICsgc291cmNlLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG5pbmhlcml0cyhBcHBlbmRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXBwZW5kQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2JwbW5SdWxlcydcbl07IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZpbHRlcixcclxuICBmb3JFYWNoXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFzc29jaWF0aW9uQmVoYXZpb3IoaW5qZWN0b3IsIG1vZGVsaW5nKSB7XHJcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XHJcblxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgbmV3UGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIHZhciBhc3NvY2lhdGlvbnMgPSBmaWx0ZXIoc2hhcGUuaW5jb21pbmcuY29uY2F0KHNoYXBlLm91dGdvaW5nKSwgZnVuY3Rpb24oY29ubmVjdGlvbikge1xyXG4gICAgICByZXR1cm4gaXMoY29ubmVjdGlvbiwgJ2JwbW46QXNzb2NpYXRpb24nKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZvckVhY2goYXNzb2NpYXRpb25zLCBmdW5jdGlvbihhc3NvY2lhdGlvbikge1xyXG4gICAgICBtb2RlbGluZy5tb3ZlQ29ubmVjdGlvbihhc3NvY2lhdGlvbiwgeyB4OiAwLCB5OiAwIH0sIG5ld1BhcmVudCk7XHJcbiAgICB9KTtcclxuICB9LCB0cnVlKTtcclxufVxyXG5cclxuaW5oZXJpdHMoQXNzb2NpYXRpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbkFzc29jaWF0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnaW5qZWN0b3InLFxyXG4gICdtb2RlbGluZydcclxuXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgZ2V0QnVzaW5lc3NPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogUmVwbGFjZSBpbnRlcm1lZGlhdGUgZXZlbnQgd2l0aCBib3VuZGFyeSBldmVudCB3aGVuIGNyZWF0aW5nIG9yIG1vdmluZyByZXN1bHRzIGluIGF0dGFjaGVkIGV2ZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdHRhY2hFdmVudEJlaGF2aW9yKGJwbW5SZXBsYWNlLCBpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMuY3JlYXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIHJldHVybiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KTtcbiAgICB9KTtcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgdmFyIGhvc3QgPSBlbGVtZW50c1sgaW5kZXggXTtcblxuICAgICAgY29udGV4dC5lbGVtZW50c1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKGVsZW1lbnRzWyBpbmRleCBdLCBob3N0KTtcbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGhvc3QgPSBjb250ZXh0Lm5ld0hvc3Q7XG5cbiAgICBpZiAoc2hhcGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IHNoYXBlc1swXTtcblxuICAgIGlmIChzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KSkge1xuICAgICAgY29udGV4dC5zaGFwZXMgPSBbIHNlbGYucmVwbGFjZVNoYXBlKHNoYXBlLCBob3N0KSBdO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbkF0dGFjaEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ2luamVjdG9yJ1xuXTtcblxuaW5oZXJpdHMoQXR0YWNoRXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXR0YWNoRXZlbnRCZWhhdmlvci5wcm90b3R5cGUucmVwbGFjZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIGhvc3QpIHtcbiAgdmFyIGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbihzaGFwZSk7XG5cbiAgdmFyIGJvdW5kYXJ5RXZlbnQgPSB7XG4gICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgaG9zdDogaG9zdFxuICB9O1xuXG4gIGlmIChldmVudERlZmluaXRpb24pIHtcbiAgICBib3VuZGFyeUV2ZW50LmV2ZW50RGVmaW5pdGlvblR5cGUgPSBldmVudERlZmluaXRpb24uJHR5cGU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQoc2hhcGUsIGJvdW5kYXJ5RXZlbnQsIHsgbGF5b3V0Q29ubmVjdGlvbjogZmFsc2UgfSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zO1xuXG4gIHJldHVybiBldmVudERlZmluaXRpb25zICYmIGV2ZW50RGVmaW5pdGlvbnNbMF07XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcGxhY2Uoc2hhcGUsIGhvc3QpIHtcbiAgcmV0dXJuICFpc0xhYmVsKHNoYXBlKSAmJlxuICAgIGlzQW55KHNoYXBlLCBbICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyBdKSAmJiAhIWhvc3Q7XG59XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIGJvdW5kYXJ5IGV2ZW50IGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJvdW5kYXJ5RXZlbnRCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgZnVuY3Rpb24gZ2V0Qm91bmRhcnlFdmVudHMoZWxlbWVudCkge1xuICAgIHJldHVybiBmaWx0ZXIoZWxlbWVudC5hdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICByZXR1cm4gaXMoYXR0YWNoZXIsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBhZnRlciBjb25uZWN0aW5nIHRvIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnY29ubmVjdGlvbi5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzb3VyY2UgPSBldmVudC5jb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuY29udGV4dC50YXJnZXQsXG4gICAgICAgIGJvdW5kYXJ5RXZlbnRzID0gZ2V0Qm91bmRhcnlFdmVudHModGFyZ2V0KTtcblxuICAgIGlmIChcbiAgICAgIGlzKHNvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSAmJlxuICAgICAgaXModGFyZ2V0LCAnYnBtbjpSZWNlaXZlVGFzaycpICYmXG4gICAgICBib3VuZGFyeUV2ZW50cy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhib3VuZGFyeUV2ZW50cyk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBhZnRlciByZXBsYWNpbmcgY29ubmVjdGVkIGdhdGV3YXkgd2l0aCBldmVudC1iYXNlZCBnYXRld2F5XG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgb2xkU291cmNlID0gZXZlbnQuY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGV2ZW50LmNvbnRleHQubmV3U291cmNlO1xuXG4gICAgaWYgKGlzKG9sZFNvdXJjZSwgJ2JwbW46R2F0ZXdheScpICYmXG4gICAgICAgIGlzKG5ld1NvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuICAgICAgZm9yRWFjaChuZXdTb3VyY2Uub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICAgICAgYXR0YWNoZWRib3VuZGFyeUV2ZW50cyA9IGdldEJvdW5kYXJ5RXZlbnRzKHRhcmdldCk7XG5cbiAgICAgICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UmVjZWl2ZVRhc2snKSAmJlxuICAgICAgICAgICAgYXR0YWNoZWRib3VuZGFyeUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMoYXR0YWNoZWRib3VuZGFyeUV2ZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbkJvdW5kYXJ5RXZlbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5pbmhlcml0cyhCb3VuZGFyeUV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGdldFBhcmVudCB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVCZWhhdmlvcihpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHBhcmVudCwgJ2JwbW46TGFuZScpICYmICFpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICBjb250ZXh0LnBhcmVudCA9IGdldFBhcmVudChwYXJlbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG4gICAgfVxuICB9KTtcblxufVxuXG5cbkNyZWF0ZUJlaGF2aW9yLiRpbmplY3QgPSBbICdpbmplY3RvcicgXTtcblxuaW5oZXJpdHMoQ3JlYXRlQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBjcmVhdGUgZGF0YSBvYmplY3QgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yKGV2ZW50QnVzLCBicG1uRmFjdG9yeSwgbW9kZGxlKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgJiYgc2hhcGUudHlwZSAhPT0gJ2xhYmVsJykge1xuXG4gICAgICAvLyBjcmVhdGUgYSBEYXRhT2JqZWN0IGV2ZXJ5IHRpbWUgYSBEYXRhT2JqZWN0UmVmZXJlbmNlIGlzIGNyZWF0ZWRcbiAgICAgIHZhciBkYXRhT2JqZWN0ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkRhdGFPYmplY3QnKTtcblxuICAgICAgLy8gc2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIERhdGFPYmplY3RcbiAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LmRhdGFPYmplY3RSZWYgPSBkYXRhT2JqZWN0O1xuICAgIH1cbiAgfSk7XG5cbn1cblxuQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeScsXG4gICdtb2RkbGUnXG5dO1xuXG5pbmhlcml0cyhDcmVhdGVEYXRhT2JqZWN0QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCQm94IH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmluZFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGFzVFJCTCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyA9IDIwLFxuICAgIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcgPSAyMDtcblxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVF9CT1JERVJfV0lEVEggPSAzMDtcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyBiZWhhdmlvciBmb3IgY3JlYXRpbmcgcGFydGljaXBhbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yKGNhbnZhcywgZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvLyBmaXQgcGFydGljaXBhbnRcbiAgZXZlbnRCdXMub24oW1xuICAgICdjcmVhdGUuc3RhcnQnLFxuICAgICdzaGFwZS5tb3ZlLnN0YXJ0J1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSB8fFxuICAgICAgIWlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHxcbiAgICAgICFyb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgY29ubmVjdGlvbnMsIGdyb3VwcyBhbmQgbGFiZWxzXG4gICAgdmFyIGNoaWxkcmVuID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAhaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSAmJlxuICAgICAgICAhaXNMYWJlbChlbGVtZW50KSAmJlxuICAgICAgICAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gZW5zdXJlIGZvciBhdmFpbGFibGUgY2hpbGRyZW4gdG8gY2FsY3VsYXRlIGJvdW5kc1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuQkJveCA9IGdldEJCb3goY2hpbGRyZW4pO1xuXG4gICAgdmFyIHBhcnRpY2lwYW50Qm91bmRzID0gZ2V0UGFydGljaXBhbnRCb3VuZHMoc2hhcGUsIGNoaWxkcmVuQkJveCk7XG5cbiAgICAvLyBhc3NpZ24gd2lkdGggYW5kIGhlaWdodFxuICAgIGFzc2lnbihzaGFwZSwgcGFydGljaXBhbnRCb3VuZHMpO1xuXG4gICAgLy8gYXNzaWduIGNyZWF0ZSBjb25zdHJhaW50c1xuICAgIGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHMgPSBnZXRQYXJ0aWNpcGFudENyZWF0ZUNvbnN0cmFpbnRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpO1xuICB9KTtcblxuICAvLyBmb3JjZSBob3ZlcmluZyBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIHJvb3RFbGVtZW50R2Z4ID0gY2FudmFzLmdldEdyYXBoaWNzKHJvb3RFbGVtZW50KTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUhvdmVyaW5nUHJvY2VzcyhldmVudCkge1xuICAgICAgZXZlbnQuZWxlbWVudCA9IHJvb3RFbGVtZW50O1xuICAgICAgZXZlbnQuZ2Z4ID0gcm9vdEVsZW1lbnRHZng7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgSElHSF9QUklPUklUWSwgZW5zdXJlSG92ZXJpbmdQcm9jZXNzKTtcblxuICAgICAgZXZlbnRCdXMub25jZSgnY3JlYXRlLmNsZWFudXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50LmhvdmVyJywgZW5zdXJlSG92ZXJpbmdQcm9jZXNzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZW5zdXJlQ29sbGFib3JhdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBjb2xsYWJvcmF0aW9uO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgICAgY29sbGFib3JhdGlvbiA9IHJvb3RFbGVtZW50O1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHVwZGF0ZSByb290IGVsZW1lbnQgYnkgbWFraW5nIGNvbGxhYm9yYXRpb25cbiAgICAgIGNvbGxhYm9yYXRpb24gPSBtb2RlbGluZy5tYWtlQ29sbGFib3JhdGlvbigpO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBjb250ZXh0LnByb2Nlc3MgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgY29udGV4dC5wYXJlbnQgPSBjb2xsYWJvcmF0aW9uO1xuICB9XG5cbiAgLy8gdHVybiBwcm9jZXNzIGludG8gY29sbGFib3JhdGlvbiBiZWZvcmUgYWRkaW5nIHBhcnRpY2lwYW50XG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGlzKHBhcmVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgICBlbnN1cmVDb2xsYWJvcmF0aW9uKGNvbnRleHQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5leGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBjb250ZXh0Lm9sZFByb2Nlc3NSZWYgPSBzaGFwZS5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBzaGFwZS5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gcHJvY2Vzcy5idXNpbmVzc09iamVjdDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucmV2ZXJ0KCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG5cbiAgICAgIC8vIHJlLXVzZSBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWYgPSBjb250ZXh0Lm9sZFByb2Nlc3NSZWY7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG5cbiAgICAgIC8vIG1vdmUgY2hpbGRyZW4gZnJvbSBwcm9jZXNzIHRvIHBhcnRpY2lwYW50XG4gICAgICB2YXIgcHJvY2Vzc0NoaWxkcmVuID0gcHJvY2Vzcy5jaGlsZHJlbi5zbGljZSgpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMocHJvY2Vzc0NoaWxkcmVuLCB7IHg6IDAsIHk6IDAgfSwgc2hhcGUpO1xuICAgIH1cblxuICB9LCB0cnVlKTtcblxuICAvLyB0dXJuIHByb2Nlc3MgaW50byBjb2xsYWJvcmF0aW9uIHdoZW4gY3JlYXRpbmcgcGFydGljaXBhbnRzXG4gIHRoaXMucHJlRXhlY3V0ZSgnZWxlbWVudHMuY3JlYXRlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwYXJ0aWNpcGFudDtcblxuICAgIHZhciBoYXNQYXJ0aWNpcGFudHMgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgaWYgKGhhc1BhcnRpY2lwYW50cyAmJiBpcyhwYXJlbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgZW5zdXJlQ29sbGFib3JhdGlvbihjb250ZXh0KTtcblxuICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgICBjb250ZXh0Lm9sZFByb2Nlc3NSZWYgPSBwYXJ0aWNpcGFudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBwYXJ0aWNpcGFudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gcGFyZW50LmJ1c2luZXNzT2JqZWN0O1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5yZXZlcnQoJ2VsZW1lbnRzLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBwcm9jZXNzID0gY29udGV4dC5wcm9jZXNzLFxuICAgICAgICBwYXJ0aWNpcGFudDtcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBwYXJ0aWNpcGFudCA9IGZpbmRQYXJ0aWNpcGFudChlbGVtZW50cyk7XG5cbiAgICAgIC8vIHJlLXVzZSBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgICAgIHBhcnRpY2lwYW50LmJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWYgPSBjb250ZXh0Lm9sZFByb2Nlc3NSZWY7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcHJvY2VzcyA9IGNvbnRleHQucHJvY2VzcyxcbiAgICAgICAgcGFydGljaXBhbnQ7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgICAvLyBtb3ZlIGNoaWxkcmVuIGZyb20gcHJvY2VzcyB0byBmaXJzdCBwYXJ0aWNpcGFudFxuICAgICAgdmFyIHByb2Nlc3NDaGlsZHJlbiA9IHByb2Nlc3MuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHByb2Nlc3NDaGlsZHJlbiwgeyB4OiAwLCB5OiAwIH0sIHBhcnRpY2lwYW50KTtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbn1cblxuQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFBhcnRpY2lwYW50Qm91bmRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpIHtcbiAgY2hpbGRyZW5CQm94ID0ge1xuICAgIHdpZHRoOiBjaGlsZHJlbkJCb3gud2lkdGggKyBIT1JJWk9OVEFMX1BBUlRJQ0lQQU5UX1BBRERJTkcgKiAyICsgUEFSVElDSVBBTlRfQk9SREVSX1dJRFRILFxuICAgIGhlaWdodDogY2hpbGRyZW5CQm94LmhlaWdodCArIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcgKiAyXG4gIH07XG5cbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoc2hhcGUud2lkdGgsIGNoaWxkcmVuQkJveC53aWR0aCksXG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChzaGFwZS5oZWlnaHQsIGNoaWxkcmVuQkJveC5oZWlnaHQpO1xuXG4gIHJldHVybiB7XG4gICAgeDogLXdpZHRoIC8gMixcbiAgICB5OiAtaGVpZ2h0IC8gMixcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRDcmVhdGVDb25zdHJhaW50cyhzaGFwZSwgY2hpbGRyZW5CQm94KSB7XG4gIGNoaWxkcmVuQkJveCA9IGFzVFJCTChjaGlsZHJlbkJCb3gpO1xuXG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBjaGlsZHJlbkJCb3gudG9wICsgc2hhcGUuaGVpZ2h0IC8gMiAtIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcsXG4gICAgbGVmdDogY2hpbGRyZW5CQm94LnJpZ2h0IC0gc2hhcGUud2lkdGggLyAyICsgSE9SSVpPTlRBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIHRvcDogY2hpbGRyZW5CQm94LmJvdHRvbSAtIHNoYXBlLmhlaWdodCAvIDIgKyBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIHJpZ2h0OiBjaGlsZHJlbkJCb3gubGVmdCArIHNoYXBlLndpZHRoIC8gMiAtIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyAtIFBBUlRJQ0lQQU5UX0JPUkRFUl9XSURUSFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gZmluZFBhcnRpY2lwYW50KGVsZW1lbnRzKSB7XG4gIHJldHVybiBmaW5kKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG4gIH0pO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBUQVJHRVRfUkVGX1BMQUNFSE9MREVSX05BTUUgPSAnX190YXJnZXRSZWZfcGxhY2Vob2xkZXInO1xuXG5cbi8qKlxuICogVGhpcyBiZWhhdmlvciBtYWtlcyBzdXJlIHdlIGFsd2F5cyBzZXQgYSBmYWtlXG4gKiBEYXRhSW5wdXRBc3NvY2lhdGlvbiN0YXJnZXRSZWYgYXMgZGVtYW5kZWQgYnkgdGhlIEJQTU4gMi4wXG4gKiBYU0Qgc2NoZW1hLlxuICpcbiAqIFRoZSByZWZlcmVuY2UgaXMgc2V0IHRvIGEgYnBtbjpQcm9wZXJ0eXsgbmFtZTogJ19fdGFyZ2V0UmVmX3BsYWNlaG9sZGVyJyB9XG4gKiB3aGljaCBpcyBjcmVhdGVkIG9uIHRoZSBmbHkgYW5kIGNsZWFuZWQgdXAgYWZ0ZXJ3YXJkcyBpZiBub3QgbmVlZGVkXG4gKiBhbnltb3JlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBicG1uRmFjdG9yeSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnXG4gIF0sIGlmRGF0YUlucHV0QXNzb2NpYXRpb24oZml4VGFyZ2V0UmVmKSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZEYXRhSW5wdXRBc3NvY2lhdGlvbihmaXhUYXJnZXRSZWYpKTtcblxuXG4gIGZ1bmN0aW9uIHVzZXNUYXJnZXRSZWYoZWxlbWVudCwgdGFyZ2V0UmVmLCByZW1vdmVkQ29ubmVjdGlvbikge1xuXG4gICAgdmFyIGlucHV0QXNzb2NpYXRpb25zID0gZWxlbWVudC5nZXQoJ2RhdGFJbnB1dEFzc29jaWF0aW9ucycpO1xuXG4gICAgcmV0dXJuIGZpbmQoaW5wdXRBc3NvY2lhdGlvbnMsIGZ1bmN0aW9uKGFzc29jaWF0aW9uKSB7XG4gICAgICByZXR1cm4gYXNzb2NpYXRpb24gIT09IHJlbW92ZWRDb25uZWN0aW9uICYmXG4gICAgICAgICAgICAgYXNzb2NpYXRpb24udGFyZ2V0UmVmID09PSB0YXJnZXRSZWY7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUYXJnZXRSZWYoZWxlbWVudCwgY3JlYXRlKSB7XG5cbiAgICB2YXIgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0KCdwcm9wZXJ0aWVzJyk7XG5cbiAgICB2YXIgdGFyZ2V0UmVmUHJvcCA9IGZpbmQocHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHAubmFtZSA9PT0gVEFSR0VUX1JFRl9QTEFDRUhPTERFUl9OQU1FO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0YXJnZXRSZWZQcm9wICYmIGNyZWF0ZSkge1xuICAgICAgdGFyZ2V0UmVmUHJvcCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9wZXJ0eScsIHtcbiAgICAgICAgbmFtZTogVEFSR0VUX1JFRl9QTEFDRUhPTERFUl9OQU1FXG4gICAgICB9KTtcblxuICAgICAgY29sbGVjdGlvbkFkZChwcm9wZXJ0aWVzLCB0YXJnZXRSZWZQcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0UmVmUHJvcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFudXBUYXJnZXRSZWYoZWxlbWVudCwgY29ubmVjdGlvbikge1xuXG4gICAgdmFyIHRhcmdldFJlZlByb3AgPSBnZXRUYXJnZXRSZWYoZWxlbWVudCk7XG5cbiAgICBpZiAoIXRhcmdldFJlZlByb3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXNUYXJnZXRSZWYoZWxlbWVudCwgdGFyZ2V0UmVmUHJvcCwgY29ubmVjdGlvbikpIHtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUoZWxlbWVudC5nZXQoJ3Byb3BlcnRpZXMnKSwgdGFyZ2V0UmVmUHJvcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB0YXJnZXRSZWYgaXMgc2V0IHRvIGEgdmFsaWQgcHJvcGVydHkgb3JcbiAgICogYG51bGxgIGlmIHRoZSBjb25uZWN0aW9uIGlzIGRldGFjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgZnVuY3Rpb24gZml4VGFyZ2V0UmVmKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25CbyA9IGNvbm5lY3Rpb24uYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICB0YXJnZXRCbyA9IHRhcmdldCAmJiB0YXJnZXQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG5ld1RhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0LFxuICAgICAgICBuZXdUYXJnZXRCbyA9IG5ld1RhcmdldCAmJiBuZXdUYXJnZXQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG9sZFRhcmdldCA9IGNvbnRleHQub2xkVGFyZ2V0IHx8IGNvbnRleHQudGFyZ2V0LFxuICAgICAgICBvbGRUYXJnZXRCbyA9IG9sZFRhcmdldCAmJiBvbGRUYXJnZXQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICB2YXIgZGF0YUFzc29jaWF0aW9uID0gY29ubmVjdGlvbi5idXNpbmVzc09iamVjdCxcbiAgICAgICAgdGFyZ2V0UmVmUHJvcDtcblxuICAgIGlmIChvbGRUYXJnZXRCbyAmJiBvbGRUYXJnZXRCbyAhPT0gdGFyZ2V0Qm8pIHtcbiAgICAgIGNsZWFudXBUYXJnZXRSZWYob2xkVGFyZ2V0Qm8sIGNvbm5lY3Rpb25Cbyk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1RhcmdldEJvICYmIG5ld1RhcmdldEJvICE9PSB0YXJnZXRCbykge1xuICAgICAgY2xlYW51cFRhcmdldFJlZihuZXdUYXJnZXRCbywgY29ubmVjdGlvbkJvKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Qm8pIHtcbiAgICAgIHRhcmdldFJlZlByb3AgPSBnZXRUYXJnZXRSZWYodGFyZ2V0Qm8sIHRydWUpO1xuICAgICAgZGF0YUFzc29jaWF0aW9uLnRhcmdldFJlZiA9IHRhcmdldFJlZlByb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFBc3NvY2lhdGlvbi50YXJnZXRSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5EYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeSdcbl07XG5cbmluaGVyaXRzKERhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuLyoqXG4gKiBPbmx5IGNhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW4gdGhlIGV2ZW50XG4gKiB0b3VjaGVzIGEgYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGlmRGF0YUlucHV0QXNzb2NpYXRpb24oZm4pIHtcblxuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nKSkge1xuICAgICAgcmV0dXJuIGZuKGV2ZW50KTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbmltcG9ydCBVcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIgZnJvbSAnLi4vY21kL1VwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlcic7XHJcblxyXG5cclxuLyoqXHJcbiAqIEJQTU4gc3BlY2lmaWMgZGF0YSBzdG9yZSBiZWhhdmlvclxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGF0YVN0b3JlQmVoYXZpb3IoXHJcbiAgICBjYW52YXMsIGNvbW1hbmRTdGFjaywgZWxlbWVudFJlZ2lzdHJ5LFxyXG4gICAgZXZlbnRCdXMpIHtcclxuXHJcbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdkYXRhU3RvcmUudXBkYXRlQ29udGFpbm1lbnQnLCBVcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIpO1xyXG5cclxuICBmdW5jdGlvbiBnZXRGaXJzdFBhcnRpY2lwYW50KCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKTtcclxuICAgIH0pWzBdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RGF0YVN0b3JlcyhlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcclxuICAgICAgcmV0dXJuIGlzKGNoaWxkLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJiAhY2hpbGQubGFiZWxUYXJnZXQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUsIG5ld0RhdGFTdG9yZVBhcmVudCkge1xyXG4gICAgdmFyIGRhdGFTdG9yZUJvID0gZGF0YVN0b3JlLmJ1c2luZXNzT2JqZWN0IHx8IGRhdGFTdG9yZTtcclxuXHJcbiAgICBuZXdEYXRhU3RvcmVQYXJlbnQgPSBuZXdEYXRhU3RvcmVQYXJlbnQgfHwgZ2V0Rmlyc3RQYXJ0aWNpcGFudCgpO1xyXG5cclxuICAgIGlmIChuZXdEYXRhU3RvcmVQYXJlbnQpIHtcclxuICAgICAgdmFyIG5ld0RhdGFTdG9yZVBhcmVudEJvID0gbmV3RGF0YVN0b3JlUGFyZW50LmJ1c2luZXNzT2JqZWN0IHx8IG5ld0RhdGFTdG9yZVBhcmVudDtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdkYXRhU3RvcmUudXBkYXRlQ29udGFpbm1lbnQnLCB7XHJcbiAgICAgICAgZGF0YVN0b3JlQm86IGRhdGFTdG9yZUJvLFxyXG4gICAgICAgIG5ld1NlbWFudGljUGFyZW50OiBuZXdEYXRhU3RvcmVQYXJlbnRCby5wcm9jZXNzUmVmIHx8IG5ld0RhdGFTdG9yZVBhcmVudEJvLFxyXG4gICAgICAgIG5ld0RpUGFyZW50OiBuZXdEYXRhU3RvcmVQYXJlbnRCby5kaVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBkaXNhYmxlIGF1dG8tcmVzaXplIGZvciBkYXRhIHN0b3Jlc1xyXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnKSB7XHJcblxyXG4gICAgICBpZiAoIWNvbnRleHQuaGludHMpIHtcclxuICAgICAgICBjb250ZXh0LmhpbnRzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHByZXZlbnQgYXV0byByZXNpemluZ1xyXG4gICAgICBjb250ZXh0LmhpbnRzLmF1dG9SZXNpemUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGRpc2FibGUgYXV0by1yZXNpemUgZm9yIGRhdGEgc3RvcmVzXHJcbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcclxuXHJcbiAgICB2YXIgZGF0YVN0b3JlUmVmZXJlbmNlcyA9IHNoYXBlcy5maWx0ZXIoZnVuY3Rpb24oc2hhcGUpIHtcclxuICAgICAgcmV0dXJuIGlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChkYXRhU3RvcmVSZWZlcmVuY2VzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoIWNvbnRleHQuaGludHMpIHtcclxuICAgICAgICBjb250ZXh0LmhpbnRzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHByZXZlbnQgYXV0byByZXNpemluZyBmb3IgZGF0YSBzdG9yZSByZWZlcmVuY2VzXHJcbiAgICAgIGNvbnRleHQuaGludHMuYXV0b1Jlc2l6ZSA9IHNoYXBlcy5maWx0ZXIoZnVuY3Rpb24oc2hhcGUpIHtcclxuICAgICAgICByZXR1cm4gIWlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyB1cGRhdGUgcGFyZW50IG9uIGRhdGEgc3RvcmUgY3JlYXRlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHBhcmVudCA9IHNoYXBlLnBhcmVudDtcclxuXHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJlxyXG4gICAgICAgIHNoYXBlLnR5cGUgIT09ICdsYWJlbCcgJiZcclxuICAgICAgICBpcyhwYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xyXG5cclxuICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KHNoYXBlKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHVwZGF0ZSBwYXJlbnQgb24gZGF0YSBzdG9yZSBtb3ZlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBvbGRQYXJlbnQgPSBjb250ZXh0Lm9sZFBhcmVudCxcclxuICAgICAgICBwYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKGlzKG9sZFBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcblxyXG4gICAgICAvLyBkbyBub3RoaW5nIGlmIG5vdCBuZWNlc3NhcnlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnICYmXHJcbiAgICAgICAgaXMocGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuXHJcbiAgICAgIHZhciBwYXJ0aWNpcGFudCA9IGlzKG9sZFBhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSA/XHJcbiAgICAgICAgb2xkUGFyZW50IDpcclxuICAgICAgICBnZXRBbmNlc3RvcihvbGRQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XHJcblxyXG4gICAgICB1cGRhdGVEYXRhU3RvcmVQYXJlbnQoc2hhcGUsIHBhcnRpY2lwYW50KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHVwZGF0ZSBkYXRhIHN0b3JlIHBhcmVudHMgb24gcGFydGljaXBhbnQgb3Igc3VicHJvY2VzcyBkZWxldGVkXHJcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcclxuXHJcbiAgICBpZiAoaXNBbnkoc2hhcGUsIFsgJ2JwbW46UGFydGljaXBhbnQnLCAnYnBtbjpTdWJQcm9jZXNzJyBdKVxyXG4gICAgICAgICYmIGlzKHJvb3RFbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuICAgICAgZ2V0RGF0YVN0b3Jlcyhyb290RWxlbWVudClcclxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGlzRGVzY2VuZGFudChkYXRhU3RvcmUsIHNoYXBlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KGRhdGFTdG9yZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIHVwZGF0ZSBkYXRhIHN0b3JlIHBhcmVudHMgb24gY29sbGFib3JhdGlvbiAtPiBwcm9jZXNzXHJcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIG9sZFJvb3QgPSBjb250ZXh0Lm9sZFJvb3QsXHJcbiAgICAgICAgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdDtcclxuXHJcbiAgICB2YXIgZGF0YVN0b3JlcyA9IGdldERhdGFTdG9yZXMob2xkUm9vdCk7XHJcblxyXG4gICAgZGF0YVN0b3Jlcy5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG5cclxuICAgICAgaWYgKGlzKG5ld1Jvb3QsICdicG1uOlByb2Nlc3MnKSkge1xyXG4gICAgICAgIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUsIG5ld1Jvb3QpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbkRhdGFTdG9yZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ2NvbW1hbmRTdGFjaycsXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuXTtcclxuXHJcbmluaGVyaXRzKERhdGFTdG9yZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNEZXNjZW5kYW50KGRlc2NlbmRhbnQsIGFuY2VzdG9yKSB7XHJcbiAgdmFyIGRlc2NlbmRhbnRCbyA9IGRlc2NlbmRhbnQuYnVzaW5lc3NPYmplY3QgfHwgZGVzY2VuZGFudCxcclxuICAgICAgYW5jZXN0b3JCbyA9IGFuY2VzdG9yLmJ1c2luZXNzT2JqZWN0IHx8IGFuY2VzdG9yO1xyXG5cclxuICB3aGlsZSAoZGVzY2VuZGFudEJvLiRwYXJlbnQpIHtcclxuICAgIGlmIChkZXNjZW5kYW50Qm8uJHBhcmVudCA9PT0gYW5jZXN0b3JCby5wcm9jZXNzUmVmIHx8IGFuY2VzdG9yQm8pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzY2VuZGFudEJvID0gZGVzY2VuZGFudEJvLiRwYXJlbnQ7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFuY2VzdG9yKGVsZW1lbnQsIHR5cGUpIHtcclxuXHJcbiAgd2hpbGUgKGVsZW1lbnQucGFyZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudC5wYXJlbnQsIHR5cGUpKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQ7XHJcbiAgfVxyXG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRDaGlsZExhbmVzXG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBlYWNoRWxlbWVudFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBkZWxldGUgbGFuZSBiZWhhdmlvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVMYW5lQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCBzcGFjZVRvb2wpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICBmdW5jdGlvbiBjb21wZW5zYXRlTGFuZURlbGV0ZShzaGFwZSwgb2xkUGFyZW50KSB7XG5cbiAgICB2YXIgc2libGluZ3MgPSBnZXRDaGlsZExhbmVzKG9sZFBhcmVudCk7XG5cbiAgICB2YXIgdG9wQWZmZWN0ZWQgPSBbXTtcbiAgICB2YXIgYm90dG9tQWZmZWN0ZWQgPSBbXTtcblxuICAgIGVhY2hFbGVtZW50KHNpYmxpbmdzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGlmIChlbGVtZW50LnkgPiBzaGFwZS55KSB7XG4gICAgICAgIGJvdHRvbUFmZmVjdGVkLnB1c2goZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3BBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgICB9KTtcblxuICAgIGlmICghc2libGluZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldDtcblxuICAgIGlmIChib3R0b21BZmZlY3RlZC5sZW5ndGggJiYgdG9wQWZmZWN0ZWQubGVuZ3RoKSB7XG4gICAgICBvZmZzZXQgPSBzaGFwZS5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvcEFkanVzdG1lbnRzLFxuICAgICAgICBib3R0b21BZGp1c3RtZW50cztcblxuICAgIGlmICh0b3BBZmZlY3RlZC5sZW5ndGgpIHtcbiAgICAgIHRvcEFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKFxuICAgICAgICB0b3BBZmZlY3RlZCwgJ3knLCBvZmZzZXQsIHNoYXBlLnkgLSAxMCk7XG5cbiAgICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoXG4gICAgICAgIHRvcEFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgICAgdG9wQWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogMCwgeTogb2Zmc2V0IH0sICdzJyk7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbUFmZmVjdGVkLmxlbmd0aCkge1xuICAgICAgYm90dG9tQWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoXG4gICAgICAgIGJvdHRvbUFmZmVjdGVkLCAneScsIC1vZmZzZXQsIHNoYXBlLnkgKyBzaGFwZS5oZWlnaHQgKyAxMCk7XG5cbiAgICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoXG4gICAgICAgIGJvdHRvbUFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgICAgYm90dG9tQWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogMCwgeTogLW9mZnNldCB9LCAnbicpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFkanVzdCBzaXplcyBvZiBvdGhlciBsYW5lcyBhZnRlciBsYW5lIGRlbGV0aW9uXG4gICAqL1xuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUuZGVsZXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQ7XG5cbiAgICAvLyBvbmx5IGNvbXBlbnNhdGUgbGFuZSBkZWxldGVzXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29tcGVuc2F0ZSByb290IGRlbGV0ZXMgb25seVxuICAgIGlmIChoaW50cyAmJiBoaW50cy5uZXN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb21wZW5zYXRlTGFuZURlbGV0ZShzaGFwZSwgb2xkUGFyZW50KTtcbiAgfSk7XG59XG5cbkRlbGV0ZUxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAnc3BhY2VUb29sJ1xuXTtcblxuaW5oZXJpdHMoRGVsZXRlTGFuZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogUmVwbGFjZSBib3VuZGFyeSBldmVudCB3aXRoIGludGVybWVkaWF0ZSBldmVudCB3aGVuIGNyZWF0aW5nIG9yIG1vdmluZyByZXN1bHRzIGluIGRldGFjaGVkIGV2ZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZXRhY2hFdmVudEJlaGF2aW9yKGJwbW5SZXBsYWNlLCBpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMuY3JlYXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihzaGFwZSkge1xuICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICByZXR1cm4gc2hvdWxkUmVwbGFjZShzaGFwZSwgaG9zdCk7XG4gICAgfSkubWFwKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudHMuaW5kZXhPZihzaGFwZSk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgY29udGV4dC5lbGVtZW50c1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKGVsZW1lbnRzWyBpbmRleCBdKTtcbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0O1xuXG4gICAgc2hhcGVzLmZvckVhY2goZnVuY3Rpb24oc2hhcGUsIGluZGV4KSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIGlmIChzaG91bGRSZXBsYWNlKHNoYXBlLCBpbmNsdWRlcyhzaGFwZXMsIGhvc3QpID8gaG9zdCA6IG5ld0hvc3QpKSB7XG4gICAgICAgIHNoYXBlc1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKHNoYXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG59XG5cbkRldGFjaEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ2luamVjdG9yJ1xuXTtcblxuaW5oZXJpdHMoRGV0YWNoRXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuRGV0YWNoRXZlbnRCZWhhdmlvci5wcm90b3R5cGUucmVwbGFjZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgdmFyIGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbihzaGFwZSksXG4gICAgICBpbnRlcm1lZGlhdGVFdmVudDtcblxuICBpZiAoZXZlbnREZWZpbml0aW9uKSB7XG4gICAgaW50ZXJtZWRpYXRlRXZlbnQgPSB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6IGV2ZW50RGVmaW5pdGlvbi4kdHlwZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJtZWRpYXRlRXZlbnQgPSB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQoc2hhcGUsIGludGVybWVkaWF0ZUV2ZW50LCB7IGxheW91dENvbm5lY3Rpb246IGZhbHNlIH0pO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucztcblxuICByZXR1cm4gZXZlbnREZWZpbml0aW9ucyAmJiBldmVudERlZmluaXRpb25zWzBdO1xufVxuXG5mdW5jdGlvbiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KSB7XG4gIHJldHVybiAhaXNMYWJlbChzaGFwZSkgJiYgaXMoc2hhcGUsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiAhaG9zdDtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBpc051bWJlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGdldE1pZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGdldEFwcHJveEludGVyc2VjdGlvblxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0xpbmVJbnRlcnNlY3Rpb24nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BPbkZsb3dCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVjb25uZWN0IHN0YXJ0IC8gZW5kIG9mIGEgY29ubmVjdGlvbiBhZnRlclxuICAgKiBkcm9wcGluZyBhbiBlbGVtZW50IG9uIGEgZmxvdy5cbiAgICovXG5cbiAgZnVuY3Rpb24gaW5zZXJ0U2hhcGUoc2hhcGUsIHRhcmdldEZsb3csIHBvc2l0aW9uT3JCb3VuZHMpIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gdGFyZ2V0Rmxvdy53YXlwb2ludHMsXG4gICAgICAgIHdheXBvaW50c0JlZm9yZSxcbiAgICAgICAgd2F5cG9pbnRzQWZ0ZXIsXG4gICAgICAgIGRvY2tpbmdQb2ludCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGluY29taW5nQ29ubmVjdGlvbixcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uLFxuICAgICAgICBvbGRPdXRnb2luZyA9IHNoYXBlLm91dGdvaW5nLnNsaWNlKCksXG4gICAgICAgIG9sZEluY29taW5nID0gc2hhcGUuaW5jb21pbmcuc2xpY2UoKTtcblxuICAgIHZhciBtaWQ7XG5cbiAgICBpZiAoaXNOdW1iZXIocG9zaXRpb25PckJvdW5kcy53aWR0aCkpIHtcbiAgICAgIG1pZCA9IGdldE1pZChwb3NpdGlvbk9yQm91bmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkID0gcG9zaXRpb25PckJvdW5kcztcbiAgICB9XG5cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgbWlkKTtcblxuICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHdheXBvaW50c0JlZm9yZSA9IHdheXBvaW50cy5zbGljZSgwLCBpbnRlcnNlY3Rpb24uaW5kZXgpO1xuICAgICAgd2F5cG9pbnRzQWZ0ZXIgPSB3YXlwb2ludHMuc2xpY2UoaW50ZXJzZWN0aW9uLmluZGV4ICsgKGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyAxIDogMCkpO1xuXG4gICAgICAvLyBkdWUgdG8gaW5hY2N1cmFjeSBpbnRlcnNlY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIGZvdW5kXG4gICAgICBpZiAoIXdheXBvaW50c0JlZm9yZS5sZW5ndGggfHwgIXdheXBvaW50c0FmdGVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY2tpbmdQb2ludCA9IGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XSA6IG1pZDtcblxuICAgICAgLy8gaWYgbGFzdCB3YXlwb2ludEJlZm9yZSBpcyBpbnNpZGUgc2hhcGUncyBib3VuZHMsIGlnbm9yZSBkb2NraW5nIHBvaW50XG4gICAgICBpZiAoIWlzUG9pbnRJbnNpZGVCQm94KHNoYXBlLCB3YXlwb2ludHNCZWZvcmVbd2F5cG9pbnRzQmVmb3JlLmxlbmd0aC0xXSkpIHtcbiAgICAgICAgd2F5cG9pbnRzQmVmb3JlLnB1c2goY29weShkb2NraW5nUG9pbnQpKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgZmlyc3Qgd2F5cG9pbnRBZnRlciBpcyBpbnNpZGUgc2hhcGUncyBib3VuZHMsIGlnbm9yZSBkb2NraW5nIHBvaW50XG4gICAgICBpZiAoIWlzUG9pbnRJbnNpZGVCQm94KHNoYXBlLCB3YXlwb2ludHNBZnRlclswXSkpIHtcbiAgICAgICAgd2F5cG9pbnRzQWZ0ZXIudW5zaGlmdChjb3B5KGRvY2tpbmdQb2ludCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNvdXJjZSA9IHRhcmdldEZsb3cuc291cmNlO1xuICAgIHRhcmdldCA9IHRhcmdldEZsb3cudGFyZ2V0O1xuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KHNvdXJjZSwgc2hhcGUsIHRhcmdldEZsb3cpKSB7XG5cbiAgICAgIC8vIHJlY29ubmVjdCBzb3VyY2UgLT4gaW5zZXJ0ZWQgc2hhcGVcbiAgICAgIG1vZGVsaW5nLnJlY29ubmVjdEVuZCh0YXJnZXRGbG93LCBzaGFwZSwgd2F5cG9pbnRzQmVmb3JlIHx8IG1pZCk7XG5cbiAgICAgIGluY29taW5nQ29ubmVjdGlvbiA9IHRhcmdldEZsb3c7XG4gICAgfVxuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KHNoYXBlLCB0YXJnZXQsIHRhcmdldEZsb3cpKSB7XG5cbiAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9uKSB7XG5cbiAgICAgICAgLy8gcmVjb25uZWN0IGluc2VydGVkIHNoYXBlIC0+IGVuZFxuICAgICAgICBtb2RlbGluZy5yZWNvbm5lY3RTdGFydCh0YXJnZXRGbG93LCBzaGFwZSwgd2F5cG9pbnRzQWZ0ZXIgfHwgbWlkKTtcblxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb24gPSB0YXJnZXRGbG93O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uID0gbW9kZWxpbmcuY29ubmVjdChcbiAgICAgICAgICBzaGFwZSwgdGFyZ2V0LCB7IHR5cGU6IHRhcmdldEZsb3cudHlwZSwgd2F5cG9pbnRzOiB3YXlwb2ludHNBZnRlciB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGR1cGxpY2F0ZUNvbm5lY3Rpb25zID0gW10uY29uY2F0KFxuXG4gICAgICBpbmNvbWluZ0Nvbm5lY3Rpb24gJiYgZmlsdGVyKG9sZEluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnNvdXJjZSA9PT0gaW5jb21pbmdDb25uZWN0aW9uLnNvdXJjZTtcbiAgICAgIH0pIHx8IFtdLFxuXG4gICAgICBvdXRnb2luZ0Nvbm5lY3Rpb24gJiYgZmlsdGVyKG9sZE91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnRhcmdldCA9PT0gb3V0Z29pbmdDb25uZWN0aW9uLnRhcmdldDtcbiAgICAgIH0pIHx8IFtdXG4gICAgKTtcblxuICAgIGlmIChkdXBsaWNhdGVDb25uZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKGR1cGxpY2F0ZUNvbm5lY3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgbmV3UGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICAgIHNoYXBlID0gc2hhcGVzWzBdO1xuXG4gICAgaWYgKCFzaGFwZSB8fCAhbmV3UGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIG5ldyBwYXJlbnQgaXMgYSBjb25uZWN0aW9uLFxuICAgIC8vIGNoYW5nZSBpdCB0byB0aGUgbmV3IHBhcmVudCdzIHBhcmVudFxuICAgIGlmIChuZXdQYXJlbnQgJiYgbmV3UGFyZW50LndheXBvaW50cykge1xuICAgICAgY29udGV4dC5uZXdQYXJlbnQgPSBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIHZhciBzaGFwZU1pZCA9IGdldE1pZChzaGFwZSk7XG4gICAgdmFyIG5ld1NoYXBlTWlkID0ge1xuICAgICAgeDogc2hhcGVNaWQueCArIGRlbHRhLngsXG4gICAgICB5OiBzaGFwZU1pZC55ICsgZGVsdGEueVxuICAgIH07XG5cbiAgICAvLyBmaW5kIGEgY29ubmVjdGlvbiB3aGljaCBpbnRlcnNlY3RzIHdpdGggdGhlXG4gICAgLy8gZWxlbWVudCdzIG1pZCBwb2ludFxuICAgIHZhciBjb25uZWN0aW9uID0gZmluZChuZXdQYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5JbnNlcnQgPSBicG1uUnVsZXMuY2FuSW5zZXJ0KHNoYXBlcywgZWxlbWVudCk7XG5cbiAgICAgIHJldHVybiBjYW5JbnNlcnQgJiYgZ2V0QXBwcm94SW50ZXJzZWN0aW9uKGVsZW1lbnQud2F5cG9pbnRzLCBuZXdTaGFwZU1pZCk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgY29udGV4dC50YXJnZXRGbG93ID0gY29ubmVjdGlvbjtcbiAgICAgIGNvbnRleHQucG9zaXRpb24gPSBuZXdTaGFwZU1pZDtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIHRhcmdldEZsb3cgPSBjb250ZXh0LnRhcmdldEZsb3csXG4gICAgICAgIHBvc2l0aW9uID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIGlmICh0YXJnZXRGbG93KSB7XG4gICAgICBpbnNlcnRTaGFwZShzaGFwZXNbMF0sIHRhcmdldEZsb3csIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChicG1uUnVsZXMuY2FuSW5zZXJ0KHNoYXBlLCBwYXJlbnQpKSB7XG4gICAgICBjb250ZXh0LnRhcmdldEZsb3cgPSBwYXJlbnQ7XG4gICAgICBjb250ZXh0LnBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgdGFyZ2V0RmxvdyA9IGNvbnRleHQudGFyZ2V0RmxvdyxcbiAgICAgICAgcG9zaXRpb25PckJvdW5kcyA9IGNvbnRleHQucG9zaXRpb247XG5cbiAgICBpZiAodGFyZ2V0Rmxvdykge1xuICAgICAgaW5zZXJ0U2hhcGUoc2hhcGUsIHRhcmdldEZsb3csIHBvc2l0aW9uT3JCb3VuZHMpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbmluaGVyaXRzKERyb3BPbkZsb3dCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuRHJvcE9uRmxvd0JlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uUnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94KGJib3gsIHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQueCxcbiAgICAgIHkgPSBwb2ludC55O1xuXG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gY29weShvYmopIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgb2JqKTtcbn1cblxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVtb3ZlIGV4aXN0aW5nIHNlcXVlbmNlIGZsb3dzIG9mIGV2ZW50LWJhc2VkIHRhcmdldCBiZWZvcmUgY29ubmVjdGluZ1xuICAgKiBmcm9tIGV2ZW50LWJhc2VkIGdhdGV3YXkuXG4gICAqL1xuICB0aGlzLnByZUV4ZWN1dGVkKCdjb25uZWN0aW9uLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgZXhpc3RpbmdJbmNvbWluZ0Nvbm5lY3Rpb25zID0gdGFyZ2V0LmluY29taW5nLnNsaWNlKCk7XG5cbiAgICBpZiAoY29udGV4dC5oaW50cyAmJiBjb250ZXh0LmhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXMoc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpICYmXG4gICAgICB0YXJnZXQuaW5jb21pbmcubGVuZ3RoXG4gICAgKSB7XG5cbiAgICAgIGV4aXN0aW5nSW5jb21pbmdDb25uZWN0aW9ucy5maWx0ZXIoaXNTZXF1ZW5jZUZsb3cpXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oc2VxdWVuY2VGbG93KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogIEFmdGVyIHJlcGxhY2luZyBzaGFwZSB3aXRoIGV2ZW50LWJhc2VkIGdhdGV3YXksIHJlbW92ZSBpbmNvbWluZyBzZXF1ZW5jZVxuICAgKiAgZmxvd3Mgb2YgZXZlbnQtYmFzZWQgdGFyZ2V0cyB3aGljaCBkbyBub3QgYmVsb25nIHRvIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgICogIHNvdXJjZS5cbiAgICovXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZSxcbiAgICAgICAgbmV3U2hhcGVUYXJnZXRzLFxuICAgICAgICBuZXdTaGFwZVRhcmdldHNJbmNvbWluZ1NlcXVlbmNlRmxvd3M7XG5cbiAgICBpZiAoIWlzKG5ld1NoYXBlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV3U2hhcGVUYXJnZXRzID0gbmV3U2hhcGUub3V0Z29pbmcuZmlsdGVyKGlzU2VxdWVuY2VGbG93KVxuICAgICAgLm1hcChmdW5jdGlvbihzZXF1ZW5jZUZsb3cpIHtcbiAgICAgICAgcmV0dXJuIHNlcXVlbmNlRmxvdy50YXJnZXQ7XG4gICAgICB9KTtcblxuICAgIG5ld1NoYXBlVGFyZ2V0c0luY29taW5nU2VxdWVuY2VGbG93cyA9IG5ld1NoYXBlVGFyZ2V0cy5yZWR1Y2UoZnVuY3Rpb24oc2VxdWVuY2VGbG93cywgdGFyZ2V0KSB7XG4gICAgICB2YXIgaW5jb21pbmdTZXF1ZW5jZUZsb3dzID0gdGFyZ2V0LmluY29taW5nLmZpbHRlcihpc1NlcXVlbmNlRmxvdyk7XG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZUZsb3dzLmNvbmNhdChpbmNvbWluZ1NlcXVlbmNlRmxvd3MpO1xuICAgIH0sIFtdKTtcblxuICAgIG5ld1NoYXBlVGFyZ2V0c0luY29taW5nU2VxdWVuY2VGbG93cy5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgaWYgKHNlcXVlbmNlRmxvdy5zb3VyY2UgIT09IG5ld1NoYXBlKSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oc2VxdWVuY2VGbG93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbkV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NlcXVlbmNlRmxvdyhjb25uZWN0aW9uKSB7XG4gIHJldHVybiBpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcbn1cbiIsImltcG9ydCB7IGdldExhbmVzUm9vdCB9IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcclxudmFyIEhJR0hFU1RfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb3JyZWN0IGhvdmVyIHRhcmdldHMgaW4gY2VydGFpbiBzaXR1YXRpb25zIHRvIGltcHJvdmUgZGlhZ3JhbSBpbnRlcmFjdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGaXhIb3ZlckJlaGF2aW9yKGVsZW1lbnRSZWdpc3RyeSwgZXZlbnRCdXMsIGNhbnZhcykge1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLmhvdmVyJyxcclxuICAgICdjcmVhdGUubW92ZScsXHJcbiAgICAnY3JlYXRlLmVuZCcsXHJcbiAgICAnc2hhcGUubW92ZS5ob3ZlcicsXHJcbiAgICAnc2hhcGUubW92ZS5tb3ZlJyxcclxuICAgICdzaGFwZS5tb3ZlLmVuZCdcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSB8fCBldmVudC5zaGFwZSxcclxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyO1xyXG5cclxuICAgIC8vIGVuc3VyZSBlbGVtZW50cyBhcmUgbm90IGRyb3BwZWQgb250byBhIGJwbW46TGFuZSBidXQgb250b1xyXG4gICAgLy8gdGhlIHVuZGVybHlpbmcgYnBtbjpQYXJ0aWNpcGFudFxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykgJiYgIWlzQW55KHNoYXBlLCBbICdicG1uOkxhbmUnLCAnYnBtbjpQYXJ0aWNpcGFudCcgXSkpIHtcclxuICAgICAgZXZlbnQuaG92ZXIgPSBnZXRMYW5lc1Jvb3QoaG92ZXIpO1xyXG4gICAgICBldmVudC5ob3ZlckdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhldmVudC5ob3Zlcik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XHJcblxyXG4gICAgLy8gZW5zdXJlIGJwbW46R3JvdXAgYW5kIGxhYmVsIGVsZW1lbnRzIGFyZSBkcm9wcGVkXHJcbiAgICAvLyBhbHdheXMgb250byB0aGUgcm9vdFxyXG4gICAgaWYgKGhvdmVyICE9PSByb290RWxlbWVudCAmJiAoc2hhcGUubGFiZWxUYXJnZXQgfHwgaXMoc2hhcGUsICdicG1uOkdyb3VwJykpKSB7XHJcbiAgICAgIGV2ZW50LmhvdmVyID0gcm9vdEVsZW1lbnQ7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LmhvdmVyJyxcclxuICAgICdjb25uZWN0Lm91dCcsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gICAgJ2Nvbm5lY3QuY2xlYW51cCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuaG92ZXInLFxyXG4gICAgJ2dsb2JhbC1jb25uZWN0Lm91dCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuZW5kJyxcclxuICAgICdnbG9iYWwtY29ubmVjdC5jbGVhbnVwJ1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcjtcclxuXHJcbiAgICAvLyBlbnN1cmUgY29ubmVjdGlvbnMgc3RhcnQvZW5kIG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoaG92ZXIsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdiZW5kcG9pbnQubW92ZS5ob3ZlcidcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXHJcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcclxuXHJcbiAgICAvLyBlbnN1cmUgcmVjb25uZWN0IHN0YXJ0L2VuZCBvbiBicG1uOlBhcnRpY2lwYW50LFxyXG4gICAgLy8gbm90IHRoZSB1bmRlcmx5aW5nIGJwbW46TGFuZVxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykgJiYgL3JlY29ubmVjdC8udGVzdCh0eXBlKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LnN0YXJ0J1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0O1xyXG5cclxuICAgIC8vIGVuc3VyZSBjb25uZWN0IHN0YXJ0IG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoc3RhcnQsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBjb250ZXh0LnN0YXJ0ID0gZ2V0TGFuZXNSb290KHN0YXJ0KSB8fCBzdGFydDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGFsbG93IG1vdmVtZW50IG9mIHBhcnRpY2lwYW50cyBmcm9tIGxhbmVzXHJcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBISUdIRVNUX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIHNoYXBlID0gZXZlbnQuc2hhcGU7XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykpIHtcclxuICAgICAgZXZlbnQuc2hhcGUgPSBnZXRMYW5lc1Jvb3Qoc2hhcGUpIHx8IHNoYXBlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxufVxyXG5cclxuRml4SG92ZXJCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdlbGVtZW50UmVnaXN0cnknLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2NhbnZhcydcclxuXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVDYXRlZ29yeVZhbHVlXG59IGZyb20gJy4vdXRpbC9DYXRlZ29yeVV0aWwnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIEdyb3VwIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyb3VwQmVoYXZpb3IoXG4gICAgYnBtbkZhY3RvcnksXG4gICAgY2FudmFzLFxuICAgIGVsZW1lbnRSZWdpc3RyeSxcbiAgICBldmVudEJ1cyxcbiAgICBpbmplY3RvcixcbiAgICBtb2RkbGVDb3B5XG4pIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgcHJvY2VzcyBkZWZpbml0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbnMoKSB7XG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdEVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJlZmVyZW5jZWQgY2F0ZWdvcnkgdmFsdWUgZm9yIGEgZ2l2ZW4gZ3JvdXAgc2hhcGVcbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVSZWZlcmVuY2VkQ2F0ZWdvcnlWYWx1ZShzaGFwZSkge1xuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxuICAgICAgICBjYXRlZ29yeVZhbHVlID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZjtcblxuICAgIGlmICghY2F0ZWdvcnlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjYXRlZ29yeSA9IGNhdGVnb3J5VmFsdWUuJHBhcmVudDtcblxuICAgIGlmICghY2F0ZWdvcnlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2F0ZWdvcnkuY2F0ZWdvcnlWYWx1ZSwgY2F0ZWdvcnlWYWx1ZSk7XG5cbiAgICAvLyBjbGVhbnVwIGNhdGVnb3J5IGlmIGl0IGlzIGVtcHR5XG4gICAgaWYgKGNhdGVnb3J5ICYmICFjYXRlZ29yeS5jYXRlZ29yeVZhbHVlLmxlbmd0aCkge1xuICAgICAgcmVtb3ZlQ2F0ZWdvcnkoY2F0ZWdvcnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZ2l2ZW4gY2F0ZWdvcnkgZnJvbSB0aGUgZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlQ2F0ZWdvcnkoY2F0ZWdvcnkpIHtcblxuICAgIHZhciBkZWZpbml0aW9ucyA9IGdldERlZmluaXRpb25zKCk7XG5cbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIGNhdGVnb3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBncm91cCBlbGVtZW50IGluIHRoZSBjdXJyZW50IHJlZ2lzdHJ5XG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5zaGFwZT59IGEgbGlzdCBvZiBncm91cCBzaGFwZXNcbiAgICovXG4gIGZ1bmN0aW9uIGdldEdyb3VwRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGlzKGUsICdicG1uOkdyb3VwJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGdpdmVuIGNhdGVnb3J5VmFsdWUgaXMgcmVmZXJlbmNlZCBpbiBvbmUgb2YgdGhlIGdpdmVuIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLnNoYXBlPn0gZWxlbWVudHNcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVZhbHVlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc1JlZmVyZW5jZWQoZWxlbWVudHMsIGNhdGVnb3J5VmFsdWUpIHtcbiAgICByZXR1cm4gZWxlbWVudHMuc29tZShmdW5jdGlvbihlKSB7XG5cbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGUpO1xuXG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZlxuICAgICAgICAmJiBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmID09PSBjYXRlZ29yeVZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZSByZWZlcmVuY2VkIGNhdGVnb3J5ICsgdmFsdWUgd2hlbiBncm91cCB3YXMgZGVsZXRlZFxuICAgKi9cbiAgdGhpcy5leGVjdXRlZCgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpHcm91cCcpKSB7XG5cbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKSxcbiAgICAgICAgICBjYXRlZ29yeVZhbHVlUmVmID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZixcbiAgICAgICAgICBncm91cEVsZW1lbnRzID0gZ2V0R3JvdXBFbGVtZW50cygpO1xuXG4gICAgICBpZiAoIWlzUmVmZXJlbmNlZChncm91cEVsZW1lbnRzLCBjYXRlZ29yeVZhbHVlUmVmKSkge1xuICAgICAgICByZW1vdmVSZWZlcmVuY2VkQ2F0ZWdvcnlWYWx1ZShzaGFwZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogcmUtYXR0YWNoIHJlbW92ZWQgY2F0ZWdvcnlcbiAgICovXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSkge1xuXG4gICAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSksXG4gICAgICAgICAgY2F0ZWdvcnlWYWx1ZVJlZiA9IGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIGNhdGVnb3J5ID0gY2F0ZWdvcnlWYWx1ZVJlZiA/IGNhdGVnb3J5VmFsdWVSZWYuJHBhcmVudCA6IG51bGw7XG5cbiAgICAgIGNvbGxlY3Rpb25BZGQoY2F0ZWdvcnkuZ2V0KCdjYXRlZ29yeVZhbHVlJyksIGNhdGVnb3J5VmFsdWVSZWYpO1xuICAgICAgY29sbGVjdGlvbkFkZChkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBjYXRlZ29yeSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogY3JlYXRlIG5ldyBjYXRlZ29yeSArIHZhbHVlIHdoZW4gZ3JvdXAgd2FzIGNyZWF0ZWRcbiAgICovXG4gIHRoaXMuZXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XG5cbiAgICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkdyb3VwJykgJiYgIWJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYpIHtcblxuICAgICAgdmFyIGRlZmluaXRpb25zID0gZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBjYXRlZ29yeVZhbHVlID0gY3JlYXRlQ2F0ZWdvcnlWYWx1ZShkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpO1xuXG4gICAgICAvLyBsaW5rIHRoZSByZWZlcmVuY2UgdG8gdGhlIEdyb3VwXG4gICAgICBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmID0gY2F0ZWdvcnlWYWx1ZTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgdGhpcy5yZXZlcnQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSkge1xuICAgICAgcmVtb3ZlUmVmZXJlbmNlZENhdGVnb3J5VmFsdWUoc2hhcGUpO1xuXG4gICAgICBkZWxldGUgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmNhdGVnb3J5VmFsdWVSZWY7XG5cbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvcHkgYnBtbjpDYXRlZ29yeVZhbHVlIHdoZW4gY29weWluZyBlbGVtZW50XG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0eScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5LFxuICAgICAgICBjYXRlZ29yeVZhbHVlO1xuXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnYnBtbjpDYXRlZ29yeVZhbHVlJykpIHtcbiAgICAgIGNhdGVnb3J5VmFsdWUgPSBjcmVhdGVDYXRlZ29yeVZhbHVlKGdldERlZmluaXRpb25zKCksIGJwbW5GYWN0b3J5KTtcblxuICAgICAgLy8gcmV0dXJuIGNvcHkgb2YgY2F0ZWdvcnlcbiAgICAgIHJldHVybiBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KHByb3BlcnR5LCBjYXRlZ29yeVZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkdyb3VwQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InLFxuICAnbW9kZGxlQ29weSdcbl07XG5cbmluaGVyaXRzKEdyb3VwQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IGxpbmVJbnRlcnNlY3QgZnJvbSAnLi91dGlsL0xpbmVJbnRlcnNlY3QnO1xuXG5cbi8qKlxuICogRml4IGJyb2tlbiBkb2NraW5ncyBhZnRlciBESSBpbXBvcnRzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEltcG9ydERvY2tpbmdGaXgoZXZlbnRCdXMpIHtcblxuICBmdW5jdGlvbiBhZGp1c3REb2NraW5nKHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCkge1xuXG4gICAgdmFyIGVsZW1lbnRUb3AgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICB5OiBlbGVtZW50TWlkLnkgLSA1MFxuICAgIH07XG5cbiAgICB2YXIgZWxlbWVudExlZnQgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLnggLSA1MCxcbiAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgIH07XG5cbiAgICB2YXIgdmVydGljYWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudFRvcCksXG4gICAgICAgIGhvcml6b250YWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudExlZnQpO1xuXG4gICAgLy8gb3JpZ2luYWwgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjZW50ZXIgY3Jvc3MgaW50ZXJzZWN0aW9uXG4gICAgdmFyIGNlbnRlckludGVyc2VjdDtcblxuICAgIGlmICh2ZXJ0aWNhbEludGVyc2VjdCAmJiBob3Jpem9udGFsSW50ZXJzZWN0KSB7XG4gICAgICBpZiAoZ2V0RGlzdGFuY2UodmVydGljYWxJbnRlcnNlY3QsIGVsZW1lbnRNaWQpID4gZ2V0RGlzdGFuY2UoaG9yaXpvbnRhbEludGVyc2VjdCwgZWxlbWVudE1pZCkpIHtcbiAgICAgICAgY2VudGVySW50ZXJzZWN0ID0gaG9yaXpvbnRhbEludGVyc2VjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRlckludGVyc2VjdCA9IHZlcnRpY2FsSW50ZXJzZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjZW50ZXJJbnRlcnNlY3QgPSB2ZXJ0aWNhbEludGVyc2VjdCB8fCBob3Jpem9udGFsSW50ZXJzZWN0O1xuICAgIH1cblxuICAgIHN0YXJ0UG9pbnQub3JpZ2luYWwgPSBjZW50ZXJJbnRlcnNlY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBmaXhEb2NraW5ncyhjb25uZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1swXSxcbiAgICAgIHdheXBvaW50c1sxXSxcbiAgICAgIGdldE1pZChjb25uZWN0aW9uLnNvdXJjZSlcbiAgICApO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1t3YXlwb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICB3YXlwb2ludHNbd2F5cG9pbnRzLmxlbmd0aCAtIDJdLFxuICAgICAgZ2V0TWlkKGNvbm5lY3Rpb24udGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBldmVudEJ1cy5vbignYnBtbkVsZW1lbnQuYWRkZWQnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGUuZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgZml4RG9ja2luZ3MoZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuSW1wb3J0RG9ja2luZ0ZpeC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwMS54IC0gcDIueCwgMikgKyBNYXRoLnBvdyhwMS55IC0gcDIueSwgMikpO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBlYWNoIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICogUG9vbCBhbmQgTGFuZSBpcyBhc3NpZ25lZCBhbiBpc0hvcml6b250YWwgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSXNIb3Jpem9udGFsRml4KGV2ZW50QnVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBlbGVtZW50VHlwZXNUb1VwZGF0ZSA9IFtcbiAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgJ2JwbW46TGFuZSdcbiAgXTtcblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLm1vdmUnLCAnc2hhcGUuY3JlYXRlJywgJ3NoYXBlLnJlc2l6ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChldmVudC5jb250ZXh0LnNoYXBlKTtcblxuICAgIGlmIChpc0FueShibywgZWxlbWVudFR5cGVzVG9VcGRhdGUpICYmICFiby5kaS5nZXQoJ2lzSG9yaXpvbnRhbCcpKSB7XG5cbiAgICAgIC8vIHNldCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gYXZvaWQgbW9kZWxpbmcjdXBkYXRlUHJvcGVydHkgc2lkZSBlZmZlY3RzXG4gICAgICBiby5kaS5zZXQoJ2lzSG9yaXpvbnRhbCcsIHRydWUpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuSXNIb3Jpem9udGFsRml4LiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoSXNIb3Jpem9udGFsRml4LCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBnZXRFeHRlcm5hbExhYmVsTWlkLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vLi4vbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYWJlbEFkanVzdG1lbnRcbn0gZnJvbSAnLi91dGlsL0xhYmVsTGF5b3V0VXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXROZXdBdHRhY2hQb2ludFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0F0dGFjaFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNaWQsXG4gIHJvdW5kUG9pbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBkZWx0YVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1Bvc2l0aW9uVXRpbCc7XG5cbmltcG9ydCB7XG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldERpc3RhbmNlUG9pbnRMaW5lLFxuICBwZXJwZW5kaWN1bGFyRm9vdFxufSBmcm9tICcuL3V0aWwvR2VvbWV0cmljVXRpbCc7XG5cbnZhciBERUZBVUxUX0xBQkVMX0RJTUVOU0lPTlMgPSB7XG4gIHdpZHRoOiA5MCxcbiAgaGVpZ2h0OiAyMFxufTtcblxudmFyIE5BTUVfUFJPUEVSVFkgPSAnbmFtZSc7XG52YXIgVEVYVF9QUk9QRVJUWSA9ICd0ZXh0JztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBleHRlcm5hbCBsYWJlbHMgYXJlIGFkZGVkXG4gKiB0b2dldGhlciB3aXRoIHJlc3BlY3RpdmUgZWxlbWVudHMgYW5kIHByb3Blcmx5IHVwZGF0ZWQgKERJIHdpc2UpXG4gKiBkdXJpbmcgbW92ZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsQmVoYXZpb3IoXG4gICAgZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uRmFjdG9yeSxcbiAgICB0ZXh0UmVuZGVyZXIpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGlmIG5hbWUgcHJvcGVydHkgd2FzIHVwZGF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKE5BTUVfUFJPUEVSVFkgaW4gcHJvcGVydGllcykge1xuICAgICAgbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgcHJvcGVydGllc1tOQU1FX1BST1BFUlRZXSk7XG4gICAgfVxuXG4gICAgaWYgKFRFWFRfUFJPUEVSVFkgaW4gcHJvcGVydGllc1xuICAgICAgICAmJiBpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG5cbiAgICAgIHZhciBuZXdCb3VuZHMgPSB0ZXh0UmVuZGVyZXIuZ2V0VGV4dEFubm90YXRpb25Cb3VuZHMoXG4gICAgICAgIHtcbiAgICAgICAgICB4OiBlbGVtZW50LngsXG4gICAgICAgICAgeTogZWxlbWVudC55LFxuICAgICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllc1tURVhUX1BST1BFUlRZXSB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgcHJvcGVydGllcy50ZXh0LCBuZXdCb3VuZHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY3JlYXRlIGxhYmVsIHNoYXBlIGFmdGVyIHNoYXBlL2Nvbm5lY3Rpb24gd2FzIGNyZWF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5jcmVhdGUnLCAnY29ubmVjdGlvbi5jcmVhdGUnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkgfHwgIWlzTGFiZWxFeHRlcm5hbChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG9ubHkgY3JlYXRlIGxhYmVsIGlmIGF0dHJpYnV0ZSBhdmFpbGFibGVcbiAgICBpZiAoIWdldExhYmVsKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhYmVsQ2VudGVyID0gZ2V0RXh0ZXJuYWxMYWJlbE1pZChlbGVtZW50KTtcblxuICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgeCBhbmQgeVxuICAgIHZhciBsYWJlbERpbWVuc2lvbnMgPSB0ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhcbiAgICAgIERFRkFVTFRfTEFCRUxfRElNRU5TSU9OUyxcbiAgICAgIGdldExhYmVsKGVsZW1lbnQpXG4gICAgKTtcblxuICAgIG1vZGVsaW5nLmNyZWF0ZUxhYmVsKGVsZW1lbnQsIGxhYmVsQ2VudGVyLCB7XG4gICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2xhYmVsJyxcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHdpZHRoOiBsYWJlbERpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGxhYmVsRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGFmdGVyIGxhYmVsIHNoYXBlIHdhcyBkZWxldGVkXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBsYWJlbFRhcmdldCA9IGNvbnRleHQubGFiZWxUYXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIC8vIGNoZWNrIGlmIGxhYmVsXG4gICAgaWYgKGxhYmVsVGFyZ2V0ICYmIGhpbnRzLnVuc2V0TGFiZWwgIT09IGZhbHNlKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYWJlbChsYWJlbFRhcmdldCwgbnVsbCwgbnVsbCwgeyByZW1vdmVTaGFwZTogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB1cGRhdGUgZGkgaW5mb3JtYXRpb24gb24gbGFiZWwgY3JlYXRpb25cbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdsYWJlbC5jcmVhdGUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBidXNpbmVzc09iamVjdCxcbiAgICAgICAgZGk7XG5cbiAgICAvLyB3ZSB3YW50IHRvIHRyaWdnZXIgb24gcmVhbCBsYWJlbHMgb25seVxuICAgIGlmICghZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlIHdhbnQgdG8gdHJpZ2dlciBvbiBCUE1OIGVsZW1lbnRzIG9ubHlcbiAgICBpZiAoIWlzKGVsZW1lbnQubGFiZWxUYXJnZXQgfHwgZWxlbWVudCwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICBkaSA9IGJ1c2luZXNzT2JqZWN0LmRpO1xuXG5cbiAgICBpZiAoIWRpLmxhYmVsKSB7XG4gICAgICBkaS5sYWJlbCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbmRpOkJQTU5MYWJlbCcsIHtcbiAgICAgICAgYm91bmRzOiBicG1uRmFjdG9yeS5jcmVhdGUoJ2RjOkJvdW5kcycpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3NpZ24oZGkubGFiZWwuYm91bmRzLCB7XG4gICAgICB4OiBlbGVtZW50LngsXG4gICAgICB5OiBlbGVtZW50LnksXG4gICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0VmlzaWJsZUxhYmVsQWRqdXN0bWVudChldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBsYWJlbCA9IGNvbm5lY3Rpb24ubGFiZWwsXG4gICAgICAgIGhpbnRzID0gYXNzaWduKHt9LCBjb250ZXh0LmhpbnRzKSxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMgfHwgY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIG9sZFdheXBvaW50cyA9IGNvbnRleHQub2xkV2F5cG9pbnRzO1xuXG5cbiAgICBpZiAodHlwZW9mIGhpbnRzLnN0YXJ0Q2hhbmdlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpbnRzLnN0YXJ0Q2hhbmdlZCA9ICEhaGludHMuY29ubmVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGludHMuZW5kQ2hhbmdlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpbnRzLmVuZENoYW5nZWQgPSAhIWhpbnRzLmNvbm5lY3Rpb25FbmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExhYmVsQWRqdXN0bWVudChsYWJlbCwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKTtcbiAgfVxuXG4gIHRoaXMucG9zdEV4ZWN1dGUoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmxhYmVsQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGxhYmVsID0gY29ubmVjdGlvbi5sYWJlbCxcbiAgICAgICAgbGFiZWxBZGp1c3RtZW50O1xuXG4gICAgLy8gaGFuZGxlIG1pc3NpbmcgbGFiZWwgYXMgd2VsbCBhcyB0aGUgY2FzZVxuICAgIC8vIHRoYXQgdGhlIGxhYmVsIHBhcmVudCBkb2VzIG5vdCBleGlzdCAoeWV0KSxcbiAgICAvLyBiZWNhdXNlIGl0IGlzIGJlaW5nIHBhc3RlZCAvIGNyZWF0ZWQgdmlhIG11bHRpIGVsZW1lbnQgY3JlYXRlXG4gICAgLy9cbiAgICAvLyBDZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9wdWxsLzEyMjdcbiAgICBpZiAoIWxhYmVsIHx8ICFsYWJlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsYWJlbEFkanVzdG1lbnQgPSBnZXRWaXNpYmxlTGFiZWxBZGp1c3RtZW50KGV2ZW50KTtcblxuICAgIG1vZGVsaW5nLm1vdmVTaGFwZShsYWJlbCwgbGFiZWxBZGp1c3RtZW50KTtcbiAgfSk7XG5cblxuICAvLyBrZWVwIGxhYmVsIHBvc2l0aW9uIG9uIHNoYXBlIHJlcGxhY2VcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5yZXBsYWNlJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlLFxuICAgICAgICBvbGRTaGFwZSA9IGNvbnRleHQub2xkU2hhcGU7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChuZXdTaGFwZSk7XG5cbiAgICBpZiAoYnVzaW5lc3NPYmplY3RcbiAgICAgICYmIGlzTGFiZWxFeHRlcm5hbChidXNpbmVzc09iamVjdClcbiAgICAgICYmIG9sZFNoYXBlLmxhYmVsXG4gICAgICAmJiBuZXdTaGFwZS5sYWJlbCkge1xuICAgICAgbmV3U2hhcGUubGFiZWwueCA9IG9sZFNoYXBlLmxhYmVsLng7XG4gICAgICBuZXdTaGFwZS5sYWJlbC55ID0gb2xkU2hhcGUubGFiZWwueTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gbW92ZSBleHRlcm5hbCBsYWJlbCBhZnRlciByZXNpemluZ1xuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5yZXNpemUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzLFxuICAgICAgICBvbGRCb3VuZHMgPSBjb250ZXh0Lm9sZEJvdW5kcztcblxuICAgIGlmIChoYXNFeHRlcm5hbExhYmVsKHNoYXBlKSkge1xuXG4gICAgICB2YXIgbGFiZWwgPSBzaGFwZS5sYWJlbCxcbiAgICAgICAgICBsYWJlbE1pZCA9IGdldE1pZChsYWJlbCksXG4gICAgICAgICAgZWRnZXMgPSBhc0VkZ2VzKG9sZEJvdW5kcyk7XG5cbiAgICAgIC8vIGdldCBuZWFyZXN0IGJvcmRlciBwb2ludCB0byBsYWJlbCBhcyByZWZlcmVuY2UgcG9pbnRcbiAgICAgIHZhciByZWZlcmVuY2VQb2ludCA9IGdldFJlZmVyZW5jZVBvaW50KGxhYmVsTWlkLCBlZGdlcyk7XG5cbiAgICAgIHZhciBkZWx0YSA9IGdldFJlZmVyZW5jZVBvaW50RGVsdGEocmVmZXJlbmNlUG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGxhYmVsLCBkZWx0YSk7XG5cbiAgICB9XG5cbiAgfSk7XG5cbn1cblxuaW5oZXJpdHMoTGFiZWxCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuTGFiZWxCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAnYnBtbkZhY3RvcnknLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhIHJlZmVyZW5jZSBwb2ludCBkZWx0YSByZWxhdGl2ZSB0byBhIG5ldyBwb3NpdGlvblxuICogb2YgYSBjZXJ0YWluIGVsZW1lbnQncyBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogQHBhcmFtIHtCb3VuZHN9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm4ge0RlbHRhfSBkZWx0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlUG9pbnREZWx0YShyZWZlcmVuY2VQb2ludCwgb2xkQm91bmRzLCBuZXdCb3VuZHMpIHtcblxuICB2YXIgbmV3UmVmZXJlbmNlUG9pbnQgPSBnZXROZXdBdHRhY2hQb2ludChyZWZlcmVuY2VQb2ludCwgb2xkQm91bmRzLCBuZXdCb3VuZHMpO1xuXG4gIHJldHVybiByb3VuZFBvaW50KGRlbHRhKG5ld1JlZmVyZW5jZVBvaW50LCByZWZlcmVuY2VQb2ludCkpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgbmVhcmVzdCBwb2ludCAocmVmZXJlbmNlIHBvaW50KSBmb3IgYSBnaXZlbiBwb2ludFxuICogb250byBnaXZlbiBzZXQgb2YgbGluZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50LCBQb2ludD59IGxpbmVzXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICpcbiAqIEBwYXJhbSB7UG9pbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWZlcmVuY2VQb2ludChwb2ludCwgbGluZXMpIHtcblxuICBpZiAoIWxpbmVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZWFyZXN0TGluZSA9IGdldE5lYXJlc3RMaW5lKHBvaW50LCBsaW5lcyk7XG5cbiAgcmV0dXJuIHBlcnBlbmRpY3VsYXJGb290KHBvaW50LCBuZWFyZXN0TGluZSk7XG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gYm91bmRzIHRvIGEgbGluZXMgYXJyYXkgY29udGFpbmluZyBhbGwgZWRnZXNcbiAqXG4gKiBAcGFyYW0ge0JvdW5kc3xQb2ludH0gYm91bmRzXG4gKlxuICogQHJldHVybiBBcnJheTxQb2ludD5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRWRnZXMoYm91bmRzKSB7XG4gIHJldHVybiBbXG4gICAgWyAvLyB0b3BcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9XG4gICAgXSxcbiAgICBbIC8vIHJpZ2h0XG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCB8fCAwKVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyBib3R0b21cbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCB8fCAwKVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyBsZWZ0XG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH1cbiAgICBdXG4gIF07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmVhcmVzdCBsaW5lIGZvciBhIGdpdmVuIHBvaW50IGJ5IGRpc3RhbmNlXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogQHBhcmFtIEFycmF5PFBvaW50PiBsaW5lc1xuICpcbiAqIEByZXR1cm4gQXJyYXk8UG9pbnQ+XG4gKi9cbmZ1bmN0aW9uIGdldE5lYXJlc3RMaW5lKHBvaW50LCBsaW5lcykge1xuXG4gIHZhciBkaXN0YW5jZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBsLFxuICAgICAgZGlzdGFuY2U6IGdldERpc3RhbmNlUG9pbnRMaW5lKHBvaW50LCBsKVxuICAgIH07XG4gIH0pO1xuXG4gIHZhciBzb3J0ZWQgPSBzb3J0QnkoZGlzdGFuY2VzLCAnZGlzdGFuY2UnKTtcblxuICByZXR1cm4gc29ydGVkWzBdLmxpbmU7XG59XG4iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIENPTExBQl9FUlJfTVNHID0gJ2Zsb3cgZWxlbWVudHMgbXVzdCBiZSBjaGlsZHJlbiBvZiBwb29scy9wYXJ0aWNpcGFudHMnLFxuICAgIFBST0NFU1NfRVJSX01TRyA9ICdwYXJ0aWNpcGFudHMgY2Fubm90IGJlIHBhc3RlZCBvbnRvIGEgbm9uLWVtcHR5IHByb2Nlc3MgZGlhZ3JhbSc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxpbmdGZWVkYmFjayhldmVudEJ1cywgdG9vbHRpcHMsIHRyYW5zbGF0ZSkge1xuXG4gIGZ1bmN0aW9uIHNob3dFcnJvcihwb3NpdGlvbiwgbWVzc2FnZSwgdGltZW91dCkge1xuICAgIHRvb2x0aXBzLmFkZCh7XG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiBwb3NpdGlvbi54ICsgNSxcbiAgICAgICAgeTogcG9zaXRpb24ueSArIDVcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgdGltZW91dDogdGltZW91dCB8fCAyMDAwLFxuICAgICAgaHRtbDogJzxkaXY+JyArIG1lc3NhZ2UgKyAnPC9kaXY+J1xuICAgIH0pO1xuICB9XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUubW92ZS5yZWplY3RlZCcsICdjcmVhdGUucmVqZWN0ZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpICYmIGlzKHNoYXBlLCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgICBzaG93RXJyb3IoZXZlbnQsIHRyYW5zbGF0ZShDT0xMQUJfRVJSX01TRykpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZWxlbWVudHMucGFzdGUucmVqZWN0ZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBwb3NpdGlvbiA9IGNvbnRleHQucG9zaXRpb24sXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICBzaG93RXJyb3IocG9zaXRpb24sIHRyYW5zbGF0ZShDT0xMQUJfRVJSX01TRykpO1xuICAgIH1cblxuICAgIGlmIChpcyh0YXJnZXQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgc2hvd0Vycm9yKHBvc2l0aW9uLCB0cmFuc2xhdGUoUFJPQ0VTU19FUlJfTVNHKSwgMzAwMCk7XG4gICAgfVxuICB9KTtcbn1cblxuTW9kZWxpbmdGZWVkYmFjay4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAndG9vbHRpcHMnLFxuICAndHJhbnNsYXRlJ1xuXTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IGxpbmVJbnRlcnNlY3QgZnJvbSAnLi91dGlsL0xpbmVJbnRlcnNlY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZUVsZW1lbnRCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogQ29tYmluZSBzZXF1ZW5jZSBmbG93cyB3aGVuIGRlbGV0aW5nIGFuIGVsZW1lbnRcbiAgICogaWYgdGhlcmUgaXMgb25lIGluY29taW5nIGFuZCBvbmUgb3V0Z29pbmdcbiAgICogc2VxdWVuY2UgZmxvd1xuICAgKi9cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGU7XG5cbiAgICAvLyBvbmx5IGhhbmRsZSBbYV0gLT4gW3NoYXBlXSAtPiBbYl0gcGF0dGVybnNcbiAgICBpZiAoc2hhcGUuaW5jb21pbmcubGVuZ3RoICE9PSAxIHx8IHNoYXBlLm91dGdvaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbkNvbm5lY3Rpb24gPSBzaGFwZS5pbmNvbWluZ1swXSxcbiAgICAgICAgb3V0Q29ubmVjdGlvbiA9IHNoYXBlLm91dGdvaW5nWzBdO1xuXG4gICAgLy8gb25seSBoYW5kbGUgc2VxdWVuY2UgZmxvd3NcbiAgICBpZiAoIWlzKGluQ29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgIWlzKG91dENvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KGluQ29ubmVjdGlvbi5zb3VyY2UsIG91dENvbm5lY3Rpb24udGFyZ2V0LCBpbkNvbm5lY3Rpb24pKSB7XG5cbiAgICAgIC8vIGNvbXB1dGUgbmV3LCBjb21iaW5lZCB3YXlwb2ludHNcbiAgICAgIHZhciBuZXdXYXlwb2ludHMgPSBnZXROZXdXYXlwb2ludHMoaW5Db25uZWN0aW9uLndheXBvaW50cywgb3V0Q29ubmVjdGlvbi53YXlwb2ludHMpO1xuXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3RFbmQoaW5Db25uZWN0aW9uLCBvdXRDb25uZWN0aW9uLnRhcmdldCwgbmV3V2F5cG9pbnRzKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbmluaGVyaXRzKFJlbW92ZUVsZW1lbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuUmVtb3ZlRWxlbWVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uUnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREb2NraW5nKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn1cblxuXG5mdW5jdGlvbiBnZXROZXdXYXlwb2ludHMoaW5XYXlwb2ludHMsIG91dFdheXBvaW50cykge1xuXG4gIHZhciBpbnRlcnNlY3Rpb24gPSBsaW5lSW50ZXJzZWN0KFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMl0pLFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMV0pLFxuICAgIGdldERvY2tpbmcob3V0V2F5cG9pbnRzWzFdKSxcbiAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1swXSkpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgaW5XYXlwb2ludHMuc2xpY2UoMCwgaW5XYXlwb2ludHMubGVuZ3RoIC0gMSksXG4gICAgICBbIGludGVyc2VjdGlvbiBdLFxuICAgICAgb3V0V2F5cG9pbnRzLnNsaWNlKDEpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW1xuICAgICAgZ2V0RG9ja2luZyhpbldheXBvaW50c1swXSksXG4gICAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1tvdXRXYXlwb2ludHMubGVuZ3RoIC0gMV0pXG4gICAgXTtcbiAgfVxufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgcmVtb3ZlIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgLyoqXG4gICAqIG1vcnBoIGNvbGxhYm9yYXRpb24gZGlhZ3JhbSBpbnRvIHByb2Nlc3MgZGlhZ3JhbVxuICAgKiBhZnRlciB0aGUgbGFzdCBwYXJ0aWNpcGFudCBoYXMgYmVlbiByZW1vdmVkXG4gICAqL1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIGJlaGF2aW9yIGlmIHRoZSBzaGFwZSB0byBiZSByZW1vdmVkXG4gICAgLy8gaXMgYSBwYXJ0aWNpcGFudFxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgY29udGV4dC5jb2xsYWJvcmF0aW9uUm9vdCA9IHBhcmVudDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjb2xsYWJvcmF0aW9uUm9vdCA9IGNvbnRleHQuY29sbGFib3JhdGlvblJvb3Q7XG5cbiAgICBpZiAoY29sbGFib3JhdGlvblJvb3QgJiYgIWNvbGxhYm9yYXRpb25Sb290LmJ1c2luZXNzT2JqZWN0LnBhcnRpY2lwYW50cy5sZW5ndGgpIHtcblxuICAgICAgLy8gcmVwbGFjZSBlbXB0eSBjb2xsYWJvcmF0aW9uIHdpdGggcHJvY2VzcyBkaWFncmFtXG4gICAgICBtb2RlbGluZy5tYWtlUHJvY2VzcygpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbn1cblxuUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnbW9kZWxpbmcnIF07XG5cbmluaGVyaXRzKFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgZmluZCxcbiAgbWF0Y2hQYXR0ZXJuXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uUnVsZXMsIGluamVjdG9yKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBkcmFnZ2luZyA9IGluamVjdG9yLmdldCgnZHJhZ2dpbmcnLCBmYWxzZSk7XG5cbiAgZnVuY3Rpb24gZml4Q29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBwYXJlbnQgPSBjb25uZWN0aW9uLnBhcmVudDtcblxuICAgIC8vIGRvIG5vdCBkbyBhbnl0aGluZyBpZiBjb25uZWN0aW9uXG4gICAgLy8gaXMgYWxyZWFkeSBkZWxldGVkIChtYXkgaGFwcGVuIGR1ZSB0byBvdGhlclxuICAgIC8vIGJlaGF2aW9ycyBwbHVnZ2VkLWluIGJlZm9yZSlcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXBsYWNlbWVudFR5cGUsXG4gICAgICAgIHJlbW92ZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGluY29taW5nIG9yIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAgICogY2FuIHN0YXkgb3IgY291bGQgYmUgc3Vic3RpdHV0ZWQgd2l0aCBhblxuICAgICAqIGFwcHJvcHJpYXRlIHJlcGxhY2VtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBob2xkcyB0cnVlIGZvciBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3cuXG4gICAgICovXG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3coc291cmNlLCB0YXJnZXQpKSB7XG4gICAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdE1lc3NhZ2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpNZXNzYWdlRmxvdyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJhbnNmb3JtIG1lc3NhZ2UgZmxvd3MgaW50byBzZXF1ZW5jZSBmbG93cywgaWYgcG9zc2libGVcblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG5cbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpTZXF1ZW5jZUZsb3cnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpBc3NvY2lhdGlvbicpICYmICFicG1uUnVsZXMuY2FuQ29ubmVjdEFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICB9XG5cblxuICAgIC8vIHJlbW92ZSBpbnZhbGlkIGNvbm5lY3Rpb24sXG4gICAgLy8gdW5sZXNzIGl0IGhhcyBiZWVuIHJlbW92ZWQgYWxyZWFkeVxuICAgIGlmIChyZW1vdmUpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gcmVwbGFjZSBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3dcblxuICAgIGlmIChyZXBsYWNlbWVudFR5cGUpIHtcbiAgICAgIG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgICAgdHlwZTogcmVwbGFjZW1lbnRUeXBlLFxuICAgICAgICB3YXlwb2ludHM6IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29udGV4dC5uZXdTb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0IHx8IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBhbGxvd2VkLFxuICAgICAgICByZXBsYWNlbWVudDtcblxuICAgIGFsbG93ZWQgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG5cbiAgICBpZiAoIWFsbG93ZWQgfHwgYWxsb3dlZC50eXBlID09PSBjb25uZWN0aW9uLnR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXBsYWNlbWVudCA9IG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgIHR5cGU6IGFsbG93ZWQudHlwZSxcbiAgICAgIHdheXBvaW50czogY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIG9sZCBjb25uZWN0aW9uXG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICAgIC8vIHJlcGxhY2UgY29ubmVjdGlvbiBpbiBjb250ZXh0IHRvIHJlY29ubmVjdCBlbmQvc3RhcnRcbiAgICBjb250ZXh0LmNvbm5lY3Rpb24gPSByZXBsYWNlbWVudDtcblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihjb25uZWN0aW9uLCByZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbW9ua2V5LXBhdGNoIHNlbGVjdGlvbiBzYXZlZCBpbiBkcmFnZ2luZyBpbiBvcmRlciB0byByZS1zZWxlY3QgaXQgd2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWRcbiAgZnVuY3Rpb24gY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihvbGRDb25uZWN0aW9uLCBuZXdDb25uZWN0aW9uKSB7XG4gICAgdmFyIGNvbnRleHQgPSBkcmFnZ2luZy5jb250ZXh0KCksXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gY29udGV4dCAmJiBjb250ZXh0LnBheWxvYWQucHJldmlvdXNTZWxlY3Rpb24sXG4gICAgICAgIGluZGV4O1xuXG4gICAgLy8gZG8gbm90aGluZyBpZiBub3QgZHJhZ2dpbmcgb3Igbm8gc2VsZWN0aW9uIHdhcyBwcmVzZW50XG4gICAgaWYgKCFwcmV2aW91c1NlbGVjdGlvbiB8fCAhcHJldmlvdXNTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXggPSBwcmV2aW91c1NlbGVjdGlvbi5pbmRleE9mKG9sZENvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZpb3VzU2VsZWN0aW9uLnNwbGljZShpbmRleCwgMSwgbmV3Q29ubmVjdGlvbik7XG4gIH1cblxuICAvLyBsaWZlY3ljbGUgaG9va3NcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBhbGxDb25uZWN0aW9ucyA9IGNsb3N1cmUuYWxsQ29ubmVjdGlvbnM7XG5cbiAgICBmb3JFYWNoKGFsbENvbm5lY3Rpb25zLCBmaXhDb25uZWN0aW9uKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBjb25uZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIGNvbmRpdGlvbiBvbiBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmIChwcm9wZXJ0aWVzLmRlZmF1bHQpIHtcbiAgICAgIGNvbm5lY3Rpb24gPSBmaW5kKFxuICAgICAgICBlbGVtZW50Lm91dGdvaW5nLFxuICAgICAgICBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5idXNpbmVzc09iamVjdC5kZWZhdWx0LmlkIH0pXG4gICAgICApO1xuXG4gICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGNvbm5lY3Rpb24sIHsgY29uZGl0aW9uRXhwcmVzc2lvbjogdW5kZWZpbmVkIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGZyb20gc291cmNlIG9uIGNoYW5nZSB0byBjb25kaXRpb25hbFxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbmRpdGlvbkV4cHJlc3Npb24gJiYgYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgPT09IGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQuc291cmNlLCB7IGRlZmF1bHQ6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbmhlcml0cyhSZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdicG1uUnVsZXMnLFxuICAnaW5qZWN0b3InXG5dO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzRXZlbnRTdWJQcm9jZXNzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyByZXBsYWNlIGJlaGF2aW9yLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlRWxlbWVudEJlaGF2aW91cihcbiAgICBicG1uUmVwbGFjZSxcbiAgICBicG1uUnVsZXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGluamVjdG9yLFxuICAgIG1vZGVsaW5nLFxuICAgIHNlbGVjdGlvblxuKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIHRoaXMuX2JwbW5SZXBsYWNlID0gYnBtblJlcGxhY2U7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuXG4gIC8vIHJlcGxhY2UgZWxlbWVudHMgb24gbW92ZVxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdlbGVtZW50cy5tb3ZlJyBdLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0Lm5ld1BhcmVudCxcbiAgICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICAgIGZvckVhY2goY29udGV4dC5jbG9zdXJlLnRvcExldmVsLCBmdW5jdGlvbih0b3BMZXZlbEVsZW1lbnRzKSB7XG4gICAgICBpZiAoaXNFdmVudFN1YlByb2Nlc3ModG9wTGV2ZWxFbGVtZW50cykpIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5jb25jYXQodG9wTGV2ZWxFbGVtZW50cy5jaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmNvbmNhdCh0b3BMZXZlbEVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHNldCB0YXJnZXQgdG8gaG9zdCBpZiBhdHRhY2hpbmdcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxICYmIG5ld0hvc3QpIHtcbiAgICAgIHRhcmdldCA9IG5ld0hvc3Q7XG4gICAgfVxuXG4gICAgdmFyIGNhblJlcGxhY2UgPSBicG1uUnVsZXMuY2FuUmVwbGFjZShlbGVtZW50cywgdGFyZ2V0KTtcblxuICAgIGlmIChjYW5SZXBsYWNlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VFbGVtZW50cyhlbGVtZW50cywgY2FuUmVwbGFjZS5yZXBsYWNlbWVudHMsIG5ld0hvc3QpO1xuICAgIH1cbiAgfSwgdGhpcyk7XG5cbiAgLy8gdXBkYXRlIGF0dGFjaG1lbnRzIG9uIGhvc3QgcmVwbGFjZVxuICB0aGlzLnBvc3RFeGVjdXRlKFsgJ3NoYXBlLnJlcGxhY2UnIF0sIDE1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGUsXG4gICAgICAgIGF0dGFjaGVycyA9IG9sZFNoYXBlLmF0dGFjaGVycyxcbiAgICAgICAgY2FuUmVwbGFjZTtcblxuICAgIGlmIChhdHRhY2hlcnMgJiYgYXR0YWNoZXJzLmxlbmd0aCkge1xuICAgICAgY2FuUmVwbGFjZSA9IGJwbW5SdWxlcy5jYW5SZXBsYWNlKGF0dGFjaGVycywgbmV3U2hhcGUpO1xuXG4gICAgICB0aGlzLnJlcGxhY2VFbGVtZW50cyhhdHRhY2hlcnMsIGNhblJlcGxhY2UucmVwbGFjZW1lbnRzKTtcbiAgICB9XG5cbiAgfSwgdGhpcyk7XG5cbiAgLy8ga2VlcCBJRCBvbiBzaGFwZSByZXBsYWNlXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnJlcGxhY2UnIF0sIDE1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGU7XG5cbiAgICBtb2RlbGluZy51bmNsYWltSWQob2xkU2hhcGUuYnVzaW5lc3NPYmplY3QuaWQsIG9sZFNoYXBlLmJ1c2luZXNzT2JqZWN0KTtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKG5ld1NoYXBlLCB7IGlkOiBvbGRTaGFwZS5pZCB9KTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKFJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5SZXBsYWNlRWxlbWVudEJlaGF2aW91ci5wcm90b3R5cGUucmVwbGFjZUVsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMsIG5ld0VsZW1lbnRzKSB7XG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnksXG4gICAgICBicG1uUmVwbGFjZSA9IHRoaXMuX2JwbW5SZXBsYWNlLFxuICAgICAgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uO1xuXG4gIGZvckVhY2gobmV3RWxlbWVudHMsIGZ1bmN0aW9uKHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSB7XG4gICAgICB0eXBlOiByZXBsYWNlbWVudC5uZXdFbGVtZW50VHlwZVxuICAgIH07XG5cbiAgICB2YXIgb2xkRWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQocmVwbGFjZW1lbnQub2xkRWxlbWVudElkKTtcblxuICAgIHZhciBpZHggPSBlbGVtZW50cy5pbmRleE9mKG9sZEVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHNbaWR4XSA9IGJwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQsIHsgc2VsZWN0OiBmYWxzZSB9KTtcbiAgfSk7XG5cbiAgaWYgKG5ld0VsZW1lbnRzKSB7XG4gICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50cyk7XG4gIH1cbn07XG5cblJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdicG1uUmVwbGFjZScsXG4gICdicG1uUnVsZXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NlbGVjdGlvbidcbl07XG4iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBnZXRQYXJ0aWNpcGFudFJlc2l6ZUNvbnN0cmFpbnRzIH0gZnJvbSAnLi91dGlsL1Jlc2l6ZVV0aWwnO1xyXG5cclxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xyXG5cclxuZXhwb3J0IHZhciBMQU5FX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDYwIH07XHJcblxyXG5leHBvcnQgdmFyIFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDE1MCB9O1xyXG5cclxuZXhwb3J0IHZhciBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDE0MCwgaGVpZ2h0OiAxMjAgfTtcclxuXHJcbmV4cG9ydCB2YXIgVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogNTAsIGhlaWdodDogMzAgfTtcclxuXHJcblxyXG4vKipcclxuICogU2V0IG1pbmltdW0gYm91bmRzL3Jlc2l6ZSBjb25zdHJhaW50cyBvbiByZXNpemUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVCZWhhdmlvcihldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcclxuICAgICAgICBiYWxhbmNlZCA9IGNvbnRleHQuYmFsYW5jZWQ7XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykgfHwgaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgY29udGV4dC5yZXNpemVDb25zdHJhaW50cyA9IGdldFBhcnRpY2lwYW50UmVzaXplQ29uc3RyYWludHMoc2hhcGUsIGRpcmVjdGlvbiwgYmFsYW5jZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKHNoYXBlKSkge1xyXG4gICAgICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcclxuICAgICAgY29udGV4dC5taW5EaW1lbnNpb25zID0gVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5SZXNpemVCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIHJvdW5kQm91bmRzXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaGFzUHJpbWFyeU1vZGlmaWVyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvTW91c2UnO1xuXG52YXIgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZID0gMTAwMTtcblxuXG4vKipcbiAqIEludm9rZSB7QGxpbmsgTW9kZWxpbmcjcmVzaXplTGFuZX0gaW5zdGVhZCBvZlxuICoge0BsaW5rIE1vZGVsaW5nI3Jlc2l6ZVNoYXBlfSB3aGVuIHJlc2l6aW5nIGEgTGFuZVxuICogb3IgUGFydGljaXBhbnQgc2hhcGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZUxhbmVCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBldmVudEJ1cy5vbigncmVzaXplLnN0YXJ0JywgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZICsgNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykgfHwgaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgICAgLy8gc2hvdWxkIHdlIHJlc2l6ZSB0aGUgb3Bwb3NpdGUgbGFuZShzKSBpblxuICAgICAgLy8gb3JkZXIgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHJlc2l6ZSBvcGVyYXRpb24/XG4gICAgICBjb250ZXh0LmJhbGFuY2VkID0gIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogSW50ZXJjZXB0IHJlc2l6ZSBlbmQgYW5kIGNhbGwgcmVzaXplIGxhbmUgZnVuY3Rpb24gaW5zdGVhZC5cbiAgICovXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuZW5kJywgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcztcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpIHx8IGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAgIGlmIChjYW5FeGVjdXRlKSB7XG5cbiAgICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBmb3IgbmV3IGJvdW5kc1xuICAgICAgICAvLyAoaW1wb3J0YW50IHdoZW4gem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgICAgICBuZXdCb3VuZHMgPSByb3VuZEJvdW5kcyhuZXdCb3VuZHMpO1xuXG4gICAgICAgIC8vIHBlcmZvcm0gdGhlIGFjdHVhbCByZXNpemVcbiAgICAgICAgbW9kZWxpbmcucmVzaXplTGFuZShzaGFwZSwgbmV3Qm91bmRzLCBjb250ZXh0LmJhbGFuY2VkKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3RvcCBwcm9wYWdhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cblJlc2l6ZUxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZmluZCxcclxuICBpc0FycmF5LFxyXG4gIG1hdGNoUGF0dGVybixcclxuICBzb21lXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxyXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gIGlzXHJcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBoYXNFdmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XHJcblxyXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBZGQgcmVmZXJlbmNlZCByb290IGVsZW1lbnRzIChlcnJvciwgZXNjYWxhdGlvbiwgbWVzc2FnZSwgc2lnbmFsKSBpZiB0aGV5IGRvbid0IGV4aXN0LlxyXG4gKiBDb3B5IHJlZmVyZW5jZWQgcm9vdCBlbGVtZW50cyBvbiBjb3B5ICYgcGFzdGUuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yKFxyXG4gICAgYnBtbmpzLCBldmVudEJ1cywgaW5qZWN0b3IsIG1vZGRsZUNvcHksIGJwbW5GYWN0b3J5XHJcbikge1xyXG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xyXG5cclxuICBmdW5jdGlvbiBjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2UoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkgfHxcclxuICAgICAgaGFzQW55RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIFtcclxuICAgICAgICAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xyXG4gICAgICBdKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhhc1Jvb3RFbGVtZW50KHJvb3RFbGVtZW50KSB7XHJcbiAgICB2YXIgZGVmaW5pdGlvbnMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKSxcclxuICAgICAgICByb290RWxlbWVudHMgPSBkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgIHJldHVybiAhIWZpbmQocm9vdEVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogcm9vdEVsZW1lbnQuaWQgfSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eU5hbWUoZXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICBpZiAoaXMoZXZlbnREZWZpbml0aW9uLCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnZXJyb3JSZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ2VzY2FsYXRpb25SZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ21lc3NhZ2VSZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnc2lnbmFsUmVmJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkpIHtcclxuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnbWVzc2FnZVJlZicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdldmVudERlZmluaXRpb25zJyksXHJcbiAgICAgICAgZXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uc1sgMCBdO1xyXG5cclxuICAgIHJldHVybiBldmVudERlZmluaXRpb24uZ2V0KGdldFJvb3RFbGVtZW50UmVmZXJlbmNlUHJvcGVydHlOYW1lKGV2ZW50RGVmaW5pdGlvbikpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QsIHJvb3RFbGVtZW50KSB7XHJcbiAgICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkpIHtcclxuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LnNldCgnbWVzc2FnZVJlZicsIHJvb3RFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpLFxyXG4gICAgICAgIGV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbnNbIDAgXTtcclxuXHJcbiAgICByZXR1cm4gZXZlbnREZWZpbml0aW9uLnNldChnZXRSb290RWxlbWVudFJlZmVyZW5jZVByb3BlcnR5TmFtZShldmVudERlZmluaXRpb24pLCByb290RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvLyBjcmVhdGUgc2hhcGVcclxuICB0aGlzLmV4ZWN1dGVkKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIGlmICghY2FuSGF2ZVJvb3RFbGVtZW50UmVmZXJlbmNlKHNoYXBlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50ID0gZ2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50cztcclxuXHJcbiAgICBpZiAocm9vdEVsZW1lbnQgJiYgIWhhc1Jvb3RFbGVtZW50KHJvb3RFbGVtZW50KSkge1xyXG4gICAgICByb290RWxlbWVudHMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKS5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgICAgLy8gYWRkIHJvb3QgZWxlbWVudFxyXG4gICAgICBjb2xsZWN0aW9uQWRkKHJvb3RFbGVtZW50cywgcm9vdEVsZW1lbnQpO1xyXG5cclxuICAgICAgY29udGV4dC5hZGRlZFJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfSwgdHJ1ZSk7XHJcblxyXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBhZGRlZFJvb3RFbGVtZW50ID0gY29udGV4dC5hZGRlZFJvb3RFbGVtZW50O1xyXG5cclxuICAgIGlmICghYWRkZWRSb290RWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvb3RFbGVtZW50cyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLmdldCgncm9vdEVsZW1lbnRzJyk7XHJcblxyXG4gICAgLy8gcmVtb3ZlIHJvb3QgZWxlbWVudFxyXG4gICAgY29sbGVjdGlvblJlbW92ZShyb290RWxlbWVudHMsIGFkZGVkUm9vdEVsZW1lbnQpO1xyXG4gIH0sIHRydWUpO1xyXG5cclxuICBldmVudEJ1cy5vbignY29weVBhc3RlLmNvcHlFbGVtZW50JywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXHJcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcclxuXHJcbiAgICBpZiAoIWNhbkhhdmVSb290RWxlbWVudFJlZmVyZW5jZShlbGVtZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBnZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCk7XHJcblxyXG4gICAgaWYgKHJvb3RFbGVtZW50KSB7XHJcbiAgICAgIGRlc2NyaXB0b3IucmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcclxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGRlc2NyaXB0b3IuYnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gICAgaWYgKCFjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2UoYnVzaW5lc3NPYmplY3QpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gZGVzY3JpcHRvci5yZWZlcmVuY2VkUm9vdEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFyZWZlcmVuY2VkUm9vdEVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGFzUm9vdEVsZW1lbnQocmVmZXJlbmNlZFJvb3RFbGVtZW50KSkge1xyXG4gICAgICByZWZlcmVuY2VkUm9vdEVsZW1lbnQgPSBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KFxyXG4gICAgICAgIHJlZmVyZW5jZWRSb290RWxlbWVudCxcclxuICAgICAgICBicG1uRmFjdG9yeS5jcmVhdGUocmVmZXJlbmNlZFJvb3RFbGVtZW50LiR0eXBlKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0LCByZWZlcmVuY2VkUm9vdEVsZW1lbnQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2JwbW5qcycsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnaW5qZWN0b3InLFxyXG4gICdtb2RkbGVDb3B5JyxcclxuICAnYnBtbkZhY3RvcnknXHJcbl07XHJcblxyXG5pbmhlcml0cyhSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBoYXNBbnlFdmVudERlZmluaXRpb24oZWxlbWVudCwgdHlwZXMpIHtcclxuICBpZiAoIWlzQXJyYXkodHlwZXMpKSB7XHJcbiAgICB0eXBlcyA9IFsgdHlwZXMgXTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzb21lKHR5cGVzLCBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHR5cGUpO1xyXG4gIH0pO1xyXG59IiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgTEFORV9NSU5fRElNRU5TSU9OUyxcclxuICBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUyxcclxuICBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUyxcclxuICBURVhUX0FOTk9UQVRJT05fTUlOX0RJTUVOU0lPTlNcclxufSBmcm9tICcuL1Jlc2l6ZUJlaGF2aW9yJztcclxuXHJcbmltcG9ydCB7IGdldENoaWxkTGFuZXMgfSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcclxuXHJcbnZhciBtYXggPSBNYXRoLm1heDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2xCZWhhdmlvcihldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuZ2V0TWluRGltZW5zaW9ucycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcclxuICAgICAgICBheGlzID0gY29udGV4dC5heGlzLFxyXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcclxuICAgICAgICBtaW5EaW1lbnNpb25zID0ge307XHJcblxyXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XHJcbiAgICAgIHZhciBpZCA9IHNoYXBlLmlkO1xyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcblxyXG4gICAgICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuICAgICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWluRGltZW5zaW9uc1sgaWQgXSA9IHtcclxuICAgICAgICAgICAgd2lkdGg6IFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGdldFBhcnRpY2lwYW50TWluSGVpZ2h0KHNoYXBlLCBzdGFydClcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChzaGFwZSkpIHtcclxuICAgICAgICBtaW5EaW1lbnNpb25zWyBpZCBdID0gU1VCX1BST0NFU1NfTUlOX0RJTUVOU0lPTlM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xyXG4gICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBURVhUX0FOTk9UQVRJT05fTUlOX0RJTUVOU0lPTlM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtaW5EaW1lbnNpb25zO1xyXG4gIH0pO1xyXG59XHJcblxyXG5TcGFjZVRvb2xCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChheGlzKSB7XHJcbiAgcmV0dXJuIGF4aXMgPT09ICd4JztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBtaW5pbXVtIGhlaWdodCBmb3IgcGFydGljaXBhbnQgdGFraW5nIGxhbmVzIGludG8gYWNjb3VudC5cclxuICpcclxuICogQHBhcmFtIHs8ZGpzLm1vZGVsLlNoYXBlPn0gcGFydGljaXBhbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQYXJ0aWNpcGFudE1pbkhlaWdodChwYXJ0aWNpcGFudCwgc3RhcnQpIHtcclxuICB2YXIgbGFuZXNNaW5IZWlnaHQ7XHJcblxyXG4gIGlmICghaGFzQ2hpbGRMYW5lcyhwYXJ0aWNpcGFudCkpIHtcclxuICAgIHJldHVybiBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUy5oZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBsYW5lc01pbkhlaWdodCA9IGdldExhbmVzTWluSGVpZ2h0KHBhcnRpY2lwYW50LCBzdGFydCk7XHJcblxyXG4gIHJldHVybiBtYXgoUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0LCBsYW5lc01pbkhlaWdodCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc0NoaWxkTGFuZXMoZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWdldENoaWxkTGFuZXMoZWxlbWVudCkubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMYW5lc01pbkhlaWdodChwYXJ0aWNpcGFudCwgcmVzaXplU3RhcnQpIHtcclxuICB2YXIgbGFuZXMgPSBnZXRDaGlsZExhbmVzKHBhcnRpY2lwYW50KSxcclxuICAgICAgcmVzaXplZExhbmU7XHJcblxyXG4gIC8vIGZpbmQgdGhlIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkXHJcbiAgcmVzaXplZExhbmUgPSBmaW5kUmVzaXplZExhbmUobGFuZXMsIHJlc2l6ZVN0YXJ0KTtcclxuXHJcbiAgLy8gcmVzaXplZCBsYW5lIGNhbm5vdCBzaHJpbmsgYmVsb3cgdGhlIG1pbmltdW0gaGVpZ2h0XHJcbiAgLy8gYnV0IHJlbWFpbmluZyBsYW5lcycgZGltZW5zaW9ucyBhcmUga2VwdCBpbnRhY3RcclxuICByZXR1cm4gcGFydGljaXBhbnQuaGVpZ2h0IC0gcmVzaXplZExhbmUuaGVpZ2h0ICsgTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGaW5kIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGxhbmVzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXNpemVTdGFydFxyXG4gKi9cclxuZnVuY3Rpb24gZmluZFJlc2l6ZWRMYW5lKGxhbmVzLCByZXNpemVTdGFydCkge1xyXG4gIHZhciBpLCBsYW5lLCBjaGlsZExhbmVzO1xyXG5cclxuICBmb3IgKGkgPSAwOyBpIDwgbGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGxhbmUgPSBsYW5lc1tpXTtcclxuXHJcbiAgICAvLyByZXNpemluZyBjdXJyZW50IGxhbmUgb3IgYSBsYW5lIG5lc3RlZFxyXG4gICAgaWYgKHJlc2l6ZVN0YXJ0ID49IGxhbmUueSAmJiByZXNpemVTdGFydCA8PSBsYW5lLnkgKyBsYW5lLmhlaWdodCkge1xyXG4gICAgICBjaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhsYW5lKTtcclxuXHJcbiAgICAgIC8vIGEgbmVzdGVkIGxhbmUgaXMgcmVzaXplZFxyXG4gICAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmluZFJlc2l6ZWRMYW5lKGNoaWxkTGFuZXMsIHJlc2l6ZVN0YXJ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY3VycmVudCBsYW5lIGlzIHRoZSByZXNpemVkIG9uZVxyXG4gICAgICByZXR1cm4gbGFuZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsLmpzJztcblxuLyoqXG4gKiBBZGQgc3RhcnQgZXZlbnQgcmVwbGFjaW5nIGVsZW1lbnQgd2l0aCBleHBhbmRlZCBzdWIgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvcihpbmplY3RvciwgbW9kZWxpbmcpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBvbGRTaGFwZSA9IGV2ZW50LmNvbnRleHQub2xkU2hhcGUsXG4gICAgICAgIG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZTtcblxuICAgIGlmIChcbiAgICAgICFpcyhuZXdTaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpIHx8XG4gICAgICAhaXMob2xkU2hhcGUsICdicG1uOlRhc2snKSB8fFxuICAgICAgIWlzRXhwYW5kZWQobmV3U2hhcGUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0U3RhcnRFdmVudFBvc2l0aW9uKG5ld1NoYXBlKTtcblxuICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcgfSwgcG9zaXRpb24sIG5ld1NoYXBlKTtcbiAgfSk7XG59XG5cblN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFN0YXJ0RXZlbnRQb3NpdGlvbihzaGFwZSkge1xuICByZXR1cm4ge1xuICAgIHg6IHNoYXBlLnggKyBzaGFwZS53aWR0aCAvIDYsXG4gICAgeTogc2hhcGUueSArIHNoYXBlLmhlaWdodCAvIDJcbiAgfTtcbn1cbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBjb21wdXRlQ2hpbGRyZW5CQm94XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Jlc2l6ZS9SZXNpemVVdGlsJztcblxuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91cihcbiAgICBldmVudEJ1cywgZWxlbWVudEZhY3RvcnksIG1vZGVsaW5nLFxuICAgIHJlc2l6ZSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIGZ1bmN0aW9uIGhpZGVFbXB0eUxhYmVscyhjaGlsZHJlbikge1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdsYWJlbCcgJiYgIWNoaWxkLmJ1c2luZXNzT2JqZWN0Lm5hbWUpIHtcbiAgICAgICAgICBjaGlsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHBhbmRlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbixcbiAgICAgICAgbmV3Qm91bmRzID0gZGVmYXVsdFNpemUsXG4gICAgICAgIHZpc2libGVFbGVtZW50cyxcbiAgICAgICAgdmlzaWJsZUJCb3g7XG5cbiAgICB2aXNpYmxlRWxlbWVudHMgPSBmaWx0ZXJWaXNpYmxlKGNoaWxkcmVuKS5jb25jYXQoWyBzaGFwZSBdKTtcblxuICAgIHZpc2libGVCQm94ID0gY29tcHV0ZUNoaWxkcmVuQkJveCh2aXNpYmxlRWxlbWVudHMpO1xuXG4gICAgaWYgKHZpc2libGVCQm94KSB7XG5cbiAgICAgIC8vIGNlbnRlciB0byB2aXNpYmxlQkJveCB3aXRoIG1heChkZWZhdWx0U2l6ZSwgY2hpbGRyZW5Cb3VuZHMpXG4gICAgICBuZXdCb3VuZHMud2lkdGggPSBNYXRoLm1heCh2aXNpYmxlQkJveC53aWR0aCwgbmV3Qm91bmRzLndpZHRoKTtcbiAgICAgIG5ld0JvdW5kcy5oZWlnaHQgPSBNYXRoLm1heCh2aXNpYmxlQkJveC5oZWlnaHQsIG5ld0JvdW5kcy5oZWlnaHQpO1xuXG4gICAgICBuZXdCb3VuZHMueCA9IHZpc2libGVCQm94LnggKyAodmlzaWJsZUJCb3gud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gdmlzaWJsZUJCb3gueSArICh2aXNpYmxlQkJveC5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY2VudGVyIHRvIGNvbGxhcHNlZCBzaGFwZSB3aXRoIGRlZmF1bHRTaXplXG4gICAgICBuZXdCb3VuZHMueCA9IHNoYXBlLnggKyAoc2hhcGUud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gc2hhcGUueSArIChzaGFwZS5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0JvdW5kcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbGxhcHNlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC0gZGVmYXVsdFNpemUud2lkdGgpIC8gMixcbiAgICAgIHk6IHNoYXBlLnkgKyAoc2hhcGUuaGVpZ2h0IC0gZGVmYXVsdFNpemUuaGVpZ2h0KSAvIDIsXG4gICAgICB3aWR0aDogZGVmYXVsdFNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IGRlZmF1bHRTaXplLmhlaWdodFxuICAgIH07XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXNoYXBlLmNvbGxhcHNlZCkge1xuXG4gICAgICAvLyBhbGwgY2hpbGRyZW4gZ290IG1hZGUgdmlzaWJsZSB0aHJvdWdoIGRqcywgaGlkZSBlbXB0eSBsYWJlbHNcbiAgICAgIGhpZGVFbXB0eUxhYmVscyhzaGFwZS5jaGlsZHJlbik7XG5cbiAgICAgIC8vIHJlbW92ZSBjb2xsYXBzZWQgbWFya2VyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdChzaGFwZSkuZGkuaXNFeHBhbmRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gcGxhY2UgY29sbGFwc2VkIG1hcmtlclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnc2hhcGUudG9nZ2xlQ29sbGFwc2UnIF0sIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuXG4gICAgLy8gcmV2ZXJ0IHJlbW92aW5nL3BsYWNpbmcgY29sbGFwc2VkIG1hcmtlclxuICAgIGlmICghc2hhcGUuY29sbGFwc2VkKSB7XG4gICAgICBnZXRCdXNpbmVzc09iamVjdChzaGFwZSkuZGkuaXNFeHBhbmRlZCA9IHRydWU7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRlZmF1bHRTaXplID0gZWxlbWVudEZhY3RvcnkuX2dldERlZmF1bHRTaXplKHNoYXBlKSxcbiAgICAgICAgbmV3Qm91bmRzO1xuXG4gICAgaWYgKHNoYXBlLmNvbGxhcHNlZCkge1xuXG4gICAgICAvLyByZXNpemUgdG8gZGVmYXVsdCBzaXplIG9mIGNvbGxhcHNlZCBzaGFwZXNcbiAgICAgIG5ld0JvdW5kcyA9IGNvbGxhcHNlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHJlc2l6ZSB0byBib3VuZHMgb2YgbWF4KHZpc2libGUgY2hpbGRyZW4sIGRlZmF1bHRTaXplKVxuICAgICAgbmV3Qm91bmRzID0gZXhwYW5kZWRCb3VuZHMoc2hhcGUsIGRlZmF1bHRTaXplKTtcbiAgICB9XG5cbiAgICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzLCBudWxsLCB7XG4gICAgICBhdXRvUmVzaXplOiBzaGFwZS5jb2xsYXBzZWQgPyBmYWxzZSA6ICdud3NlJ1xuICAgIH0pO1xuICB9KTtcblxufVxuXG5cbmluaGVyaXRzKFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdtb2RlbGluZydcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGZpbHRlclZpc2libGUoZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuICFlLmhpZGRlbjtcbiAgfSk7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcbmltcG9ydCB7IGlzTGFiZWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cblxuLyoqXG4gKiBVbmNsYWltcyBtb2RlbCBJRHMgb24gZWxlbWVudCBkZWxldGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGRsZVxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVW5jbGFpbUlkQmVoYXZpb3IoY2FudmFzLCBpbmplY3RvciwgbW9kZGxlLCBtb2RlbGluZykge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHNoYXBlQm8gPSBzaGFwZS5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChpc0xhYmVsKHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpc0V4cGFuZGVkKHNoYXBlKSkge1xuICAgICAgbW9kZGxlLmlkcy51bmNsYWltKHNoYXBlQm8ucHJvY2Vzc1JlZi5pZCk7XG4gICAgfVxuXG4gICAgbW9kZWxpbmcudW5jbGFpbUlkKHNoYXBlQm8uaWQsIHNoYXBlQm8pO1xuICB9KTtcblxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkJvID0gY29ubmVjdGlvbi5idXNpbmVzc09iamVjdDtcblxuICAgIG1vZGVsaW5nLnVuY2xhaW1JZChjb25uZWN0aW9uQm8uaWQsIGNvbm5lY3Rpb25Cbyk7XG4gIH0pO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgcm9vdEVsZW1lbnRCbyA9IHJvb3RFbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgbW9kZGxlLmlkcy51bmNsYWltKHJvb3RFbGVtZW50Qm8uaWQpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoVW5jbGFpbUlkQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblVuY2xhaW1JZEJlaGF2aW9yLiRpbmplY3QgPSBbICdjYW52YXMnLCAnaW5qZWN0b3InLCAnbW9kZGxlJywgJ21vZGVsaW5nJyBdOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbi8qKlxuICogQSBiZWhhdmlvciB0aGF0IHVuc2V0cyB0aGUgRGVmYXVsdCBwcm9wZXJ0eSBvZlxuICogc2VxdWVuY2UgZmxvdyBzb3VyY2Ugb24gZWxlbWVudCBkZWxldGUsIGlmIHRoZVxuICogcmVtb3ZlZCBlbGVtZW50IGlzIHRoZSBHYXRld2F5IG9yIFRhc2sncyBkZWZhdWx0IGZsb3cuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERlbGV0ZVNlcXVlbmNlRmxvd0JlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2U7XG5cbiAgICBpZiAoaXNEZWZhdWx0Rmxvdyhjb25uZWN0aW9uLCBzb3VyY2UpKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKHNvdXJjZSwge1xuICAgICAgICAnZGVmYXVsdCc6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmluaGVyaXRzKERlbGV0ZVNlcXVlbmNlRmxvd0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5EZWxldGVTZXF1ZW5jZUZsb3dCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0RlZmF1bHRGbG93KGNvbm5lY3Rpb24sIHNvdXJjZSkge1xuXG4gIGlmICghaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChzb3VyY2UpLFxuICAgICAgc2VxdWVuY2VGbG93ID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbik7XG5cbiAgcmV0dXJuIHNvdXJjZUJvLmdldCgnZGVmYXVsdCcpID09PSBzZXF1ZW5jZUZsb3c7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMCxcbiAgICBISUdIX1BSSU9SSVRZID0gNTAwMDtcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgZGVsZXRlIGxhbmUgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCB0cmFuc2xhdGUpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIE9rLCB0aGlzIGlzIGl0OlxuICAgKlxuICAgKiBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgTGFuZSNmbG93Tm9kZVJlZnMgX2FuZF9cbiAgICogRmxvd05vZGUjbGFuZXMgd2l0aCBldmVyeSBGbG93Tm9kZSBtb3ZlL3Jlc2l6ZSBhbmRcbiAgICogTGFuZSBtb3ZlL3Jlc2l6ZS5cbiAgICpcbiAgICogV2Ugd2FudCB0byBncm91cCB0aGF0IHN0dWZmIHRvIHJlY29tcHV0ZSBjb250YWlubWVudHNcbiAgICogYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBZZWEhXG4gICAqL1xuXG4gIC8vIHRoZSB1cGRhdGUgY29udGV4dFxuICB2YXIgY29udGV4dDtcblxuXG4gIGZ1bmN0aW9uIGluaXRDb250ZXh0KCkge1xuICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG5ldyBVcGRhdGVDb250ZXh0KCk7XG4gICAgY29udGV4dC5lbnRlcigpO1xuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnb3V0IG9mIGJvdW5kcyByZWxlYXNlJykpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVsZWFzZUNvbnRleHQoKSB7XG5cbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ291dCBvZiBib3VuZHMgcmVsZWFzZScpKTtcbiAgICB9XG5cbiAgICB2YXIgdHJpZ2dlclVwZGF0ZSA9IGNvbnRleHQubGVhdmUoKTtcblxuICAgIGlmICh0cmlnZ2VyVXBkYXRlKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYW5lUmVmcyhjb250ZXh0LmZsb3dOb2RlcywgY29udGV4dC5sYW5lcyk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cmlnZ2VyVXBkYXRlO1xuICB9XG5cblxuICB2YXIgbGFuZVJlZlVwZGF0ZUV2ZW50cyA9IFtcbiAgICAnc3BhY2VUb29sJyxcbiAgICAnbGFuZS5hZGQnLFxuICAgICdsYW5lLnJlc2l6ZScsXG4gICAgJ2xhbmUuc3BsaXQnLFxuICAgICdlbGVtZW50cy5jcmVhdGUnLFxuICAgICdlbGVtZW50cy5kZWxldGUnLFxuICAgICdlbGVtZW50cy5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLnJlc2l6ZSdcbiAgXTtcblxuXG4gIC8vIGxpc3RlbiB0byBhIGxvdCBvZiBzdHVmZiB0byBncm91cCBsYW5lIHVwZGF0ZXNcblxuICB0aGlzLnByZUV4ZWN1dGUobGFuZVJlZlVwZGF0ZUV2ZW50cywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpbml0Q29udGV4dCgpO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChsYW5lUmVmVXBkYXRlRXZlbnRzLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVsZWFzZUNvbnRleHQoKTtcbiAgfSk7XG5cblxuICAvLyBNYXJrIGZsb3cgbm9kZXMgKyBsYW5lcyB0aGF0IG5lZWQgYW4gdXBkYXRlXG5cbiAgdGhpcy5wcmVFeGVjdXRlKFtcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ3NoYXBlLnJlc2l6ZSdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgdmFyIHVwZGF0ZUNvbnRleHQgPSBnZXRDb250ZXh0KCk7XG5cbiAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBsYWJlbHNcbiAgICBpZiAoc2hhcGUubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgICAgdXBkYXRlQ29udGV4dC5hZGRMYW5lKHNoYXBlKTtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICAgIHVwZGF0ZUNvbnRleHQuYWRkRmxvd05vZGUoc2hhcGUpO1xuICAgIH1cbiAgfSk7XG59XG5cblVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycgLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuaW5oZXJpdHMoVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuZnVuY3Rpb24gVXBkYXRlQ29udGV4dCgpIHtcblxuICB0aGlzLmZsb3dOb2RlcyA9IFtdO1xuICB0aGlzLmxhbmVzID0gW107XG5cbiAgdGhpcy5jb3VudGVyID0gMDtcblxuICB0aGlzLmFkZExhbmUgPSBmdW5jdGlvbihsYW5lKSB7XG4gICAgdGhpcy5sYW5lcy5wdXNoKGxhbmUpO1xuICB9O1xuXG4gIHRoaXMuYWRkRmxvd05vZGUgPSBmdW5jdGlvbihmbG93Tm9kZSkge1xuICAgIHRoaXMuZmxvd05vZGVzLnB1c2goZmxvd05vZGUpO1xuICB9O1xuXG4gIHRoaXMuZW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNvdW50ZXIrKztcbiAgfTtcblxuICB0aGlzLmxlYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jb3VudGVyLS07XG5cbiAgICByZXR1cm4gIXRoaXMuY291bnRlcjtcbiAgfTtcbn0iLCJpbXBvcnQgQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3IgZnJvbSAnLi9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcic7XG5pbXBvcnQgQXBwZW5kQmVoYXZpb3IgZnJvbSAnLi9BcHBlbmRCZWhhdmlvcic7XG5pbXBvcnQgQXNzb2NpYXRpb25CZWhhdmlvciBmcm9tICcuL0Fzc29jaWF0aW9uQmVoYXZpb3InO1xuaW1wb3J0IEF0dGFjaEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9BdHRhY2hFdmVudEJlaGF2aW9yJztcbmltcG9ydCBCb3VuZGFyeUV2ZW50QmVoYXZpb3IgZnJvbSAnLi9Cb3VuZGFyeUV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IFJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3IgZnJvbSAnLi9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yJztcbmltcG9ydCBDcmVhdGVCZWhhdmlvciBmcm9tICcuL0NyZWF0ZUJlaGF2aW9yJztcbmltcG9ydCBGaXhIb3ZlckJlaGF2aW9yIGZyb20gJy4vRml4SG92ZXJCZWhhdmlvcic7XG5pbXBvcnQgQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yJztcbmltcG9ydCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcic7XG5pbXBvcnQgRGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvciBmcm9tICcuL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3InO1xuaW1wb3J0IERhdGFTdG9yZUJlaGF2aW9yIGZyb20gJy4vRGF0YVN0b3JlQmVoYXZpb3InO1xuaW1wb3J0IERlbGV0ZUxhbmVCZWhhdmlvciBmcm9tICcuL0RlbGV0ZUxhbmVCZWhhdmlvcic7XG5pbXBvcnQgRGV0YWNoRXZlbnRCZWhhdmlvciBmcm9tICcuL0RldGFjaEV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IERyb3BPbkZsb3dCZWhhdmlvciBmcm9tICcuL0Ryb3BPbkZsb3dCZWhhdmlvcic7XG5pbXBvcnQgRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciBmcm9tICcuL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3InO1xuaW1wb3J0IEdyb3VwQmVoYXZpb3IgZnJvbSAnLi9Hcm91cEJlaGF2aW9yJztcbmltcG9ydCBJbXBvcnREb2NraW5nRml4IGZyb20gJy4vSW1wb3J0RG9ja2luZ0ZpeCc7XG5pbXBvcnQgSXNIb3Jpem9udGFsRml4IGZyb20gJy4vSXNIb3Jpem9udGFsRml4JztcbmltcG9ydCBMYWJlbEJlaGF2aW9yIGZyb20gJy4vTGFiZWxCZWhhdmlvcic7XG5pbXBvcnQgTW9kZWxpbmdGZWVkYmFjayBmcm9tICcuL01vZGVsaW5nRmVlZGJhY2snO1xuaW1wb3J0IFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yJztcbmltcG9ydCBSZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcic7XG5pbXBvcnQgUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXIgZnJvbSAnLi9SZXBsYWNlRWxlbWVudEJlaGF2aW91cic7XG5pbXBvcnQgUmVzaXplQmVoYXZpb3IgZnJvbSAnLi9SZXNpemVCZWhhdmlvcic7XG5pbXBvcnQgUmVzaXplTGFuZUJlaGF2aW9yIGZyb20gJy4vUmVzaXplTGFuZUJlaGF2aW9yJztcbmltcG9ydCBSZW1vdmVFbGVtZW50QmVoYXZpb3IgZnJvbSAnLi9SZW1vdmVFbGVtZW50QmVoYXZpb3InO1xuaW1wb3J0IFNwYWNlVG9vbEJlaGF2aW9yIGZyb20gJy4vU3BhY2VUb29sQmVoYXZpb3InO1xuaW1wb3J0IFN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9TdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yJztcbmltcG9ydCBUb2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIgZnJvbSAnLi9Ub2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXInO1xuaW1wb3J0IFVuY2xhaW1JZEJlaGF2aW9yIGZyb20gJy4vVW5jbGFpbUlkQmVoYXZpb3InO1xuaW1wb3J0IFVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yIGZyb20gJy4vVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3InO1xuaW1wb3J0IFVuc2V0RGVmYXVsdEZsb3dCZWhhdmlvciBmcm9tICcuL1Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnYWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3InLFxuICAgICdhcHBlbmRCZWhhdmlvcicsXG4gICAgJ2Fzc29jaWF0aW9uQmVoYXZpb3InLFxuICAgICdhdHRhY2hFdmVudEJlaGF2aW9yJyxcbiAgICAnYm91bmRhcnlFdmVudEJlaGF2aW9yJyxcbiAgICAncm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZUJlaGF2aW9yJyxcbiAgICAnZml4SG92ZXJCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZURhdGFPYmplY3RCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InLFxuICAgICdkYXRhU3RvcmVCZWhhdmlvcicsXG4gICAgJ2RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3InLFxuICAgICdkZWxldGVMYW5lQmVoYXZpb3InLFxuICAgICdkZXRhY2hFdmVudEJlaGF2aW9yJyxcbiAgICAnZHJvcE9uRmxvd0JlaGF2aW9yJyxcbiAgICAnZXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvcicsXG4gICAgJ2dyb3VwQmVoYXZpb3InLFxuICAgICdpbXBvcnREb2NraW5nRml4JyxcbiAgICAnaXNIb3Jpem9udGFsRml4JyxcbiAgICAnbGFiZWxCZWhhdmlvcicsXG4gICAgJ21vZGVsaW5nRmVlZGJhY2snLFxuICAgICdyZW1vdmVFbGVtZW50QmVoYXZpb3InLFxuICAgICdyZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yJyxcbiAgICAncmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvcicsXG4gICAgJ3JlcGxhY2VFbGVtZW50QmVoYXZpb3VyJyxcbiAgICAncmVzaXplQmVoYXZpb3InLFxuICAgICdyZXNpemVMYW5lQmVoYXZpb3InLFxuICAgICd0b2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXInLFxuICAgICdzcGFjZVRvb2xCZWhhdmlvcicsXG4gICAgJ3N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3InLFxuICAgICd1bmNsYWltSWRCZWhhdmlvcicsXG4gICAgJ3Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvcicsXG4gICAgJ3VwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yJ1xuICBdLFxuICBhZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcjogWyAndHlwZScsIEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yIF0sXG4gIGFwcGVuZEJlaGF2aW9yOiBbICd0eXBlJywgQXBwZW5kQmVoYXZpb3IgXSxcbiAgYXNzb2NpYXRpb25CZWhhdmlvcjogWyAndHlwZScsIEFzc29jaWF0aW9uQmVoYXZpb3IgXSxcbiAgYXR0YWNoRXZlbnRCZWhhdmlvcjogWyAndHlwZScsIEF0dGFjaEV2ZW50QmVoYXZpb3IgXSxcbiAgYm91bmRhcnlFdmVudEJlaGF2aW9yOiBbICd0eXBlJywgQm91bmRhcnlFdmVudEJlaGF2aW9yIF0sXG4gIHJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3I6IFsgJ3R5cGUnLCBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yIF0sXG4gIGNyZWF0ZUJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlQmVoYXZpb3IgXSxcbiAgZml4SG92ZXJCZWhhdmlvcjogWyAndHlwZScsIEZpeEhvdmVyQmVoYXZpb3IgXSxcbiAgY3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yIF0sXG4gIGNyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIF0sXG4gIGRhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yIF0sXG4gIGRhdGFTdG9yZUJlaGF2aW9yOiBbICd0eXBlJywgRGF0YVN0b3JlQmVoYXZpb3IgXSxcbiAgZGVsZXRlTGFuZUJlaGF2aW9yOiBbICd0eXBlJywgRGVsZXRlTGFuZUJlaGF2aW9yIF0sXG4gIGRldGFjaEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBEZXRhY2hFdmVudEJlaGF2aW9yIF0sXG4gIGRyb3BPbkZsb3dCZWhhdmlvcjogWyAndHlwZScsIERyb3BPbkZsb3dCZWhhdmlvciBdLFxuICBldmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yOiBbICd0eXBlJywgRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciBdLFxuICBncm91cEJlaGF2aW9yOiBbICd0eXBlJywgR3JvdXBCZWhhdmlvciBdLFxuICBpbXBvcnREb2NraW5nRml4OiBbICd0eXBlJywgSW1wb3J0RG9ja2luZ0ZpeCBdLFxuICBpc0hvcml6b250YWxGaXg6IFsgJ3R5cGUnLCBJc0hvcml6b250YWxGaXggXSxcbiAgbGFiZWxCZWhhdmlvcjogWyAndHlwZScsIExhYmVsQmVoYXZpb3IgXSxcbiAgbW9kZWxpbmdGZWVkYmFjazogWyAndHlwZScsIE1vZGVsaW5nRmVlZGJhY2sgXSxcbiAgcmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvcjogWyAndHlwZScsIFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IgXSxcbiAgcmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcjogWyAndHlwZScsIFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IgXSxcbiAgcmVwbGFjZUVsZW1lbnRCZWhhdmlvdXI6IFsgJ3R5cGUnLCBSZXBsYWNlRWxlbWVudEJlaGF2aW91ciBdLFxuICByZXNpemVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUJlaGF2aW9yIF0sXG4gIHJlc2l6ZUxhbmVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUxhbmVCZWhhdmlvciBdLFxuICByZW1vdmVFbGVtZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBSZW1vdmVFbGVtZW50QmVoYXZpb3IgXSxcbiAgdG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyIDogWyAndHlwZScsIFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciBdLFxuICBzcGFjZVRvb2xCZWhhdmlvcjogWyAndHlwZScsIFNwYWNlVG9vbEJlaGF2aW9yIF0sXG4gIHN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBTdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yIF0sXG4gIHVuY2xhaW1JZEJlaGF2aW9yOiBbICd0eXBlJywgVW5jbGFpbUlkQmVoYXZpb3IgXSxcbiAgdXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3I6IFsgJ3R5cGUnLCBVcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvciBdLFxuICB1bnNldERlZmF1bHRGbG93QmVoYXZpb3I6IFsgJ3R5cGUnLCBVbnNldERlZmF1bHRGbG93QmVoYXZpb3IgXVxufTtcbiIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBicG1uOkNhdGVnb3J5VmFsdWUgaW5zaWRlIGEgbmV3IGJwbW46Q2F0ZWdvcnlcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IGNhdGVnb3J5VmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXRlZ29yeVZhbHVlKGRlZmluaXRpb25zLCBicG1uRmFjdG9yeSkge1xuICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeVZhbHVlJyksXG4gICAgICBjYXRlZ29yeSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeScsIHtcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZTogWyBjYXRlZ29yeVZhbHVlIF1cbiAgICAgIH0pO1xuXG4gIC8vIGFkZCB0byBjb3JyZWN0IHBsYWNlXG4gIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgY2F0ZWdvcnkpO1xuICBnZXRCdXNpbmVzc09iamVjdChjYXRlZ29yeSkuJHBhcmVudCA9IGRlZmluaXRpb25zO1xuICBnZXRCdXNpbmVzc09iamVjdChjYXRlZ29yeVZhbHVlKS4kcGFyZW50ID0gY2F0ZWdvcnk7XG5cbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWU7XG5cbn0iLCIvKipcbiAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBhIHZlY3RvclxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHJldHVybiB7RmxvYXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JMZW5ndGgodikge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHYueCwgMikgKyBNYXRoLnBvdyh2LnksIDIpKTtcbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFuZ2xlIGJldHdlZW4gYSBsaW5lIGEgdGhlIHlBeGlzXG4gKlxuICogQHBhcmFtIHtBcnJheX1cbiAqIEByZXR1cm4ge0Zsb2F0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5nbGUobGluZSkge1xuXG4gIC8vIHJldHVybiB2YWx1ZSBpcyBiZXR3ZWVuIDAsIDE4MCBhbmQgLTE4MCwgLTBcbiAgLy8gQGphbnN0dWVtbWVsOiBtYXliZSByZXBsYWNlIHJldHVybiBhL2Igd2l0aCBiL2FcbiAgcmV0dXJuIE1hdGguYXRhbigobGluZVsxXS55IC0gbGluZVswXS55KSAvIChsaW5lWzFdLnggLSBsaW5lWzBdLngpKTtcbn1cblxuXG4vKipcbiAqIFJvdGF0ZXMgYSB2ZWN0b3IgYnkgYSBnaXZlbiBhbmdsZVxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHBhcmFtIHtGbG9hdH0gQW5nbGUgaW4gcmFkaWFuc1xuICogQHJldHVybiB7VmVjdG9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yKHZlY3RvciwgYW5nbGUpIHtcbiAgcmV0dXJuICghYW5nbGUpID8gdmVjdG9yIDoge1xuICAgIHg6IE1hdGguY29zKGFuZ2xlKSAqIHZlY3Rvci54IC0gTWF0aC5zaW4oYW5nbGUpICogdmVjdG9yLnksXG4gICAgeTogTWF0aC5zaW4oYW5nbGUpICogdmVjdG9yLnggKyBNYXRoLmNvcyhhbmdsZSkgKiB2ZWN0b3IueVxuICB9O1xufVxuXG5cbi8qKlxuICogU29sdmVzIGEgMkQgZXF1YXRpb24gc3lzdGVtXG4gKiBhICsgcipiID0gYywgd2hlcmUgYSxiLGMgYXJlIDJEIHZlY3RvcnNcbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn1cbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHBhcmFtIHtWZWN0b3J9XG4gKiBAcmV0dXJuIHtGbG9hdH1cbiAqL1xuZnVuY3Rpb24gc29sdmVMYW1iYVN5c3RlbShhLCBiLCBjKSB7XG5cbiAgLy8gdGhlIDJkIHN5c3RlbVxuICB2YXIgc3lzdGVtID0gW1xuICAgIHsgbjogYVswXSAtIGNbMF0sIGxhbWJkYTogYlswXSB9LFxuICAgIHsgbjogYVsxXSAtIGNbMV0sIGxhbWJkYTogYlsxXSB9XG4gIF07XG5cbiAgLy8gc29sdmVcbiAgdmFyIG4gPSBzeXN0ZW1bMF0ubiAqIGJbMF0gKyBzeXN0ZW1bMV0ubiAqIGJbMV0sXG4gICAgICBsID0gc3lzdGVtWzBdLmxhbWJkYSAqIGJbMF0gKyBzeXN0ZW1bMV0ubGFtYmRhICogYlsxXTtcblxuICByZXR1cm4gLW4vbDtcbn1cblxuXG4vKipcbiAqIFBvc2l0aW9uIG9mIHBlcnBlbmRpY3VsYXIgZm9vdFxuICpcbiAqIEBwYXJhbSB7UG9pbnR9XG4gKiBAcGFyYW0gWyB7UG9pbnR9LCB7UG9pbnR9IF0gbGluZSBkZWZpbmVkIHRocm91Z2ggdHdvIHBvaW50c1xuICogQHJldHVybiB7UG9pbnR9IHRoZSBwZXJwZW5kaWN1bGFyIGZvb3QgcG9zaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcnBlbmRpY3VsYXJGb290KHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIGEgPSBsaW5lWzBdLCBiID0gbGluZVsxXTtcblxuICAvLyByZWxhdGl2ZSBwb3NpdGlvbiBvZiBiIGZyb20gYVxuICB2YXIgYmQgPSB7IHg6IGIueCAtIGEueCwgeTogYi55IC0gYS55IH07XG5cbiAgLy8gc29sdmUgZXF1YXRpb24gc3lzdGVtIHRvIHRoZSBwYXJhbWV0cml6ZWQgdmVjdG9ycyBwYXJhbSByZWFsIHZhbHVlXG4gIHZhciByID0gc29sdmVMYW1iYVN5c3RlbShbIGEueCwgYS55IF0sIFsgYmQueCwgYmQueSBdLCBbIHBvaW50LngsIHBvaW50LnkgXSk7XG5cbiAgcmV0dXJuIHsgeDogYS54ICsgcipiZC54LCB5OiBhLnkgKyByKmJkLnkgfTtcbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCBhbmQgYSBsaW5lXG4gKlxuICogQHBhcmFtIHtQb2ludH1cbiAqIEBwYXJhbSBbIHtQb2ludH0sIHtQb2ludH0gXSBsaW5lIGRlZmluZWQgdGhyb3VnaCB0d28gcG9pbnRzXG4gKiBAcmV0dXJuIHtGbG9hdH0gZGlzdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlUG9pbnRMaW5lKHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIHBmUG9pbnQgPSBwZXJwZW5kaWN1bGFyRm9vdChwb2ludCwgbGluZSk7XG5cbiAgLy8gZGlzdGFuY2UgdmVjdG9yXG4gIHZhciBjb25uZWN0aW9uVmVjdG9yID0ge1xuICAgIHg6IHBmUG9pbnQueCAtIHBvaW50LngsXG4gICAgeTogcGZQb2ludC55IC0gcG9pbnQueVxuICB9O1xuXG4gIHJldHVybiB2ZWN0b3JMZW5ndGgoY29ubmVjdGlvblZlY3Rvcik7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqXG4gKiBAcGFyYW0ge1BvaW50fVxuICogQHBhcmFtIHtQb2ludH1cbiAqIEByZXR1cm4ge0Zsb2F0fSBkaXN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VQb2ludFBvaW50KHBvaW50MSwgcG9pbnQyKSB7XG5cbiAgcmV0dXJuIHZlY3Rvckxlbmd0aCh7XG4gICAgeDogcG9pbnQxLnggLSBwb2ludDIueCxcbiAgICB5OiBwb2ludDEueSAtIHBvaW50Mi55XG4gIH0pO1xufSIsImltcG9ydCB7XG4gIGdldERpc3RhbmNlUG9pbnRQb2ludCxcbiAgcm90YXRlVmVjdG9yLFxuICBnZXRBbmdsZVxufSBmcm9tICcuL0dlb21ldHJpY1V0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRBdHRhY2htZW50XG59IGZyb20gJy4vTGluZUF0dGFjaG1lbnRVdGlsJztcblxuaW1wb3J0IHtcbiAgcm91bmRQb2ludFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdMYWJlbExpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cykge1xuXG4gIHZhciBpbmRleCA9IGF0dGFjaG1lbnQuc2VnbWVudEluZGV4O1xuXG4gIHZhciBvZmZzZXQgPSBuZXdXYXlwb2ludHMubGVuZ3RoIC0gb2xkV2F5cG9pbnRzLmxlbmd0aDtcblxuICAvLyBzZWdtZW50TW92ZSBoYXBwZW5lZFxuICBpZiAoaGludHMuc2VnbWVudE1vdmUpIHtcblxuICAgIHZhciBvbGRTZWdtZW50U3RhcnRJbmRleCA9IGhpbnRzLnNlZ21lbnRNb3ZlLnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBuZXdTZWdtZW50U3RhcnRJbmRleCA9IGhpbnRzLnNlZ21lbnRNb3ZlLm5ld1NlZ21lbnRTdGFydEluZGV4O1xuXG4gICAgLy8gaWYgbGFiZWwgd2FzIG9uIG1vdmVkIHNlZ21lbnQgcmV0dXJuIG5ldyBzZWdtZW50IGluZGV4XG4gICAgaWYgKGluZGV4ID09PSBvbGRTZWdtZW50U3RhcnRJbmRleCkge1xuICAgICAgcmV0dXJuIG5ld1NlZ21lbnRTdGFydEluZGV4O1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGlzIGFmdGVyIG5ldyBzZWdtZW50IGluZGV4XG4gICAgaWYgKGluZGV4ID49IG5ld1NlZ21lbnRTdGFydEluZGV4KSB7XG4gICAgICByZXR1cm4gKGluZGV4K29mZnNldCA8IG5ld1NlZ21lbnRTdGFydEluZGV4KSA/IG5ld1NlZ21lbnRTdGFydEluZGV4IDogaW5kZXgrb2Zmc2V0O1xuICAgIH1cblxuICAgIC8vIGlmIGxhYmVsIGlzIGJlZm9yZSBuZXcgc2VnbWVudCBpbmRleFxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8vIGJlbmRwb2ludE1vdmUgaGFwcGVuZWRcbiAgaWYgKGhpbnRzLmJlbmRwb2ludE1vdmUpIHtcblxuICAgIHZhciBpbnNlcnQgPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmluc2VydCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmJlbmRwb2ludEluZGV4LFxuICAgICAgICBuZXdJbmRleDtcblxuICAgIC8vIHdheXBvaW50cyBsZW5ndGggZGlkbnQgY2hhbmdlXG4gICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGJlaGluZCBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPj0gYmVuZHBvaW50SW5kZXgpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5zZXJ0ID8gaW5kZXggKyAxIDogaW5kZXggLSAxO1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGJlZm9yZSBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPCBiZW5kcG9pbnRJbmRleCkge1xuXG4gICAgICBuZXdJbmRleCA9IGluZGV4O1xuXG4gICAgICAvLyBkZWNpZGUgbGFiZWwgc2hvdWxkIHRha2UgcmlnaHQgb3IgbGVmdCBzZWdtZW50XG4gICAgICBpZiAoaW5zZXJ0ICYmIGF0dGFjaG1lbnQudHlwZSAhPT0gJ2JlbmRwb2ludCcgJiYgYmVuZHBvaW50SW5kZXgtMSA9PT0gaW5kZXgpIHtcblxuICAgICAgICB2YXIgcmVsID0gcmVsYXRpdmVQb3NpdGlvbk1pZFdheXBvaW50KG5ld1dheXBvaW50cywgYmVuZHBvaW50SW5kZXgpO1xuXG4gICAgICAgIGlmIChyZWwgPCBhdHRhY2htZW50LnJlbGF0aXZlTG9jYXRpb24pIHtcbiAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0luZGV4O1xuICB9XG5cbiAgLy8gc3RhcnQvZW5kIGNoYW5nZWRcbiAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGlmIChoaW50cy5jb25uZWN0aW9uU3RhcnQpIHtcbiAgICByZXR1cm4gKGluZGV4ID09PSAwKSA/IDAgOiBudWxsO1xuICB9XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25FbmQpIHtcbiAgICByZXR1cm4gKGluZGV4ID09PSBvbGRXYXlwb2ludHMubGVuZ3RoIC0gMikgPyBuZXdXYXlwb2ludHMubGVuZ3RoIC0gMiA6IG51bGw7XG4gIH1cblxuICAvLyBpZiBub3RoaW5nIGZpdHMsIHJldHVybiBudWxsXG4gIHJldHVybiBudWxsO1xufVxuXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSByZXF1aXJlZCBhZGp1c3RtZW50IChtb3ZlIGRlbHRhKSBmb3IgdGhlIGdpdmVuIGxhYmVsXG4gKiBhZnRlciB0aGUgY29ubmVjdGlvbiB3YXlwb2ludHMgZ290IHVwZGF0ZWQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuTGFiZWx9IGxhYmVsXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbmV3V2F5cG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gb2xkV2F5cG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH0gZGVsdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsQWRqdXN0bWVudChsYWJlbCwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKSB7XG5cbiAgdmFyIHggPSAwLFxuICAgICAgeSA9IDA7XG5cbiAgdmFyIGxhYmVsUG9zaXRpb24gPSBnZXRMYWJlbE1pZChsYWJlbCk7XG5cbiAgLy8gZ2V0IGNsb3Nlc3QgYXR0YWNobWVudFxuICB2YXIgYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQobGFiZWxQb3NpdGlvbiwgb2xkV2F5cG9pbnRzKSxcbiAgICAgIG9sZExhYmVsTGluZUluZGV4ID0gYXR0YWNobWVudC5zZWdtZW50SW5kZXgsXG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA9IGZpbmROZXdMYWJlbExpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cyk7XG5cbiAgaWYgKG5ld0xhYmVsTGluZUluZGV4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG5cbiAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICAvLyBUT0RPKEBqYW5zdHVlbW1lbCk6IHRocm93IGFuIGVycm9yIGhlcmUgd2hlbiBjb25uZWN0aW9uU2VnbWVudE1vdmUgaXMgcmVmYWN0b3JlZFxuICBpZiAobmV3TGFiZWxMaW5lSW5kZXggPCAwIHx8XG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA+IG5ld1dheXBvaW50cy5sZW5ndGggLSAyKSB7XG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG5cbiAgdmFyIG9sZExhYmVsTGluZSA9IGdldExpbmUob2xkV2F5cG9pbnRzLCBvbGRMYWJlbExpbmVJbmRleCksXG4gICAgICBuZXdMYWJlbExpbmUgPSBnZXRMaW5lKG5ld1dheXBvaW50cywgbmV3TGFiZWxMaW5lSW5kZXgpLFxuICAgICAgb2xkRm9vdCA9IGF0dGFjaG1lbnQucG9zaXRpb247XG5cbiAgdmFyIHJlbGF0aXZlRm9vdFBvc2l0aW9uID0gZ2V0UmVsYXRpdmVGb290UG9zaXRpb24ob2xkTGFiZWxMaW5lLCBvbGRGb290KSxcbiAgICAgIGFuZ2xlRGVsdGEgPSBnZXRBbmdsZURlbHRhKG9sZExhYmVsTGluZSwgbmV3TGFiZWxMaW5lKTtcblxuICAvLyBzcGVjaWFsIHJ1bGUgaWYgbGFiZWwgb24gYmVuZHBvaW50XG4gIGlmIChhdHRhY2htZW50LnR5cGUgPT09ICdiZW5kcG9pbnQnKSB7XG5cbiAgICB2YXIgb2Zmc2V0ID0gbmV3V2F5cG9pbnRzLmxlbmd0aCAtIG9sZFdheXBvaW50cy5sZW5ndGgsXG4gICAgICAgIG9sZEJlbmRwb2ludEluZGV4ID0gYXR0YWNobWVudC5iZW5kcG9pbnRJbmRleCxcbiAgICAgICAgb2xkQmVuZHBvaW50ID0gb2xkV2F5cG9pbnRzW29sZEJlbmRwb2ludEluZGV4XTtcblxuICAgIC8vIGJlbmRwb2ludCBwb3NpdGlvbiBoYXNuJ3QgY2hhbmdlZCwgcmV0dXJuIHNhbWUgcG9zaXRpb25cbiAgICBpZiAobmV3V2F5cG9pbnRzLmluZGV4T2Yob2xkQmVuZHBvaW50KSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgICB9XG5cbiAgICAvLyBuZXcgYmVuZHBvaW50IGFuZCBvbGQgYmVuZHBvaW50IGhhdmUgc2FtZSBpbmRleCwgdGhlbiBqdXN0IHJldHVybiB0aGUgb2Zmc2V0XG4gICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgdmFyIG5ld0JlbmRwb2ludCA9IG5ld1dheXBvaW50c1tvbGRCZW5kcG9pbnRJbmRleF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IG5ld0JlbmRwb2ludC54IC0gYXR0YWNobWVudC5wb3NpdGlvbi54LFxuICAgICAgICB5OiBuZXdCZW5kcG9pbnQueSAtIGF0dGFjaG1lbnQucG9zaXRpb24ueVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpZiBiZW5kcG9pbnRzIGdldCByZW1vdmVkXG4gICAgaWYgKG9mZnNldCA8IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggIT09IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggPCBvbGRXYXlwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgcmVsYXRpdmVGb290UG9zaXRpb24gPSByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQob2xkV2F5cG9pbnRzLCBvbGRCZW5kcG9pbnRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0Zvb3QgPSB7XG4gICAgeDogKG5ld0xhYmVsTGluZVsxXS54IC0gbmV3TGFiZWxMaW5lWzBdLngpICogcmVsYXRpdmVGb290UG9zaXRpb24gKyBuZXdMYWJlbExpbmVbMF0ueCxcbiAgICB5OiAobmV3TGFiZWxMaW5lWzFdLnkgLSBuZXdMYWJlbExpbmVbMF0ueSkgKiByZWxhdGl2ZUZvb3RQb3NpdGlvbiArIG5ld0xhYmVsTGluZVswXS55XG4gIH07XG5cbiAgLy8gdGhlIHJvdGF0ZWQgdmVjdG9yIHRvIGxhYmVsXG4gIHZhciBuZXdMYWJlbFZlY3RvciA9IHJvdGF0ZVZlY3Rvcih7XG4gICAgeDogbGFiZWxQb3NpdGlvbi54IC0gb2xkRm9vdC54LFxuICAgIHk6IGxhYmVsUG9zaXRpb24ueSAtIG9sZEZvb3QueVxuICB9LCBhbmdsZURlbHRhKTtcblxuICAvLyB0aGUgbmV3IHJlbGF0aXZlIHBvc2l0aW9uXG4gIHggPSBuZXdGb290LnggKyBuZXdMYWJlbFZlY3Rvci54IC0gbGFiZWxQb3NpdGlvbi54O1xuICB5ID0gbmV3Rm9vdC55ICsgbmV3TGFiZWxWZWN0b3IueSAtIGxhYmVsUG9zaXRpb24ueTtcblxuICByZXR1cm4gcm91bmRQb2ludCh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pO1xufVxuXG5cbi8vIEhFTFBFUlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQod2F5cG9pbnRzLCBpZHgpIHtcblxuICB2YXIgZGlzdGFuY2VTZWdtZW50MSA9IGdldERpc3RhbmNlUG9pbnRQb2ludCh3YXlwb2ludHNbaWR4LTFdLCB3YXlwb2ludHNbaWR4XSksXG4gICAgICBkaXN0YW5jZVNlZ21lbnQyID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KHdheXBvaW50c1tpZHhdLCB3YXlwb2ludHNbaWR4KzFdKTtcblxuICB2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IGRpc3RhbmNlU2VnbWVudDEgLyAoZGlzdGFuY2VTZWdtZW50MSArIGRpc3RhbmNlU2VnbWVudDIpO1xuXG4gIHJldHVybiByZWxhdGl2ZVBvc2l0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRMYWJlbE1pZChsYWJlbCkge1xuICByZXR1cm4ge1xuICAgIHg6IGxhYmVsLnggKyBsYWJlbC53aWR0aCAvIDIsXG4gICAgeTogbGFiZWwueSArIGxhYmVsLmhlaWdodCAvIDJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5nbGVEZWx0YShsMSwgbDIpIHtcbiAgdmFyIGExID0gZ2V0QW5nbGUobDEpLFxuICAgICAgYTIgPSBnZXRBbmdsZShsMik7XG4gIHJldHVybiBhMiAtIGExO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lKHdheXBvaW50cywgaWR4KSB7XG4gIHJldHVybiBbIHdheXBvaW50c1tpZHhdLCB3YXlwb2ludHNbaWR4KzFdIF07XG59XG5cbmZ1bmN0aW9uIGdldFJlbGF0aXZlRm9vdFBvc2l0aW9uKGxpbmUsIGZvb3QpIHtcblxuICB2YXIgbGVuZ3RoID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KGxpbmVbMF0sIGxpbmVbMV0pLFxuICAgICAgbGVuZ3RoVG9Gb290ID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KGxpbmVbMF0sIGZvb3QpO1xuXG4gIHJldHVybiBsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoVG9Gb290IC8gbGVuZ3RoO1xufVxuIiwidmFyIHNxcnQgPSBNYXRoLnNxcnQsXG4gICAgbWluID0gTWF0aC5taW4sXG4gICAgbWF4ID0gTWF0aC5tYXgsXG4gICAgYWJzID0gTWF0aC5hYnM7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgKHBvd2VyIHRvIHR3bykgb2YgYSBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNxKG4pIHtcbiAgcmV0dXJuIE1hdGgucG93KG4sIDIpO1xufVxuXG4vKipcbiAqIEdldCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcDFcbiAqIEBwYXJhbSB7UG9pbnR9IHAyXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIHNxcnQoc3EocDEueCAtIHAyLngpICsgc3EocDEueSAtIHAyLnkpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGF0dGFjaG1lbnQgb2YgdGhlIGdpdmVuIHBvaW50IG9uIHRoZSBzcGVjaWZpZWQgbGluZS5cbiAqXG4gKiBUaGUgYXR0YWNobWVudCBpcyBlaXRoZXIgYSBiZW5kcG9pbnQgKGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBwb2ludClcbiAqIG9yIHNlZ21lbnQgKGF0dGFjaGVkIHRvIGEgbG9jYXRpb24gb24gYSBsaW5lIHNlZ21lbnQpIGF0dGFjaG1lbnQ6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIHBvaW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ2JlbmRwb2ludCcsXG4gKiAgIGJlbmRwb2ludEluZGV4OiAzLFxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICpcbiAqIHZhciBzZWdtZW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ3NlZ21lbnQnLFxuICogICBzZWdtZW50SW5kZXg6IDIsXG4gKiAgIHJlbGF0aXZlTG9jYXRpb246IDAuMzEsIC8vIGF0dGFjaCBwb2ludCBsb2NhdGlvbiBiZXR3ZWVuIDAgKGF0IHN0YXJ0KSBhbmQgMSAoYXQgZW5kKVxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBsaW5lXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhdHRhY2htZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRhY2htZW50KHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIGlkeCA9IDAsXG4gICAgICBzZWdtZW50U3RhcnQsXG4gICAgICBzZWdtZW50RW5kLFxuICAgICAgc2VnbWVudFN0YXJ0RGlzdGFuY2UsXG4gICAgICBzZWdtZW50RW5kRGlzdGFuY2UsXG4gICAgICBhdHRhY2htZW50UG9zaXRpb24sXG4gICAgICBtaW5EaXN0YW5jZSxcbiAgICAgIGludGVyc2VjdGlvbnMsXG4gICAgICBhdHRhY2htZW50LFxuICAgICAgYXR0YWNobWVudERpc3RhbmNlLFxuICAgICAgY2xvc2VzdEF0dGFjaG1lbnREaXN0YW5jZSxcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50O1xuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbGluZS5sZW5ndGggLSAxOyBpZHgrKykge1xuXG4gICAgc2VnbWVudFN0YXJ0ID0gbGluZVtpZHhdO1xuICAgIHNlZ21lbnRFbmQgPSBsaW5lW2lkeCArIDFdO1xuXG4gICAgaWYgKHBvaW50c0VxdWFsKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkpIHtcbiAgICAgIGludGVyc2VjdGlvbnMgPSBbIHNlZ21lbnRTdGFydCBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWdtZW50U3RhcnREaXN0YW5jZSA9IGdldERpc3RhbmNlKHBvaW50LCBzZWdtZW50U3RhcnQpO1xuICAgICAgc2VnbWVudEVuZERpc3RhbmNlID0gZ2V0RGlzdGFuY2UocG9pbnQsIHNlZ21lbnRFbmQpO1xuXG4gICAgICBtaW5EaXN0YW5jZSA9IG1pbihzZWdtZW50U3RhcnREaXN0YW5jZSwgc2VnbWVudEVuZERpc3RhbmNlKTtcblxuICAgICAgaW50ZXJzZWN0aW9ucyA9IGdldENpcmNsZVNlZ21lbnRJbnRlcnNlY3Rpb25zKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgcG9pbnQsIG1pbkRpc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGJldHdlZW4gWzEsIDJdIGNpcmNsZSAtPiBsaW5lIGludGVyc2VjdGlvbnMnKTtcbiAgICB9XG5cbiAgICAvLyBvbmUgaW50ZXJzZWN0aW9uIC0+IGJlbmRwb2ludCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBhdHRhY2htZW50ID0ge1xuICAgICAgICB0eXBlOiAnYmVuZHBvaW50JyxcbiAgICAgICAgcG9zaXRpb246IGludGVyc2VjdGlvbnNbMF0sXG4gICAgICAgIHNlZ21lbnRJbmRleDogaWR4LFxuICAgICAgICBiZW5kcG9pbnRJbmRleDogcG9pbnRzRXF1YWwoc2VnbWVudFN0YXJ0LCBpbnRlcnNlY3Rpb25zWzBdKSA/IGlkeCA6IGlkeCArIDFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdHdvIGludGVyc2VjdGlvbnMgLT4gc2VnbWVudCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAyKSB7XG5cbiAgICAgIGF0dGFjaG1lbnRQb3NpdGlvbiA9IG1pZChpbnRlcnNlY3Rpb25zWzBdLCBpbnRlcnNlY3Rpb25zWzFdKTtcblxuICAgICAgYXR0YWNobWVudCA9IHtcbiAgICAgICAgdHlwZTogJ3NlZ21lbnQnLFxuICAgICAgICBwb3NpdGlvbjogYXR0YWNobWVudFBvc2l0aW9uLFxuICAgICAgICBzZWdtZW50SW5kZXg6IGlkeCxcbiAgICAgICAgcmVsYXRpdmVMb2NhdGlvbjogZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBhdHRhY2htZW50UG9zaXRpb24pIC8gZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhdHRhY2htZW50RGlzdGFuY2UgPSBnZXREaXN0YW5jZShhdHRhY2htZW50LnBvc2l0aW9uLCBwb2ludCk7XG5cbiAgICBpZiAoIWNsb3Nlc3RBdHRhY2htZW50IHx8IGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPiBhdHRhY2htZW50RGlzdGFuY2UpIHtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50ID0gYXR0YWNobWVudDtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPSBhdHRhY2htZW50RGlzdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsb3Nlc3RBdHRhY2htZW50O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIGEgY2lyY2xlIGFuZCBhIGxpbmUgc2VnbWVudC5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBzMSBzZWdtZW50IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBzMiBzZWdtZW50IGVuZFxuICogQHBhcmFtIHtQb2ludH0gY2MgY2lyY2xlIGNlbnRlclxuICogQHBhcmFtIHtudW1iZXJ9IGNyIGNpcmNsZSByYWRpdXNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IGludGVyc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0Q2lyY2xlU2VnbWVudEludGVyc2VjdGlvbnMoczEsIHMyLCBjYywgY3IpIHtcblxuICB2YXIgYmFYID0gczIueCAtIHMxLng7XG4gIHZhciBiYVkgPSBzMi55IC0gczEueTtcbiAgdmFyIGNhWCA9IGNjLnggLSBzMS54O1xuICB2YXIgY2FZID0gY2MueSAtIHMxLnk7XG5cbiAgdmFyIGEgPSBiYVggKiBiYVggKyBiYVkgKiBiYVk7XG4gIHZhciBiQnkyID0gYmFYICogY2FYICsgYmFZICogY2FZO1xuICB2YXIgYyA9IGNhWCAqIGNhWCArIGNhWSAqIGNhWSAtIGNyICogY3I7XG5cbiAgdmFyIHBCeTIgPSBiQnkyIC8gYTtcbiAgdmFyIHEgPSBjIC8gYTtcblxuICB2YXIgZGlzYyA9IHBCeTIgKiBwQnkyIC0gcTtcblxuICAvLyBjaGVjayBhZ2FpbnN0IG5lZ2F0aXZlIHZhbHVlIHRvIHdvcmsgYXJvdW5kXG4gIC8vIG5lZ2F0aXZlLCB2ZXJ5IGNsb3NlIHRvIHplcm8gcmVzdWx0cyAoLTRlLTE1KVxuICAvLyBiZWluZyBwcm9kdWNlZCBpbiBzb21lIGVudmlyb25tZW50c1xuICBpZiAoZGlzYyA8IDAgJiYgZGlzYyA+IC0wLjAwMDAwMSkge1xuICAgIGRpc2MgPSAwO1xuICB9XG5cbiAgaWYgKGRpc2MgPCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gaWYgZGlzYyA9PSAwIC4uLiBkZWFsdCB3aXRoIGxhdGVyXG4gIHZhciB0bXBTcXJ0ID0gc3FydChkaXNjKTtcbiAgdmFyIGFiU2NhbGluZ0ZhY3RvcjEgPSAtcEJ5MiArIHRtcFNxcnQ7XG4gIHZhciBhYlNjYWxpbmdGYWN0b3IyID0gLXBCeTIgLSB0bXBTcXJ0O1xuXG4gIHZhciBpMSA9IHtcbiAgICB4OiBzMS54IC0gYmFYICogYWJTY2FsaW5nRmFjdG9yMSxcbiAgICB5OiBzMS55IC0gYmFZICogYWJTY2FsaW5nRmFjdG9yMVxuICB9O1xuXG4gIGlmIChkaXNjID09PSAwKSB7IC8vIGFiU2NhbGluZ0ZhY3RvcjEgPT0gYWJTY2FsaW5nRmFjdG9yMlxuICAgIHJldHVybiBbIGkxIF07XG4gIH1cblxuICB2YXIgaTIgPSB7XG4gICAgeDogczEueCAtIGJhWCAqIGFiU2NhbGluZ0ZhY3RvcjIsXG4gICAgeTogczEueSAtIGJhWSAqIGFiU2NhbGluZ0ZhY3RvcjJcbiAgfTtcblxuICAvLyByZXR1cm4gb25seSBwb2ludHMgb24gbGluZSBzZWdtZW50XG4gIHJldHVybiBbIGkxLCBpMiBdLmZpbHRlcihmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIGlzUG9pbnRJblNlZ21lbnQocCwgczEsIHMyKTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gaXNQb2ludEluU2VnbWVudChwLCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpIHtcbiAgcmV0dXJuIChcbiAgICBmZW5jZWQocC54LCBzZWdtZW50U3RhcnQueCwgc2VnbWVudEVuZC54KSAmJlxuICAgIGZlbmNlZChwLnksIHNlZ21lbnRTdGFydC55LCBzZWdtZW50RW5kLnkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZlbmNlZChuLCByYW5nZVN0YXJ0LCByYW5nZUVuZCkge1xuXG4gIC8vIHVzZSBtYXRjaGluZyB0aHJlc2hvbGQgdG8gd29yayBhcm91bmRcbiAgLy8gcHJlY2lzaW9uIGVycm9ycyBpbiBpbnRlcnNlY3Rpb24gY29tcHV0YXRpb25cblxuICByZXR1cm4gKFxuICAgIG4gPj0gbWluKHJhbmdlU3RhcnQsIHJhbmdlRW5kKSAtIEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIG4gPD0gbWF4KHJhbmdlU3RhcnQsIHJhbmdlRW5kKSArIEVRVUFMX1RIUkVTSE9MRFxuICApO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBtaWQgb2YgdHdvIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwMVxuICogQHBhcmFtIHtQb2ludH0gcDJcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZnVuY3Rpb24gbWlkKHAxLCBwMikge1xuXG4gIHJldHVybiB7XG4gICAgeDogKHAxLnggKyBwMi54KSAvIDIsXG4gICAgeTogKHAxLnkgKyBwMi55KSAvIDJcbiAgfTtcbn1cblxudmFyIEVRVUFMX1RIUkVTSE9MRCA9IDAuMTtcblxuZnVuY3Rpb24gcG9pbnRzRXF1YWwocDEsIHAyKSB7XG5cbiAgcmV0dXJuIChcbiAgICBhYnMocDEueCAtIHAyLngpIDw9IEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIGFicyhwMS55IC0gcDIueSkgPD0gRVFVQUxfVEhSRVNIT0xEXG4gICk7XG59XG4iLCIvKipcbiAqIFJldHVybnMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byBsaW5lIHNlZ21lbnRzIGEgYW5kIGIuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gbDFzXG4gKiBAcGFyYW0ge1BvaW50fSBsMWVcbiAqIEBwYXJhbSB7UG9pbnR9IGwyc1xuICogQHBhcmFtIHtQb2ludH0gbDJlXG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpbmVJbnRlcnNlY3QobDFzLCBsMWUsIGwycywgbDJlKSB7XG5cbiAgLy8gaWYgdGhlIGxpbmVzIGludGVyc2VjdCwgdGhlIHJlc3VsdCBjb250YWlucyB0aGUgeCBhbmQgeSBvZiB0aGVcbiAgLy8gaW50ZXJzZWN0aW9uICh0cmVhdGluZyB0aGUgbGluZXMgYXMgaW5maW5pdGUpIGFuZCBib29sZWFucyBmb3JcbiAgLy8gd2hldGhlciBsaW5lIHNlZ21lbnQgMSBvciBsaW5lIHNlZ21lbnQgMiBjb250YWluIHRoZSBwb2ludFxuICB2YXIgZGVub21pbmF0b3IsIGEsIGIsIGMsIG51bWVyYXRvcjtcblxuICBkZW5vbWluYXRvciA9ICgobDJlLnkgLSBsMnMueSkgKiAobDFlLnggLSBsMXMueCkpIC0gKChsMmUueCAtIGwycy54KSAqIChsMWUueSAtIGwxcy55KSk7XG5cbiAgaWYgKGRlbm9taW5hdG9yID09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGEgPSBsMXMueSAtIGwycy55O1xuICBiID0gbDFzLnggLSBsMnMueDtcbiAgbnVtZXJhdG9yID0gKChsMmUueCAtIGwycy54KSAqIGEpIC0gKChsMmUueSAtIGwycy55KSAqIGIpO1xuXG4gIGMgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjtcblxuICAvLyBpZiB3ZSBjYXN0IHRoZXNlIGxpbmVzIGluZmluaXRlbHkgaW5cbiAgLy8gYm90aCBkaXJlY3Rpb25zLCB0aGV5IGludGVyc2VjdCBoZXJlXG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChsMXMueCArIChjICogKGwxZS54IC0gbDFzLngpKSksXG4gICAgeTogTWF0aC5yb3VuZChsMXMueSArIChjICogKGwxZS55IC0gbDFzLnkpKSlcbiAgfTtcbn0iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNUUkJMXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBjb2xsZWN0TGFuZXMsXHJcbiAgZ2V0TGFuZXNSb290XHJcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxpbmcvdXRpbC9MYW5lVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBMQU5FX01JTl9ESU1FTlNJT05TIH0gZnJvbSAnLi4vUmVzaXplQmVoYXZpb3InO1xyXG5cclxudmFyIGFicyA9IE1hdGguYWJzLFxyXG4gICAgbWluID0gTWF0aC5taW4sXHJcbiAgICBtYXggPSBNYXRoLm1heDtcclxuXHJcblxyXG5mdW5jdGlvbiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIGNob2ljZSkge1xyXG4gIHZhciBjdXJyZW50ID0gdHJibFthdHRyXTtcclxuXHJcbiAgLy8gbWFrZSBzdXJlIHRvIHNldCB0aGUgdmFsdWUgaWYgaXQgZG9lcyBub3QgZXhpc3RcclxuICAvLyBvciBhcHBseSB0aGUgY29ycmVjdCB2YWx1ZSBieSBjb21wYXJpbmcgYWdhaW5zdFxyXG4gIC8vIGNob2ljZSh2YWx1ZSwgY3VycmVudFZhbHVlKVxyXG4gIHRyYmxbYXR0cl0gPSBjdXJyZW50ID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGNob2ljZSh2YWx1ZSwgY3VycmVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE1pbih0cmJsLCBhdHRyLCB2YWx1ZSkge1xyXG4gIHJldHVybiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIG1pbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE1heCh0cmJsLCBhdHRyLCB2YWx1ZSkge1xyXG4gIHJldHVybiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIG1heCk7XHJcbn1cclxuXHJcbnZhciBMQU5FX1JJR0hUX1BBRERJTkcgPSAyMCxcclxuICAgIExBTkVfTEVGVF9QQURESU5HID0gNTAsXHJcbiAgICBMQU5FX1RPUF9QQURESU5HID0gMjAsXHJcbiAgICBMQU5FX0JPVFRPTV9QQURESU5HID0gMjA7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50UmVzaXplQ29uc3RyYWludHMobGFuZVNoYXBlLCByZXNpemVEaXJlY3Rpb24sIGJhbGFuY2VkKSB7XHJcbiAgdmFyIGxhbmVzUm9vdCA9IGdldExhbmVzUm9vdChsYW5lU2hhcGUpO1xyXG5cclxuICB2YXIgaXNGaXJzdCA9IHRydWUsXHJcbiAgICAgIGlzTGFzdCA9IHRydWU7XHJcblxyXG4gIC8vIG1heCB0b3AvYm90dG9tIHNpemUgZm9yIGxhbmVzXHJcbiAgdmFyIGFsbExhbmVzID0gY29sbGVjdExhbmVzKGxhbmVzUm9vdCwgWyBsYW5lc1Jvb3QgXSk7XHJcblxyXG4gIHZhciBsYW5lVHJibCA9IGFzVFJCTChsYW5lU2hhcGUpO1xyXG5cclxuICB2YXIgbWF4VHJibCA9IHt9LFxyXG4gICAgICBtaW5UcmJsID0ge307XHJcblxyXG4gIGlmICgvZS8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICBtaW5UcmJsLnJpZ2h0ID0gbGFuZVRyYmwubGVmdCArIExBTkVfTUlOX0RJTUVOU0lPTlMud2lkdGg7XHJcbiAgfSBlbHNlXHJcbiAgaWYgKC93Ly50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgIG1pblRyYmwubGVmdCA9IGxhbmVUcmJsLnJpZ2h0IC0gTEFORV9NSU5fRElNRU5TSU9OUy53aWR0aDtcclxuICB9XHJcblxyXG4gIGFsbExhbmVzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHtcclxuXHJcbiAgICB2YXIgb3RoZXJUcmJsID0gYXNUUkJMKG90aGVyKTtcclxuXHJcbiAgICBpZiAoL24vLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xyXG5cclxuICAgICAgaWYgKG90aGVyVHJibC50b3AgPCAobGFuZVRyYmwudG9wIC0gMTApKSB7XHJcbiAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtYXggdG9wIHNpemUgKGJhc2VkIG9uIG5leHQgZWxlbWVudClcclxuICAgICAgaWYgKGJhbGFuY2VkICYmIGFicyhsYW5lVHJibC50b3AgLSBvdGhlclRyYmwuYm90dG9tKSA8IDEwKSB7XHJcbiAgICAgICAgYWRkTWF4KG1heFRyYmwsICd0b3AnLCBvdGhlclRyYmwudG9wICsgTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtaW4gdG9wIHNpemUgKGJhc2VkIG9uIHNlbGYgb3IgbmVzdGVkIGVsZW1lbnQpXHJcbiAgICAgIGlmIChhYnMobGFuZVRyYmwudG9wIC0gb3RoZXJUcmJsLnRvcCkgPCA1KSB7XHJcbiAgICAgICAgYWRkTWluKG1pblRyYmwsICd0b3AnLCBvdGhlclRyYmwuYm90dG9tIC0gTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9zLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuXHJcbiAgICAgIGlmIChvdGhlclRyYmwuYm90dG9tID4gKGxhbmVUcmJsLmJvdHRvbSArIDEwKSkge1xyXG4gICAgICAgIGlzTGFzdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtYXggYm90dG9tIHNpemUgKGJhc2VkIG9uIHByZXZpb3VzIGVsZW1lbnQpXHJcbiAgICAgIGlmIChiYWxhbmNlZCAmJiBhYnMobGFuZVRyYmwuYm90dG9tIC0gb3RoZXJUcmJsLnRvcCkgPCAxMCkge1xyXG4gICAgICAgIGFkZE1pbihtYXhUcmJsLCAnYm90dG9tJywgb3RoZXJUcmJsLmJvdHRvbSAtIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbWluIGJvdHRvbSBzaXplIChiYXNlZCBvbiBzZWxmIG9yIG5lc3RlZCBlbGVtZW50KVxyXG4gICAgICBpZiAoYWJzKGxhbmVUcmJsLmJvdHRvbSAtIG90aGVyVHJibC5ib3R0b20pIDwgNSkge1xyXG4gICAgICAgIGFkZE1heChtaW5UcmJsLCAnYm90dG9tJywgb3RoZXJUcmJsLnRvcCArIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBtYXggdG9wL2JvdHRvbS9sZWZ0L3JpZ2h0IHNpemUgYmFzZWQgb24gZmxvdyBub2Rlc1xyXG4gIHZhciBmbG93RWxlbWVudHMgPSBsYW5lc1Jvb3QuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKHMpIHtcclxuICAgIHJldHVybiAhcy5oaWRkZW4gJiYgIXMud2F5cG9pbnRzICYmIChpcyhzLCAnYnBtbjpGbG93RWxlbWVudCcpIHx8IGlzKHMsICdicG1uOkFydGlmYWN0JykpO1xyXG4gIH0pO1xyXG5cclxuICBmbG93RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihmbG93RWxlbWVudCkge1xyXG5cclxuICAgIHZhciBmbG93RWxlbWVudFRyYmwgPSBhc1RSQkwoZmxvd0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpc0ZpcnN0ICYmIC9uLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgICAgYWRkTWluKG1pblRyYmwsICd0b3AnLCBmbG93RWxlbWVudFRyYmwudG9wIC0gTEFORV9UT1BfUEFERElORyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9lLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgICAgYWRkTWF4KG1pblRyYmwsICdyaWdodCcsIGZsb3dFbGVtZW50VHJibC5yaWdodCArIExBTkVfUklHSFRfUEFERElORyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTGFzdCAmJiAvcy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1heChtaW5UcmJsLCAnYm90dG9tJywgZmxvd0VsZW1lbnRUcmJsLmJvdHRvbSArIExBTkVfQk9UVE9NX1BBRERJTkcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvdy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1pbihtaW5UcmJsLCAnbGVmdCcsIGZsb3dFbGVtZW50VHJibC5sZWZ0IC0gTEFORV9MRUZUX1BBRERJTkcpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbWluOiBtaW5UcmJsLFxyXG4gICAgbWF4OiBtYXhUcmJsXHJcbiAgfTtcclxufSIsImltcG9ydCB7XG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGVhY2hFbGVtZW50XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBnZXRMYW5lc1Jvb3QsXG4gIGdldENoaWxkTGFuZXMsXG4gIExBTkVfSU5ERU5UQVRJT05cbn0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBhbGxvd3MgdXMgdG8gYWRkIGEgbmV3IGxhbmVcbiAqIGFib3ZlIG9yIGJlbG93IGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTcGFjZVRvb2x9IHNwYWNlVG9vbFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGRMYW5lSGFuZGxlcihtb2RlbGluZywgc3BhY2VUb29sKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3NwYWNlVG9vbCA9IHNwYWNlVG9vbDtcbn1cblxuQWRkTGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3NwYWNlVG9vbCdcbl07XG5cblxuQWRkTGFuZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNwYWNlVG9vbCA9IHRoaXMuX3NwYWNlVG9vbCxcbiAgICAgIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGxvY2F0aW9uID0gY29udGV4dC5sb2NhdGlvbjtcblxuICB2YXIgbGFuZXNSb290ID0gZ2V0TGFuZXNSb290KHNoYXBlKTtcblxuICB2YXIgaXNSb290ID0gbGFuZXNSb290ID09PSBzaGFwZSxcbiAgICAgIGxhbmVQYXJlbnQgPSBpc1Jvb3QgPyBzaGFwZSA6IHNoYXBlLnBhcmVudDtcblxuICB2YXIgZXhpc3RpbmdDaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhsYW5lUGFyZW50KTtcblxuICAvLyAoMCkgYWRkIGEgbGFuZSBpZiB3ZSBjdXJyZW50bHkgZ290IG5vbmUgYW5kIGFyZSBhZGRpbmcgdG8gcm9vdFxuICBpZiAoIWV4aXN0aW5nQ2hpbGRMYW5lcy5sZW5ndGgpIHtcbiAgICBtb2RlbGluZy5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOkxhbmUnIH0sIHtcbiAgICAgIHg6IHNoYXBlLnggKyBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgeTogc2hhcGUueSxcbiAgICAgIHdpZHRoOiBzaGFwZS53aWR0aCAtIExBTkVfSU5ERU5UQVRJT04sXG4gICAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodFxuICAgIH0sIGxhbmVQYXJlbnQpO1xuICB9XG5cbiAgLy8gKDEpIGNvbGxlY3QgYWZmZWN0ZWQgZWxlbWVudHMgdG8gY3JlYXRlIG5lY2Vzc2FyeSBzcGFjZVxuICB2YXIgYWxsQWZmZWN0ZWQgPSBbXTtcblxuICBlYWNoRWxlbWVudChsYW5lc1Jvb3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBhbGxBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgLy8gaGFuZGxlIGVsZW1lbnQgbGFiZWxzIGluIHRoZSBkaWFncmFtIHJvb3RcbiAgICBpZiAoZWxlbWVudC5sYWJlbCkge1xuICAgICAgYWxsQWZmZWN0ZWQucHVzaChlbGVtZW50LmxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCA9PT0gc2hhcGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKGVsZW1lbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjICE9PSBzaGFwZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFyIG9mZnNldCA9IGxvY2F0aW9uID09PSAndG9wJyA/IC0xMjAgOiAxMjAsXG4gICAgICBsYW5lUG9zaXRpb24gPSBsb2NhdGlvbiA9PT0gJ3RvcCcgPyBzaGFwZS55IDogc2hhcGUueSArIHNoYXBlLmhlaWdodCxcbiAgICAgIHNwYWNlUG9zID0gbGFuZVBvc2l0aW9uICsgKGxvY2F0aW9uID09PSAndG9wJyA/IDEwIDogLTEwKSxcbiAgICAgIGRpcmVjdGlvbiA9IGxvY2F0aW9uID09PSAndG9wJyA/ICduJyA6ICdzJztcblxuICB2YXIgYWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoYWxsQWZmZWN0ZWQsICd5Jywgb2Zmc2V0LCBzcGFjZVBvcyk7XG5cbiAgc3BhY2VUb29sLm1ha2VTcGFjZShcbiAgICBhZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgYWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgeyB4OiAwLCB5OiBvZmZzZXQgfSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BhY2VQb3NcbiAgKTtcblxuICAvLyAoMikgY3JlYXRlIG5ldyBsYW5lIGF0IG9wZW4gc3BhY2VcbiAgY29udGV4dC5uZXdMYW5lID0gbW9kZWxpbmcuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpMYW5lJyB9LCB7XG4gICAgeDogc2hhcGUueCArIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgeTogbGFuZVBvc2l0aW9uIC0gKGxvY2F0aW9uID09PSAndG9wJyA/IDEyMCA6IDApLFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aCAtIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgaGVpZ2h0OiAxMjBcbiAgfSwgbGFuZVBhcmVudCk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSWRDbGFpbUhhbmRsZXIobW9kZGxlKSB7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcbn1cblxuSWRDbGFpbUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGRsZScgXTtcblxuXG5JZENsYWltSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGlkcyA9IHRoaXMuX21vZGRsZS5pZHMsXG4gICAgICBpZCA9IGNvbnRleHQuaWQsXG4gICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgY2xhaW1pbmcgPSBjb250ZXh0LmNsYWltaW5nO1xuXG4gIGlmIChjbGFpbWluZykge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWRzLnVuY2xhaW0oaWQpO1xuICB9XG59O1xuXG4vKipcbiAqIENvbW1hbmQgcmV2ZXJ0IGltcGxlbWVudGF0aW9uLlxuICovXG5JZENsYWltSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgaWRzID0gdGhpcy5fbW9kZGxlLmlkcyxcbiAgICAgIGlkID0gY29udGV4dC5pZCxcbiAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBjbGFpbWluZyA9IGNvbnRleHQuY2xhaW1pbmc7XG5cbiAgaWYgKGNsYWltaW5nKSB7XG4gICAgaWRzLnVuY2xhaW0oaWQpO1xuICB9IGVsc2Uge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudCk7XG4gIH1cbn07XG5cbiIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYW5lc1Jvb3QsXG4gIGNvbXB1dGVMYW5lc1Jlc2l6ZVxufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgZWFjaEVsZW1lbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIHN1YnN0cmFjdFRSQkxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZVV0aWwnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgcmVzaXplcyBhIGxhbmUuXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplTGFuZUhhbmRsZXIobW9kZWxpbmcsIHNwYWNlVG9vbCkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9zcGFjZVRvb2wgPSBzcGFjZVRvb2w7XG59XG5cblJlc2l6ZUxhbmVIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdtb2RlbGluZycsXG4gICdzcGFjZVRvb2wnXG5dO1xuXG5cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgIGJhbGFuY2VkID0gY29udGV4dC5iYWxhbmNlZDtcblxuICBpZiAoYmFsYW5jZWQgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5yZXNpemVCYWxhbmNlZChzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlc2l6ZVNwYWNlKHNoYXBlLCBuZXdCb3VuZHMpO1xuICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplIGJhbGFuY2VkLCBhZGp1c3RpbmcgbmV4dCAvIHByZXZpb3VzIGxhbmUgc2l6ZXMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKi9cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5yZXNpemVCYWxhbmNlZCA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgcmVzaXplTmVlZGVkID0gY29tcHV0ZUxhbmVzUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpO1xuXG4gIC8vIHJlc2l6ZSB0aGUgbGFuZVxuICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzKTtcblxuICAvLyByZXNpemUgb3RoZXIgbGFuZXMgYXMgbmVlZGVkXG4gIHJlc2l6ZU5lZWRlZC5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICBtb2RlbGluZy5yZXNpemVTaGFwZShyLnNoYXBlLCByLm5ld0JvdW5kcyk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlc2l6ZSwgbWFraW5nIGFjdHVhbCBzcGFjZSBhbmQgbW92aW5nIGJlbG93IC8gYWJvdmUgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKi9cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5yZXNpemVTcGFjZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMpIHtcbiAgdmFyIHNwYWNlVG9vbCA9IHRoaXMuX3NwYWNlVG9vbDtcblxuICB2YXIgc2hhcGVUcmJsID0gYXNUUkJMKHNoYXBlKSxcbiAgICAgIG5ld1RyYmwgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICB2YXIgdHJibERpZmYgPSBzdWJzdHJhY3RUUkJMKG5ld1RyYmwsIHNoYXBlVHJibCk7XG5cbiAgdmFyIGxhbmVzUm9vdCA9IGdldExhbmVzUm9vdChzaGFwZSk7XG5cbiAgdmFyIGFsbEFmZmVjdGVkID0gW10sXG4gICAgICBhbGxMYW5lcyA9IFtdO1xuXG4gIGVhY2hFbGVtZW50KGxhbmVzUm9vdCwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGFsbEFmZmVjdGVkLnB1c2goZWxlbWVudCk7XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGFsbExhbmVzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gIH0pO1xuXG4gIHZhciBjaGFuZ2UsXG4gICAgICBzcGFjZVBvcyxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIG9mZnNldCxcbiAgICAgIGFkanVzdG1lbnRzO1xuXG4gIGlmICh0cmJsRGlmZi5ib3R0b20gfHwgdHJibERpZmYudG9wKSB7XG5cbiAgICBjaGFuZ2UgPSB0cmJsRGlmZi5ib3R0b20gfHwgdHJibERpZmYudG9wO1xuICAgIHNwYWNlUG9zID0gc2hhcGUueSArICh0cmJsRGlmZi5ib3R0b20gPyBzaGFwZS5oZWlnaHQgOiAwKSArICh0cmJsRGlmZi5ib3R0b20gPyAtMTAgOiAxMCk7XG4gICAgZGlyZWN0aW9uID0gdHJibERpZmYuYm90dG9tID8gJ3MnIDogJ24nO1xuXG4gICAgb2Zmc2V0ID0gdHJibERpZmYudG9wID4gMCB8fCB0cmJsRGlmZi5ib3R0b20gPCAwID8gLWNoYW5nZSA6IGNoYW5nZTtcblxuICAgIGFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKGFsbEFmZmVjdGVkLCAneScsIG9mZnNldCwgc3BhY2VQb3MpO1xuXG4gICAgc3BhY2VUb29sLm1ha2VTcGFjZShhZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsIGFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLCB7IHg6IDAsIHk6IGNoYW5nZSB9LCBkaXJlY3Rpb24pO1xuICB9XG5cblxuICBpZiAodHJibERpZmYubGVmdCB8fCB0cmJsRGlmZi5yaWdodCkge1xuXG4gICAgY2hhbmdlID0gdHJibERpZmYucmlnaHQgfHwgdHJibERpZmYubGVmdDtcbiAgICBzcGFjZVBvcyA9IHNoYXBlLnggKyAodHJibERpZmYucmlnaHQgPyBzaGFwZS53aWR0aCA6IDApICsgKHRyYmxEaWZmLnJpZ2h0ID8gLTEwIDogMTAwKTtcbiAgICBkaXJlY3Rpb24gPSB0cmJsRGlmZi5yaWdodCA/ICdlJyA6ICd3JztcblxuICAgIG9mZnNldCA9IHRyYmxEaWZmLmxlZnQgPiAwIHx8IHRyYmxEaWZmLnJpZ2h0IDwgMCA/IC1jaGFuZ2UgOiBjaGFuZ2U7XG5cbiAgICBhZGp1c3RtZW50cyA9IHNwYWNlVG9vbC5jYWxjdWxhdGVBZGp1c3RtZW50cyhhbGxMYW5lcywgJ3gnLCBvZmZzZXQsIHNwYWNlUG9zKTtcblxuICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoYWRqdXN0bWVudHMubW92aW5nU2hhcGVzLCBhZGp1c3RtZW50cy5yZXNpemluZ1NoYXBlcywgeyB4OiBjaGFuZ2UsIHk6IDAgfSwgZGlyZWN0aW9uKTtcbiAgfVxufTsiLCJpbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBmb3JFYWNoXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuXHJcbnZhciBERUZBVUxUX0NPTE9SUyA9IHtcclxuICBmaWxsOiB1bmRlZmluZWQsXHJcbiAgc3Ryb2tlOiB1bmRlZmluZWRcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZXRDb2xvckhhbmRsZXIoY29tbWFuZFN0YWNrKSB7XHJcbiAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xyXG59XHJcblxyXG5TZXRDb2xvckhhbmRsZXIuJGluamVjdCA9IFtcclxuICAnY29tbWFuZFN0YWNrJ1xyXG5dO1xyXG5cclxuXHJcblNldENvbG9ySGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcclxuICAgICAgY29sb3JzID0gY29udGV4dC5jb2xvcnMgfHwgREVGQVVMVF9DT0xPUlM7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdmFyIGRpID0ge307XHJcblxyXG4gIGlmICgnZmlsbCcgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHsgZmlsbDogY29sb3JzLmZpbGwgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoJ3N0cm9rZScgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHsgc3Ryb2tlOiBjb2xvcnMuc3Ryb2tlIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cclxuICAgIHNlbGYuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XHJcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBkaTogZGlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG59OyIsImltcG9ydCB7XG4gIGdldENoaWxkTGFuZXMsXG4gIExBTkVfSU5ERU5UQVRJT05cbn0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBzcGxpdHMgYSBsYW5lIGludG8gYSBudW1iZXIgb2Ygc3ViLWxhbmVzLFxuICogY3JlYXRpbmcgbmV3IHN1YiBsYW5lcywgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwbGl0TGFuZUhhbmRsZXIobW9kZWxpbmcsIHRyYW5zbGF0ZSkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cblNwbGl0TGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuU3BsaXRMYW5lSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3TGFuZXNDb3VudCA9IGNvbnRleHQuY291bnQ7XG5cbiAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKHNoYXBlKSxcbiAgICAgIGV4aXN0aW5nTGFuZXNDb3VudCA9IGNoaWxkTGFuZXMubGVuZ3RoO1xuXG4gIGlmIChleGlzdGluZ0xhbmVzQ291bnQgPiBuZXdMYW5lc0NvdW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbW9yZSB0aGFuIHtjb3VudH0gY2hpbGQgbGFuZXMnLCB7IGNvdW50OiBuZXdMYW5lc0NvdW50IH0pKTtcbiAgfVxuXG4gIHZhciBuZXdMYW5lc0hlaWdodCA9IE1hdGgucm91bmQoc2hhcGUuaGVpZ2h0IC8gbmV3TGFuZXNDb3VudCk7XG5cbiAgLy8gSXRlcmF0ZSBmcm9tIHRvcCB0byBib3R0b20gaW4gY2hpbGQgbGFuZSBvcmRlcixcbiAgLy8gcmVzaXppbmcgZXhpc3RpbmcgbGFuZXMgYW5kIGNyZWF0aW5nIG5ldyBvbmVzXG4gIC8vIHNvIHRoYXQgdGhleSBzcGxpdCB0aGUgcGFyZW50IHByb3BvcnRpb25hbGx5LlxuICAvL1xuICAvLyBEdWUgdG8gcm91bmRpbmcgcmVsYXRlZCBlcnJvcnMsIHRoZSBib3R0b20gbGFuZVxuICAvLyBuZWVkcyB0byB0YWtlIHVwIGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICB2YXIgbGFuZVksXG4gICAgICBsYW5lSGVpZ2h0LFxuICAgICAgbGFuZUJvdW5kcyxcbiAgICAgIG5ld0xhbmVBdHRycyxcbiAgICAgIGlkeDtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG5ld0xhbmVzQ291bnQ7IGlkeCsrKSB7XG5cbiAgICBsYW5lWSA9IHNoYXBlLnkgKyBpZHggKiBuZXdMYW5lc0hlaWdodDtcblxuICAgIC8vIGlmIGJvdHRvbSBsYW5lXG4gICAgaWYgKGlkeCA9PT0gbmV3TGFuZXNDb3VudCAtIDEpIHtcbiAgICAgIGxhbmVIZWlnaHQgPSBzaGFwZS5oZWlnaHQgLSAobmV3TGFuZXNIZWlnaHQgKiBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW5lSGVpZ2h0ID0gbmV3TGFuZXNIZWlnaHQ7XG4gICAgfVxuXG4gICAgbGFuZUJvdW5kcyA9IHtcbiAgICAgIHg6IHNoYXBlLnggKyBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgeTogbGFuZVksXG4gICAgICB3aWR0aDogc2hhcGUud2lkdGggLSBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgaGVpZ2h0OiBsYW5lSGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChpZHggPCBleGlzdGluZ0xhbmVzQ291bnQpIHtcblxuICAgICAgLy8gcmVzaXplIGV4aXN0aW5nIGxhbmVcbiAgICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKGNoaWxkTGFuZXNbaWR4XSwgbGFuZUJvdW5kcyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGxhbmUgYXQgcG9zaXRpb25cbiAgICAgIG5ld0xhbmVBdHRycyA9IHtcbiAgICAgICAgdHlwZTogJ2JwbW46TGFuZSdcbiAgICAgIH07XG5cbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKG5ld0xhbmVBdHRycywgbGFuZUJvdW5kcywgc2hhcGUpO1xuICAgIH1cbiAgfVxufTtcbiIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVDYW52YXNSb290SGFuZGxlcihjYW52YXMsIG1vZGVsaW5nKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdtb2RlbGluZydcbl07XG5cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICB2YXIgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdCxcbiAgICAgIG5ld1Jvb3RCdXNpbmVzc09iamVjdCA9IG5ld1Jvb3QuYnVzaW5lc3NPYmplY3QsXG4gICAgICBvbGRSb290ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICBvbGRSb290QnVzaW5lc3NPYmplY3QgPSBvbGRSb290LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYnBtbkRlZmluaXRpb25zID0gb2xkUm9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsXG4gICAgICBkaVBsYW5lID0gb2xkUm9vdEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIC8vICgxKSByZXBsYWNlIHByb2Nlc3Mgb2xkIDw+IG5ldyByb290XG4gIGNhbnZhcy5zZXRSb290RWxlbWVudChuZXdSb290LCB0cnVlKTtcblxuICAvLyAoMikgdXBkYXRlIHJvb3QgZWxlbWVudHNcbiAgY29sbGVjdGlvbkFkZChicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBuZXdSb290QnVzaW5lc3NPYmplY3QpO1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IGJwbW5EZWZpbml0aW9ucztcblxuICBjb2xsZWN0aW9uUmVtb3ZlKGJwbW5EZWZpbml0aW9ucy5yb290RWxlbWVudHMsIG9sZFJvb3RCdXNpbmVzc09iamVjdCk7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50ID0gbnVsbDtcblxuICAvLyAoMykgd2lyZSBkaVxuICBvbGRSb290QnVzaW5lc3NPYmplY3QuZGkgPSBudWxsO1xuXG4gIGRpUGxhbmUuYnBtbkVsZW1lbnQgPSBuZXdSb290QnVzaW5lc3NPYmplY3Q7XG4gIG5ld1Jvb3RCdXNpbmVzc09iamVjdC5kaSA9IGRpUGxhbmU7XG5cbiAgY29udGV4dC5vbGRSb290ID0gb2xkUm9vdDtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHM/XG4gIC8vIHJldHVybiBbIG5ld1Jvb3QsIG9sZFJvb3QgXTtcbn07XG5cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBuZXdSb290ID0gY29udGV4dC5uZXdSb290LFxuICAgICAgbmV3Um9vdEJ1c2luZXNzT2JqZWN0ID0gbmV3Um9vdC5idXNpbmVzc09iamVjdCxcbiAgICAgIG9sZFJvb3QgPSBjb250ZXh0Lm9sZFJvb3QsXG4gICAgICBvbGRSb290QnVzaW5lc3NPYmplY3QgPSBvbGRSb290LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYnBtbkRlZmluaXRpb25zID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsXG4gICAgICBkaVBsYW5lID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIC8vICgxKSByZXBsYWNlIHByb2Nlc3Mgb2xkIDw+IG5ldyByb290XG4gIGNhbnZhcy5zZXRSb290RWxlbWVudChvbGRSb290LCB0cnVlKTtcblxuICAvLyAoMikgdXBkYXRlIHJvb3QgZWxlbWVudHNcbiAgY29sbGVjdGlvblJlbW92ZShicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBuZXdSb290QnVzaW5lc3NPYmplY3QpO1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IG51bGw7XG5cbiAgY29sbGVjdGlvbkFkZChicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBvbGRSb290QnVzaW5lc3NPYmplY3QpO1xuICBvbGRSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IGJwbW5EZWZpbml0aW9ucztcblxuICAvLyAoMykgd2lyZSBkaVxuICBuZXdSb290QnVzaW5lc3NPYmplY3QuZGkgPSBudWxsO1xuXG4gIGRpUGxhbmUuYnBtbkVsZW1lbnQgPSBvbGRSb290QnVzaW5lc3NPYmplY3Q7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC5kaSA9IGRpUGxhbmU7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHJldHVybiBjaGFuZ2VkIGVsZW1lbnRzP1xuICAvLyByZXR1cm4gWyBuZXdSb290LCBvbGRSb290IF07XG59OyIsImltcG9ydCB7XG4gIGNvbGxlY3RMYW5lcyxcbiAgZ2V0TGFuZXNSb290XG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIEZMT1dfTk9ERV9SRUZTX0FUVFIgPSAnZmxvd05vZGVSZWYnLFxuICAgIExBTkVTX0FUVFIgPSAnbGFuZXMnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgdXBkYXRlcyBsYW5lIHJlZnMgb24gY2hhbmdlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG5cblxuVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5wcm90b3R5cGUuY29tcHV0ZVVwZGF0ZXMgPSBmdW5jdGlvbihmbG93Tm9kZVNoYXBlcywgbGFuZVNoYXBlcykge1xuXG4gIHZhciBoYW5kbGVkTm9kZXMgPSBbXTtcblxuICB2YXIgdXBkYXRlcyA9IFtdO1xuXG4gIHZhciBwYXJ0aWNpcGFudENhY2hlID0ge307XG5cbiAgdmFyIGFsbEZsb3dOb2RlU2hhcGVzID0gW107XG5cbiAgZnVuY3Rpb24gaXNJbkxhbmVTaGFwZShlbGVtZW50LCBsYW5lU2hhcGUpIHtcblxuICAgIHZhciBsYW5lVHJibCA9IGFzVFJCTChsYW5lU2hhcGUpO1xuXG4gICAgdmFyIGVsZW1lbnRNaWQgPSB7XG4gICAgICB4OiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICAgIHk6IGVsZW1lbnQueSArIGVsZW1lbnQuaGVpZ2h0IC8gMlxuICAgIH07XG5cbiAgICByZXR1cm4gZWxlbWVudE1pZC54ID4gbGFuZVRyYmwubGVmdCAmJlxuICAgICAgICAgICBlbGVtZW50TWlkLnggPCBsYW5lVHJibC5yaWdodCAmJlxuICAgICAgICAgICBlbGVtZW50TWlkLnkgPiBsYW5lVHJibC50b3AgJiZcbiAgICAgICAgICAgZWxlbWVudE1pZC55IDwgbGFuZVRyYmwuYm90dG9tO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRmxvd05vZGVTaGFwZShmbG93Tm9kZVNoYXBlKSB7XG4gICAgaWYgKGhhbmRsZWROb2Rlcy5pbmRleE9mKGZsb3dOb2RlU2hhcGUpID09PSAtMSkge1xuICAgICAgYWxsRmxvd05vZGVTaGFwZXMucHVzaChmbG93Tm9kZVNoYXBlKTtcbiAgICAgIGhhbmRsZWROb2Rlcy5wdXNoKGZsb3dOb2RlU2hhcGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsbExhbmVTaGFwZXMoZmxvd05vZGVTaGFwZSkge1xuXG4gICAgdmFyIHJvb3QgPSBnZXRMYW5lc1Jvb3QoZmxvd05vZGVTaGFwZSk7XG5cbiAgICBpZiAoIXBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF0pIHtcbiAgICAgIHBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF0gPSBjb2xsZWN0TGFuZXMocm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXROZXdMYW5lcyhmbG93Tm9kZVNoYXBlKSB7XG4gICAgaWYgKCFmbG93Tm9kZVNoYXBlLnBhcmVudCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHZhciBhbGxMYW5lU2hhcGVzID0gZ2V0QWxsTGFuZVNoYXBlcyhmbG93Tm9kZVNoYXBlKTtcblxuICAgIHJldHVybiBhbGxMYW5lU2hhcGVzLmZpbHRlcihmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gaXNJbkxhbmVTaGFwZShmbG93Tm9kZVNoYXBlLCBsKTtcbiAgICB9KS5tYXAoZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIHJldHVybiBzaGFwZS5idXNpbmVzc09iamVjdDtcbiAgICB9KTtcbiAgfVxuXG4gIGxhbmVTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihsYW5lU2hhcGUpIHtcbiAgICB2YXIgcm9vdCA9IGdldExhbmVzUm9vdChsYW5lU2hhcGUpO1xuXG4gICAgaWYgKCFyb290IHx8IGhhbmRsZWROb2Rlcy5pbmRleE9mKHJvb3QpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbiA9IHJvb3QuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBpcyhjLCAnYnBtbjpGbG93Tm9kZScpO1xuICAgIH0pO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChhZGRGbG93Tm9kZVNoYXBlKTtcblxuICAgIGhhbmRsZWROb2Rlcy5wdXNoKHJvb3QpO1xuICB9KTtcblxuICBmbG93Tm9kZVNoYXBlcy5mb3JFYWNoKGFkZEZsb3dOb2RlU2hhcGUpO1xuXG5cbiAgYWxsRmxvd05vZGVTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihmbG93Tm9kZVNoYXBlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSBmbG93Tm9kZVNoYXBlLmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgdmFyIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpLFxuICAgICAgICByZW1vdmUgPSBsYW5lcy5zbGljZSgpLFxuICAgICAgICBhZGQgPSBnZXROZXdMYW5lcyhmbG93Tm9kZVNoYXBlKTtcblxuICAgIHVwZGF0ZXMucHVzaCh7IGZsb3dOb2RlOiBmbG93Tm9kZSwgcmVtb3ZlOiByZW1vdmUsIGFkZDogYWRkIH0pO1xuICB9KTtcblxuICBsYW5lU2hhcGVzLmZvckVhY2goZnVuY3Rpb24obGFuZVNoYXBlKSB7XG5cbiAgICB2YXIgbGFuZSA9IGxhbmVTaGFwZS5idXNpbmVzc09iamVjdDtcblxuICAgIC8vIGxhbmUgZ290IHJlbW92ZWQgWFgtKVxuICAgIGlmICghbGFuZVNoYXBlLnBhcmVudCkge1xuICAgICAgbGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUikuZm9yRWFjaChmdW5jdGlvbihmbG93Tm9kZSkge1xuICAgICAgICB1cGRhdGVzLnB1c2goeyBmbG93Tm9kZTogZmxvd05vZGUsIHJlbW92ZTogWyBsYW5lIF0sIGFkZDogW10gfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1cGRhdGVzO1xufTtcblxuVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgdXBkYXRlcyA9IGNvbnRleHQudXBkYXRlcztcblxuICBpZiAoIXVwZGF0ZXMpIHtcbiAgICB1cGRhdGVzID0gY29udGV4dC51cGRhdGVzID0gdGhpcy5jb21wdXRlVXBkYXRlcyhjb250ZXh0LmZsb3dOb2RlU2hhcGVzLCBjb250ZXh0LmxhbmVTaGFwZXMpO1xuICB9XG5cblxuICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24odXBkYXRlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSB1cGRhdGUuZmxvd05vZGUsXG4gICAgICAgIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpO1xuXG4gICAgLy8gdW53aXJlIG9sZFxuICAgIHVwZGF0ZS5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihvbGRMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGxhbmVzLCBvbGRMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUob2xkTGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcblxuICAgIC8vIHdpcmUgbmV3XG4gICAgdXBkYXRlLmFkZC5mb3JFYWNoKGZ1bmN0aW9uKG5ld0xhbmUpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFuZXMsIG5ld0xhbmUpO1xuICAgICAgY29sbGVjdGlvbkFkZChuZXdMYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKSwgZmxvd05vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHNcbiAgLy8gcmV0dXJuIFsgLi4uIF07XG59O1xuXG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgdXBkYXRlcyA9IGNvbnRleHQudXBkYXRlcztcblxuICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24odXBkYXRlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSB1cGRhdGUuZmxvd05vZGUsXG4gICAgICAgIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpO1xuXG4gICAgLy8gdW53aXJlIG5ld1xuICAgIHVwZGF0ZS5hZGQuZm9yRWFjaChmdW5jdGlvbihuZXdMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGxhbmVzLCBuZXdMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUobmV3TGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcblxuICAgIC8vIHdpcmUgb2xkXG4gICAgdXBkYXRlLnJlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKG9sZExhbmUpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFuZXMsIG9sZExhbmUpO1xuICAgICAgY29sbGVjdGlvbkFkZChvbGRMYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKSwgZmxvd05vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHNcbiAgLy8gcmV0dXJuIFsgLi4uIF07XG59O1xuIiwiaW1wb3J0IHtcbiAgcmVkdWNlLFxuICBrZXlzLFxuICBmb3JFYWNoLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBERUZBVUxUX0ZMT1cgPSAnZGVmYXVsdCcsXG4gICAgSUQgPSAnaWQnLFxuICAgIERJID0gJ2RpJztcblxudmFyIE5VTExfRElNRU5TSU9OUyA9IHtcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMFxufTtcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIGEgQlBNTiAyLjAgcHJvcGVydHkgdXBkYXRlLlxuICpcbiAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gc2V0IHNpbXBsZSBwcm9wZXJ0aWVzIG9uIGVsZW1lbnRzIHdpdGhcbiAqIGFuIHVuZGVybHlpbmcgQlBNTiBidXNpbmVzcyBvYmplY3QuXG4gKlxuICogVXNlIHJlc3BlY3RpdmUgZGlhZ3JhbS1qcyBwcm92aWRlZCBoYW5kbGVycyBpZiB5b3Ugd291bGRcbiAqIGxpa2UgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgbW9kZWxpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyKFxuICAgIGVsZW1lbnRSZWdpc3RyeSwgbW9kZGxlLCB0cmFuc2xhdGUsXG4gICAgbW9kZWxpbmcsIHRleHRSZW5kZXJlcikge1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3RleHRSZW5kZXJlciA9IHRleHRSZW5kZXJlcjtcbn1cblxuVXBkYXRlUHJvcGVydGllc0hhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdtb2RkbGUnLFxuICAndHJhbnNsYXRlJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgQlBNTiBlbGVtZW50IHdpdGggYSBsaXN0IG9mIG5ldyBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGNvbnRleHQuZWxlbWVudCB0aGUgZWxlbWVudCB0byB1cGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LnByb3BlcnRpZXMgYSBsaXN0IG9mIHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBlbGVtZW50J3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzaW5lc3NPYmplY3QgKHRoZSBCUE1OIG1vZGVsIGVsZW1lbnQpXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgY2hhbmdlZCA9IFsgZWxlbWVudCBdLFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ2VsZW1lbnQgcmVxdWlyZWQnKSk7XG4gIH1cblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgaWRzID0gdGhpcy5fbW9kZGxlLmlkcztcblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllcyA9IHVud3JhcEJ1c2luZXNzT2JqZWN0cyhjb250ZXh0LnByb3BlcnRpZXMpLFxuICAgICAgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyB8fCBnZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBwcm9wZXJ0aWVzKTtcblxuICBpZiAoaXNJZENoYW5nZShwcm9wZXJ0aWVzLCBidXNpbmVzc09iamVjdCkpIHtcbiAgICBpZHMudW5jbGFpbShidXNpbmVzc09iamVjdFtJRF0pO1xuXG4gICAgZWxlbWVudFJlZ2lzdHJ5LnVwZGF0ZUlkKGVsZW1lbnQsIHByb3BlcnRpZXNbSURdKTtcblxuICAgIGlkcy5jbGFpbShwcm9wZXJ0aWVzW0lEXSwgYnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgLy8gY29ycmVjdGx5IGluZGljYXRlIHZpc3VhbCBjaGFuZ2VzIG9uIGRlZmF1bHQgZmxvdyB1cGRhdGVzXG4gIGlmIChERUZBVUxUX0ZMT1cgaW4gcHJvcGVydGllcykge1xuXG4gICAgaWYgKHByb3BlcnRpZXNbREVGQVVMVF9GTE9XXSkge1xuICAgICAgY2hhbmdlZC5wdXNoKGVsZW1lbnRSZWdpc3RyeS5nZXQocHJvcGVydGllc1tERUZBVUxUX0ZMT1ddLmlkKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0W0RFRkFVTFRfRkxPV10pIHtcbiAgICAgIGNoYW5nZWQucHVzaChlbGVtZW50UmVnaXN0cnkuZ2V0KGJ1c2luZXNzT2JqZWN0W0RFRkFVTFRfRkxPV10uaWQpKTtcbiAgICB9XG4gIH1cblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBwcm9wZXJ0aWVzKTtcblxuICAvLyBzdG9yZSBvbGQgdmFsdWVzXG4gIGNvbnRleHQub2xkUHJvcGVydGllcyA9IG9sZFByb3BlcnRpZXM7XG4gIGNvbnRleHQuY2hhbmdlZCA9IGNoYW5nZWQ7XG5cbiAgLy8gaW5kaWNhdGUgY2hhbmdlZCBvbiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSB1cGRhdGVcbiAgcmV0dXJuIGNoYW5nZWQ7XG59O1xuXG5cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBsYWJlbCA9IGVsZW1lbnQubGFiZWw7XG5cbiAgdmFyIHRleHQgPSBsYWJlbCAmJiBnZXRCdXNpbmVzc09iamVjdChsYWJlbCkubmFtZTtcblxuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBnZXQgbGF5b3V0ZWQgdGV4dCBib3VuZHMgYW5kIHJlc2l6ZSBleHRlcm5hbFxuICAvLyBleHRlcm5hbCBsYWJlbCBhY2NvcmRpbmdseVxuICB2YXIgbmV3TGFiZWxCb3VuZHMgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhsYWJlbCwgdGV4dCk7XG5cbiAgdGhpcy5fbW9kZWxpbmcucmVzaXplU2hhcGUobGFiZWwsIG5ld0xhYmVsQm91bmRzLCBOVUxMX0RJTUVOU0lPTlMpO1xufTtcblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB1cGRhdGUgb24gYSBCUE1OIGVsZW1lbnRzIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlUHJvcGVydGllc0hhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICBvbGRQcm9wZXJ0aWVzID0gY29udGV4dC5vbGRQcm9wZXJ0aWVzLFxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgaWRzID0gdGhpcy5fbW9kZGxlLmlkcztcblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0aWVzKTtcblxuICBpZiAoaXNJZENoYW5nZShwcm9wZXJ0aWVzLCBidXNpbmVzc09iamVjdCkpIHtcbiAgICBpZHMudW5jbGFpbShwcm9wZXJ0aWVzW0lEXSk7XG5cbiAgICBlbGVtZW50UmVnaXN0cnkudXBkYXRlSWQoZWxlbWVudCwgb2xkUHJvcGVydGllc1tJRF0pO1xuXG4gICAgaWRzLmNsYWltKG9sZFByb3BlcnRpZXNbSURdLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcblxuXG5mdW5jdGlvbiBpc0lkQ2hhbmdlKHByb3BlcnRpZXMsIGJ1c2luZXNzT2JqZWN0KSB7XG4gIHJldHVybiBJRCBpbiBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXNbSURdICE9PSBidXNpbmVzc09iamVjdFtJRF07XG59XG5cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICB2YXIgcHJvcGVydHlOYW1lcyA9IGtleXMocHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuXG4gICAgLy8gaGFuZGxlIERJIHNlcGFyYXRlbHlcbiAgICBpZiAoa2V5ICE9PSBESSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBidXNpbmVzc09iamVjdC5nZXQoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREaVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QuZGksIGtleXMocHJvcGVydGllcy5kaSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuXG5mdW5jdGlvbiBnZXREaVByb3BlcnRpZXMoZGksIHByb3BlcnR5TmFtZXMpIHtcbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gZGkuZ2V0KGtleSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcblxuICAgIGlmIChrZXkgIT09IERJKSB7XG4gICAgICBidXNpbmVzc09iamVjdC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gb25seSB1cGRhdGUsIGlmIGJ1c2luZXNzT2JqZWN0LmRpIGV4aXN0c1xuICAgICAgaWYgKGJ1c2luZXNzT2JqZWN0LmRpKSB7XG4gICAgICAgIHNldERpUHJvcGVydGllcyhidXNpbmVzc09iamVjdC5kaSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gc2V0RGlQcm9wZXJ0aWVzKGRpLCBwcm9wZXJ0aWVzKSB7XG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIGRpLnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG59XG5cblxudmFyIHJlZmVyZW5jZVByb3BlcnR5TmFtZXMgPSBbICdkZWZhdWx0JyBdO1xuXG4vKipcbiAqIE1ha2Ugc3VyZSB3ZSB1bndyYXAgdGhlIGFjdHVhbCBidXNpbmVzcyBvYmplY3RcbiAqIGJlaGluZCBkaWFncmFtIGVsZW1lbnQgdGhhdCBtYXkgaGF2ZSBiZWVuXG4gKiBwYXNzZWQgYXMgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gcHJvcGVydGllc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdW53cmFwcGVkUHJvcHNcbiAqL1xuZnVuY3Rpb24gdW53cmFwQnVzaW5lc3NPYmplY3RzKHByb3BlcnRpZXMpIHtcblxuICB2YXIgdW53cmFwcGVkUHJvcHMgPSBhc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuXG4gIHJlZmVyZW5jZVByb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKG5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgdW53cmFwcGVkUHJvcHNbbmFtZV0gPSBnZXRCdXNpbmVzc09iamVjdCh1bndyYXBwZWRQcm9wc1tuYW1lXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdW53cmFwcGVkUHJvcHM7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyKGJwbW5VcGRhdGVyKSB7XHJcbiAgdGhpcy5fYnBtblVwZGF0ZXIgPSBicG1uVXBkYXRlcjtcclxufVxyXG5cclxuVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyLiRpbmplY3QgPSBbICdicG1uVXBkYXRlcicgXTtcclxuXHJcblxyXG5VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGRhdGFTdG9yZUJvID0gY29udGV4dC5kYXRhU3RvcmVCbyxcclxuICAgICAgbmV3U2VtYW50aWNQYXJlbnQgPSBjb250ZXh0Lm5ld1NlbWFudGljUGFyZW50LFxyXG4gICAgICBuZXdEaVBhcmVudCA9IGNvbnRleHQubmV3RGlQYXJlbnQ7XHJcblxyXG4gIGNvbnRleHQub2xkU2VtYW50aWNQYXJlbnQgPSBkYXRhU3RvcmVCby4kcGFyZW50O1xyXG4gIGNvbnRleHQub2xkRGlQYXJlbnQgPSBkYXRhU3RvcmVCby5kaS4kcGFyZW50O1xyXG5cclxuICAvLyB1cGRhdGUgc2VtYW50aWMgcGFyZW50XHJcbiAgdGhpcy5fYnBtblVwZGF0ZXIudXBkYXRlU2VtYW50aWNQYXJlbnQoZGF0YVN0b3JlQm8sIG5ld1NlbWFudGljUGFyZW50KTtcclxuXHJcbiAgLy8gdXBkYXRlIERJIHBhcmVudFxyXG4gIHRoaXMuX2JwbW5VcGRhdGVyLnVwZGF0ZURpUGFyZW50KGRhdGFTdG9yZUJvLmRpLCBuZXdEaVBhcmVudCk7XHJcbn07XHJcblxyXG5VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICB2YXIgZGF0YVN0b3JlQm8gPSBjb250ZXh0LmRhdGFTdG9yZUJvLFxyXG4gICAgICBvbGRTZW1hbnRpY1BhcmVudCA9IGNvbnRleHQub2xkU2VtYW50aWNQYXJlbnQsXHJcbiAgICAgIG9sZERpUGFyZW50ID0gY29udGV4dC5vbGREaVBhcmVudDtcclxuXHJcbiAgLy8gdXBkYXRlIHNlbWFudGljIHBhcmVudFxyXG4gIHRoaXMuX2JwbW5VcGRhdGVyLnVwZGF0ZVNlbWFudGljUGFyZW50KGRhdGFTdG9yZUJvLCBvbGRTZW1hbnRpY1BhcmVudCk7XHJcblxyXG4gIC8vIHVwZGF0ZSBESSBwYXJlbnRcclxuICB0aGlzLl9icG1uVXBkYXRlci51cGRhdGVEaVBhcmVudChkYXRhU3RvcmVCby5kaSwgb2xkRGlQYXJlbnQpO1xyXG59O1xyXG5cclxuIiwiaW1wb3J0IEJlaGF2aW9yTW9kdWxlIGZyb20gJy4vYmVoYXZpb3InO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBEaU9yZGVyaW5nTW9kdWxlIGZyb20gJy4uL2RpLW9yZGVyaW5nJztcbmltcG9ydCBPcmRlcmluZ01vZHVsZSBmcm9tICcuLi9vcmRlcmluZyc7XG5pbXBvcnQgUmVwbGFjZU1vZHVsZSBmcm9tICcuLi9yZXBsYWNlJztcblxuaW1wb3J0IENvbW1hbmRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZCc7XG5pbXBvcnQgVG9vbHRpcHNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbHRpcHMnO1xuaW1wb3J0IExhYmVsU3VwcG9ydE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1zdXBwb3J0JztcbmltcG9ydCBBdHRhY2hTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F0dGFjaC1zdXBwb3J0JztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcbmltcG9ydCBDaGFuZ2VTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0JztcbmltcG9ydCBTcGFjZVRvb2xNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbCc7XG5cbmltcG9ydCBCcG1uRmFjdG9yeSBmcm9tICcuL0JwbW5GYWN0b3J5JztcbmltcG9ydCBCcG1uVXBkYXRlciBmcm9tICcuL0JwbW5VcGRhdGVyJztcbmltcG9ydCBFbGVtZW50RmFjdG9yeSBmcm9tICcuL0VsZW1lbnRGYWN0b3J5JztcbmltcG9ydCBNb2RlbGluZyBmcm9tICcuL01vZGVsaW5nJztcbmltcG9ydCBCcG1uTGF5b3V0ZXIgZnJvbSAnLi9CcG1uTGF5b3V0ZXInO1xuaW1wb3J0IENyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnbW9kZWxpbmcnLFxuICAgICdicG1uVXBkYXRlcidcbiAgXSxcbiAgX19kZXBlbmRzX186IFtcbiAgICBCZWhhdmlvck1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBEaU9yZGVyaW5nTW9kdWxlLFxuICAgIE9yZGVyaW5nTW9kdWxlLFxuICAgIFJlcGxhY2VNb2R1bGUsXG4gICAgQ29tbWFuZE1vZHVsZSxcbiAgICBUb29sdGlwc01vZHVsZSxcbiAgICBMYWJlbFN1cHBvcnRNb2R1bGUsXG4gICAgQXR0YWNoU3VwcG9ydE1vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGUsXG4gICAgQ2hhbmdlU3VwcG9ydE1vZHVsZSxcbiAgICBTcGFjZVRvb2xNb2R1bGVcbiAgXSxcbiAgYnBtbkZhY3Rvcnk6IFsgJ3R5cGUnLCBCcG1uRmFjdG9yeSBdLFxuICBicG1uVXBkYXRlcjogWyAndHlwZScsIEJwbW5VcGRhdGVyIF0sXG4gIGVsZW1lbnRGYWN0b3J5OiBbICd0eXBlJywgRWxlbWVudEZhY3RvcnkgXSxcbiAgbW9kZWxpbmc6IFsgJ3R5cGUnLCBNb2RlbGluZyBdLFxuICBsYXlvdXRlcjogWyAndHlwZScsIEJwbW5MYXlvdXRlciBdLFxuICBjb25uZWN0aW9uRG9ja2luZzogWyAndHlwZScsIENyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcgXVxufTsiLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0UGFyZW50XG59IGZyb20gJy4vTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgc3Vic3RyYWN0VFJCTCxcbiAgcmVzaXplVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbCc7XG5cbnZhciBhYnMgPSBNYXRoLmFicztcblxuXG5mdW5jdGlvbiBnZXRUUkJMUmVzaXplKG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHJldHVybiBzdWJzdHJhY3RUUkJMKGFzVFJCTChuZXdCb3VuZHMpLCBhc1RSQkwob2xkQm91bmRzKSk7XG59XG5cblxudmFyIExBTkVfUEFSRU5UUyA9IFtcbiAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAnYnBtbjpQcm9jZXNzJyxcbiAgJ2JwbW46U3ViUHJvY2Vzcydcbl07XG5cbmV4cG9ydCB2YXIgTEFORV9JTkRFTlRBVElPTiA9IDMwO1xuXG5cbi8qKlxuICogQ29sbGVjdCBhbGwgbGFuZSBzaGFwZXMgaW4gdGhlIGdpdmVuIHBhcmVuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBbY29sbGVjdGVkU2hhcGVzXVxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RMYW5lcyhzaGFwZSwgY29sbGVjdGVkU2hhcGVzKSB7XG5cbiAgY29sbGVjdGVkU2hhcGVzID0gY29sbGVjdGVkU2hhcGVzIHx8IFtdO1xuXG4gIHNoYXBlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihzKSB7XG4gICAgaWYgKGlzKHMsICdicG1uOkxhbmUnKSkge1xuICAgICAgY29sbGVjdExhbmVzKHMsIGNvbGxlY3RlZFNoYXBlcyk7XG5cbiAgICAgIGNvbGxlY3RlZFNoYXBlcy5wdXNoKHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbGxlY3RlZFNoYXBlcztcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbGFuZSBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRMYW5lcyhzaGFwZSkge1xuICByZXR1cm4gc2hhcGUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gaXMoYywgJ2JwbW46TGFuZScpO1xuICB9KTtcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgcm9vdCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGdpdmVuIGxhbmUgc2hhcGVcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYW5lc1Jvb3Qoc2hhcGUpIHtcbiAgcmV0dXJuIGdldFBhcmVudChzaGFwZSwgTEFORV9QQVJFTlRTKSB8fCBzaGFwZTtcbn1cblxuXG4vKipcbiAqIENvbXB1dGUgdGhlIHJlcXVpcmVkIHJlc2l6ZSBvcGVyYXRpb25zIGZvciBsYW5lc1xuICogYWRqYWNlbnQgdG8gdGhlIGdpdmVuIHNoYXBlLCBhc3N1bWluZyBpdCB3aWxsIGJlXG4gKiByZXNpemVkIHRvIHRoZSBnaXZlbiBuZXcgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTGFuZXNSZXNpemUoc2hhcGUsIG5ld0JvdW5kcykge1xuXG4gIHZhciByb290RWxlbWVudCA9IGdldExhbmVzUm9vdChzaGFwZSk7XG5cbiAgdmFyIGluaXRpYWxTaGFwZXMgPSBpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpID8gW10gOiBbIHJvb3RFbGVtZW50IF07XG5cbiAgdmFyIGFsbExhbmVzID0gY29sbGVjdExhbmVzKHJvb3RFbGVtZW50LCBpbml0aWFsU2hhcGVzKSxcbiAgICAgIHNoYXBlVHJibCA9IGFzVFJCTChzaGFwZSksXG4gICAgICBzaGFwZU5ld1RyYmwgPSBhc1RSQkwobmV3Qm91bmRzKSxcbiAgICAgIHRyYmxSZXNpemUgPSBnZXRUUkJMUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpLFxuICAgICAgcmVzaXplTmVlZGVkID0gW107XG5cbiAgYWxsTGFuZXMuZm9yRWFjaChmdW5jdGlvbihvdGhlcikge1xuXG4gICAgaWYgKG90aGVyID09PSBzaGFwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3BSZXNpemUgPSAwLFxuICAgICAgICByaWdodFJlc2l6ZSA9IHRyYmxSZXNpemUucmlnaHQsXG4gICAgICAgIGJvdHRvbVJlc2l6ZSA9IDAsXG4gICAgICAgIGxlZnRSZXNpemUgPSB0cmJsUmVzaXplLmxlZnQ7XG5cbiAgICB2YXIgb3RoZXJUcmJsID0gYXNUUkJMKG90aGVyKTtcblxuICAgIGlmICh0cmJsUmVzaXplLnRvcCkge1xuICAgICAgaWYgKGFicyhvdGhlclRyYmwuYm90dG9tIC0gc2hhcGVUcmJsLnRvcCkgPCAxMCkge1xuICAgICAgICBib3R0b21SZXNpemUgPSBzaGFwZU5ld1RyYmwudG9wIC0gb3RoZXJUcmJsLmJvdHRvbTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFicyhvdGhlclRyYmwudG9wIC0gc2hhcGVUcmJsLnRvcCkgPCA1KSB7XG4gICAgICAgIHRvcFJlc2l6ZSA9IHNoYXBlTmV3VHJibC50b3AgLSBvdGhlclRyYmwudG9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmJsUmVzaXplLmJvdHRvbSkge1xuICAgICAgaWYgKGFicyhvdGhlclRyYmwudG9wIC0gc2hhcGVUcmJsLmJvdHRvbSkgPCAxMCkge1xuICAgICAgICB0b3BSZXNpemUgPSBzaGFwZU5ld1RyYmwuYm90dG9tIC0gb3RoZXJUcmJsLnRvcDtcbiAgICAgIH1cblxuICAgICAgaWYgKGFicyhvdGhlclRyYmwuYm90dG9tIC0gc2hhcGVUcmJsLmJvdHRvbSkgPCA1KSB7XG4gICAgICAgIGJvdHRvbVJlc2l6ZSA9IHNoYXBlTmV3VHJibC5ib3R0b20gLSBvdGhlclRyYmwuYm90dG9tO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b3BSZXNpemUgfHwgcmlnaHRSZXNpemUgfHwgYm90dG9tUmVzaXplIHx8IGxlZnRSZXNpemUpIHtcblxuICAgICAgcmVzaXplTmVlZGVkLnB1c2goe1xuICAgICAgICBzaGFwZTogb3RoZXIsXG4gICAgICAgIG5ld0JvdW5kczogcmVzaXplVFJCTChvdGhlciwge1xuICAgICAgICAgIHRvcDogdG9wUmVzaXplLFxuICAgICAgICAgIHJpZ2h0OiByaWdodFJlc2l6ZSxcbiAgICAgICAgICBib3R0b206IGJvdHRvbVJlc2l6ZSxcbiAgICAgICAgICBsZWZ0OiBsZWZ0UmVzaXplXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc2l6ZU5lZWRlZDtcbn0iLCJpbXBvcnQge1xuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGhhcyBhbnkgb2YgdGhlIGdpdmVuIHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdHlwZXNcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnkoZWxlbWVudCwgdHlwZXMpIHtcbiAgcmV0dXJuIHNvbWUodHlwZXMsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gaXMoZWxlbWVudCwgdCk7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhlIGdpdmVuIHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGFueVR5cGVcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudChlbGVtZW50LCBhbnlUeXBlKSB7XG5cbiAgaWYgKHR5cGVvZiBhbnlUeXBlID09PSAnc3RyaW5nJykge1xuICAgIGFueVR5cGUgPSBbIGFueVR5cGUgXTtcbiAgfVxuXG4gIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50KSkge1xuICAgIGlmIChpc0FueShlbGVtZW50LCBhbnlUeXBlKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IE9yZGVyaW5nUHJvdmlkZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3JkZXJpbmcvT3JkZXJpbmdQcm92aWRlcic7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgZmluZEluZGV4LFxuICBmaW5kXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIGEgc2ltcGxlIG9yZGVyaW5nIHByb3ZpZGVyIHRoYXQgbWFrZXMgc3VyZTpcbiAqXG4gKiAoMCkgbGFiZWxzIGFuZCBncm91cHMgYXJlIHJlbmRlcmVkIGFsd2F5cyBvbiB0b3BcbiAqICgxKSBlbGVtZW50cyBhcmUgb3JkZXJlZCBieSBhIHtsZXZlbH0gcHJvcGVydHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbk9yZGVyaW5nUHJvdmlkZXIoZXZlbnRCdXMsIGNhbnZhcywgdHJhbnNsYXRlKSB7XG5cbiAgT3JkZXJpbmdQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgb3JkZXJzID0gW1xuICAgIHsgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsIG9yZGVyOiB7IGxldmVsOiA2IH0gfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpTZXF1ZW5jZUZsb3cnLFxuICAgICAgb3JkZXI6IHtcbiAgICAgICAgbGV2ZWw6IDMsXG4gICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAgICAgJ2JwbW46Rmxvd0VsZW1lbnRzQ29udGFpbmVyJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIGhhbmRsZSBEYXRhQXNzb2NpYXRpb24ocykgbGlrZSBtZXNzYWdlIGZsb3dzIGFuZCByZW5kZXIgdGhlbSBhbHdheXMgb24gdG9wXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46RGF0YUFzc29jaWF0aW9uJyxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGxldmVsOiA5LFxuICAgICAgICBjb250YWluZXJzOiBbXG4gICAgICAgICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgICAgICAgJ2JwbW46UHJvY2VzcydcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46TWVzc2FnZUZsb3cnLCBvcmRlcjoge1xuICAgICAgICBsZXZlbDogOSxcbiAgICAgICAgY29udGFpbmVyczogWyAnYnBtbjpDb2xsYWJvcmF0aW9uJyBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICBvcmRlcjoge1xuICAgICAgICBsZXZlbDogNixcbiAgICAgICAgY29udGFpbmVyczogW1xuICAgICAgICAgICdicG1uOlBhcnRpY2lwYW50JyxcbiAgICAgICAgICAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInLFxuICAgICAgICAgICdicG1uOkNvbGxhYm9yYXRpb24nXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHsgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsIG9yZGVyOiB7IGxldmVsOiA4IH0gfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpHcm91cCcsXG4gICAgICBvcmRlcjoge1xuICAgICAgICBsZXZlbDogMTAsXG4gICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAnYnBtbjpDb2xsYWJvcmF0aW9uJyxcbiAgICAgICAgICAnYnBtbjpQcm9jZXNzJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7IHR5cGU6ICdicG1uOkZsb3dFbGVtZW50Jywgb3JkZXI6IHsgbGV2ZWw6IDUgfSB9LFxuICAgIHsgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnLCBvcmRlcjogeyBsZXZlbDogLTIgfSB9LFxuICAgIHsgdHlwZTogJ2JwbW46TGFuZScsIG9yZGVyOiB7IGxldmVsOiAtMSB9IH1cbiAgXTtcblxuICBmdW5jdGlvbiBjb21wdXRlT3JkZXIoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm4geyBsZXZlbDogMTAgfTtcbiAgICB9XG5cbiAgICB2YXIgZW50cnkgPSBmaW5kKG9yZGVycywgZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsgby50eXBlIF0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5Lm9yZGVyIHx8IHsgbGV2ZWw6IDEgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9yZGVyKGVsZW1lbnQpIHtcblxuICAgIHZhciBvcmRlciA9IGVsZW1lbnQub3JkZXI7XG5cbiAgICBpZiAoIW9yZGVyKSB7XG4gICAgICBlbGVtZW50Lm9yZGVyID0gb3JkZXIgPSBjb21wdXRlT3JkZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZEFjdHVhbFBhcmVudChlbGVtZW50LCBuZXdQYXJlbnQsIGNvbnRhaW5lcnMpIHtcblxuICAgIHZhciBhY3R1YWxQYXJlbnQgPSBuZXdQYXJlbnQ7XG5cbiAgICB3aGlsZSAoYWN0dWFsUGFyZW50KSB7XG5cbiAgICAgIGlmIChpc0FueShhY3R1YWxQYXJlbnQsIGNvbnRhaW5lcnMpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhY3R1YWxQYXJlbnQgPSBhY3R1YWxQYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIGlmICghYWN0dWFsUGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdubyBwYXJlbnQgZm9yIHtlbGVtZW50fSBpbiB7cGFyZW50fScsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgcGFyZW50OiBuZXdQYXJlbnQuaWRcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsUGFyZW50O1xuICB9XG5cbiAgdGhpcy5nZXRPcmRlcmluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld1BhcmVudCkge1xuXG4gICAgLy8gcmVuZGVyIGxhYmVscyBhbHdheXMgb24gdG9wXG4gICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmVudDogY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIGluZGV4OiAtMVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudE9yZGVyID0gZ2V0T3JkZXIoZWxlbWVudCk7XG5cblxuICAgIGlmIChlbGVtZW50T3JkZXIuY29udGFpbmVycykge1xuICAgICAgbmV3UGFyZW50ID0gZmluZEFjdHVhbFBhcmVudChlbGVtZW50LCBuZXdQYXJlbnQsIGVsZW1lbnRPcmRlci5jb250YWluZXJzKTtcbiAgICB9XG5cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSBuZXdQYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihlbGVtZW50KTtcblxuICAgIHZhciBpbnNlcnRJbmRleCA9IGZpbmRJbmRleChuZXdQYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG5cbiAgICAgIC8vIGRvIG5vdCBjb21wYXJlIHdpdGggbGFiZWxzLCB0aGV5IGFyZSBjcmVhdGVkXG4gICAgICAvLyBpbiB0aGUgd3Jvbmcgb3JkZXIgKHJpZ2h0IGFmdGVyIGVsZW1lbnRzKSBkdXJpbmcgaW1wb3J0IGFuZFxuICAgICAgLy8gbWVzcyB1cCB0aGUgcG9zaXRpb25pbmcuXG4gICAgICBpZiAoIWVsZW1lbnQubGFiZWxUYXJnZXQgJiYgY2hpbGQubGFiZWxUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudE9yZGVyLmxldmVsIDwgZ2V0T3JkZXIoY2hpbGQpLmxldmVsO1xuICAgIH0pO1xuXG5cbiAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGluIHRoZSBjaGlsZCBsaXN0IGF0XG4gICAgLy8gYSBzbWFsbGVyIGluZGV4LCB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgaW5zZXJ0IGluZGV4LlxuICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoYXQgdGhlIGVsZW1lbnQgaXMgYmVpbmcgcmVtb3ZlZFxuICAgIC8vIGJlZm9yZSBiZWluZyByZS1pbnNlcnRlZFxuICAgIGlmIChpbnNlcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIGN1cnJlbnRJbmRleCA8IGluc2VydEluZGV4KSB7XG4gICAgICAgIGluc2VydEluZGV4IC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiBpbnNlcnRJbmRleCxcbiAgICAgIHBhcmVudDogbmV3UGFyZW50XG4gICAgfTtcbiAgfTtcbn1cblxuQnBtbk9yZGVyaW5nUHJvdmlkZXIuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2NhbnZhcycsICd0cmFuc2xhdGUnIF07XG5cbmluaGVyaXRzKEJwbW5PcmRlcmluZ1Byb3ZpZGVyLCBPcmRlcmluZ1Byb3ZpZGVyKTsiLCJpbXBvcnQgdHJhbnNsYXRlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcblxuaW1wb3J0IEJwbW5PcmRlcmluZ1Byb3ZpZGVyIGZyb20gJy4vQnBtbk9yZGVyaW5nUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgdHJhbnNsYXRlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uT3JkZXJpbmdQcm92aWRlcicgXSxcbiAgYnBtbk9yZGVyaW5nUHJvdmlkZXI6IFsgJ3R5cGUnLCBCcG1uT3JkZXJpbmdQcm92aWRlciBdXG59OyIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIHBhbGV0dGUgcHJvdmlkZXIgZm9yIEJQTU4gMi4wIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWxldHRlUHJvdmlkZXIoXG4gICAgcGFsZXR0ZSwgY3JlYXRlLCBlbGVtZW50RmFjdG9yeSxcbiAgICBzcGFjZVRvb2wsIGxhc3NvVG9vbCwgaGFuZFRvb2wsXG4gICAgZ2xvYmFsQ29ubmVjdCwgdHJhbnNsYXRlKSB7XG5cbiAgdGhpcy5fcGFsZXR0ZSA9IHBhbGV0dGU7XG4gIHRoaXMuX2NyZWF0ZSA9IGNyZWF0ZTtcbiAgdGhpcy5fZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcbiAgdGhpcy5fc3BhY2VUb29sID0gc3BhY2VUb29sO1xuICB0aGlzLl9sYXNzb1Rvb2wgPSBsYXNzb1Rvb2w7XG4gIHRoaXMuX2hhbmRUb29sID0gaGFuZFRvb2w7XG4gIHRoaXMuX2dsb2JhbENvbm5lY3QgPSBnbG9iYWxDb25uZWN0O1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xufVxuXG5QYWxldHRlUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ3BhbGV0dGUnLFxuICAnY3JlYXRlJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ3NwYWNlVG9vbCcsXG4gICdsYXNzb1Rvb2wnLFxuICAnaGFuZFRvb2wnLFxuICAnZ2xvYmFsQ29ubmVjdCcsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cblBhbGV0dGVQcm92aWRlci5wcm90b3R5cGUuZ2V0UGFsZXR0ZUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGFjdGlvbnMgPSB7fSxcbiAgICAgIGNyZWF0ZSA9IHRoaXMuX2NyZWF0ZSxcbiAgICAgIGVsZW1lbnRGYWN0b3J5ID0gdGhpcy5fZWxlbWVudEZhY3RvcnksXG4gICAgICBzcGFjZVRvb2wgPSB0aGlzLl9zcGFjZVRvb2wsXG4gICAgICBsYXNzb1Rvb2wgPSB0aGlzLl9sYXNzb1Rvb2wsXG4gICAgICBoYW5kVG9vbCA9IHRoaXMuX2hhbmRUb29sLFxuICAgICAgZ2xvYmFsQ29ubmVjdCA9IHRoaXMuX2dsb2JhbENvbm5lY3QsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGUsIGdyb3VwLCBjbGFzc05hbWUsIHRpdGxlLCBvcHRpb25zKSB7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5lcihldmVudCkge1xuICAgICAgdmFyIHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoYXNzaWduKHsgdHlwZTogdHlwZSB9LCBvcHRpb25zKSk7XG5cbiAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LmRpLmlzRXhwYW5kZWQgPSBvcHRpb25zLmlzRXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xuICAgIH1cblxuICAgIHZhciBzaG9ydFR5cGUgPSB0eXBlLnJlcGxhY2UoL15icG1uOi8sICcnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBncm91cDogZ3JvdXAsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHRpdGxlOiB0aXRsZSB8fCB0cmFuc2xhdGUoJ0NyZWF0ZSB7dHlwZX0nLCB7IHR5cGU6IHNob3J0VHlwZSB9KSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZUxpc3RlbmVyLFxuICAgICAgICBjbGljazogY3JlYXRlTGlzdGVuZXJcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3VicHJvY2VzcyhldmVudCkge1xuICAgIHZhciBzdWJQcm9jZXNzID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoe1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIHZhciBzdGFydEV2ZW50ID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoe1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICB4OiA0MCxcbiAgICAgIHk6IDgyLFxuICAgICAgcGFyZW50OiBzdWJQcm9jZXNzXG4gICAgfSk7XG5cbiAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIFsgc3ViUHJvY2Vzcywgc3RhcnRFdmVudCBdLCB7XG4gICAgICBoaW50czoge1xuICAgICAgICBhdXRvU2VsZWN0OiBbIHN0YXJ0RXZlbnQgXVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFydGljaXBhbnQoZXZlbnQpIHtcbiAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVBhcnRpY2lwYW50U2hhcGUoKSk7XG4gIH1cblxuICBhc3NpZ24oYWN0aW9ucywge1xuICAgICdoYW5kLXRvb2wnOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1oYW5kLXRvb2wnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQWN0aXZhdGUgdGhlIGhhbmQgdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGhhbmRUb29sLmFjdGl2YXRlSGFuZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgICdsYXNzby10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFzc28tdG9vbCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBY3RpdmF0ZSB0aGUgbGFzc28gdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGxhc3NvVG9vbC5hY3RpdmF0ZVNlbGVjdGlvbihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgICdzcGFjZS10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3BhY2UtdG9vbCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBY3RpdmF0ZSB0aGUgY3JlYXRlL3JlbW92ZSBzcGFjZSB0b29sJyksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgc3BhY2VUb29sLmFjdGl2YXRlU2VsZWN0aW9uKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgJ2dsb2JhbC1jb25uZWN0LXRvb2wnOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jb25uZWN0aW9uLW11bHRpJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FjdGl2YXRlIHRoZSBnbG9iYWwgY29ubmVjdCB0b29sJyksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZ2xvYmFsQ29ubmVjdC50b2dnbGUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICAndG9vbC1zZXBhcmF0b3InOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIHNlcGFyYXRvcjogdHJ1ZVxuICAgIH0sXG4gICAgJ2NyZWF0ZS5zdGFydC1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOlN0YXJ0RXZlbnQnLCAnZXZlbnQnLCAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgU3RhcnRFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmludGVybWVkaWF0ZS1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnZXZlbnQnLCAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIEludGVybWVkaWF0ZS9Cb3VuZGFyeSBFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmVuZC1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkVuZEV2ZW50JywgJ2V2ZW50JywgJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBFbmRFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmV4Y2x1c2l2ZS1nYXRld2F5JzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsICdnYXRld2F5JywgJ2JwbW4taWNvbi1nYXRld2F5LW5vbmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgR2F0ZXdheScpXG4gICAgKSxcbiAgICAnY3JlYXRlLnRhc2snOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpUYXNrJywgJ2FjdGl2aXR5JywgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIFRhc2snKVxuICAgICksXG4gICAgJ2NyZWF0ZS5kYXRhLW9iamVjdCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLCAnZGF0YS1vYmplY3QnLCAnYnBtbi1pY29uLWRhdGEtb2JqZWN0JyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIERhdGFPYmplY3RSZWZlcmVuY2UnKVxuICAgICksXG4gICAgJ2NyZWF0ZS5kYXRhLXN0b3JlJzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJywgJ2RhdGEtc3RvcmUnLCAnYnBtbi1pY29uLWRhdGEtc3RvcmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgRGF0YVN0b3JlUmVmZXJlbmNlJylcbiAgICApLFxuICAgICdjcmVhdGUuc3VicHJvY2Vzcy1leHBhbmRlZCc6IHtcbiAgICAgIGdyb3VwOiAnYWN0aXZpdHknLFxuICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIGV4cGFuZGVkIFN1YlByb2Nlc3MnKSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZVN1YnByb2Nlc3MsXG4gICAgICAgIGNsaWNrOiBjcmVhdGVTdWJwcm9jZXNzXG4gICAgICB9XG4gICAgfSxcbiAgICAnY3JlYXRlLnBhcnRpY2lwYW50LWV4cGFuZGVkJzoge1xuICAgICAgZ3JvdXA6ICdjb2xsYWJvcmF0aW9uJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1wYXJ0aWNpcGFudCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdDcmVhdGUgUG9vbC9QYXJ0aWNpcGFudCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGRyYWdzdGFydDogY3JlYXRlUGFydGljaXBhbnQsXG4gICAgICAgIGNsaWNrOiBjcmVhdGVQYXJ0aWNpcGFudFxuICAgICAgfVxuICAgIH0sXG4gICAgJ2NyZWF0ZS5ncm91cCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkdyb3VwJywgJ2FydGlmYWN0JywgJ2JwbW4taWNvbi1ncm91cCcsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBHcm91cCcpXG4gICAgKSxcbiAgfSk7XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuIiwiaW1wb3J0IFBhbGV0dGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcGFsZXR0ZSc7XG5pbXBvcnQgQ3JlYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NyZWF0ZSc7XG5pbXBvcnQgU3BhY2VUb29sTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NwYWNlLXRvb2wnO1xuaW1wb3J0IExhc3NvVG9vbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sJztcbmltcG9ydCBIYW5kVG9vbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9oYW5kLXRvb2wnO1xuaW1wb3J0IEdsb2JhbENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ2xvYmFsLWNvbm5lY3QnO1xuaW1wb3J0IHRyYW5zbGF0ZSBmcm9tICdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZSc7XG5cbmltcG9ydCBQYWxldHRlUHJvdmlkZXIgZnJvbSAnLi9QYWxldHRlUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUGFsZXR0ZU1vZHVsZSxcbiAgICBDcmVhdGVNb2R1bGUsXG4gICAgU3BhY2VUb29sTW9kdWxlLFxuICAgIExhc3NvVG9vbE1vZHVsZSxcbiAgICBIYW5kVG9vbE1vZHVsZSxcbiAgICBHbG9iYWxDb25uZWN0TW9kdWxlLFxuICAgIHRyYW5zbGF0ZVxuICBdLFxuICBfX2luaXRfXzogWyAncGFsZXR0ZVByb3ZpZGVyJyBdLFxuICBwYWxldHRlUHJvdmlkZXI6IFsgJ3R5cGUnLCBQYWxldHRlUHJvdmlkZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzRXZlbnRTdWJQcm9jZXNzLFxuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNEaWZmZXJlbnRUeXBlXG59IGZyb20gJy4vdXRpbC9UeXBlVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCAqIGFzIHJlcGxhY2VPcHRpb25zIGZyb20gJy4uL3JlcGxhY2UvUmVwbGFjZU9wdGlvbnMnO1xuXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaXMgYW4gZWxlbWVudCBhZ25vc3RpYyByZXBsYWNlIG1lbnUgcHJvdmlkZXIgZm9yIHRoZSBwb3B1cCBtZW51LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlTWVudVByb3ZpZGVyKFxuICAgIHBvcHVwTWVudSwgbW9kZWxpbmcsIG1vZGRsZSxcbiAgICBicG1uUmVwbGFjZSwgcnVsZXMsIHRyYW5zbGF0ZSkge1xuXG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdGhpcy5yZWdpc3RlcigpO1xufVxuXG5SZXBsYWNlTWVudVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdwb3B1cE1lbnUnLFxuICAnbW9kZWxpbmcnLFxuICAnbW9kZGxlJyxcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ3J1bGVzJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciByZXBsYWNlIG1lbnUgcHJvdmlkZXIgaW4gdGhlIHBvcHVwIG1lbnVcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ2JwbW4tcmVwbGFjZScsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIEdldCBhbGwgZW50cmllcyBmcm9tIHJlcGxhY2VPcHRpb25zIGZvciB0aGUgZ2l2ZW4gZWxlbWVudCBhbmQgYXBwbHkgZmlsdGVyc1xuICogb24gdGhlbS4gR2V0IGZvciBleGFtcGxlIG9ubHkgZWxlbWVudHMsIHdoaWNoIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGVudHJ5IGl0ZW1zXG4gKi9cblJlcGxhY2VNZW51UHJvdmlkZXIucHJvdG90eXBlLmdldEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICB2YXIgcnVsZXMgPSB0aGlzLl9ydWxlcztcblxuICB2YXIgZW50cmllcztcblxuICBpZiAoIXJ1bGVzLmFsbG93ZWQoJ3NoYXBlLnJlcGxhY2UnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgZGlmZmVyZW50VHlwZSA9IGlzRGlmZmVyZW50VHlwZShlbGVtZW50KTtcblxuICAvLyBzdGFydCBldmVudHMgb3V0c2lkZSBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpcyhidXNpbmVzc09iamVjdC4kcGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuU1RBUlRfRVZFTlQsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZC9jb2xsYXBzZWQgcG9vbHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlBBUlRJQ0lQQU5ULCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgcmV0dXJuIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpICE9PSBlbnRyeS50YXJnZXQuaXNFeHBhbmRlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gc3RhcnQgZXZlbnRzIGluc2lkZSBldmVudCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3RhcnRFdmVudCcpICYmIGlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpKSB7XG4gICAgZW50cmllcyA9IGZpbHRlcihyZXBsYWNlT3B0aW9ucy5FVkVOVF9TVUJfUFJPQ0VTU19TVEFSVF9FVkVOVCwgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgdmFyIGlzSW50ZXJydXB0aW5nID0gdGFyZ2V0LmlzSW50ZXJydXB0aW5nICE9PSBmYWxzZTtcblxuICAgICAgdmFyIGlzSW50ZXJydXB0aW5nRXF1YWwgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5pc0ludGVycnVwdGluZyA9PT0gaXNJbnRlcnJ1cHRpbmc7XG5cbiAgICAgIC8vIGZpbHRlcnMgZWxlbWVudHMgd2hpY2ggdHlwZXMgYW5kIGV2ZW50IGRlZmluaXRpb24gYXJlIGVxdWFsIGJ1dCBoYXZlIGhhdmUgZGlmZmVyZW50IGludGVycnVwdGluZyB0eXBlc1xuICAgICAgcmV0dXJuIGRpZmZlcmVudFR5cGUoZW50cnkpIHx8ICFkaWZmZXJlbnRUeXBlKGVudHJ5KSAmJiAhaXNJbnRlcnJ1cHRpbmdFcXVhbDtcblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBzdGFydCBldmVudHMgaW5zaWRlIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTdGFydEV2ZW50JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpXG4gICAgICAmJiBpcyhidXNpbmVzc09iamVjdC4kcGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlNUQVJUX0VWRU5UX1NVQl9QUk9DRVNTLCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZW5kIGV2ZW50c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkVuZEV2ZW50JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuRU5EX0VWRU5ULCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgLy8gaGlkZSBjYW5jZWwgZW5kIGV2ZW50cyBvdXRzaWRlIHRyYW5zYWN0aW9uc1xuICAgICAgaWYgKHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlID09ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbicgJiYgIWlzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlmZmVyZW50VHlwZShlbnRyeSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGJvdW5kYXJ5IGV2ZW50c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSkge1xuXG4gICAgZW50cmllcyA9IGZpbHRlcihyZXBsYWNlT3B0aW9ucy5CT1VOREFSWV9FVkVOVCwgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldC5ldmVudERlZmluaXRpb24gPT0gJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJyAmJlxuICAgICAgICAgIWlzKGJ1c2luZXNzT2JqZWN0LmF0dGFjaGVkVG9SZWYsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGNhbmNlbEFjdGl2aXR5ID0gdGFyZ2V0LmNhbmNlbEFjdGl2aXR5ICE9PSBmYWxzZTtcblxuICAgICAgdmFyIGlzQ2FuY2VsQWN0aXZpdHlFcXVhbCA9IGJ1c2luZXNzT2JqZWN0LmNhbmNlbEFjdGl2aXR5ID09IGNhbmNlbEFjdGl2aXR5O1xuXG4gICAgICByZXR1cm4gZGlmZmVyZW50VHlwZShlbnRyeSkgfHwgIWRpZmZlcmVudFR5cGUoZW50cnkpICYmICFpc0NhbmNlbEFjdGl2aXR5RXF1YWw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGludGVybWVkaWF0ZSBldmVudHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JykgfHxcbiAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuSU5URVJNRURJQVRFX0VWRU5ULCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZ2F0ZXdheXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHYXRld2F5JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuR0FURVdBWSwgZGlmZmVyZW50VHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIHRyYW5zYWN0aW9uc1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVFJBTlNBQ1RJT04sIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZCBldmVudCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpc0V2ZW50U3ViUHJvY2VzcyhidXNpbmVzc09iamVjdCkgJiYgaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCkpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuRVZFTlRfU1VCX1BST0NFU1MsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlNVQlBST0NFU1NfRVhQQU5ERUQsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBjb2xsYXBzZWQgYWQgaG9jIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpBZEhvY1N1YlByb2Nlc3MnKSAmJiAhaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCkpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVEFTSywgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgdmFyIGlzVGFyZ2V0U3ViUHJvY2VzcyA9IHRhcmdldC50eXBlID09PSAnYnBtbjpTdWJQcm9jZXNzJztcblxuICAgICAgdmFyIGlzVGFyZ2V0RXhwYW5kZWQgPSB0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGlzRGlmZmVyZW50VHlwZShlbGVtZW50LCB0YXJnZXQpICYmICghaXNUYXJnZXRTdWJQcm9jZXNzIHx8IGlzVGFyZ2V0RXhwYW5kZWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBzZXF1ZW5jZSBmbG93c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNlcXVlbmNlRmxvd0VudHJpZXMoZWxlbWVudCwgcmVwbGFjZU9wdGlvbnMuU0VRVUVOQ0VfRkxPVyk7XG4gIH1cblxuICAvLyBmbG93IG5vZGVzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVEFTSywgZGlmZmVyZW50VHlwZSk7XG5cbiAgICAvLyBjb2xsYXBzZWQgU3ViUHJvY2VzcyBjYW4gbm90IGJlIHJlcGxhY2VkIHdpdGggaXRzZWxmXG4gICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgICBlbnRyaWVzID0gZmlsdGVyKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5sYWJlbCAhPT0gJ1N1YiBQcm9jZXNzIChjb2xsYXBzZWQpJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufTtcblxuXG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgaGVhZGVyIGl0ZW1zIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4gVGhpcyBpbmNsdWRlcyBidXR0b25zXG4gKiBmb3IgbXVsdGkgaW5zdGFuY2UgbWFya2VycyBhbmQgZm9yIHRoZSBhZCBob2MgbWFya2VyLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSBhIGxpc3Qgb2YgbWVudSBlbnRyeSBpdGVtc1xuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5nZXRIZWFkZXJFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBoZWFkZXJFbnRyaWVzID0gW107XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgaGVhZGVyRW50cmllcyA9IGhlYWRlckVudHJpZXMuY29uY2F0KHRoaXMuX2dldExvb3BFbnRyaWVzKGVsZW1lbnQpKTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiZcbiAgICAgICFpcyhlbGVtZW50LCAnYnBtbjpUcmFuc2FjdGlvbicpICYmXG4gICAgICAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICBoZWFkZXJFbnRyaWVzLnB1c2godGhpcy5fZ2V0QWRIb2NFbnRyeShlbGVtZW50KSk7XG4gIH1cblxuICByZXR1cm4gaGVhZGVyRW50cmllcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG1lbnUgZW50cnkgb2JqZWN0cyBmb3IgYSBnaXZlbiBlbGVtZW50IGFuZCBmaWx0ZXJzIHRoZSByZXBsYWNlT3B0aW9uc1xuICogYWNjb3JkaW5nIHRvIGEgZmlsdGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJlcGxhY2VPcHRpb25zXG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2NyZWF0ZUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlT3B0aW9ucykge1xuICB2YXIgbWVudUVudHJpZXMgPSBbXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChyZXBsYWNlT3B0aW9ucywgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHZhciBlbnRyeSA9IHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShkZWZpbml0aW9uLCBlbGVtZW50KTtcblxuICAgIG1lbnVFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9KTtcblxuICByZXR1cm4gbWVudUVudHJpZXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbWVudSBlbnRyeSBvYmplY3RzIGZvciBhIGdpdmVuIHNlcXVlbmNlIGZsb3cuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge09iamVjdH0gcmVwbGFjZU9wdGlvbnNcblxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2NyZWF0ZVNlcXVlbmNlRmxvd0VudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlT3B0aW9ucykge1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHZhciBtZW51RW50cmllcyA9IFtdO1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgbW9kZGxlID0gdGhpcy5fbW9kZGxlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHJlcGxhY2VPcHRpb25zLCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgc3dpdGNoIChlbnRyeS5hY3Rpb25OYW1lKSB7XG4gICAgY2FzZSAncmVwbGFjZS13aXRoLWRlZmF1bHQtZmxvdyc6XG4gICAgICBpZiAoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgIT09IGJ1c2luZXNzT2JqZWN0ICYmXG4gICAgICAgICAgICAoaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JykgfHxcbiAgICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkluY2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46Q29tcGxleEdhdGV3YXknKSB8fFxuICAgICAgICAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSkpIHtcblxuICAgICAgICBtZW51RW50cmllcy5wdXNoKHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShlbnRyeSwgZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LnNvdXJjZSwgeyBkZWZhdWx0OiBidXNpbmVzc09iamVjdCB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmVwbGFjZS13aXRoLWNvbmRpdGlvbmFsLWZsb3cnOlxuICAgICAgaWYgKCFidXNpbmVzc09iamVjdC5jb25kaXRpb25FeHByZXNzaW9uICYmIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSkge1xuXG4gICAgICAgIG1lbnVFbnRyaWVzLnB1c2goc2VsZi5fY3JlYXRlTWVudUVudHJ5KGVudHJ5LCBlbGVtZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgY29uZGl0aW9uRXhwcmVzc2lvbiA9IG1vZGRsZS5jcmVhdGUoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHsgYm9keTogJycgfSk7XG5cbiAgICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHsgY29uZGl0aW9uRXhwcmVzc2lvbjogY29uZGl0aW9uRXhwcmVzc2lvbiB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcblxuICAgICAgLy8gZGVmYXVsdCBmbG93c1xuICAgICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSAmJiBidXNpbmVzc09iamVjdC5jb25kaXRpb25FeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBtZW51RW50cmllcy5wdXNoKHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShlbnRyeSwgZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGNvbmRpdGlvbkV4cHJlc3Npb246IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25kaXRpb25hbCBmbG93c1xuICAgICAgaWYgKChpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkluY2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkNvbXBsZXhHYXRld2F5JykgfHxcbiAgICAgICAgICAgaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpBY3Rpdml0eScpKSAmJlxuICAgICAgICAgICBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYuZGVmYXVsdCA9PT0gYnVzaW5lc3NPYmplY3QpIHtcblxuICAgICAgICByZXR1cm4gbWVudUVudHJpZXMucHVzaChzZWxmLl9jcmVhdGVNZW51RW50cnkoZW50cnksIGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudC5zb3VyY2UsIHsgZGVmYXVsdDogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbWVudUVudHJpZXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHNpbmdsZSBtZW51IGVudHJ5IGl0ZW0uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBkZWZpbml0aW9uIGEgc2luZ2xlIHJlcGxhY2Ugb3B0aW9ucyBkZWZpbml0aW9uIG9iamVjdFxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbYWN0aW9uXSBhbiBhY3Rpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgd2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IGVudHJ5IGlzIGJlaW5nIHRyaWdnZXJlZC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG1lbnUgZW50cnkgaXRlbVxuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fY3JlYXRlTWVudUVudHJ5ID0gZnVuY3Rpb24oZGVmaW5pdGlvbiwgZWxlbWVudCwgYWN0aW9uKSB7XG4gIHZhciB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG4gIHZhciByZXBsYWNlRWxlbWVudCA9IHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50O1xuXG4gIHZhciByZXBsYWNlQWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIGRlZmluaXRpb24udGFyZ2V0KTtcbiAgfTtcblxuICBhY3Rpb24gPSBhY3Rpb24gfHwgcmVwbGFjZUFjdGlvbjtcblxuICB2YXIgbWVudUVudHJ5ID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoZGVmaW5pdGlvbi5sYWJlbCksXG4gICAgY2xhc3NOYW1lOiBkZWZpbml0aW9uLmNsYXNzTmFtZSxcbiAgICBpZDogZGVmaW5pdGlvbi5hY3Rpb25OYW1lLFxuICAgIGFjdGlvbjogYWN0aW9uXG4gIH07XG5cbiAgcmV0dXJuIG1lbnVFbnRyeTtcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCBvZiBtZW51IGl0ZW1zIGNvbnRhaW5pbmcgYnV0dG9ucyBmb3IgbXVsdGkgaW5zdGFuY2UgbWFya2Vyc1xuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2dldExvb3BFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBmdW5jdGlvbiB0b2dnbGVMb29wRW50cnkoZXZlbnQsIGVudHJ5KSB7XG4gICAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3M7XG5cbiAgICBpZiAoZW50cnkuYWN0aXZlKSB7XG4gICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzID0gc2VsZi5fbW9kZGxlLmNyZWF0ZShlbnRyeS5vcHRpb25zLmxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuXG4gICAgICBpZiAoZW50cnkub3B0aW9ucy5pc1NlcXVlbnRpYWwpIHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgPSBlbnRyeS5vcHRpb25zLmlzU2VxdWVudGlhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5fbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGxvb3BDaGFyYWN0ZXJpc3RpY3M6IGxvb3BDaGFyYWN0ZXJpc3RpY3MgfSk7XG4gIH1cblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBidXNpbmVzc09iamVjdC5sb29wQ2hhcmFjdGVyaXN0aWNzO1xuXG4gIHZhciBpc1NlcXVlbnRpYWwsXG4gICAgICBpc0xvb3AsXG4gICAgICBpc1BhcmFsbGVsO1xuXG4gIGlmIChsb29wQ2hhcmFjdGVyaXN0aWNzKSB7XG4gICAgaXNTZXF1ZW50aWFsID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG4gICAgaXNMb29wID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgPT09IHVuZGVmaW5lZDtcbiAgICBpc1BhcmFsbGVsID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgIT09IHVuZGVmaW5lZCAmJiAhbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG4gIH1cblxuXG4gIHZhciBsb29wRW50cmllcyA9IFtcbiAgICB7XG4gICAgICBpZDogJ3RvZ2dsZS1wYXJhbGxlbC1taScsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFyYWxsZWwtbWktbWFya2VyJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ1BhcmFsbGVsIE11bHRpIEluc3RhbmNlJyksXG4gICAgICBhY3RpdmU6IGlzUGFyYWxsZWwsXG4gICAgICBhY3Rpb246IHRvZ2dsZUxvb3BFbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljczogJ2JwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MnLFxuICAgICAgICBpc1NlcXVlbnRpYWw6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3RvZ2dsZS1zZXF1ZW50aWFsLW1pJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZXF1ZW50aWFsLW1pLW1hcmtlcicsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdTZXF1ZW50aWFsIE11bHRpIEluc3RhbmNlJyksXG4gICAgICBhY3RpdmU6IGlzU2VxdWVudGlhbCxcbiAgICAgIGFjdGlvbjogdG9nZ2xlTG9vcEVudHJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzOiAnYnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcycsXG4gICAgICAgIGlzU2VxdWVudGlhbDogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd0b2dnbGUtbG9vcCcsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbG9vcC1tYXJrZXInLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnTG9vcCcpLFxuICAgICAgYWN0aXZlOiBpc0xvb3AsXG4gICAgICBhY3Rpb246IHRvZ2dsZUxvb3BFbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljczogJ2JwbW46U3RhbmRhcmRMb29wQ2hhcmFjdGVyaXN0aWNzJ1xuICAgICAgfVxuICAgIH1cbiAgXTtcbiAgcmV0dXJuIGxvb3BFbnRyaWVzO1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgbWVudSBpdGVtcyBjb250YWluaW5nIGEgYnV0dG9uIGZvciB0aGUgYWQgaG9jIG1hcmtlclxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhIG1lbnUgaXRlbVxuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fZ2V0QWRIb2NFbnRyeSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgdmFyIGlzQWRIb2MgPSBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJyk7XG5cbiAgdmFyIHJlcGxhY2VFbGVtZW50ID0gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQ7XG5cbiAgdmFyIGFkSG9jRW50cnkgPSB7XG4gICAgaWQ6ICd0b2dnbGUtYWRob2MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1hZC1ob2MtbWFya2VyJyxcbiAgICB0aXRsZTogdHJhbnNsYXRlKCdBZC1ob2MnKSxcbiAgICBhY3RpdmU6IGlzQWRIb2MsXG4gICAgYWN0aW9uOiBmdW5jdGlvbihldmVudCwgZW50cnkpIHtcbiAgICAgIGlmIChpc0FkSG9jKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRWxlbWVudChlbGVtZW50LCB7IHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnIH0sIHtcbiAgICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgICBsYXlvdXRDb25uZWN0aW9uOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRWxlbWVudChlbGVtZW50LCB7IHR5cGU6ICdicG1uOkFkSG9jU3ViUHJvY2VzcycgfSwge1xuICAgICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICAgIGxheW91dENvbm5lY3Rpb246IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gYWRIb2NFbnRyeTtcbn07XG4iLCJpbXBvcnQgUG9wdXBNZW51TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUnO1xuaW1wb3J0IFJlcGxhY2VNb2R1bGUgZnJvbSAnLi4vcmVwbGFjZSc7XG5cbmltcG9ydCBSZXBsYWNlTWVudVByb3ZpZGVyIGZyb20gJy4vUmVwbGFjZU1lbnVQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFBvcHVwTWVudU1vZHVsZSxcbiAgICBSZXBsYWNlTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdyZXBsYWNlTWVudVByb3ZpZGVyJyBdLFxuICByZXBsYWNlTWVudVByb3ZpZGVyOiBbICd0eXBlJywgUmVwbGFjZU1lbnVQcm92aWRlciBdXG59OyIsImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUsIGlmIGFuIGVsZW1lbnQgaXMgZnJvbSBhIGRpZmZlcmVudCB0eXBlXG4gKiB0aGFuIGEgdGFyZ2V0IGRlZmluaXRpb24uIFRha2VzIGludG8gYWNjb3VudCB0aGUgdHlwZSxcbiAqIGV2ZW50IGRlZmluaXRpb24gdHlwZSBhbmQgdHJpZ2dlcmVkQnlFdmVudCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZmVyZW50VHlwZShlbGVtZW50KSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgICBldmVudERlZmluaXRpb24gPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zICYmIGJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnNbMF07XG5cbiAgICB2YXIgaXNUeXBlRXF1YWwgPSBidXNpbmVzc09iamVjdC4kdHlwZSA9PT0gdGFyZ2V0LnR5cGU7XG5cbiAgICB2YXIgaXNFdmVudERlZmluaXRpb25FcXVhbCA9IChcbiAgICAgIChldmVudERlZmluaXRpb24gJiYgZXZlbnREZWZpbml0aW9uLiR0eXBlKSA9PT0gdGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGVcbiAgICApO1xuXG4gICAgdmFyIGlzVHJpZ2dlcmVkQnlFdmVudEVxdWFsID0gKFxuICAgICAgYnVzaW5lc3NPYmplY3QudHJpZ2dlcmVkQnlFdmVudCA9PT0gdGFyZ2V0LnRyaWdnZXJlZEJ5RXZlbnRcbiAgICApO1xuXG4gICAgdmFyIGlzRXhwYW5kZWRFcXVhbCA9IChcbiAgICAgIHRhcmdldC5pc0V4cGFuZGVkID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRhcmdldC5pc0V4cGFuZGVkID09PSBpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gIWlzVHlwZUVxdWFsIHx8ICFpc0V2ZW50RGVmaW5pdGlvbkVxdWFsIHx8ICFpc1RyaWdnZXJlZEJ5RXZlbnRFcXVhbCB8fCAhaXNFeHBhbmRlZEVxdWFsO1xuICB9O1xufSIsImltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgY3NzRXNjYXBlIGZyb20gJ2Nzcy5lc2NhcGUnO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBxdWVyeSBhcyBkb21RdWVyeVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgYXR0ciBhcyBzdmdBdHRyXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVwbGFjZVByZXZpZXcoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgZWxlbWVudEZhY3RvcnksXG4gICAgY2FudmFzLCBwcmV2aWV3U3VwcG9ydCkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgdmlzdWFscyBvZiBhbGwgZWxlbWVudHMgaW4gdGhlIGNvbnRleHQgd2hpY2ggY2FuIGJlIHJlcGxhY2VkXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVZpc3VhbChjb250ZXh0KSB7XG5cbiAgICB2YXIgcmVwbGFjZW1lbnRzID0gY29udGV4dC5jYW5FeGVjdXRlLnJlcGxhY2VtZW50cztcblxuICAgIGZvckVhY2gocmVwbGFjZW1lbnRzLCBmdW5jdGlvbihyZXBsYWNlbWVudCkge1xuXG4gICAgICB2YXIgaWQgPSByZXBsYWNlbWVudC5vbGRFbGVtZW50SWQ7XG5cbiAgICAgIHZhciBuZXdFbGVtZW50ID0ge1xuICAgICAgICB0eXBlOiByZXBsYWNlbWVudC5uZXdFbGVtZW50VHlwZVxuICAgICAgfTtcblxuICAgICAgLy8gaWYgdGhlIHZpc3VhbCBvZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IHJlcGxhY2VkXG4gICAgICBpZiAoY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHNbaWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGlkKTtcblxuICAgICAgYXNzaWduKG5ld0VsZW1lbnQsIHsgeDogZWxlbWVudC54LCB5OiBlbGVtZW50LnkgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIHRlbXBvcmFyeSBzaGFwZVxuICAgICAgdmFyIHRlbXBTaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKG5ld0VsZW1lbnQpO1xuXG4gICAgICBjYW52YXMuYWRkU2hhcGUodGVtcFNoYXBlLCBlbGVtZW50LnBhcmVudCk7XG5cbiAgICAgIC8vIHNlbGVjdCB0aGUgb3JpZ2luYWwgU1ZHIGVsZW1lbnQgcmVsYXRlZCB0byB0aGUgZWxlbWVudCBhbmQgaGlkZSBpdFxuICAgICAgdmFyIGdmeCA9IGRvbVF1ZXJ5KCdbZGF0YS1lbGVtZW50LWlkPVwiJyArIGNzc0VzY2FwZShlbGVtZW50LmlkKSArICdcIl0nLCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICAgIGlmIChnZngpIHtcbiAgICAgICAgc3ZnQXR0cihnZngsIHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBjbG9uZSB0aGUgZ2Z4IG9mIHRoZSB0ZW1wb3Jhcnkgc2hhcGUgYW5kIGFkZCBpdCB0byB0aGUgZHJhZyBncm91cFxuICAgICAgdmFyIGRyYWdnZXIgPSBwcmV2aWV3U3VwcG9ydC5hZGREcmFnZ2VyKHRlbXBTaGFwZSwgY29udGV4dC5kcmFnR3JvdXApO1xuXG4gICAgICBjb250ZXh0LnZpc3VhbFJlcGxhY2VtZW50c1tpZF0gPSBkcmFnZ2VyO1xuXG4gICAgICBjYW52YXMucmVtb3ZlU2hhcGUodGVtcFNoYXBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2aXN1YWxzIG9mIHRoZSBwcmV2aW91c2x5IHJlcGxhY2VkIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gcmVzdG9yZVZpc3VhbChjb250ZXh0KSB7XG5cbiAgICB2YXIgdmlzdWFsUmVwbGFjZW1lbnRzID0gY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHM7XG5cbiAgICBmb3JFYWNoKHZpc3VhbFJlcGxhY2VtZW50cywgZnVuY3Rpb24oZHJhZ2dlciwgaWQpIHtcblxuICAgICAgdmFyIG9yaWdpbmFsR2Z4ID0gZG9tUXVlcnkoJ1tkYXRhLWVsZW1lbnQtaWQ9XCInICsgY3NzRXNjYXBlKGlkKSArICdcIl0nLCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICAgIGlmIChvcmlnaW5hbEdmeCkge1xuICAgICAgICBzdmdBdHRyKG9yaWdpbmFsR2Z4LCB7IGRpc3BsYXk6ICdpbmxpbmUnIH0pO1xuICAgICAgfVxuXG4gICAgICBkcmFnZ2VyLnJlbW92ZSgpO1xuXG4gICAgICBpZiAodmlzdWFsUmVwbGFjZW1lbnRzW2lkXSkge1xuICAgICAgICBkZWxldGUgdmlzdWFsUmVwbGFjZW1lbnRzW2lkXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGU7XG5cbiAgICBpZiAoIWNvbnRleHQudmlzdWFsUmVwbGFjZW1lbnRzKSB7XG4gICAgICBjb250ZXh0LnZpc3VhbFJlcGxhY2VtZW50cyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChjYW5FeGVjdXRlICYmIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzKSB7XG4gICAgICByZXBsYWNlVmlzdWFsKGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlVmlzdWFsKGNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG59XG5cbkJwbW5SZXBsYWNlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07XG5cbmluaGVyaXRzKEJwbW5SZXBsYWNlUHJldmlldywgQ29tbWFuZEludGVyY2VwdG9yKTsiLCJpbXBvcnQgUHJldmlld1N1cHBvcnRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcHJldmlldy1zdXBwb3J0JztcblxuaW1wb3J0IEJwbW5SZXBsYWNlUHJldmlldyBmcm9tICcuL0JwbW5SZXBsYWNlUHJldmlldyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBQcmV2aWV3U3VwcG9ydE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtblJlcGxhY2VQcmV2aWV3JyBdLFxuICBicG1uUmVwbGFjZVByZXZpZXc6IFsgJ3R5cGUnLCBCcG1uUmVwbGFjZVByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIHBpY2ssXG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBpc1VuZGVmaW5lZCxcbiAgaGFzXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2Vzc1xufSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7IGdldFByb3BlcnR5TmFtZXMgfSBmcm9tICcuLi9jb3B5LXBhc3RlL01vZGRsZUNvcHknO1xuXG5mdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCwgcHJvcGVydGllcykge1xuICBpZiAoIWlzQXJyYXkocHJvcGVydGllcykpIHtcbiAgICBwcm9wZXJ0aWVzID0gWyBwcm9wZXJ0aWVzIF07XG4gIH1cblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChzb3VyY2VbcHJvcGVydHldKSkge1xuICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9KTtcbn1cblxudmFyIENVU1RPTV9QUk9QRVJUSUVTID0gW1xuICAnY2FuY2VsQWN0aXZpdHknLFxuICAnaW5zdGFudGlhdGUnLFxuICAnZXZlbnRHYXRld2F5VHlwZScsXG4gICd0cmlnZ2VyZWRCeUV2ZW50JyxcbiAgJ2lzSW50ZXJydXB0aW5nJ1xuXTtcblxuXG5mdW5jdGlvbiB0b2dnZWxpbmcoZWxlbWVudCwgdGFyZ2V0KSB7XG5cbiAgdmFyIG9sZENvbGxhcHNlZCA9IChcbiAgICBlbGVtZW50ICYmIGhhcyhlbGVtZW50LCAnY29sbGFwc2VkJykgPyBlbGVtZW50LmNvbGxhcHNlZCA6ICFpc0V4cGFuZGVkKGVsZW1lbnQpXG4gICk7XG5cbiAgdmFyIHRhcmdldENvbGxhcHNlZDtcblxuICBpZiAodGFyZ2V0ICYmIChoYXModGFyZ2V0LCAnY29sbGFwc2VkJykgfHwgaGFzKHRhcmdldCwgJ2lzRXhwYW5kZWQnKSkpIHtcblxuICAgIC8vIHByb3BlcnR5IGlzIGV4cGxpY2l0bHkgc2V0IHNvIHVzZSBpdFxuICAgIHRhcmdldENvbGxhcHNlZCA9IChcbiAgICAgIGhhcyh0YXJnZXQsICdjb2xsYXBzZWQnKSA/IHRhcmdldC5jb2xsYXBzZWQgOiAhdGFyZ2V0LmlzRXhwYW5kZWRcbiAgICApO1xuICB9IGVsc2Uge1xuXG4gICAgLy8ga2VlcCBvbGQgc3RhdGVcbiAgICB0YXJnZXRDb2xsYXBzZWQgPSBvbGRDb2xsYXBzZWQ7XG4gIH1cblxuICBpZiAob2xkQ29sbGFwc2VkICE9PSB0YXJnZXRDb2xsYXBzZWQpIHtcbiAgICBlbGVtZW50LmNvbGxhcHNlZCA9IG9sZENvbGxhcHNlZDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgdGFrZXMgY2FyZSBvZiByZXBsYWNpbmcgQlBNTiBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVwbGFjZShcbiAgICBicG1uRmFjdG9yeSxcbiAgICBlbGVtZW50RmFjdG9yeSxcbiAgICBtb2RkbGVDb3B5LFxuICAgIG1vZGVsaW5nLFxuICAgIHJlcGxhY2UsXG4gICAgc2VsZWN0aW9uXG4pIHtcblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBuZXcgYnVzaW5lc3Mgb2JqZWN0IGZvciB0aGUgcmVwbGFjZW1lbnQgZWxlbWVudFxuICAgKiBhbmQgdHJpZ2dlcnMgdGhlIHJlcGxhY2Ugb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IFtoaW50c11cbiAgICpcbiAgICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIHRhcmdldCwgaGludHMpIHtcblxuICAgIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgICB2YXIgdHlwZSA9IHRhcmdldC50eXBlLFxuICAgICAgICBvbGRCdXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBpZiAoaXNTdWJQcm9jZXNzKG9sZEJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdicG1uOlN1YlByb2Nlc3MnKSB7XG4gICAgICAgIGlmICh0b2dnZWxpbmcoZWxlbWVudCwgdGFyZ2V0KSkge1xuXG4gICAgICAgICAgLy8gZXhwYW5kaW5nIG9yIGNvbGxhcHNpbmcgcHJvY2Vzc1xuICAgICAgICAgIG1vZGVsaW5nLnRvZ2dsZUNvbGxhcHNlKGVsZW1lbnQpO1xuXG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3QnVzaW5lc3NPYmplY3QgPSBicG1uRmFjdG9yeS5jcmVhdGUodHlwZSk7XG5cbiAgICB2YXIgbmV3RWxlbWVudCA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBidXNpbmVzc09iamVjdDogbmV3QnVzaW5lc3NPYmplY3RcbiAgICB9O1xuXG4gICAgdmFyIGVsZW1lbnRQcm9wcyA9IGdldFByb3BlcnR5TmFtZXMob2xkQnVzaW5lc3NPYmplY3QuJGRlc2NyaXB0b3IpLFxuICAgICAgICBuZXdFbGVtZW50UHJvcHMgPSBnZXRQcm9wZXJ0eU5hbWVzKG5ld0J1c2luZXNzT2JqZWN0LiRkZXNjcmlwdG9yLCB0cnVlKSxcbiAgICAgICAgY29weVByb3BzID0gaW50ZXJzZWN0aW9uKGVsZW1lbnRQcm9wcywgbmV3RWxlbWVudFByb3BzKTtcblxuICAgIC8vIGluaXRpYWxpemUgc3BlY2lhbCBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGFyZ2V0IGRlZmluaXRpb25cbiAgICBhc3NpZ24obmV3QnVzaW5lc3NPYmplY3QsIHBpY2sodGFyZ2V0LCBDVVNUT01fUFJPUEVSVElFUykpO1xuXG4gICAgdmFyIHByb3BlcnRpZXMgPSBmaWx0ZXIoY29weVByb3BzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHtcblxuICAgICAgLy8gY29weWluZyBldmVudCBkZWZpbml0aW9ucywgdW5sZXNzIHdlIHJlcGxhY2VcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdldmVudERlZmluaXRpb25zJykge1xuICAgICAgICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmV0YWluIGxvb3AgY2hhcmFjdGVyaXN0aWNzIGlmIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgLy8gaXMgbm90IGFuIGV2ZW50IHN1YiBwcm9jZXNzXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnbG9vcENoYXJhY3RlcmlzdGljcycpIHtcbiAgICAgICAgcmV0dXJuICFpc0V2ZW50U3ViUHJvY2VzcyhuZXdCdXNpbmVzc09iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNvIHRoZSBhcHBsaWVkIHByb3BlcnRpZXMgZnJvbSAndGFyZ2V0JyBkb24ndCBnZXQgbG9zdFxuICAgICAgaWYgKG5ld0J1c2luZXNzT2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAncHJvY2Vzc1JlZicgJiYgdGFyZ2V0LmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3RyaWdnZXJlZEJ5RXZlbnQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBuZXdCdXNpbmVzc09iamVjdCA9IG1vZGRsZUNvcHkuY29weUVsZW1lbnQoXG4gICAgICBvbGRCdXNpbmVzc09iamVjdCxcbiAgICAgIG5ld0J1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllc1xuICAgICk7XG5cbiAgICAvLyBpbml0aWFsaXplIGN1c3RvbSBCUE1OIGV4dGVuc2lvbnNcbiAgICBpZiAodGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGUpIHtcblxuICAgICAgLy8gb25seSBpbml0aWFsaXplIHdpdGggbmV3IGV2ZW50RGVmaW5pdGlvblxuICAgICAgLy8gaWYgd2UgZGlkIG5vdCBzZXQgYW4gZXZlbnQgZGVmaW5pdGlvbiB5ZXQsXG4gICAgICAvLyBpLmUuIGJlY2F1c2Ugd2UgY29waWVkIGl0XG4gICAgICBpZiAoIWhhc0V2ZW50RGVmaW5pdGlvbihuZXdCdXNpbmVzc09iamVjdCwgdGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGUpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuZXZlbnREZWZpbml0aW9uVHlwZSA9IHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlO1xuICAgICAgICBuZXdFbGVtZW50LmV2ZW50RGVmaW5pdGlvbkF0dHJzID0gdGFyZ2V0LmV2ZW50RGVmaW5pdGlvbkF0dHJzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcyhvbGRCdXNpbmVzc09iamVjdCwgJ2JwbW46QWN0aXZpdHknKSkge1xuXG4gICAgICBpZiAoaXNTdWJQcm9jZXNzKG9sZEJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgICAgIC8vIG5vIHRvZ2dlbGluZywgc28ga2VlcCBvbGQgc3RhdGVcbiAgICAgICAgbmV3RWxlbWVudC5pc0V4cGFuZGVkID0gaXNFeHBhbmRlZChvbGRCdXNpbmVzc09iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVsc2UgaWYgcHJvcGVydHkgaXMgZXhwbGljaXRseSBzZXQsIHVzZSBpdFxuICAgICAgZWxzZSBpZiAodGFyZ2V0ICYmIGhhcyh0YXJnZXQsICdpc0V4cGFuZGVkJykpIHtcbiAgICAgICAgbmV3RWxlbWVudC5pc0V4cGFuZGVkID0gdGFyZ2V0LmlzRXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IG5lZWQgYWxzbyB0byByZXNwZWN0IG1pbi9tYXggU2l6ZVxuICAgICAgLy8gY29weSBzaXplLCBmcm9tIGFuIGV4cGFuZGVkIHN1YnByb2Nlc3MgdG8gYW4gZXhwYW5kZWQgYWx0ZXJuYXRpdmUgc3VicHJvY2Vzc1xuICAgICAgLy8gZXhjZXB0IGJwbW46VGFzaywgYmVjYXVzZSBUYXNrIGlzIGFsd2F5cyBleHBhbmRlZFxuICAgICAgaWYgKChpc0V4cGFuZGVkKG9sZEJ1c2luZXNzT2JqZWN0KSAmJiAhaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOlRhc2snKSkgJiYgbmV3RWxlbWVudC5pc0V4cGFuZGVkKSB7XG4gICAgICAgIG5ld0VsZW1lbnQud2lkdGggPSBlbGVtZW50LndpZHRoO1xuICAgICAgICBuZXdFbGVtZW50LmhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBub3QgZXhwYW5kaW5nIHN1YiBwcm9jZXNzXG4gICAgaWYgKGlzU3ViUHJvY2VzcyhvbGRCdXNpbmVzc09iamVjdCkgJiYgIWlzU3ViUHJvY2VzcyhuZXdCdXNpbmVzc09iamVjdCkpIHtcbiAgICAgIGhpbnRzLm1vdmVDaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRyYW5zZm9ybSBjb2xsYXBzZWQvZXhwYW5kZWQgcG9vbHNcbiAgICBpZiAoaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgICAgLy8gY3JlYXRlIGV4cGFuZGVkIHBvb2xcbiAgICAgIGlmICh0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBuZXdCdXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlByb2Nlc3MnKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuIHdoZW4gdHJhbnNmb3JtaW5nIHRvIGNvbGxhcHNlZCBwb29sXG4gICAgICAgIGhpbnRzLm1vdmVDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBhcHBseSBzYW1lIHdpZHRoIGFuZCBkZWZhdWx0IGhlaWdodFxuICAgICAgbmV3RWxlbWVudC53aWR0aCA9IGVsZW1lbnQud2lkdGg7XG4gICAgICBuZXdFbGVtZW50LmhlaWdodCA9IGVsZW1lbnRGYWN0b3J5Ll9nZXREZWZhdWx0U2l6ZShuZXdCdXNpbmVzc09iamVjdCkuaGVpZ2h0O1xuICAgIH1cblxuICAgIG5ld0J1c2luZXNzT2JqZWN0Lm5hbWUgPSBvbGRCdXNpbmVzc09iamVjdC5uYW1lO1xuXG4gICAgLy8gcmV0YWluIGRlZmF1bHQgZmxvdydzIHJlZmVyZW5jZSBiZXR3ZWVuIGluY2x1c2l2ZSA8LT4gZXhjbHVzaXZlIGdhdGV3YXlzIGFuZCBhY3Rpdml0aWVzXG4gICAgaWYgKFxuICAgICAgaXNBbnkob2xkQnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICdicG1uOkluY2x1c2l2ZUdhdGV3YXknLFxuICAgICAgICAnYnBtbjpBY3Rpdml0eSdcbiAgICAgIF0pICYmXG4gICAgICBpc0FueShuZXdCdXNpbmVzc09iamVjdCwgW1xuICAgICAgICAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JyxcbiAgICAgICAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICdicG1uOkFjdGl2aXR5J1xuICAgICAgXSlcbiAgICApIHtcbiAgICAgIG5ld0J1c2luZXNzT2JqZWN0LmRlZmF1bHQgPSBvbGRCdXNpbmVzc09iamVjdC5kZWZhdWx0O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRhcmdldC5ob3N0ICYmXG4gICAgICAhaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgICAgaXMobmV3QnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKVxuICAgICkge1xuICAgICAgbmV3RWxlbWVudC5ob3N0ID0gdGFyZ2V0Lmhvc3Q7XG4gICAgfVxuXG4gICAgbmV3RWxlbWVudC5kaSA9IHt9O1xuXG4gICAgLy8gZmlsbCBhbmQgc3Ryb2tlIHdpbGwgYmUgc2V0IHRvIERJXG4gICAgY29weVByb3BlcnRpZXMob2xkQnVzaW5lc3NPYmplY3QuZGksIG5ld0VsZW1lbnQuZGksIFtcbiAgICAgICdmaWxsJyxcbiAgICAgICdzdHJva2UnXG4gICAgXSk7XG5cbiAgICBuZXdFbGVtZW50ID0gcmVwbGFjZS5yZXBsYWNlRWxlbWVudChlbGVtZW50LCBuZXdFbGVtZW50LCBoaW50cyk7XG5cbiAgICBpZiAoaGludHMuc2VsZWN0ICE9PSBmYWxzZSkge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChuZXdFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxuXG4gIHRoaXMucmVwbGFjZUVsZW1lbnQgPSByZXBsYWNlRWxlbWVudDtcbn1cblxuQnBtblJlcGxhY2UuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ21vZGRsZUNvcHknLFxuICAnbW9kZWxpbmcnLFxuICAncmVwbGFjZScsXG4gICdzZWxlY3Rpb24nXG5dO1xuXG5cbmZ1bmN0aW9uIGlzU3ViUHJvY2Vzcyhibykge1xuICByZXR1cm4gaXMoYm8sICdicG1uOlN1YlByb2Nlc3MnKTtcbn1cblxuZnVuY3Rpb24gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHR5cGUpIHtcblxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gdHlwZSAmJiBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKS5zb21lKGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXMoZGVmaW5pdGlvbiwgdHlwZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXB1dGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGExLCBhMikge1xuICByZXR1cm4gYTEuZmlsdGVyKGZ1bmN0aW9uKGVsKSB7XG4gICAgcmV0dXJuIGEyLmluZGV4T2YoZWwpICE9PSAtMTtcbiAgfSk7XG59XG4iLCJleHBvcnQgdmFyIFNUQVJUX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtaW50ZXJtZWRpYXRlLXRocm93aW5nJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10aW1lci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIFN0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgU1RBUlRfRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1pbnRlcm1lZGlhdGUtdGhyb3dpbmcnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIElOVEVSTUVESUFURV9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1pbnRlcm1lZGlhdGUtY2F0Y2gnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdMaW5rIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1saW5rLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1saW5rJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicsXG4gICAgICBldmVudERlZmluaXRpb25BdHRyczoge1xuICAgICAgICBuYW1lOiAnJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTGluayBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbGluay1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbGluaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nLFxuICAgICAgZXZlbnREZWZpbml0aW9uQXR0cnM6IHtcbiAgICAgICAgbmFtZTogJydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEVORF9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VzY2FsYXRpb24gRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Vycm9yIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtZXJyb3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDYW5jZWwgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtY2FuY2VsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGVybWluYXRlIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10ZXJtaW5hdGUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LXRlcm1pbmF0ZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUZXJtaW5hdGVFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEdBVEVXQVkgPSBbXG4gIHtcbiAgICBsYWJlbDogJ0V4Y2x1c2l2ZSBHYXRld2F5JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV4Y2x1c2l2ZS1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS14b3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BhcmFsbGVsIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZ2F0ZXdheScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWdhdGV3YXktcGFyYWxsZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFyYWxsZWxHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW5jbHVzaXZlIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtaW5jbHVzaXZlLWdhdGV3YXknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1nYXRld2F5LW9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkluY2x1c2l2ZUdhdGV3YXknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wbGV4IEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGxleC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1jb21wbGV4JyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkNvbXBsZXhHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgYmFzZWQgR2F0ZXdheScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ldmVudC1iYXNlZC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1ldmVudGJhc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JyxcbiAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSxcbiAgICAgIGV2ZW50R2F0ZXdheVR5cGU6ICdFeGNsdXNpdmUnXG4gICAgfVxuICB9XG5cbiAgLy8gR2F0ZXdheXMgZGVhY3RpdmF0ZWQgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9pc3N1ZXMvMTk0XG4gIC8vIHtcbiAgLy8gICBsYWJlbDogJ0V2ZW50IGJhc2VkIGluc3RhbnRpYXRpbmcgR2F0ZXdheScsXG4gIC8vICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leGNsdXNpdmUtZXZlbnQtYmFzZWQtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV4Y2x1c2l2ZS1ldmVudC1iYXNlZCcsXG4gIC8vICAgdGFyZ2V0OiB7XG4gIC8vICAgICB0eXBlOiAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSdcbiAgLy8gICB9LFxuICAvLyAgIG9wdGlvbnM6IHtcbiAgLy8gICAgIGJ1c2luZXNzT2JqZWN0OiB7IGluc3RhbnRpYXRlOiB0cnVlLCBldmVudEdhdGV3YXlUeXBlOiAnRXhjbHVzaXZlJyB9XG4gIC8vICAgfVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgbGFiZWw6ICdQYXJhbGxlbCBFdmVudCBiYXNlZCBpbnN0YW50aWF0aW5nIEdhdGV3YXknLFxuICAvLyAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZXZlbnQtYmFzZWQtaW5zdGFudGlhdGUtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXBhcmFsbGVsLWV2ZW50LWJhc2VkLWluc3RhbnRpYXRlLWdhdGV3YXknLFxuICAvLyAgIHRhcmdldDoge1xuICAvLyAgICAgdHlwZTogJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknXG4gIC8vICAgfSxcbiAgLy8gICBvcHRpb25zOiB7XG4gIC8vICAgICBidXNpbmVzc09iamVjdDogeyBpbnN0YW50aWF0ZTogdHJ1ZSwgZXZlbnRHYXRld2F5VHlwZTogJ1BhcmFsbGVsJyB9XG4gIC8vICAgfVxuICAvLyB9XG5dO1xuXG5leHBvcnQgdmFyIFNVQlBST0NFU1NfRVhQQU5ERUQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1RyYW5zYWN0aW9uJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRyYW5zYWN0aW9uJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhbnNhY3Rpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VHJhbnNhY3Rpb24nLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgU3ViIFByb2Nlc3MnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXZlbnQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV2ZW50LXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICB0cmlnZ2VyZWRCeUV2ZW50OiB0cnVlLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3ViIFByb2Nlc3MgKGNvbGxhcHNlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWNvbGxhcHNlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRSQU5TQUNUSU9OID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3VicHJvY2Vzcy1leHBhbmRlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0V2ZW50IFN1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV2ZW50LXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1ldmVudC1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgdHJpZ2dlcmVkQnlFdmVudDogdHJ1ZSxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVHJhbnNhY3Rpb24nLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdHJhbnNhY3Rpb24nLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi10cmFuc2FjdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpUcmFuc2FjdGlvbicsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRBU0sgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1Rhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXRhc2snLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlbmQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZW5kLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZW5kJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlNlbmRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmVjZWl2ZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXJlY2VpdmUtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXJlY2VpdmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UmVjZWl2ZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdVc2VyIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdXNlci10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdXNlcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpVc2VyVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hbnVhbCBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1hbnVhbC10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbWFudWFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOk1hbnVhbFRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCdXNpbmVzcyBSdWxlIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcnVsZS10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tYnVzaW5lc3MtcnVsZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2VydmljZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNlcnZpY2UtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNlcnZpY2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2VydmljZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTY3JpcHQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zY3JpcHQtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNjcmlwdCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTY3JpcHRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FsbCBBY3Rpdml0eScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jYWxsLWFjdGl2aXR5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY2FsbC1hY3Rpdml0eScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcyAoY29sbGFwc2VkKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb2xsYXBzZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtY29sbGFwc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzIChleHBhbmRlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXhwYW5kZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEJPVU5EQVJZX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10aW1lci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1lcnJvcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FuY2VsIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jYW5jZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29tcGVuc2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctbWVzc2FnZS1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctdGltZXItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW5vbi1pbnRlcnJ1cHRpbmctZXNjYWxhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nLFxuICAgICAgY2FuY2VsQWN0aXZpdHk6IGZhbHNlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1jb25kaXRpb25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1NfU1RBUlRfRVZFTlQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWVycm9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXRpbWVyLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbi1pbnRlcnJ1cHRpbmctc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgU0VRVUVOQ0VfRkxPVyA9IFtcbiAge1xuICAgIGxhYmVsOiAnU2VxdWVuY2UgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZXF1ZW5jZS1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRGVmYXVsdCBGbG93JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWRlZmF1bHQtZmxvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWRlZmF1bHQtZmxvdydcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29uZGl0aW9uYWwtZmxvdydcbiAgfVxuXTtcblxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnRXhwYW5kZWQgUG9vbCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leHBhbmRlZC1wb29sJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFydGljaXBhbnQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29sbGFwc2VkIFBvb2wnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXBvb2wnLFxuXG4gICAgLy8gVE9ETyhAamFuc3R1ZW1tZWwpOiBtYXliZSBkZXNpZ24gbmV3IGljb25cbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfVxuXTtcbiIsImltcG9ydCBDb3B5UGFzdGVNb2R1bGUgZnJvbSAnLi4vY29weS1wYXN0ZSc7XG5pbXBvcnQgUmVwbGFjZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcblxuaW1wb3J0IEJwbW5SZXBsYWNlIGZyb20gJy4vQnBtblJlcGxhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29weVBhc3RlTW9kdWxlLFxuICAgIFJlcGxhY2VNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlXG4gIF0sXG4gIGJwbW5SZXBsYWNlOiBbICd0eXBlJywgQnBtblJlcGxhY2UgXVxufTtcbiIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0UGFyZW50LFxuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzTGFiZWxcbn0gZnJvbSAnLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2VzcyxcbiAgaXNJbnRlcnJ1cHRpbmcsXG4gIGhhc0Vycm9yRXZlbnREZWZpbml0aW9uLFxuICBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLFxuICBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IFJ1bGVQcm92aWRlciBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9SdWxlUHJvdmlkZXInO1xuXG5pbXBvcnQge1xuICBnZXRCb3VuZGFyeUF0dGFjaG1lbnQgYXMgaXNCb3VuZGFyeUF0dGFjaG1lbnRcbn0gZnJvbSAnLi4vc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIG1vZGVsaW5nIHJ1bGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblJ1bGVzKGV2ZW50QnVzKSB7XG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcbn1cblxuaW5oZXJpdHMoQnBtblJ1bGVzLCBSdWxlUHJvdmlkZXIpO1xuXG5CcG1uUnVsZXMuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uc3RhcnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGNhblN0YXJ0Q29ubmVjdGlvbihzb3VyY2UpO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgdGFyZ2V0UGFyZW50ID0gaGludHMudGFyZ2V0UGFyZW50LFxuICAgICAgICB0YXJnZXRBdHRhY2ggPSBoaW50cy50YXJnZXRBdHRhY2g7XG5cbiAgICAvLyBkb24ndCBhbGxvdyBpbmNvbWluZyBjb25uZWN0aW9ucyBvblxuICAgIC8vIG5ld2x5IGNyZWF0ZWQgYm91bmRhcnkgZXZlbnRzXG4gICAgLy8gdG8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKHRhcmdldEF0dGFjaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IHNldCB0YXJnZXQgcGFyZW50IGZvciBzY29waW5nXG4gICAgLy8gY2hlY2tzIHRvIHdvcmtcbiAgICBpZiAodGFyZ2V0UGFyZW50KSB7XG4gICAgICB0YXJnZXQucGFyZW50ID0gdGFyZ2V0UGFyZW50O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gICAgfSBmaW5hbGx5IHtcblxuICAgICAgLy8gdW5zZXQgdGVtcG9yYXJ5IHRhcmdldCBwYXJlbnRcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQpIHtcbiAgICAgICAgdGFyZ2V0LnBhcmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBjYW5Db25uZWN0KHNvdXJjZSwgdGFyZ2V0LCBjb25uZWN0aW9uKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogY29udGV4dC5jb25uZWN0aW9uLnR5cGVcbiAgICB9O1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgcmV0dXJuIGNhblJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcG9zaXRpb24gPSBjb250ZXh0LnBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBldmVyeShlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gY2FuQ29ubmVjdChlbGVtZW50LnNvdXJjZSwgZWxlbWVudC50YXJnZXQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5ob3N0KSB7XG4gICAgICAgIHJldHVybiBjYW5BdHRhY2goZWxlbWVudCwgZWxlbWVudC5ob3N0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYW5DcmVhdGUoZWxlbWVudCwgdGFyZ2V0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoaXMuYWRkUnVsZSgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIHBvc2l0aW9uID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIHJldHVybiBjYW5BdHRhY2goc2hhcGVzLCB0YXJnZXQsIG51bGwsIHBvc2l0aW9uKSB8fFxuICAgICAgICAgICBjYW5SZXBsYWNlKHNoYXBlcywgdGFyZ2V0LCBwb3NpdGlvbikgfHxcbiAgICAgICAgICAgY2FuTW92ZShzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pIHx8XG4gICAgICAgICAgIGNhbkluc2VydChzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2FuQ3JlYXRlKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgY29udGV4dC5zb3VyY2UsXG4gICAgICBjb250ZXh0LnBvc2l0aW9uXG4gICAgKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdzaGFwZS5hdHRhY2gnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICByZXR1cm4gY2FuQXR0YWNoKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgbnVsbCxcbiAgICAgIGNvbnRleHQucG9zaXRpb25cbiAgICApO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2VsZW1lbnQuY29weScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgcmV0dXJuIGNhbkNvcHkoZWxlbWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn07XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29ubmVjdE1lc3NhZ2VGbG93ID0gY2FuQ29ubmVjdE1lc3NhZ2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3cgPSBjYW5Db25uZWN0U2VxdWVuY2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24gPSBjYW5Db25uZWN0RGF0YUFzc29jaWF0aW9uO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RBc3NvY2lhdGlvbiA9IGNhbkNvbm5lY3RBc3NvY2lhdGlvbjtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Nb3ZlID0gY2FuTW92ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5BdHRhY2ggPSBjYW5BdHRhY2g7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuUmVwbGFjZSA9IGNhblJlcGxhY2U7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuRHJvcCA9IGNhbkRyb3A7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuSW5zZXJ0ID0gY2FuSW5zZXJ0O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNyZWF0ZSA9IGNhbkNyZWF0ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Db25uZWN0ID0gY2FuQ29ubmVjdDtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5SZXNpemUgPSBjYW5SZXNpemU7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29weSA9IGNhbkNvcHk7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHJ1bGUgY2hlY2tpbmdcbiAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiBnaXZlbiBlbGVtZW50IGNhbiBiZSB1c2VkIGZvciBzdGFydGluZyBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IHNvdXJjZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY2FuU3RhcnRDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgaWYgKG5vbkV4aXN0aW5nT3JMYWJlbChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpGbG93Tm9kZScsXG4gICAgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJyxcbiAgICAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJyxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnLFxuICAgICdicG1uOkdyb3VwJ1xuICBdKTtcbn1cblxuZnVuY3Rpb24gbm9uRXhpc3RpbmdPckxhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFlbGVtZW50IHx8IGlzTGFiZWwoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuXG5mdW5jdGlvbiBnZXRPcmdhbml6YXRpb25hbFBhcmVudChlbGVtZW50KSB7XG5cbiAgZG8ge1xuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZiB8fFxuICAgICAgICBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KVxuICAgICAgKTtcbiAgICB9XG4gIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQpKTtcblxufVxuXG5mdW5jdGlvbiBpc1RleHRBbm5vdGF0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXAoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cblxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25Cb3VuZGFyeShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzRm9yQ29tcGVuc2F0aW9uKGUpIHtcbiAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGUpLmlzRm9yQ29tcGVuc2F0aW9uO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmdhbml6YXRpb24oYSwgYikge1xuICB2YXIgcGFyZW50QSA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGEpLFxuICAgICAgcGFyZW50QiA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGIpO1xuXG4gIHJldHVybiBwYXJlbnRBID09PSBwYXJlbnRCO1xufVxuXG5mdW5jdGlvbiBpc01lc3NhZ2VGbG93U291cmNlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnKSAmJlxuICAgICFpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgKFxuICAgICAgIWlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykgfHwgKFxuICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpUaHJvd0V2ZW50JykgJiZcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uT3JOb25lKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKVxuICAgICAgKVxuICAgIClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNNZXNzYWdlRmxvd1RhcmdldChlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJykgJiZcbiAgICAhaXMoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgIWlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpICYmIChcbiAgICAgICFpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpIHx8IChcbiAgICAgICAgaXMoZWxlbWVudCwgJ2JwbW46Q2F0Y2hFdmVudCcpICYmXG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbk9yTm9uZShlbGVtZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJylcbiAgICAgIClcbiAgICApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjb3BlUGFyZW50KGVsZW1lbnQpIHtcblxuICB2YXIgcGFyZW50ID0gZWxlbWVudDtcblxuICB3aGlsZSAoKHBhcmVudCA9IHBhcmVudC5wYXJlbnQpKSB7XG5cbiAgICBpZiAoaXMocGFyZW50LCAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInKSkge1xuICAgICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KHBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzKHBhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KHBhcmVudCkucHJvY2Vzc1JlZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNTYW1lU2NvcGUoYSwgYikge1xuICB2YXIgc2NvcGVQYXJlbnRBID0gZ2V0U2NvcGVQYXJlbnQoYSksXG4gICAgICBzY29wZVBhcmVudEIgPSBnZXRTY29wZVBhcmVudChiKTtcblxuICByZXR1cm4gc2NvcGVQYXJlbnRBID09PSBzY29wZVBhcmVudEI7XG59XG5cbmZ1bmN0aW9uIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCBldmVudERlZmluaXRpb24pIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuICEhZmluZChiby5ldmVudERlZmluaXRpb25zIHx8IFtdLCBmdW5jdGlvbihkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIGlzKGRlZmluaXRpb24sIGV2ZW50RGVmaW5pdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNFdmVudERlZmluaXRpb25Pck5vbmUoZWxlbWVudCwgZXZlbnREZWZpbml0aW9uKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAoYm8uZXZlbnREZWZpbml0aW9ucyB8fCBbXSkuZXZlcnkoZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBpcyhkZWZpbml0aW9uLCBldmVudERlZmluaXRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNTZXF1ZW5jZUZsb3dTb3VyY2UoZWxlbWVudCkge1xuICByZXR1cm4gKFxuICAgIGlzKGVsZW1lbnQsICdicG1uOkZsb3dOb2RlJykgJiZcbiAgICAhaXMoZWxlbWVudCwgJ2JwbW46RW5kRXZlbnQnKSAmJlxuICAgICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50KSAmJlxuICAgICEoaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpICYmXG4gICAgICBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpXG4gICAgKSAmJlxuICAgICFpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5KGVsZW1lbnQpICYmXG4gICAgIWlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU2VxdWVuY2VGbG93VGFyZ2V0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpICYmXG4gICAgIWlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJlxuICAgICFpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkgJiZcbiAgICAhKGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSAmJlxuICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKVxuICAgICkgJiZcbiAgICAhaXNGb3JDb21wZW5zYXRpb24oZWxlbWVudClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFdmVudEJhc2VkVGFyZ2V0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpSZWNlaXZlVGFzaycpIHx8IChcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSAmJiAoXG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC53YXlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudCkge1xuXG4gIHZhciBwYXJlbnRzID0gW107XG5cbiAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQ7XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcGFyZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBpc1BhcmVudChwb3NzaWJsZVBhcmVudCwgZWxlbWVudCkge1xuICB2YXIgYWxsUGFyZW50cyA9IGdldFBhcmVudHMoZWxlbWVudCk7XG4gIHJldHVybiBhbGxQYXJlbnRzLmluZGV4T2YocG9zc2libGVQYXJlbnQpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCwgY29ubmVjdGlvbikge1xuXG4gIGlmIChub25FeGlzdGluZ09yTGFiZWwoc291cmNlKSB8fCBub25FeGlzdGluZ09yTGFiZWwodGFyZ2V0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFpcyhjb25uZWN0aW9uLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgaWYgKGNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdicG1uOk1lc3NhZ2VGbG93JyB9O1xuICAgIH1cblxuICAgIGlmIChjYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2JwbW46U2VxdWVuY2VGbG93JyB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb25uZWN0RGF0YUFzc29jaWF0aW9uID0gY2FuQ29ubmVjdERhdGFBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCk7XG5cbiAgaWYgKGNvbm5lY3REYXRhQXNzb2NpYXRpb24pIHtcbiAgICByZXR1cm4gY29ubmVjdERhdGFBc3NvY2lhdGlvbjtcbiAgfVxuXG4gIGlmIChpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5KHNvdXJjZSkgJiYgaXNGb3JDb21wZW5zYXRpb24odGFyZ2V0KSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICBhc3NvY2lhdGlvbkRpcmVjdGlvbjogJ09uZSdcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNhbkNvbm5lY3RBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbidcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENhbiBhbiBlbGVtZW50IGJlIGRyb3BwZWQgaW50byB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjYW5Ecm9wKGVsZW1lbnQsIHRhcmdldCwgcG9zaXRpb24pIHtcblxuICAvLyBjYW4gbW92ZSBsYWJlbHMgYW5kIGdyb3VwcyBldmVyeXdoZXJlXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpIHx8IGlzR3JvdXAoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cbiAgLy8gZGlzYWxsb3cgdG8gY3JlYXRlIGVsZW1lbnRzIG9uIGNvbGxhcHNlZCBwb29sc1xuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpc0V4cGFuZGVkKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyB0byBjcmVhdGUgbmV3IHBhcnRpY2lwYW50cyBvblxuICAvLyBleGlzdGluZyBjb2xsYWJvcmF0aW9uIGFuZCBwcm9jZXNzIGRpYWdyYW1zXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGlzKHRhcmdldCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLy8gYWxsb3cgbW92aW5nIERhdGFJbnB1dCAvIERhdGFPdXRwdXQgd2l0aGluIGl0cyBvcmlnaW5hbCBjb250YWluZXIgb25seVxuICBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpEYXRhSW5wdXQnLCAnYnBtbjpEYXRhT3V0cHV0JyBdKSkge1xuXG4gICAgaWYgKGVsZW1lbnQucGFyZW50KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0ID09PSBlbGVtZW50LnBhcmVudDtcbiAgICB9XG4gIH1cblxuICAvLyBhbGxvdyBjcmVhdGluZyBsYW5lcyBvbiBwYXJ0aWNpcGFudHMgYW5kIG90aGVyIGxhbmVzIG9ubHlcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIHJldHVybiBpcyh0YXJnZXQsICdicG1uOlBhcnRpY2lwYW50JykgfHwgaXModGFyZ2V0LCAnYnBtbjpMYW5lJyk7XG4gIH1cblxuICAvLyBkaXNhbGxvdyBkcm9wcGluZyBib3VuZGFyeSBldmVudHMgd2hpY2ggY2Fubm90IHJlcGxhY2Ugd2l0aCBpbnRlcm1lZGlhdGUgZXZlbnRcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiAhaXNEcm9wcGFibGVCb3VuZGFyeUV2ZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZHJvcCBmbG93IGVsZW1lbnRzIG9udG8gZmxvdyBlbGVtZW50IGNvbnRhaW5lcnNcbiAgLy8gYW5kIHBhcnRpY2lwYW50c1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Rmxvd0VsZW1lbnQnKSAmJiAhaXMoZWxlbWVudCwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykpIHtcbiAgICBpZiAoaXModGFyZ2V0LCAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInKSkge1xuICAgICAgcmV0dXJuIGlzRXhwYW5kZWQodGFyZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbnkodGFyZ2V0LCBbICdicG1uOlBhcnRpY2lwYW50JywgJ2JwbW46TGFuZScgXSk7XG4gIH1cblxuICAvLyBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IGRhdGEgYXNzb2NpYXRpb25zIGFyZSBhbHdheXNcbiAgLy8gcmVuZGVyZWQgYW5kIG1vdmVkIHRvIHRvcCAoUHJvY2VzcyBvciBDb2xsYWJvcmF0aW9uIGxldmVsKVxuICAvL1xuICAvLyBhcnRpZmFjdHMgbWF5IGJlIHBsYWNlZCB3aGVyZXZlciwgdG9vXG4gIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOkFydGlmYWN0JywgJ2JwbW46RGF0YUFzc29jaWF0aW9uJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSkge1xuICAgIHJldHVybiBpc0FueSh0YXJnZXQsIFtcbiAgICAgICdicG1uOkNvbGxhYm9yYXRpb24nLFxuICAgICAgJ2JwbW46TGFuZScsXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAnYnBtbjpQcm9jZXNzJyxcbiAgICAgICdicG1uOlN1YlByb2Nlc3MnIF0pO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VGbG93JykpIHtcbiAgICByZXR1cm4gaXModGFyZ2V0LCAnYnBtbjpDb2xsYWJvcmF0aW9uJylcbiAgICAgIHx8IGVsZW1lbnQuc291cmNlLnBhcmVudCA9PSB0YXJnZXRcbiAgICAgIHx8IGVsZW1lbnQudGFyZ2V0LnBhcmVudCA9PSB0YXJnZXQ7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRHJvcHBhYmxlQm91bmRhcnlFdmVudChldmVudCkge1xuICByZXR1cm4gZ2V0QnVzaW5lc3NPYmplY3QoZXZlbnQpLmNhbmNlbEFjdGl2aXR5ICYmIChcbiAgICBoYXNOb0V2ZW50RGVmaW5pdGlvbihldmVudCkgfHwgaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZXZlbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQm91bmRhcnlFdmVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNMYWJlbChlbGVtZW50KSAmJiBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XG59XG5cbmZ1bmN0aW9uIGlzTGFuZShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpMYW5lJyk7XG59XG5cbi8qKlxuICogV2UgdHJlYXQgSW50ZXJtZWRpYXRlVGhyb3dFdmVudHMgYXMgYm91bmRhcnkgZXZlbnRzIGR1cmluZyBjcmVhdGUsXG4gKiB0aGlzIG11c3QgYmUgcmVmbGVjdGVkIGluIHRoZSBydWxlcy5cbiAqL1xuZnVuY3Rpb24gaXNCb3VuZGFyeUNhbmRpZGF0ZShlbGVtZW50KSB7XG4gIGlmIChpc0JvdW5kYXJ5RXZlbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykgJiYgaGFzTm9FdmVudERlZmluaXRpb24oZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpICYmXG4gICAgaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZWxlbWVudClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzTm9FdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8gJiYgIShiby5ldmVudERlZmluaXRpb25zICYmIGJvLmV2ZW50RGVmaW5pdGlvbnMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzT25lT2ZFdmVudERlZmluaXRpb25zKGVsZW1lbnQsIFtcbiAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicsXG4gICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGhhc09uZU9mRXZlbnREZWZpbml0aW9ucyhlbGVtZW50LCBldmVudERlZmluaXRpb25zKSB7XG4gIHJldHVybiBldmVudERlZmluaXRpb25zLnNvbWUoZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgZGVmaW5pdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1JlY2VpdmVUYXNrQWZ0ZXJFdmVudEJhc2VkR2F0ZXdheShlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSAmJlxuICAgIGZpbmQoZWxlbWVudC5pbmNvbWluZywgZnVuY3Rpb24oaW5jb21pbmcpIHtcbiAgICAgIHJldHVybiBpcyhpbmNvbWluZy5zb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5Jyk7XG4gICAgfSlcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5BdHRhY2goZWxlbWVudHMsIHRhcmdldCwgc291cmNlLCBwb3NpdGlvbikge1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIC8vIG9ubHkgKHJlLSlhdHRhY2ggb25lIGVsZW1lbnQgYXQgYSB0aW1lXG4gIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzWzBdO1xuXG4gIC8vIGRvIG5vdCBhdHRhY2ggbGFiZWxzXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb25seSBoYW5kbGUgYm91bmRhcnkgZXZlbnRzXG4gIGlmICghaXNCb3VuZGFyeUNhbmRpZGF0ZShlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGRpc2FsbG93IGRyb3Agb24gZXZlbnQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXNFdmVudFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubHkgYWxsb3cgZHJvcCBvbiBub24gY29tcGVuc2F0aW9uIGFjdGl2aXRpZXNcbiAgaWYgKCFpcyh0YXJnZXQsICdicG1uOkFjdGl2aXR5JykgfHwgaXNGb3JDb21wZW5zYXRpb24odGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubHkgYXR0YWNoIHRvIHN1YnByb2Nlc3MgYm9yZGVyXG4gIGlmIChwb3NpdGlvbiAmJiAhaXNCb3VuZGFyeUF0dGFjaG1lbnQocG9zaXRpb24sIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBkbyBub3QgYXR0YWNoIG9uIHJlY2VpdmUgdGFza3MgYWZ0ZXIgZXZlbnQgYmFzZWQgZ2F0ZXdheXNcbiAgaWYgKGlzUmVjZWl2ZVRhc2tBZnRlckV2ZW50QmFzZWRHYXRld2F5KHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gJ2F0dGFjaCc7XG59XG5cblxuLyoqXG4gKiBEZWZpbmVzIGhvdyB0byByZXBsYWNlIGVsZW1lbnRzIGZvciBhIGdpdmVuIHRhcmdldC5cbiAqXG4gKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgW3sgaWQ6ICdJbnRlcm1lZGlhdGVFdmVudF8yJyxcbiAqICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICogICB9LFxuICogICB7IGlkOiAnSW50ZXJtZWRpYXRlRXZlbnRfNScsXG4gKiAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gKiAgIH1dXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIHdoaWNoIGhhdmUgdG8gYmUgcmVwbGFjZWRcbiAqL1xuZnVuY3Rpb24gY2FuUmVwbGFjZShlbGVtZW50cywgdGFyZ2V0LCBwb3NpdGlvbikge1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGNhbkV4ZWN1dGUgPSB7XG4gICAgcmVwbGFjZW1lbnRzOiBbXVxuICB9O1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmICghaXNFdmVudFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuXG4gICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmXG4gICAgICAgICAgZWxlbWVudC50eXBlICE9PSAnbGFiZWwnICYmXG4gICAgICAgICAgY2FuRHJvcChlbGVtZW50LCB0YXJnZXQpKSB7XG5cbiAgICAgICAgLy8gcmVwbGFjZSBhIG5vbi1pbnRlcnJ1cHRpbmcgc3RhcnQgZXZlbnQgYnkgYSBibGFuayBpbnRlcnJ1cHRpbmcgc3RhcnQgZXZlbnRcbiAgICAgICAgLy8gd2hlbiB0aGUgdGFyZ2V0IGlzIG5vdCBhbiBldmVudCBzdWIgcHJvY2Vzc1xuICAgICAgICBpZiAoIWlzSW50ZXJydXB0aW5nKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlcGxhY2UgYW4gZXJyb3IvZXNjYWxhdGlvbi9jb21wZW5zYXRlIHN0YXJ0IGV2ZW50IGJ5IGEgYmxhbmsgaW50ZXJydXB0aW5nIHN0YXJ0IGV2ZW50XG4gICAgICAgIC8vIHdoZW4gdGhlIHRhcmdldCBpcyBub3QgYW4gZXZlbnQgc3ViIHByb2Nlc3NcbiAgICAgICAgaWYgKGhhc0Vycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHx8XG4gICAgICAgICAgICBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHx8XG4gICAgICAgICAgICBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlcGxhY2UgYSB0eXBlZCBzdGFydCBldmVudCBieSBhIGJsYW5rIGludGVycnVwdGluZyBzdGFydCBldmVudFxuICAgICAgICAvLyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBzdWIgcHJvY2VzcyBidXQgbm90IGFuIGV2ZW50IHN1YiBwcm9jZXNzXG4gICAgICAgIGlmIChoYXNPbmVPZkV2ZW50RGVmaW5pdGlvbnMoZWxlbWVudCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICAgICAgICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICAgICAgICBdKSAmJlxuICAgICAgICAgICAgaXModGFyZ2V0LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgICAgICBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG5ld0VsZW1lbnRUeXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpcyh0YXJnZXQsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgIGlmIChoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJykgJiZcbiAgICAgICAgICBlbGVtZW50LnR5cGUgIT09ICdsYWJlbCcpIHtcblxuICAgICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RW5kRXZlbnQnKSAmJiBjYW5Ecm9wKGVsZW1lbnQsIHRhcmdldCkpIHtcbiAgICAgICAgICBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG5ld0VsZW1lbnRUeXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgY2FuQXR0YWNoKGVsZW1lbnQsIHRhcmdldCwgbnVsbCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzLmxlbmd0aCA/IGNhbkV4ZWN1dGUgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2FuTW92ZShlbGVtZW50cywgdGFyZ2V0KSB7XG5cbiAgLy8gZG8gbm90IG1vdmUgc2VsZWN0aW9uIGNvbnRhaW5pbmcgbGFuZXNcbiAgaWYgKHNvbWUoZWxlbWVudHMsIGlzTGFuZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyBkZWZhdWx0IG1vdmUgY2hlY2sgdG8gc3RhcnQgbW92ZSBvcGVyYXRpb25cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50cy5ldmVyeShmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGNhbkRyb3AoZWxlbWVudCwgdGFyZ2V0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbkNyZWF0ZShzaGFwZSwgdGFyZ2V0LCBzb3VyY2UsIHBvc2l0aW9uKSB7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNMYWJlbChzaGFwZSkgfHwgaXNHcm91cChzaGFwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc1NhbWUoc291cmNlLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIGRvIG5vdCBkcm9wIHRoZSBlbGVtZW50XG4gIC8vIGludG8gc291cmNlXG4gIGlmIChzb3VyY2UgJiYgaXNQYXJlbnQoc291cmNlLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGNhbkRyb3Aoc2hhcGUsIHRhcmdldCwgcG9zaXRpb24pIHx8IGNhbkluc2VydChzaGFwZSwgdGFyZ2V0LCBwb3NpdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNhblJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKSB7XG4gIGlmIChpcyhzaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXhwYW5kZWQoc2hhcGUpICYmIChcbiAgICAgICAgIW5ld0JvdW5kcyB8fCAobmV3Qm91bmRzLndpZHRoID49IDEwMCAmJiBuZXdCb3VuZHMuaGVpZ2h0ID49IDgwKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgIHJldHVybiAhbmV3Qm91bmRzIHx8IChuZXdCb3VuZHMud2lkdGggPj0gMTMwICYmIG5ld0JvdW5kcy5oZWlnaHQgPj0gNjApO1xuICB9XG5cbiAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICFuZXdCb3VuZHMgfHwgKG5ld0JvdW5kcy53aWR0aCA+PSAyNTAgJiYgbmV3Qm91bmRzLmhlaWdodCA+PSA1MCk7XG4gIH1cblxuICBpZiAoaXNUZXh0QW5ub3RhdGlvbihzaGFwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0dyb3VwKHNoYXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrLCB3aGV0aGVyIG9uZSBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIGlzIGEgdGV4dCBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBpc09uZVRleHRBbm5vdGF0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgdmFyIHNvdXJjZVRleHRBbm5vdGF0aW9uID0gaXNUZXh0QW5ub3RhdGlvbihzb3VyY2UpLFxuICAgICAgdGFyZ2V0VGV4dEFubm90YXRpb24gPSBpc1RleHRBbm5vdGF0aW9uKHRhcmdldCk7XG5cbiAgcmV0dXJuIChcbiAgICAoc291cmNlVGV4dEFubm90YXRpb24gfHwgdGFyZ2V0VGV4dEFubm90YXRpb24pICYmXG4gICAgKHNvdXJjZVRleHRBbm5vdGF0aW9uICE9PSB0YXJnZXRUZXh0QW5ub3RhdGlvbilcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5Db25uZWN0QXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyBkbyBub3QgY29ubmVjdCBjb25uZWN0aW9uc1xuICBpZiAoaXNDb25uZWN0aW9uKHNvdXJjZSkgfHwgaXNDb25uZWN0aW9uKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjb21wZW5zYXRpb24gYm91bmRhcnkgZXZlbnRzIGFyZSBleGNlcHRpb25cbiAgaWYgKGlzQ29tcGVuc2F0aW9uQm91bmRhcnkoc291cmNlKSAmJiBpc0ZvckNvbXBlbnNhdGlvbih0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBkb24ndCBjb25uZWN0IHBhcmVudCA8LT4gY2hpbGRcbiAgaWYgKGlzUGFyZW50KHRhcmdldCwgc291cmNlKSB8fCBpc1BhcmVudChzb3VyY2UsIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyBjb25uZWN0aW9uIG9mIGFzc29jaWF0aW9ucyBiZXR3ZWVuIDwhVGV4dEFubm90YXRpb24+IGFuZCA8VGV4dEFubm90YXRpb24+XG4gIGlmIChpc09uZVRleHRBbm5vdGF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gY2FuIGNvbm5lY3QgYXNzb2NpYXRpb25zIHdoZXJlIHdlIGNhbiBjb25uZWN0XG4gIC8vIGRhdGEgYXNzb2NpYXRpb25zLCB0b28gKCEpXG4gIHJldHVybiAhIWNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBjYW5Db25uZWN0TWVzc2FnZUZsb3coc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyBkdXJpbmcgY29ubmVjdCB1c2VyIG1pZ2h0IG1vdmUgbW91c2Ugb3V0IG9mIGNhbnZhc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy8xMDMzXG4gIGlmIChnZXRSb290RWxlbWVudChzb3VyY2UpICYmICFnZXRSb290RWxlbWVudCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBpc01lc3NhZ2VGbG93U291cmNlKHNvdXJjZSkgJiZcbiAgICBpc01lc3NhZ2VGbG93VGFyZ2V0KHRhcmdldCkgJiZcbiAgICAhaXNTYW1lT3JnYW5pemF0aW9uKHNvdXJjZSwgdGFyZ2V0KVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgaWYgKFxuICAgIGlzRXZlbnRCYXNlZFRhcmdldCh0YXJnZXQpICYmXG4gICAgdGFyZ2V0LmluY29taW5nLmxlbmd0aCA+IDAgJiZcbiAgICBhcmVPdXRnb2luZ0V2ZW50QmFzZWRHYXRld2F5Q29ubmVjdGlvbnModGFyZ2V0LmluY29taW5nKSAmJlxuICAgICFpcyhzb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzU2VxdWVuY2VGbG93U291cmNlKHNvdXJjZSkgJiZcbiAgICAgICAgIGlzU2VxdWVuY2VGbG93VGFyZ2V0KHRhcmdldCkgJiZcbiAgICAgICAgIGlzU2FtZVNjb3BlKHNvdXJjZSwgdGFyZ2V0KSAmJlxuICAgICAgICAgIShpcyhzb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JykgJiYgIWlzRXZlbnRCYXNlZFRhcmdldCh0YXJnZXQpKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5Db25uZWN0RGF0YUFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgaWYgKGlzQW55KHNvdXJjZSwgWyAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSAmJlxuICAgICAgaXNBbnkodGFyZ2V0LCBbICdicG1uOkFjdGl2aXR5JywgJ2JwbW46VGhyb3dFdmVudCcgXSkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicgfTtcbiAgfVxuXG4gIGlmIChpc0FueSh0YXJnZXQsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkgJiZcbiAgICAgIGlzQW55KHNvdXJjZSwgWyAnYnBtbjpBY3Rpdml0eScsICdicG1uOkNhdGNoRXZlbnQnIF0pKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJyB9O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjYW5JbnNlcnQoc2hhcGUsIGZsb3csIHBvc2l0aW9uKSB7XG5cbiAgaWYgKCFmbG93KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc2hhcGUpKSB7XG4gICAgaWYgKHNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNoYXBlID0gc2hhcGVbMF07XG4gIH1cblxuICBpZiAoZmxvdy5zb3VyY2UgPT09IHNoYXBlIHx8XG4gICAgICBmbG93LnRhcmdldCA9PT0gc2hhcGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gZHJvcCBvbiB0aGVcbiAgLy8gdW5kZXJseWluZyBmbG93IHBhcmVudFxuICAvL1xuICAvLyBhdCB0aGlzIHBvaW50IHdlIGFyZSBub3QgcmVhbGx5IGFibGUgdG8gdGFsa1xuICAvLyBhYm91dCBjb25uZWN0aW9uIHJ1bGVzICh5ZXQpXG5cbiAgcmV0dXJuIChcbiAgICBpc0FueShmbG93LCBbICdicG1uOlNlcXVlbmNlRmxvdycsICdicG1uOk1lc3NhZ2VGbG93JyBdKSAmJlxuICAgICFpc0xhYmVsKGZsb3cpICYmXG4gICAgaXMoc2hhcGUsICdicG1uOkZsb3dOb2RlJykgJiZcbiAgICAhaXMoc2hhcGUsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgIGNhbkRyb3Aoc2hhcGUsIGZsb3cucGFyZW50LCBwb3NpdGlvbikpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhlbGVtZW50cywgZWxlbWVudCkge1xuICByZXR1cm4gKGVsZW1lbnRzICYmIGVsZW1lbnQpICYmIGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBjYW5Db3B5KGVsZW1lbnRzLCBlbGVtZW50KSB7XG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpICYmICFpbmNsdWRlcyhlbGVtZW50cywgZWxlbWVudC5wYXJlbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzT3V0Z29pbmdFdmVudEJhc2VkR2F0ZXdheUNvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXG4gIGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uc291cmNlKSB7XG4gICAgcmV0dXJuIGlzKGNvbm5lY3Rpb24uc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFyZU91dGdvaW5nRXZlbnRCYXNlZEdhdGV3YXlDb25uZWN0aW9ucyhjb25uZWN0aW9ucykge1xuICBjb25uZWN0aW9ucyA9IGNvbm5lY3Rpb25zIHx8IFtdO1xuXG4gIHJldHVybiBjb25uZWN0aW9ucy5zb21lKGlzT3V0Z29pbmdFdmVudEJhc2VkR2F0ZXdheUNvbm5lY3Rpb24pO1xufVxuXG5mdW5jdGlvbiBnZXRSb290RWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQYXJlbnQoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGdldFBhcmVudChlbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG59XG4iLCJpbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMnO1xuXG5pbXBvcnQgQnBtblJ1bGVzIGZyb20gJy4vQnBtblJ1bGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uUnVsZXMnIF0sXG4gIGJwbW5SdWxlczogWyAndHlwZScsIEJwbW5SdWxlcyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgbWFwLFxuICBmaWx0ZXIsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuXG4vKipcbiAqIFByb3ZpZGVzIGFiaWxpdHkgdG8gc2VhcmNoIHRocm91Z2ggQlBNTiBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uU2VhcmNoUHJvdmlkZXIoZWxlbWVudFJlZ2lzdHJ5LCBzZWFyY2hQYWQsIGNhbnZhcykge1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHNlYXJjaFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xufVxuXG5CcG1uU2VhcmNoUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdzZWFyY2hQYWQnLFxuICAnY2FudmFzJ1xuXTtcblxuXG4vKipcbiAqIEZpbmRzIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIGdpdmVuIHBhdHRlcm5cbiAqXG4gKiA8UmVzdWx0PiA6XG4gKiAge1xuICogICAgcHJpbWFyeVRva2VuczogPEFycmF5PFRva2VuPj4sXG4gKiAgICBzZWNvbmRhcnlUb2tlbnM6IDxBcnJheTxUb2tlbj4+LFxuICogICAgZWxlbWVudDogPEVsZW1lbnQ+XG4gKiAgfVxuICpcbiAqIDxUb2tlbj4gOlxuICogIHtcbiAqICAgIG5vcm1hbHxtYXRjaGVkOiA8c3RyaW5nPlxuICogIH1cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHBhdHRlcm5cbiAqIEByZXR1cm4ge0FycmF5PFJlc3VsdD59XG4gKi9cbkJwbW5TZWFyY2hQcm92aWRlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgdmFyIGVsZW1lbnRzID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIC8vIGRvIG5vdCBpbmNsdWRlIHJvb3QgZWxlbWVudFxuICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50ICE9PSByb290RWxlbWVudDtcbiAgfSk7XG5cbiAgZWxlbWVudHMgPSBtYXAoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJpbWFyeVRva2VuczogbWF0Y2hBbmRTcGxpdChnZXRMYWJlbChlbGVtZW50KSwgcGF0dGVybiksXG4gICAgICBzZWNvbmRhcnlUb2tlbnM6IG1hdGNoQW5kU3BsaXQoZWxlbWVudC5pZCwgcGF0dGVybiksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gZXhjbHVkZSBub24tbWF0Y2hlZCBlbGVtZW50c1xuICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBoYXNNYXRjaGVkKGVsZW1lbnQucHJpbWFyeVRva2VucykgfHwgaGFzTWF0Y2hlZChlbGVtZW50LnNlY29uZGFyeVRva2Vucyk7XG4gIH0pO1xuXG4gIGVsZW1lbnRzID0gc29ydEJ5KGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldExhYmVsKGVsZW1lbnQuZWxlbWVudCkgKyBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn07XG5cblxuZnVuY3Rpb24gaGFzTWF0Y2hlZCh0b2tlbnMpIHtcbiAgdmFyIG1hdGNoZWQgPSBmaWx0ZXIodG9rZW5zLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICEhdC5tYXRjaGVkO1xuICB9KTtcblxuICByZXR1cm4gbWF0Y2hlZC5sZW5ndGggPiAwO1xufVxuXG5cbmZ1bmN0aW9uIG1hdGNoQW5kU3BsaXQodGV4dCwgcGF0dGVybikge1xuICB2YXIgdG9rZW5zID0gW10sXG4gICAgICBvcmlnaW5hbFRleHQgPSB0ZXh0O1xuXG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICBwYXR0ZXJuID0gcGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuXG4gIHZhciBpID0gdGV4dC5pbmRleE9mKHBhdHRlcm4pO1xuXG4gIGlmIChpID4gLTEpIHtcbiAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICBub3JtYWw6IG9yaWdpbmFsVGV4dC5zdWJzdHIoMCwgaSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG1hdGNoZWQ6IG9yaWdpbmFsVGV4dC5zdWJzdHIoaSwgcGF0dGVybi5sZW5ndGgpXG4gICAgfSk7XG5cbiAgICBpZiAocGF0dGVybi5sZW5ndGggKyBpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgbm9ybWFsOiBvcmlnaW5hbFRleHQuc3Vic3RyKHBhdHRlcm4ubGVuZ3RoICsgaSwgdGV4dC5sZW5ndGgpXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbm9ybWFsOiBvcmlnaW5hbFRleHRcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59IiwiaW1wb3J0IFNlYXJjaFBhZE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWFyY2gtcGFkJztcblxuaW1wb3J0IEJwbW5TZWFyY2hQcm92aWRlciBmcm9tICcuL0JwbW5TZWFyY2hQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFNlYXJjaFBhZE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtblNlYXJjaCddLFxuICBicG1uU2VhcmNoOiBbICd0eXBlJywgQnBtblNlYXJjaFByb3ZpZGVyIF1cbn07XG4iLCJpbXBvcnQge1xyXG4gIG1pZCxcclxuICBzZXRTbmFwcGVkXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvU25hcFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNDbWQgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRPcmllbnRhdGlvblxyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBzb21lIH0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxudmFyIEhJR0hFUl9QUklPUklUWSA9IDEyNTA7XHJcblxyXG52YXIgQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQgPSA0MDtcclxuXHJcbnZhciBUQVJHRVRfQk9VTkRTX1BBRERJTkcgPSAyMCxcclxuICAgIFRBU0tfQk9VTkRTX1BBRERJTkcgPSAxMDtcclxuXHJcbnZhciBUQVJHRVRfQ0VOVEVSX1BBRERJTkcgPSAyMDtcclxuXHJcbnZhciBBWEVTID0gWyAneCcsICd5JyBdO1xyXG5cclxudmFyIGFicyA9IE1hdGguYWJzO1xyXG5cclxuLyoqXHJcbiAqIFNuYXAgZHVyaW5nIGNvbm5lY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uQ29ubmVjdFNuYXBwaW5nKGV2ZW50QnVzKSB7XHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2Nvbm5lY3QuaG92ZXInLFxyXG4gICAgJ2Nvbm5lY3QubW92ZScsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gIF0sIEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxyXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcclxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXHJcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXHJcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XHJcblxyXG4gICAgLy8gZG8gTk9UIHNuYXAgb24gQ01EXHJcbiAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAmJiBpc0NtZChldmVudC5vcmlnaW5hbEV2ZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxDb25uZWN0aW9uU3RhcnQpIHtcclxuICAgICAgY29udGV4dC5pbml0aWFsQ29ubmVjdGlvblN0YXJ0ID0gY29udGV4dC5jb25uZWN0aW9uU3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc25hcCBob3ZlclxyXG4gICAgaWYgKGNhbkV4ZWN1dGUgJiYgaG92ZXIpIHtcclxuICAgICAgc25hcFRvU2hhcGUoZXZlbnQsIGhvdmVyLCBnZXRUYXJnZXRCb3VuZHNQYWRkaW5nKGhvdmVyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhvdmVyICYmIGlzQW55VHlwZShjYW5FeGVjdXRlLCBbXHJcbiAgICAgICdicG1uOkFzc29jaWF0aW9uJyxcclxuICAgICAgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nLFxyXG4gICAgICAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nLFxyXG4gICAgICAnYnBtbjpTZXF1ZW5jZUZsb3cnXHJcbiAgICBdKSkge1xyXG4gICAgICBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCA9IG1pZChzdGFydCk7XHJcblxyXG4gICAgICAvLyBzbmFwIGhvdmVyXHJcbiAgICAgIGlmIChpc0FueShob3ZlciwgWyAnYnBtbjpFdmVudCcsICdicG1uOkdhdGV3YXknIF0pKSB7XHJcbiAgICAgICAgc25hcFRvUG9zaXRpb24oZXZlbnQsIG1pZChob3ZlcikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzbmFwIGhvdmVyXHJcbiAgICAgIGlmIChpc0FueShob3ZlciwgWyAnYnBtbjpUYXNrJywgJ2JwbW46U3ViUHJvY2VzcycgXSkpIHtcclxuICAgICAgICBzbmFwVG9UYXJnZXRNaWQoZXZlbnQsIGhvdmVyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc25hcCBzb3VyY2UgYW5kIHRhcmdldFxyXG4gICAgICBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgdGFyZ2V0ID09PSBzb3VyY2UuaG9zdCkge1xyXG4gICAgICAgIHNuYXBCb3VuZGFyeUV2ZW50TG9vcChldmVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2UgaWYgKGlzVHlwZShjYW5FeGVjdXRlLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XHJcblxyXG4gICAgICBpZiAoaXMoc3RhcnQsICdicG1uOkV2ZW50JykpIHtcclxuXHJcbiAgICAgICAgLy8gc25hcCBzdGFydFxyXG4gICAgICAgIGNvbnRleHQuY29ubmVjdGlvblN0YXJ0ID0gbWlkKHN0YXJ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpFdmVudCcpKSB7XHJcblxyXG4gICAgICAgIC8vIHNuYXAgaG92ZXJcclxuICAgICAgICBzbmFwVG9Qb3NpdGlvbihldmVudCwgbWlkKGhvdmVyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gdW4tc25hcCBzb3VyY2VcclxuICAgICAgY29udGV4dC5jb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmluaXRpYWxDb25uZWN0aW9uU3RhcnQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbkJwbW5Db25uZWN0U25hcHBpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuLy8gc25hcCB0byB0YXJnZXQgaWYgZXZlbnQgaW4gdGFyZ2V0XHJcbmZ1bmN0aW9uIHNuYXBUb1NoYXBlKGV2ZW50LCB0YXJnZXQsIHBhZGRpbmcpIHtcclxuICBBWEVTLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgdmFyIGRpbWVuc2lvbkZvckF4aXMgPSBnZXREaW1lbnNpb25Gb3JBeGlzKGF4aXMsIHRhcmdldCk7XHJcblxyXG4gICAgaWYgKGV2ZW50WyBheGlzIF0gPCB0YXJnZXRbIGF4aXMgXSArIHBhZGRpbmcpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgdGFyZ2V0WyBheGlzIF0gKyBwYWRkaW5nKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnRbIGF4aXMgXSA+IHRhcmdldFsgYXhpcyBdICsgZGltZW5zaW9uRm9yQXhpcyAtIHBhZGRpbmcpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgdGFyZ2V0WyBheGlzIF0gKyBkaW1lbnNpb25Gb3JBeGlzIC0gcGFkZGluZyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIHNuYXAgdG8gdGFyZ2V0IG1pZCBpZiBldmVudCBpbiB0YXJnZXQgbWlkXHJcbmZ1bmN0aW9uIHNuYXBUb1RhcmdldE1pZChldmVudCwgdGFyZ2V0KSB7XHJcbiAgdmFyIHRhcmdldE1pZCA9IG1pZCh0YXJnZXQpO1xyXG5cclxuICBBWEVTLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgaWYgKGlzTWlkKGV2ZW50LCB0YXJnZXQsIGF4aXMpKSB7XHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHRhcmdldE1pZFsgYXhpcyBdKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuLy8gc25hcCB0byBwcmV2ZW50IGxvb3Agb3ZlcmxhcHBpbmcgYm91bmRhcnkgZXZlbnRcclxuZnVuY3Rpb24gc25hcEJvdW5kYXJ5RXZlbnRMb29wKGV2ZW50KSB7XHJcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcclxuICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XHJcblxyXG4gIGlmIChpc1JldmVyc2UoY29udGV4dCkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBzb3VyY2VNaWQgPSBtaWQoc291cmNlKSxcclxuICAgICAgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2VNaWQsIHRhcmdldCwgLTEwKSxcclxuICAgICAgYXhlcyA9IFtdO1xyXG5cclxuICBpZiAoL3RvcHxib3R0b20vLnRlc3Qob3JpZW50YXRpb24pKSB7XHJcbiAgICBheGVzLnB1c2goJ3gnKTtcclxuICB9XHJcblxyXG4gIGlmICgvbGVmdHxyaWdodC8udGVzdChvcmllbnRhdGlvbikpIHtcclxuICAgIGF4ZXMucHVzaCgneScpO1xyXG4gIH1cclxuXHJcbiAgYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGF4aXMpIHtcclxuICAgIHZhciBjb29yZGluYXRlID0gZXZlbnRbIGF4aXMgXSwgbmV3Q29vcmRpbmF0ZTtcclxuXHJcbiAgICBpZiAoYWJzKGNvb3JkaW5hdGUgLSBzb3VyY2VNaWRbIGF4aXMgXSkgPCBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCkge1xyXG4gICAgICBpZiAoY29vcmRpbmF0ZSA+IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgbmV3Q29vcmRpbmF0ZSA9IHNvdXJjZU1pZFsgYXhpcyBdICsgQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbmV3Q29vcmRpbmF0ZSA9IHNvdXJjZU1pZFsgYXhpcyBdIC0gQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIG5ld0Nvb3JkaW5hdGUpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzbmFwVG9Qb3NpdGlvbihldmVudCwgcG9zaXRpb24pIHtcclxuICBzZXRTbmFwcGVkKGV2ZW50LCAneCcsIHBvc2l0aW9uLngpO1xyXG4gIHNldFNuYXBwZWQoZXZlbnQsICd5JywgcG9zaXRpb24ueSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVHlwZShhdHRycywgdHlwZSkge1xyXG4gIHJldHVybiBhdHRycyAmJiBhdHRycy50eXBlID09PSB0eXBlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FueVR5cGUoYXR0cnMsIHR5cGVzKSB7XHJcbiAgcmV0dXJuIHNvbWUodHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBpc1R5cGUoYXR0cnMsIHR5cGUpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREaW1lbnNpb25Gb3JBeGlzKGF4aXMsIGVsZW1lbnQpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gZWxlbWVudC53aWR0aCA6IGVsZW1lbnQuaGVpZ2h0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUYXJnZXRCb3VuZHNQYWRkaW5nKHRhcmdldCkge1xyXG4gIGlmIChpcyh0YXJnZXQsICdicG1uOlRhc2snKSkge1xyXG4gICAgcmV0dXJuIFRBU0tfQk9VTkRTX1BBRERJTkc7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBUQVJHRVRfQk9VTkRTX1BBRERJTkc7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc01pZChldmVudCwgdGFyZ2V0LCBheGlzKSB7XHJcbiAgcmV0dXJuIGV2ZW50WyBheGlzIF0gPiB0YXJnZXRbIGF4aXMgXSArIFRBUkdFVF9DRU5URVJfUEFERElOR1xyXG4gICAgJiYgZXZlbnRbIGF4aXMgXSA8IHRhcmdldFsgYXhpcyBdICsgZ2V0RGltZW5zaW9uRm9yQXhpcyhheGlzLCB0YXJnZXQpIC0gVEFSR0VUX0NFTlRFUl9QQURESU5HO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JldmVyc2UoY29udGV4dCkge1xyXG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXHJcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xyXG5cclxuICByZXR1cm4gaG92ZXIgJiYgc291cmNlICYmIGhvdmVyID09PSBzb3VyY2U7XHJcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ3JlYXRlTW92ZVNuYXBwaW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0NyZWF0ZU1vdmVTbmFwcGluZyc7XG5cbmltcG9ydCB7XG4gIGlzU25hcHBlZCxcbiAgc2V0U25hcHBlZCxcbiAgdG9wTGVmdCxcbiAgYm90dG9tUmlnaHRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvU25hcFV0aWwnO1xuXG5pbXBvcnQgeyBpc0V4cGFuZGVkIH0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRNaWRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCb3VuZGFyeUF0dGFjaG1lbnQgfSBmcm9tICcuL0JwbW5TbmFwcGluZ1V0aWwnO1xuXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDE1MDA7XG5cblxuLyoqXG4gKiBTbmFwIGR1cmluZyBjcmVhdGUgYW5kIG1vdmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcoZXZlbnRCdXMsIGluamVjdG9yKSB7XG4gIGluamVjdG9yLmludm9rZShDcmVhdGVNb3ZlU25hcHBpbmcsIHRoaXMpO1xuXG4gIC8vIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gIGV2ZW50QnVzLm9uKFsgJ2NyZWF0ZS5tb3ZlJywgJ2NyZWF0ZS5lbmQnIF0sIEhJR0hfUFJJT1JJVFksIHNldFNuYXBwZWRJZkNvbnN0cmFpbmVkKTtcblxuICAvLyBzbmFwIGJvdW5kYXJ5IGV2ZW50c1xuICBldmVudEJ1cy5vbihbXG4gICAgJ2NyZWF0ZS5tb3ZlJyxcbiAgICAnY3JlYXRlLmVuZCcsXG4gICAgJ3NoYXBlLm1vdmUubW92ZScsXG4gICAgJ3NoYXBlLm1vdmUuZW5kJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICB2YXIgY2FuQXR0YWNoID0gY2FuRXhlY3V0ZSAmJiAoY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcgfHwgY2FuRXhlY3V0ZS5hdHRhY2gpO1xuXG4gICAgaWYgKGNhbkF0dGFjaCAmJiAhaXNTbmFwcGVkKGV2ZW50KSkge1xuICAgICAgc25hcEJvdW5kYXJ5RXZlbnQoZXZlbnQsIHRhcmdldCk7XG4gICAgfVxuICB9KTtcbn1cblxuaW5oZXJpdHMoQnBtbkNyZWF0ZU1vdmVTbmFwcGluZywgQ3JlYXRlTW92ZVNuYXBwaW5nKTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InXG5dO1xuXG5CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5pbml0U25hcCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHZhciBzbmFwQ29udGV4dCA9IENyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuaW5pdFNuYXAuY2FsbCh0aGlzLCBldmVudCk7XG5cbiAgdmFyIHNoYXBlID0gZXZlbnQuc2hhcGU7XG5cbiAgdmFyIGlzTW92ZSA9ICEhdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCk7XG5cbiAgLy8gc25hcCB0byBkb2NraW5nIHBvaW50c1xuICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIGRvY2tpbmcgPSBjb25uZWN0aW9uLndheXBvaW50c1swXTtcblxuICAgIGRvY2tpbmcgPSBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmc7XG5cbiAgICBzbmFwQ29udGV4dC5zZXRTbmFwT3JpZ2luKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBnZXREb2NraW5nU25hcE9yaWdpbihkb2NraW5nLCBpc01vdmUsIGV2ZW50KSk7XG4gIH0pO1xuXG4gIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzW2Nvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgZG9ja2luZyA9IGRvY2tpbmcub3JpZ2luYWwgfHwgZG9ja2luZztcblxuICAgIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oY29ubmVjdGlvbi5pZCArICctZG9ja2luZycsIGdldERvY2tpbmdTbmFwT3JpZ2luKGRvY2tpbmcsIGlzTW92ZSwgZXZlbnQpKTtcbiAgfSk7XG5cbiAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAvLyBzbmFwIHRvIGJvcmRlcnMgd2l0aCBoaWdoZXIgcHJpb3JpdHlcbiAgICBzbmFwQ29udGV4dC5zZXRTbmFwTG9jYXRpb25zKFsgJ3RvcC1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICdtaWQnIF0pO1xuICB9XG5cbiAgcmV0dXJuIHNuYXBDb250ZXh0O1xufTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuYWRkU25hcFRhcmdldFBvaW50cyA9IGZ1bmN0aW9uKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQpIHtcbiAgQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzLmNhbGwodGhpcywgc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCk7XG5cbiAgdmFyIHNuYXBUYXJnZXRzID0gdGhpcy5nZXRTbmFwVGFyZ2V0cyhzaGFwZSwgdGFyZ2V0KTtcblxuICBmb3JFYWNoKHNuYXBUYXJnZXRzLCBmdW5jdGlvbihzbmFwVGFyZ2V0KSB7XG5cbiAgICAvLyBoYW5kbGUgVFJCTCBhbGlnbm1lbnRcbiAgICAvL1xuICAgIC8vICogd2l0aCBjb250YWluZXIgZWxlbWVudHNcbiAgICAvLyAqIHdpdGggdGV4dCBhbm5vdGF0aW9uc1xuICAgIGlmIChpc0NvbnRhaW5lcihzbmFwVGFyZ2V0KSB8fCBhcmVBbGwoWyBzaGFwZSwgc25hcFRhcmdldCBdLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBzbmFwUG9pbnRzLmFkZCgndG9wLWxlZnQnLCB0b3BMZWZ0KHNuYXBUYXJnZXQpKTtcbiAgICAgIHNuYXBQb2ludHMuYWRkKCdib3R0b20tcmlnaHQnLCBib3R0b21SaWdodChzbmFwVGFyZ2V0KSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIC8vIHNuYXAgdG8gZG9ja2luZyBwb2ludHMgaWYgbm90IGNyZWF0ZSBtb2RlXG4gIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCkpIHtcblxuICAgICAgaWYgKCFpbmNsdWRlcyhzbmFwVGFyZ2V0cywgY29ubmVjdGlvbi5zb3VyY2UpKSB7XG4gICAgICAgIHNuYXBQb2ludHMuYWRkKCdtaWQnLCBnZXRNaWQoY29ubmVjdGlvbi5zb3VyY2UpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRvY2tpbmcgPSBjb25uZWN0aW9uLndheXBvaW50c1swXTtcbiAgICAgIHNuYXBQb2ludHMuYWRkKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmcpO1xuICAgIH1cbiAgfSk7XG5cbiAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGlmIChlbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xuXG4gICAgICBpZiAoIWluY2x1ZGVzKHNuYXBUYXJnZXRzLCBjb25uZWN0aW9uLnRhcmdldCkpIHtcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIGdldE1pZChjb25uZWN0aW9uLnRhcmdldCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzWyBjb25uZWN0aW9uLndheXBvaW50cy5sZW5ndGggLSAxIF07XG5cbiAgICAgIHNuYXBQb2ludHMuYWRkKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmcpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYWRkIHNlcXVlbmNlIGZsb3cgcGFyZW50cyBhcyBzbmFwIHRhcmdldHNcbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICBzbmFwUG9pbnRzID0gdGhpcy5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQucGFyZW50KTtcbiAgfVxuXG4gIHJldHVybiBzbmFwUG9pbnRzO1xufTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuZ2V0U25hcFRhcmdldHMgPSBmdW5jdGlvbihzaGFwZSwgdGFyZ2V0KSB7XG4gIHJldHVybiBDcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBUYXJnZXRzLmNhbGwodGhpcywgc2hhcGUsIHRhcmdldClcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcblxuICAgICAgLy8gZG8gbm90IHNuYXAgdG8gbGFuZXNcbiAgICAgIHJldHVybiAhaXMoc25hcFRhcmdldCwgJ2JwbW46TGFuZScpO1xuICAgIH0pO1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNuYXBCb3VuZGFyeUV2ZW50KGV2ZW50LCB0YXJnZXQpIHtcbiAgdmFyIHRhcmdldFRSQkwgPSBhc1RSQkwodGFyZ2V0KTtcblxuICB2YXIgZGlyZWN0aW9uID0gZ2V0Qm91bmRhcnlBdHRhY2htZW50KGV2ZW50LCB0YXJnZXQpO1xuXG4gIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICB2YXIgb2Zmc2V0O1xuXG4gIGlmIChzaGFwZS5wYXJlbnQpIHtcbiAgICBvZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBnZXRNaWQoc2hhcGUpO1xuICB9XG5cbiAgaWYgKC90b3AvLnRlc3QoZGlyZWN0aW9uKSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd5JywgdGFyZ2V0VFJCTC50b3AgLSBvZmZzZXQueSk7XG4gIH0gZWxzZSBpZiAoL2JvdHRvbS8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3knLCB0YXJnZXRUUkJMLmJvdHRvbSAtIG9mZnNldC55KTtcbiAgfVxuXG4gIGlmICgvbGVmdC8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCB0YXJnZXRUUkJMLmxlZnQgLSBvZmZzZXQueCk7XG4gIH0gZWxzZSBpZiAoL3JpZ2h0Ly50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneCcsIHRhcmdldFRSQkwucmlnaHQgLSBvZmZzZXQueCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlQWxsKGVsZW1lbnRzLCB0eXBlKSB7XG4gIHJldHVybiBlbGVtZW50cy5ldmVyeShmdW5jdGlvbihlbCkge1xuICAgIHJldHVybiBpcyhlbCwgdHlwZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRhaW5lcihlbGVtZW50KSB7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG59XG5cblxuZnVuY3Rpb24gc2V0U25hcHBlZElmQ29uc3RyYWluZWQoZXZlbnQpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgY3JlYXRlQ29uc3RyYWludHMgPSBjb250ZXh0LmNyZWF0ZUNvbnN0cmFpbnRzO1xuXG4gIGlmICghY3JlYXRlQ29uc3RyYWludHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdG9wID0gY3JlYXRlQ29uc3RyYWludHMudG9wLFxuICAgICAgcmlnaHQgPSBjcmVhdGVDb25zdHJhaW50cy5yaWdodCxcbiAgICAgIGJvdHRvbSA9IGNyZWF0ZUNvbnN0cmFpbnRzLmJvdHRvbSxcbiAgICAgIGxlZnQgPSBjcmVhdGVDb25zdHJhaW50cy5sZWZ0O1xuXG4gIGlmICgobGVmdCAmJiBsZWZ0ID49IGV2ZW50LngpIHx8IChyaWdodCAmJiByaWdodCA8PSBldmVudC54KSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd4JywgZXZlbnQueCk7XG4gIH1cblxuICBpZiAoKHRvcCAmJiB0b3AgPj0gZXZlbnQueSkgfHwgKGJvdHRvbSAmJiBib3R0b20gPD0gZXZlbnQueSkpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneScsIGV2ZW50LnkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBnZXREb2NraW5nU25hcE9yaWdpbihkb2NraW5nLCBpc01vdmUsIGV2ZW50KSB7XG4gIHJldHVybiBpc01vdmUgPyAoXG4gICAge1xuICAgICAgeDogZG9ja2luZy54IC0gZXZlbnQueCxcbiAgICAgIHk6IGRvY2tpbmcueSAtIGV2ZW50LnlcbiAgICB9XG4gICkgOiB7XG4gICAgeDogZG9ja2luZy54LFxuICAgIHk6IGRvY2tpbmcueVxuICB9O1xufVxuIiwiaW1wb3J0IHsgZ2V0T3JpZW50YXRpb24gfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm91bmRhcnlBdHRhY2htZW50KHBvc2l0aW9uLCB0YXJnZXRCb3VuZHMpIHtcclxuXHJcbiAgdmFyIG9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24ocG9zaXRpb24sIHRhcmdldEJvdW5kcywgLTE1KTtcclxuXHJcbiAgaWYgKG9yaWVudGF0aW9uICE9PSAnaW50ZXJzZWN0Jykge1xyXG4gICAgcmV0dXJuIG9yaWVudGF0aW9uO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn0iLCJpbXBvcnQgQnBtbkNvbm5lY3RTbmFwcGluZyBmcm9tICcuL0JwbW5Db25uZWN0U25hcHBpbmcnO1xuaW1wb3J0IEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcgZnJvbSAnLi9CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nJztcbmltcG9ydCBTbmFwcGluZ01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgU25hcHBpbmdNb2R1bGUgXSxcbiAgX19pbml0X186IFtcbiAgICAnY29ubmVjdFNuYXBwaW5nJyxcbiAgICAnY3JlYXRlTW92ZVNuYXBwaW5nJ1xuICBdLFxuICBjb25uZWN0U25hcHBpbmc6IFsgJ3R5cGUnLCBCcG1uQ29ubmVjdFNuYXBwaW5nIF0sXG4gIGNyZWF0ZU1vdmVTbmFwcGluZzogWyAndHlwZScsIEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBnZXRFeHRlcm5hbExhYmVsQm91bmRzXG59IGZyb20gJy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZWxlbWVudFRvU3RyaW5nXG59IGZyb20gJy4vVXRpbCc7XG5cblxuZnVuY3Rpb24gZWxlbWVudERhdGEoc2VtYW50aWMsIGF0dHJzKSB7XG4gIHJldHVybiBhc3NpZ24oe1xuICAgIGlkOiBzZW1hbnRpYy5pZCxcbiAgICB0eXBlOiBzZW1hbnRpYy4kdHlwZSxcbiAgICBidXNpbmVzc09iamVjdDogc2VtYW50aWNcbiAgfSwgYXR0cnMpO1xufVxuXG5mdW5jdGlvbiBnZXRXYXlwb2ludHMoYm8sIHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IGJvLmRpLndheXBvaW50O1xuXG4gIGlmICghd2F5cG9pbnRzIHx8IHdheXBvaW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIFsgZ2V0TWlkKHNvdXJjZSksIGdldE1pZCh0YXJnZXQpIF07XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzLm1hcChmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIHsgeDogcC54LCB5OiBwLnkgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vdFlldERyYXduKHRyYW5zbGF0ZSwgc2VtYW50aWMsIHJlZlNlbWFudGljLCBwcm9wZXJ0eSkge1xuICByZXR1cm4gbmV3IEVycm9yKHRyYW5zbGF0ZSgnZWxlbWVudCB7ZWxlbWVudH0gcmVmZXJlbmNlZCBieSB7cmVmZXJlbmNlZH0je3Byb3BlcnR5fSBub3QgeWV0IGRyYXduJywge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhyZWZTZW1hbnRpYyksXG4gICAgcmVmZXJlbmNlZDogZWxlbWVudFRvU3RyaW5nKHNlbWFudGljKSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSkpO1xufVxuXG5cbi8qKlxuICogQW4gaW1wb3J0ZXIgdGhhdCBhZGRzIGJwbW4gZWxlbWVudHMgdG8gdGhlIGNhbnZhc1xuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0VsZW1lbnRGYWN0b3J5fSBlbGVtZW50RmFjdG9yeVxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5JbXBvcnRlcihcbiAgICBldmVudEJ1cywgY2FudmFzLCBlbGVtZW50RmFjdG9yeSxcbiAgICBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSwgdGV4dFJlbmRlcmVyKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX3RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcbiAgdGhpcy5fdGV4dFJlbmRlcmVyID0gdGV4dFJlbmRlcmVyO1xufVxuXG5CcG1uSW1wb3J0ZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAndHJhbnNsYXRlJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLyoqXG4gKiBBZGQgYnBtbiBlbGVtZW50IChzZW1hbnRpYykgdG8gdGhlIGNhbnZhcyBvbnRvIHRoZVxuICogc3BlY2lmaWVkIHBhcmVudCBzaGFwZS5cbiAqL1xuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihzZW1hbnRpYywgcGFyZW50RWxlbWVudCkge1xuXG4gIHZhciBkaSA9IHNlbWFudGljLmRpLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZSxcbiAgICAgIGhpZGRlbjtcblxuICB2YXIgcGFyZW50SW5kZXg7XG5cbiAgLy8gUk9PVCBFTEVNRU5UXG4gIC8vIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgd2UgZGVhbCB3aXRoIGFcbiAgLy8gaW52aXNpYmxlIHJvb3QgZWxlbWVudCAocHJvY2VzcyBvciBjb2xsYWJvcmF0aW9uKVxuICBpZiAoaXMoZGksICdicG1uZGk6QlBNTlBsYW5lJykpIHtcblxuICAgIC8vIGFkZCBhIHZpcnR1YWwgZWxlbWVudCAobm90IGJlaW5nIGRyYXduKVxuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVSb290KGVsZW1lbnREYXRhKHNlbWFudGljKSk7XG5cbiAgICB0aGlzLl9jYW52YXMuc2V0Um9vdEVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICAvLyBTSEFQRVxuICBlbHNlIGlmIChpcyhkaSwgJ2JwbW5kaTpCUE1OU2hhcGUnKSkge1xuXG4gICAgdmFyIGNvbGxhcHNlZCA9ICFpc0V4cGFuZGVkKHNlbWFudGljKSxcbiAgICAgICAgaXNGcmFtZSA9IGlzRnJhbWVFbGVtZW50KHNlbWFudGljKTtcbiAgICBoaWRkZW4gPSBwYXJlbnRFbGVtZW50ICYmIChwYXJlbnRFbGVtZW50LmhpZGRlbiB8fCBwYXJlbnRFbGVtZW50LmNvbGxhcHNlZCk7XG5cbiAgICB2YXIgYm91bmRzID0gc2VtYW50aWMuZGkuYm91bmRzO1xuXG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGVsZW1lbnREYXRhKHNlbWFudGljLCB7XG4gICAgICBjb2xsYXBzZWQ6IGNvbGxhcHNlZCxcbiAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgeDogTWF0aC5yb3VuZChib3VuZHMueCksXG4gICAgICB5OiBNYXRoLnJvdW5kKGJvdW5kcy55KSxcbiAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoYm91bmRzLmhlaWdodCksXG4gICAgICBpc0ZyYW1lOiBpc0ZyYW1lXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgIHRoaXMuX2F0dGFjaEJvdW5kYXJ5KHNlbWFudGljLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBpbnNlcnQgbGFuZXMgYmVoaW5kIG90aGVyIGZsb3cgbm9kZXMgKGNmLiAjNzI3KVxuICAgIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46TGFuZScpKSB7XG4gICAgICBwYXJlbnRJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSkge1xuXG4gICAgICAvLyBjaGVjayB3aGV0aGVyIGRhdGEgc3RvcmUgaXMgaW5zaWRlIG91ciBvdXRzaWRlIG9mIGl0cyBzZW1hbnRpYyBwYXJlbnRcbiAgICAgIGlmICghaXNQb2ludEluc2lkZUJCb3gocGFyZW50RWxlbWVudCwgZ2V0TWlkKGJvdW5kcykpKSB7XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jYW52YXMuYWRkU2hhcGUoZWxlbWVudCwgcGFyZW50RWxlbWVudCwgcGFyZW50SW5kZXgpO1xuICB9XG5cbiAgLy8gQ09OTkVDVElPTlxuICBlbHNlIGlmIChpcyhkaSwgJ2JwbW5kaTpCUE1ORWRnZScpKSB7XG5cbiAgICB2YXIgc291cmNlID0gdGhpcy5fZ2V0U291cmNlKHNlbWFudGljKSxcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0KHNlbWFudGljKTtcblxuICAgIGhpZGRlbiA9IHBhcmVudEVsZW1lbnQgJiYgKHBhcmVudEVsZW1lbnQuaGlkZGVuIHx8IHBhcmVudEVsZW1lbnQuY29sbGFwc2VkKTtcblxuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKGVsZW1lbnREYXRhKHNlbWFudGljLCB7XG4gICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICB3YXlwb2ludHM6IGdldFdheXBvaW50cyhzZW1hbnRpYywgc291cmNlLCB0YXJnZXQpXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgICAvLyByZW5kZXIgYWx3YXlzIG9uIHRvcDsgdGhpcyBlbnN1cmVzIERhdGFBc3NvY2lhdGlvbnNcbiAgICAgIC8vIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkgYWNyb3NzIGRpZmZlcmVudCBcImhhY2tzXCIgcGVvcGxlXG4gICAgICAvLyBsb3ZlIHRvIG1vZGVsIHN1Y2ggYXMgY3Jvc3MgcGFydGljaXBhbnQgLyBzdWIgcHJvY2Vzc1xuICAgICAgLy8gYXNzb2NpYXRpb25zXG4gICAgICBwYXJlbnRFbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBpbnNlcnQgc2VxdWVuY2UgZmxvd3MgYmVoaW5kIG90aGVyIGZsb3cgbm9kZXMgKGNmLiAjNzI3KVxuICAgIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgIHBhcmVudEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9jYW52YXMuYWRkQ29ubmVjdGlvbihlbGVtZW50LCBwYXJlbnRFbGVtZW50LCBwYXJlbnRJbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgndW5rbm93biBkaSB7ZGl9IGZvciBlbGVtZW50IHtzZW1hbnRpY30nLCB7XG4gICAgICBkaTogZWxlbWVudFRvU3RyaW5nKGRpKSxcbiAgICAgIHNlbWFudGljOiBlbGVtZW50VG9TdHJpbmcoc2VtYW50aWMpXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gKG9wdGlvbmFsKSBMQUJFTFxuICBpZiAoaXNMYWJlbEV4dGVybmFsKHNlbWFudGljKSAmJiBnZXRMYWJlbChlbGVtZW50KSkge1xuICAgIHRoaXMuYWRkTGFiZWwoc2VtYW50aWMsIGVsZW1lbnQpO1xuICB9XG5cblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdicG1uRWxlbWVudC5hZGRlZCcsIHsgZWxlbWVudDogZWxlbWVudCB9KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGJvdW5kYXJ5IGVsZW1lbnQgdG8gdGhlIGdpdmVuIGhvc3RcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJvdW5kYXJ5U2VtYW50aWNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGJvdW5kYXJ5RWxlbWVudFxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9hdHRhY2hCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5U2VtYW50aWMsIGJvdW5kYXJ5RWxlbWVudCkge1xuICB2YXIgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuICB2YXIgaG9zdFNlbWFudGljID0gYm91bmRhcnlTZW1hbnRpYy5hdHRhY2hlZFRvUmVmO1xuXG4gIGlmICghaG9zdFNlbWFudGljKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbWlzc2luZyB7c2VtYW50aWN9I2F0dGFjaGVkVG9SZWYnLCB7XG4gICAgICBzZW1hbnRpYzogZWxlbWVudFRvU3RyaW5nKGJvdW5kYXJ5U2VtYW50aWMpXG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIGhvc3QgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGhvc3RTZW1hbnRpYy5pZCksXG4gICAgICBhdHRhY2hlcnMgPSBob3N0ICYmIGhvc3QuYXR0YWNoZXJzO1xuXG4gIGlmICghaG9zdCkge1xuICAgIHRocm93IG5vdFlldERyYXduKHRyYW5zbGF0ZSwgYm91bmRhcnlTZW1hbnRpYywgaG9zdFNlbWFudGljLCAnYXR0YWNoZWRUb1JlZicpO1xuICB9XG5cbiAgLy8gd2lyZSBlbGVtZW50Lmhvc3QgPD4gaG9zdC5hdHRhY2hlcnNcbiAgYm91bmRhcnlFbGVtZW50Lmhvc3QgPSBob3N0O1xuXG4gIGlmICghYXR0YWNoZXJzKSB7XG4gICAgaG9zdC5hdHRhY2hlcnMgPSBhdHRhY2hlcnMgPSBbXTtcbiAgfVxuXG4gIGlmIChhdHRhY2hlcnMuaW5kZXhPZihib3VuZGFyeUVsZW1lbnQpID09PSAtMSkge1xuICAgIGF0dGFjaGVycy5wdXNoKGJvdW5kYXJ5RWxlbWVudCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBhZGQgbGFiZWwgZm9yIGFuIGVsZW1lbnRcbiAqL1xuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5hZGRMYWJlbCA9IGZ1bmN0aW9uKHNlbWFudGljLCBlbGVtZW50KSB7XG4gIHZhciBib3VuZHMsXG4gICAgICB0ZXh0LFxuICAgICAgbGFiZWw7XG5cbiAgYm91bmRzID0gZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhzZW1hbnRpYywgZWxlbWVudCk7XG5cbiAgdGV4dCA9IGdldExhYmVsKGVsZW1lbnQpO1xuXG4gIGlmICh0ZXh0KSB7XG5cbiAgICAvLyBnZXQgY29ycmVjdGVkIGJvdW5kcyBmcm9tIGFjdHVhbCBsYXlvdXRlZCB0ZXh0XG4gICAgYm91bmRzID0gdGhpcy5fdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsTGFiZWxCb3VuZHMoYm91bmRzLCB0ZXh0KTtcbiAgfVxuXG4gIGxhYmVsID0gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlTGFiZWwoZWxlbWVudERhdGEoc2VtYW50aWMsIHtcbiAgICBpZDogc2VtYW50aWMuaWQgKyAnX2xhYmVsJyxcbiAgICBsYWJlbFRhcmdldDogZWxlbWVudCxcbiAgICB0eXBlOiAnbGFiZWwnLFxuICAgIGhpZGRlbjogZWxlbWVudC5oaWRkZW4gfHwgIWdldExhYmVsKGVsZW1lbnQpLFxuICAgIHg6IE1hdGgucm91bmQoYm91bmRzLngpLFxuICAgIHk6IE1hdGgucm91bmQoYm91bmRzLnkpLFxuICAgIHdpZHRoOiBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCksXG4gICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGJvdW5kcy5oZWlnaHQpXG4gIH0pKTtcblxuICByZXR1cm4gdGhpcy5fY2FudmFzLmFkZFNoYXBlKGxhYmVsLCBlbGVtZW50LnBhcmVudCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZHJhd24gY29ubmVjdGlvbiBlbmQgYmFzZWQgb24gdGhlIGdpdmVuIHNpZGUuXG4gKlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBlbmQgaXMgbm90IHlldCBkcmF3blxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRFbmQgPSBmdW5jdGlvbihzZW1hbnRpYywgc2lkZSkge1xuXG4gIHZhciBlbGVtZW50LFxuICAgICAgcmVmU2VtYW50aWMsXG4gICAgICB0eXBlID0gc2VtYW50aWMuJHR5cGUsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgcmVmU2VtYW50aWMgPSBzZW1hbnRpY1tzaWRlICsgJ1JlZiddO1xuXG4gIC8vIGhhbmRsZSBteXN0ZXJpb3VzIGlzTWFueSBEYXRhQXNzb2NpYXRpb24jc291cmNlUmVmXG4gIGlmIChzaWRlID09PSAnc291cmNlJyAmJiB0eXBlID09PSAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpIHtcbiAgICByZWZTZW1hbnRpYyA9IHJlZlNlbWFudGljICYmIHJlZlNlbWFudGljWzBdO1xuICB9XG5cbiAgLy8gZml4IHNvdXJjZSAvIHRhcmdldCBmb3IgRGF0YUlucHV0QXNzb2NpYXRpb24gLyBEYXRhT3V0cHV0QXNzb2NpYXRpb25cbiAgaWYgKHNpZGUgPT09ICdzb3VyY2UnICYmIHR5cGUgPT09ICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicgfHxcbiAgICAgIHNpZGUgPT09ICd0YXJnZXQnICYmIHR5cGUgPT09ICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykge1xuXG4gICAgcmVmU2VtYW50aWMgPSBzZW1hbnRpYy4kcGFyZW50O1xuICB9XG5cbiAgZWxlbWVudCA9IHJlZlNlbWFudGljICYmIHRoaXMuX2dldEVsZW1lbnQocmVmU2VtYW50aWMpO1xuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBpZiAocmVmU2VtYW50aWMpIHtcbiAgICB0aHJvdyBub3RZZXREcmF3bih0cmFuc2xhdGUsIHNlbWFudGljLCByZWZTZW1hbnRpYywgc2lkZSArICdSZWYnKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCd7c2VtYW50aWN9I3tzaWRlfSBSZWYgbm90IHNwZWNpZmllZCcsIHtcbiAgICAgIHNlbWFudGljOiBlbGVtZW50VG9TdHJpbmcoc2VtYW50aWMpLFxuICAgICAgc2lkZTogc2lkZVxuICAgIH0pKTtcbiAgfVxufTtcblxuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5fZ2V0U291cmNlID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldEVuZChzZW1hbnRpYywgJ3NvdXJjZScpO1xufTtcblxuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5fZ2V0VGFyZ2V0ID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldEVuZChzZW1hbnRpYywgJ3RhcmdldCcpO1xufTtcblxuXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRFbGVtZW50ID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoc2VtYW50aWMuaWQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94KGJib3gsIHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQueCxcbiAgICAgIHkgPSBwb2ludC55O1xuXG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gaXNGcmFtZUVsZW1lbnQoc2VtYW50aWMpIHtcbiAgcmV0dXJuIGlzKHNlbWFudGljLCAnYnBtbjpHcm91cCcpO1xufSIsImltcG9ydCB7XG4gIGZpbHRlcixcbiAgZmluZCxcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBSZWZzIGZyb20gJ29iamVjdC1yZWZzJztcblxuaW1wb3J0IHtcbiAgZWxlbWVudFRvU3RyaW5nXG59IGZyb20gJy4vVXRpbCc7XG5cbnZhciBkaVJlZnMgPSBuZXcgUmVmcyhcbiAgeyBuYW1lOiAnYnBtbkVsZW1lbnQnLCBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gIHsgbmFtZTogJ2RpJywgY29uZmlndXJhYmxlOiB0cnVlIH1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFuIGVsZW1lbnQgaGFzIHRoZSBnaXZlbiBtZXRhLW1vZGVsIHR5cGVcbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSAgZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgIHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpcyhlbGVtZW50LCB0eXBlKSB7XG4gIHJldHVybiBlbGVtZW50LiRpbnN0YW5jZU9mKHR5cGUpO1xufVxuXG5cbi8qKlxuICogRmluZCBhIHN1aXRhYmxlIGRpc3BsYXkgY2FuZGlkYXRlIGZvciBkZWZpbml0aW9ucyB3aGVyZSB0aGUgREkgZG9lcyBub3RcbiAqIGNvcnJlY3RseSBzcGVjaWZ5IG9uZS5cbiAqL1xuZnVuY3Rpb24gZmluZERpc3BsYXlDYW5kaWRhdGUoZGVmaW5pdGlvbnMpIHtcbiAgcmV0dXJuIGZpbmQoZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGlzKGUsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlLCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG4gIH0pO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5UcmVlV2Fsa2VyKGhhbmRsZXIsIHRyYW5zbGF0ZSkge1xuXG4gIC8vIGxpc3Qgb2YgY29udGFpbmVycyBhbHJlYWR5IHdhbGtlZFxuICB2YXIgaGFuZGxlZEVsZW1lbnRzID0ge307XG5cbiAgLy8gbGlzdCBvZiBlbGVtZW50cyB0byBoYW5kbGUgZGVmZXJyZWQgdG8gZW5zdXJlXG4gIC8vIHByZXJlcXVpc2l0ZXMgYXJlIGRyYXduXG4gIHZhciBkZWZlcnJlZCA9IFtdO1xuXG4gIC8vIEhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGNvbnRleHR1YWwoZm4sIGN0eCkge1xuICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICBmbihlLCBjdHgpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVkKGVsZW1lbnQpIHtcbiAgICBoYW5kbGVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNIYW5kbGVkKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gaGFuZGxlZEVsZW1lbnRzW2VsZW1lbnQuaWRdO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaXQoZWxlbWVudCwgY3R4KSB7XG5cbiAgICB2YXIgZ2Z4ID0gZWxlbWVudC5nZng7XG5cbiAgICAvLyBhdm9pZCBtdWx0aXBsZSByZW5kZXJpbmcgb2YgZWxlbWVudHNcbiAgICBpZiAoZ2Z4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZSgnYWxyZWFkeSByZW5kZXJlZCB7ZWxlbWVudH0nLCB7IGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhlbGVtZW50KSB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjYWxsIGhhbmRsZXJcbiAgICByZXR1cm4gaGFuZGxlci5lbGVtZW50KGVsZW1lbnQsIGN0eCk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdFJvb3QoZWxlbWVudCwgZGlhZ3JhbSkge1xuICAgIHJldHVybiBoYW5kbGVyLnJvb3QoZWxlbWVudCwgZGlhZ3JhbSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdElmRGkoZWxlbWVudCwgY3R4KSB7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIGdmeCA9IGVsZW1lbnQuZGkgJiYgdmlzaXQoZWxlbWVudCwgY3R4KTtcblxuICAgICAgaGFuZGxlZChlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIGdmeDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dFcnJvcihlLm1lc3NhZ2UsIHsgZWxlbWVudDogZWxlbWVudCwgZXJyb3I6IGUgfSk7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IodHJhbnNsYXRlKCdmYWlsZWQgdG8gaW1wb3J0IHtlbGVtZW50fScsIHsgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGVsZW1lbnQpIH0pKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSwgY29udGV4dCkge1xuICAgIGhhbmRsZXIuZXJyb3IobWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICAvLyBESSBoYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJEaShkaSkge1xuICAgIHZhciBicG1uRWxlbWVudCA9IGRpLmJwbW5FbGVtZW50O1xuXG4gICAgaWYgKGJwbW5FbGVtZW50KSB7XG4gICAgICBpZiAoYnBtbkVsZW1lbnQuZGkpIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgdHJhbnNsYXRlKCdtdWx0aXBsZSBESSBlbGVtZW50cyBkZWZpbmVkIGZvciB7ZWxlbWVudH0nLCB7XG4gICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoYnBtbkVsZW1lbnQpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBlbGVtZW50OiBicG1uRWxlbWVudCB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaVJlZnMuYmluZChicG1uRWxlbWVudCwgJ2RpJyk7XG4gICAgICAgIGJwbW5FbGVtZW50LmRpID0gZGk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICB0cmFuc2xhdGUoJ25vIGJwbW5FbGVtZW50IHJlZmVyZW5jZWQgaW4ge2VsZW1lbnR9Jywge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhkaSlcbiAgICAgICAgfSksXG4gICAgICAgIHsgZWxlbWVudDogZGkgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEaWFncmFtKGRpYWdyYW0pIHtcbiAgICBoYW5kbGVQbGFuZShkaWFncmFtLnBsYW5lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYW5lKHBsYW5lKSB7XG4gICAgcmVnaXN0ZXJEaShwbGFuZSk7XG5cbiAgICBmb3JFYWNoKHBsYW5lLnBsYW5lRWxlbWVudCwgaGFuZGxlUGxhbmVFbGVtZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYW5lRWxlbWVudChwbGFuZUVsZW1lbnQpIHtcbiAgICByZWdpc3RlckRpKHBsYW5lRWxlbWVudCk7XG4gIH1cblxuXG4gIC8vIFNlbWFudGljIGhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogSGFuZGxlIGRlZmluaXRpb25zIGFuZCByZXR1cm4gdGhlIHJlbmRlcmVkIGRpYWdyYW0gKGlmIGFueSlcbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9ucyB0byB3YWxrIGFuZCBpbXBvcnRcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBbZGlhZ3JhbV0gc3BlY2lmaWMgZGlhZ3JhbSB0byBpbXBvcnQgYW5kIGRpc3BsYXlcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGRpYWdyYW0gdG8gZGlzcGxheSBjb3VsZCBiZSBmb3VuZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMsIGRpYWdyYW0pIHtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSB3YWxrIHRoZSBjb3JyZWN0IGJwbW5FbGVtZW50XG5cbiAgICB2YXIgZGlhZ3JhbXMgPSBkZWZpbml0aW9ucy5kaWFncmFtcztcblxuICAgIGlmIChkaWFncmFtICYmIGRpYWdyYW1zLmluZGV4T2YoZGlhZ3JhbSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdkaWFncmFtIG5vdCBwYXJ0IG9mIGJwbW46RGVmaW5pdGlvbnMnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFkaWFncmFtICYmIGRpYWdyYW1zICYmIGRpYWdyYW1zLmxlbmd0aCkge1xuICAgICAgZGlhZ3JhbSA9IGRpYWdyYW1zWzBdO1xuICAgIH1cblxuICAgIC8vIG5vIGRpYWdyYW0gLT4gbm90aGluZyB0byBpbXBvcnRcbiAgICBpZiAoIWRpYWdyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIGRpYWdyYW0gdG8gZGlzcGxheScpKTtcbiAgICB9XG5cbiAgICAvLyBsb2FkIERJIGZyb20gc2VsZWN0ZWQgZGlhZ3JhbSBvbmx5XG4gICAgaGFuZGxlRGlhZ3JhbShkaWFncmFtKTtcblxuXG4gICAgdmFyIHBsYW5lID0gZGlhZ3JhbS5wbGFuZTtcblxuICAgIGlmICghcGxhbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoXG4gICAgICAgICdubyBwbGFuZSBmb3Ige2VsZW1lbnR9JyxcbiAgICAgICAgeyBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoZGlhZ3JhbSkgfVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gcGxhbmUuYnBtbkVsZW1lbnQ7XG5cbiAgICAvLyBlbnN1cmUgd2UgZGVmYXVsdCB0byBhIHN1aXRhYmxlIGRpc3BsYXkgY2FuZGlkYXRlIChwcm9jZXNzIG9yIGNvbGxhYm9yYXRpb24pLFxuICAgIC8vIGV2ZW4gaWYgbm9uIGlzIHNwZWNpZmllZCBpbiBESVxuICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgIHJvb3RFbGVtZW50ID0gZmluZERpc3BsYXlDYW5kaWRhdGUoZGVmaW5pdGlvbnMpO1xuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIHByb2Nlc3Mgb3IgY29sbGFib3JhdGlvbiB0byBkaXNwbGF5JykpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICB0cmFuc2xhdGUoJ2NvcnJlY3RpbmcgbWlzc2luZyBicG1uRWxlbWVudCBvbiB7cGxhbmV9IHRvIHtyb290RWxlbWVudH0nLCB7XG4gICAgICAgICAgICBwbGFuZTogZWxlbWVudFRvU3RyaW5nKHBsYW5lKSxcbiAgICAgICAgICAgIHJvb3RFbGVtZW50OiBlbGVtZW50VG9TdHJpbmcocm9vdEVsZW1lbnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBjb3JyZWN0IERJIG9uIHRoZSBmbHlcbiAgICAgICAgcGxhbmUuYnBtbkVsZW1lbnQgPSByb290RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJEaShwbGFuZSk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgY3R4ID0gdmlzaXRSb290KHJvb3RFbGVtZW50LCBwbGFuZSk7XG5cbiAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgaGFuZGxlUHJvY2Vzcyhyb290RWxlbWVudCwgY3R4KTtcbiAgICB9IGVsc2UgaWYgKGlzKHJvb3RFbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcbiAgICAgIGhhbmRsZUNvbGxhYm9yYXRpb24ocm9vdEVsZW1lbnQsIGN0eCk7XG5cbiAgICAgIC8vIGZvcmNlIGRyYXdpbmcgb2YgZXZlcnl0aGluZyBub3QgeWV0IGRyYXduIHRoYXQgaXMgcGFydCBvZiB0aGUgdGFyZ2V0IERJXG4gICAgICBoYW5kbGVVbmhhbmRsZWRQcm9jZXNzZXMoZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZSgndW5zdXBwb3J0ZWQgYnBtbkVsZW1lbnQgZm9yIHtwbGFuZX06IHtyb290RWxlbWVudH0nLCB7XG4gICAgICAgICAgcGxhbmU6IGVsZW1lbnRUb1N0cmluZyhwbGFuZSksXG4gICAgICAgICAgcm9vdEVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhyb290RWxlbWVudClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIGFsbCBkZWZlcnJlZCBlbGVtZW50c1xuICAgIGhhbmRsZURlZmVycmVkKGRlZmVycmVkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURlZmVycmVkKCkge1xuXG4gICAgdmFyIGZuO1xuXG4gICAgLy8gZHJhaW4gZGVmZXJyZWQgdW50aWwgZW1wdHlcbiAgICB3aGlsZSAoZGVmZXJyZWQubGVuZ3RoKSB7XG4gICAgICBmbiA9IGRlZmVycmVkLnNoaWZ0KCk7XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUHJvY2Vzcyhwcm9jZXNzLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKHByb2Nlc3MsIGNvbnRleHQpO1xuICAgIGhhbmRsZUlvU3BlY2lmaWNhdGlvbihwcm9jZXNzLmlvU3BlY2lmaWNhdGlvbiwgY29udGV4dCk7XG5cbiAgICBoYW5kbGVBcnRpZmFjdHMocHJvY2Vzcy5hcnRpZmFjdHMsIGNvbnRleHQpO1xuXG4gICAgLy8gbG9nIHByb2Nlc3MgaGFuZGxlZFxuICAgIGhhbmRsZWQocHJvY2Vzcyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRQcm9jZXNzZXMocm9vdEVsZW1lbnRzLCBjdHgpIHtcblxuICAgIC8vIHdhbGsgdGhyb3VnaCBhbGwgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZHJhd24gYW5kIGRyYXcgdGhlbVxuICAgIC8vIGlmIHRoZXkgY29udGFpbiBsYW5lcyB3aXRoIERJIGluZm9ybWF0aW9uLlxuICAgIC8vIHdlIGRvIHRoaXMgdG8gcGFzcyB0aGUgZnJlZS1mbG9hdGluZyBsYW5lIHRlc3QgY2FzZXMgaW4gdGhlIE1JV0cgdGVzdCBzdWl0ZVxuICAgIHZhciBwcm9jZXNzZXMgPSBmaWx0ZXIocm9vdEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gIWlzSGFuZGxlZChlKSAmJiBpcyhlLCAnYnBtbjpQcm9jZXNzJykgJiYgZS5sYW5lU2V0cztcbiAgICB9KTtcblxuICAgIHByb2Nlc3Nlcy5mb3JFYWNoKGNvbnRleHR1YWwoaGFuZGxlUHJvY2VzcywgY3R4KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlRmxvdyhtZXNzYWdlRmxvdywgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShtZXNzYWdlRmxvdywgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlRmxvd3MobWVzc2FnZUZsb3dzLCBjb250ZXh0KSB7XG4gICAgZm9yRWFjaChtZXNzYWdlRmxvd3MsIGNvbnRleHR1YWwoaGFuZGxlTWVzc2FnZUZsb3csIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFBc3NvY2lhdGlvbihhc3NvY2lhdGlvbiwgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShhc3NvY2lhdGlvbiwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEYXRhSW5wdXQoZGF0YUlucHV0LCBjb250ZXh0KSB7XG4gICAgdmlzaXRJZkRpKGRhdGFJbnB1dCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEYXRhT3V0cHV0KGRhdGFPdXRwdXQsIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoZGF0YU91dHB1dCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVBcnRpZmFjdChhcnRpZmFjdCwgY29udGV4dCkge1xuXG4gICAgLy8gYnBtbjpUZXh0QW5ub3RhdGlvblxuICAgIC8vIGJwbW46R3JvdXBcbiAgICAvLyBicG1uOkFzc29jaWF0aW9uXG5cbiAgICB2aXNpdElmRGkoYXJ0aWZhY3QsIGNvbnRleHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RzKGFydGlmYWN0cywgY29udGV4dCkge1xuXG4gICAgZm9yRWFjaChhcnRpZmFjdHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChpcyhlLCAnYnBtbjpBc3NvY2lhdGlvbicpKSB7XG4gICAgICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaGFuZGxlQXJ0aWZhY3QoZSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlQXJ0aWZhY3QoZSwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJb1NwZWNpZmljYXRpb24oaW9TcGVjaWZpY2F0aW9uLCBjb250ZXh0KSB7XG5cbiAgICBpZiAoIWlvU3BlY2lmaWNhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvckVhY2goaW9TcGVjaWZpY2F0aW9uLmRhdGFJbnB1dHMsIGNvbnRleHR1YWwoaGFuZGxlRGF0YUlucHV0LCBjb250ZXh0KSk7XG4gICAgZm9yRWFjaChpb1NwZWNpZmljYXRpb24uZGF0YU91dHB1dHMsIGNvbnRleHR1YWwoaGFuZGxlRGF0YU91dHB1dCwgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3ViUHJvY2VzcyhzdWJQcm9jZXNzLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKHN1YlByb2Nlc3MsIGNvbnRleHQpO1xuICAgIGhhbmRsZUFydGlmYWN0cyhzdWJQcm9jZXNzLmFydGlmYWN0cywgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVGbG93Tm9kZShmbG93Tm9kZSwgY29udGV4dCkge1xuICAgIHZhciBjaGlsZEN0eCA9IHZpc2l0SWZEaShmbG93Tm9kZSwgY29udGV4dCk7XG5cbiAgICBpZiAoaXMoZmxvd05vZGUsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgaGFuZGxlU3ViUHJvY2VzcyhmbG93Tm9kZSwgY2hpbGRDdHggfHwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKGlzKGZsb3dOb2RlLCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgICBoYW5kbGVJb1NwZWNpZmljYXRpb24oZmxvd05vZGUuaW9TcGVjaWZpY2F0aW9uLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBkZWZlciBoYW5kbGluZyBvZiBhc3NvY2lhdGlvbnNcbiAgICAvLyBhZmZlY3RlZCB0eXBlczpcbiAgICAvL1xuICAgIC8vICAgKiBicG1uOkFjdGl2aXR5XG4gICAgLy8gICAqIGJwbW46VGhyb3dFdmVudFxuICAgIC8vICAgKiBicG1uOkNhdGNoRXZlbnRcbiAgICAvL1xuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBmb3JFYWNoKGZsb3dOb2RlLmRhdGFJbnB1dEFzc29jaWF0aW9ucywgY29udGV4dHVhbChoYW5kbGVEYXRhQXNzb2NpYXRpb24sIGNvbnRleHQpKTtcbiAgICAgIGZvckVhY2goZmxvd05vZGUuZGF0YU91dHB1dEFzc29jaWF0aW9ucywgY29udGV4dHVhbChoYW5kbGVEYXRhQXNzb2NpYXRpb24sIGNvbnRleHQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVNlcXVlbmNlRmxvdyhzZXF1ZW5jZUZsb3csIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoc2VxdWVuY2VGbG93LCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFFbGVtZW50KGRhdGFPYmplY3QsIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoZGF0YU9iamVjdCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMYW5lKGxhbmUsIGNvbnRleHQpIHtcblxuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBuZXdDb250ZXh0ID0gdmlzaXRJZkRpKGxhbmUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFuZS5jaGlsZExhbmVTZXQpIHtcbiAgICAgICAgaGFuZGxlTGFuZVNldChsYW5lLmNoaWxkTGFuZVNldCwgbmV3Q29udGV4dCB8fCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgd2lyZUZsb3dOb2RlUmVmcyhsYW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxhbmVTZXQobGFuZVNldCwgY29udGV4dCkge1xuICAgIGZvckVhY2gobGFuZVNldC5sYW5lcywgY29udGV4dHVhbChoYW5kbGVMYW5lLCBjb250ZXh0KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMYW5lU2V0cyhsYW5lU2V0cywgY29udGV4dCkge1xuICAgIGZvckVhY2gobGFuZVNldHMsIGNvbnRleHR1YWwoaGFuZGxlTGFuZVNldCwgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGV4dCkge1xuICAgIGhhbmRsZUZsb3dFbGVtZW50cyhjb250YWluZXIuZmxvd0VsZW1lbnRzLCBjb250ZXh0KTtcblxuICAgIGlmIChjb250YWluZXIubGFuZVNldHMpIHtcbiAgICAgIGhhbmRsZUxhbmVTZXRzKGNvbnRhaW5lci5sYW5lU2V0cywgY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmxvd0VsZW1lbnRzKGZsb3dFbGVtZW50cywgY29udGV4dCkge1xuICAgIGZvckVhY2goZmxvd0VsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoaXMoZSwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgICAgZGVmZXJyZWQucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVTZXF1ZW5jZUZsb3coZSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpcyhlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgICAgZGVmZXJyZWQudW5zaGlmdChmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVGbG93Tm9kZShlLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICAgICAgaGFuZGxlRmxvd05vZGUoZSwgY29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkRhdGFPYmplY3QnKSkge1xuXG4gICAgICAgIC8vIFNLSVAgKGFzc3VtZSBjb3JyZWN0IHJlZmVyZW5jaW5nIHZpYSBEYXRhT2JqZWN0UmVmZXJlbmNlKVxuICAgICAgfSBlbHNlIGlmIChpcyhlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSkge1xuICAgICAgICBoYW5kbGVEYXRhRWxlbWVudChlLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoaXMoZSwgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpKSB7XG4gICAgICAgIGhhbmRsZURhdGFFbGVtZW50KGUsIGNvbnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgdHJhbnNsYXRlKCd1bnJlY29nbml6ZWQgZmxvd0VsZW1lbnQge2VsZW1lbnR9IGluIGNvbnRleHQge2NvbnRleHR9Jywge1xuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGUpLFxuICAgICAgICAgICAgY29udGV4dDogKGNvbnRleHQgPyBlbGVtZW50VG9TdHJpbmcoY29udGV4dC5idXNpbmVzc09iamVjdCkgOiAnbnVsbCcpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBlbGVtZW50OiBlLCBjb250ZXh0OiBjb250ZXh0IH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50LCBjb250ZXh0KSB7XG4gICAgdmFyIG5ld0N0eCA9IHZpc2l0SWZEaShwYXJ0aWNpcGFudCwgY29udGV4dCk7XG5cbiAgICB2YXIgcHJvY2VzcyA9IHBhcnRpY2lwYW50LnByb2Nlc3NSZWY7XG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGhhbmRsZVByb2Nlc3MocHJvY2VzcywgbmV3Q3R4IHx8IGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbGxhYm9yYXRpb24oY29sbGFib3JhdGlvbikge1xuXG4gICAgZm9yRWFjaChjb2xsYWJvcmF0aW9uLnBhcnRpY2lwYW50cywgY29udGV4dHVhbChoYW5kbGVQYXJ0aWNpcGFudCkpO1xuXG4gICAgaGFuZGxlQXJ0aWZhY3RzKGNvbGxhYm9yYXRpb24uYXJ0aWZhY3RzKTtcblxuICAgIC8vIGhhbmRsZSBtZXNzYWdlIGZsb3dzIGxhdGVzdCBpbiB0aGUgcHJvY2Vzc1xuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBoYW5kbGVNZXNzYWdlRmxvd3MoY29sbGFib3JhdGlvbi5tZXNzYWdlRmxvd3MpO1xuICAgIH0pO1xuICB9XG5cblxuICBmdW5jdGlvbiB3aXJlRmxvd05vZGVSZWZzKGxhbmUpIHtcblxuICAgIC8vIHdpcmUgdGhlIHZpcnR1YWwgZmxvd05vZGVSZWZzIDwtPiByZWxhdGlvbnNoaXBcbiAgICBmb3JFYWNoKGxhbmUuZmxvd05vZGVSZWYsIGZ1bmN0aW9uKGZsb3dOb2RlKSB7XG4gICAgICB2YXIgbGFuZXMgPSBmbG93Tm9kZS5nZXQoJ2xhbmVzJyk7XG5cbiAgICAgIGlmIChsYW5lcykge1xuICAgICAgICBsYW5lcy5wdXNoKGxhbmUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQVBJIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICByZXR1cm4ge1xuICAgIGhhbmRsZURlZmVycmVkOiBoYW5kbGVEZWZlcnJlZCxcbiAgICBoYW5kbGVEZWZpbml0aW9uczogaGFuZGxlRGVmaW5pdGlvbnMsXG4gICAgaGFuZGxlU3ViUHJvY2VzczogaGFuZGxlU3ViUHJvY2VzcyxcbiAgICByZWdpc3RlckRpOiByZWdpc3RlckRpXG4gIH07XG59IiwiaW1wb3J0IEJwbW5UcmVlV2Fsa2VyIGZyb20gJy4vQnBtblRyZWVXYWxrZXInO1xuXG5cbi8qKlxuICogVGhlIGltcG9ydEJwbW5EaWFncmFtIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbXBvcnRCUE1ORGlhZ3JhbVJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiogVGhlIGltcG9ydEJwbW5EaWFncmFtIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydEJQTU5EaWFncmFtRXJyb3JcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4gKiBJbXBvcnQgdGhlIGRlZmluaXRpb25zIGludG8gYSBkaWFncmFtLlxuICpcbiAqIEVycm9ycyBhbmQgd2FybmluZ3MgYXJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIHNwZWNpZmllZCBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0gIHtkanMuRGlhZ3JhbX0gZGlhZ3JhbVxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudDxEZWZpbml0aW9ucz59IGRlZmluaXRpb25zXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50PEJQTU5EaWFncmFtPn0gW2JwbW5EaWFncmFtXSB0aGUgZGlhZ3JhbSB0byBiZSByZW5kZXJlZFxuICogKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0QlBNTkRpYWdyYW1SZXN1bHQsIEltcG9ydEJQTU5EaWFncmFtRXJyb3I+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0QnBtbkRpYWdyYW0oZGlhZ3JhbSwgZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKSB7XG5cbiAgdmFyIGltcG9ydGVyLFxuICAgICAgZXZlbnRCdXMsXG4gICAgICB0cmFuc2xhdGU7XG5cbiAgdmFyIGVycm9yLFxuICAgICAgd2FybmluZ3MgPSBbXTtcblxuICAvKipcbiAgICogV2FsayB0aGUgZGlhZ3JhbSBzZW1hbnRpY2FsbHksIGltcG9ydGluZyAoPWRyYXdpbmcpXG4gICAqIGFsbCBlbGVtZW50cyB5b3UgZW5jb3VudGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8RGVmaW5pdGlvbnM+fSBkZWZpbml0aW9uc1xuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fSBicG1uRGlhZ3JhbVxuICAgKi9cbiAgZnVuY3Rpb24gcmVuZGVyKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkge1xuXG4gICAgdmFyIHZpc2l0b3IgPSB7XG5cbiAgICAgIHJvb3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGltcG9ydGVyLmFkZChlbGVtZW50KTtcbiAgICAgIH0sXG5cbiAgICAgIGVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHBhcmVudFNoYXBlKSB7XG4gICAgICAgIHJldHVybiBpbXBvcnRlci5hZGQoZWxlbWVudCwgcGFyZW50U2hhcGUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCh7IG1lc3NhZ2U6IG1lc3NhZ2UsIGNvbnRleHQ6IGNvbnRleHQgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB3YWxrZXIgPSBuZXcgQnBtblRyZWVXYWxrZXIodmlzaXRvciwgdHJhbnNsYXRlKTtcblxuICAgIC8vIHRyYXZlcnNlIEJQTU4gMi4wIGRvY3VtZW50IG1vZGVsLFxuICAgIC8vIHN0YXJ0aW5nIGF0IGRlZmluaXRpb25zXG4gICAgd2Fsa2VyLmhhbmRsZURlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGltcG9ydGVyID0gZGlhZ3JhbS5nZXQoJ2JwbW5JbXBvcnRlcicpO1xuICAgICAgZXZlbnRCdXMgPSBkaWFncmFtLmdldCgnZXZlbnRCdXMnKTtcbiAgICAgIHRyYW5zbGF0ZSA9IGRpYWdyYW0uZ2V0KCd0cmFuc2xhdGUnKTtcblxuICAgICAgZXZlbnRCdXMuZmlyZSgnaW1wb3J0LnJlbmRlci5zdGFydCcsIHsgZGVmaW5pdGlvbnM6IGRlZmluaXRpb25zIH0pO1xuXG4gICAgICByZW5kZXIoZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKTtcblxuICAgICAgZXZlbnRCdXMuZmlyZSgnaW1wb3J0LnJlbmRlci5jb21wbGV0ZScsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICB3YXJuaW5nczogd2FybmluZ3NcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IHdhcm5pbmdzOiB3YXJuaW5ncyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgIGUud2FybmluZ3MgPSB3YXJuaW5ncztcbiAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBlbGVtZW50VG9TdHJpbmcoZSkge1xuICBpZiAoIWUpIHtcbiAgICByZXR1cm4gJzxudWxsPic7XG4gIH1cblxuICByZXR1cm4gJzwnICsgZS4kdHlwZSArIChlLmlkID8gJyBpZD1cIicgKyBlLmlkIDogJycpICsgJ1wiIC8+Jztcbn0iLCJpbXBvcnQgdHJhbnNsYXRlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcblxuaW1wb3J0IEJwbW5JbXBvcnRlciBmcm9tICcuL0JwbW5JbXBvcnRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICB0cmFuc2xhdGVcbiAgXSxcbiAgYnBtbkltcG9ydGVyOiBbICd0eXBlJywgQnBtbkltcG9ydGVyIF1cbn07IiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ21pbi1kYXNoJztcblxuLy8gVE9ETyhuaWtrdSk6IHJlbW92ZSB3aXRoIGZ1dHVyZSBicG1uLWpzIHZlcnNpb25cblxuLyoqXG4gKiBXcmFwcyBBUElzIHRvIGNoZWNrOlxuICpcbiAqIDEpIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkIC0+IFdhcm4gdXNlcnMgYWJvdXQgY2FsbGJhY2sgZGVwcmVjYXRpb24uXG4gKiAyKSBJZiBQcm9taXNlIGNsYXNzIGlzIGltcGxlbWVudGVkIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBGb3JDb21wYXRpYmlsaXR5KGFwaSkge1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcblxuICAgIGlmICghd2luZG93LlByb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgcG9seWZpbGwgUHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnTGVuID49IDEgJiYgaXNGdW5jdGlvbihhcmd1bWVudHNbYXJnTGVuIC0gMV0pKSB7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmdMZW4gLSAxXTtcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcihcbiAgICAgICAgJ1Bhc3NpbmcgY2FsbGJhY2tzIHRvICcgKyBhcGkubmFtZSArICcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgK1xuICAgICAgICAnUGxlYXNlIHN3aXRjaCB0byBwcm9taXNlczogaHR0cHM6Ly9icG1uLmlvL2wvbW92aW5nLXRvLXByb21pc2VzLmh0bWwnXG4gICAgICApKTtcblxuICAgICAgdmFyIGFyZ3NXaXRob3V0Q2FsbGJhY2sgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKTtcblxuICAgICAgYXBpLmFwcGx5KHRoaXMsIGFyZ3NXaXRob3V0Q2FsbGJhY2spLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG5cbiAgICAgICAgdmFyIGZpcnN0S2V5ID0gT2JqZWN0LmtleXMocmVzdWx0KVswXTtcblxuICAgICAgICAvLyBUaGUgQVBJcyB3ZSBhcmUgd3JhcHBpbmcgYWxsIHJlc29sdmUgYSBzaW5nbGUgaXRlbSBkZXBlbmRpbmcgb24gdGhlIEFQSS5cbiAgICAgICAgLy8gRm9yIGluc3RhbmNlLCBpbXBvcnRYTUwgcmVzb2x2ZXMgeyB3YXJuaW5ncyB9IGFuZCBzYXZlWE1MIHJldHVybnMgeyB4bWwgfS5cbiAgICAgICAgLy8gVGhhdCdzIHdoeSB3ZSBjYW4gY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZmlyc3QgaXRlbSBvZiByZXN1bHQuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHRbZmlyc3RLZXldKTtcblxuICAgICAgICAvLyBQYXNzaW5nIGEgc2Vjb25kIHBhcmFtdGVyIGluc3RlYWQgb2YgY2F0Y2ggYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGNhdGNoIGVycm9ycyB0aHJvd24gYnkgY2FsbGJhY2soKS5cbiAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIGVyci53YXJuaW5ncyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICByZXR1cm4gYXBpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4vTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwYW5kZWQoZWxlbWVudCkge1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpDYWxsQWN0aXZpdHknKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICByZXR1cm4gISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5kaS5pc0V4cGFuZGVkO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5wcm9jZXNzUmVmO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVycnVwdGluZyhlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ICYmIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlzSW50ZXJydXB0aW5nICE9PSBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS50cmlnZ2VyZWRCeUV2ZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIGV2ZW50VHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gIGlmIChiby5ldmVudERlZmluaXRpb25zKSB7XG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgaWYgKGlzKGV2ZW50LCBldmVudFR5cGUpKSB7XG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG4iLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vTW9kZWxVdGlsJztcblxuXG5leHBvcnQgdmFyIERFRkFVTFRfTEFCRUxfU0laRSA9IHtcbiAgd2lkdGg6IDkwLFxuICBoZWlnaHQ6IDIwXG59O1xuXG5leHBvcnQgdmFyIEZMT1dfTEFCRUxfSU5ERU5UID0gMTU7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNlbWFudGljIGhhcyBhbiBleHRlcm5hbCBsYWJlbFxuICpcbiAqIEBwYXJhbSB7QnBtbkVsZW1lbnR9IHNlbWFudGljXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGhhcyBsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYWJlbEV4dGVybmFsKHNlbWFudGljKSB7XG4gIHJldHVybiBpcyhzZW1hbnRpYywgJ2JwbW46RXZlbnQnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkdhdGV3YXknKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YUlucHV0JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT3V0cHV0JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOk1lc3NhZ2VGbG93JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpHcm91cCcpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBoYXMgYW4gZXh0ZXJuYWwgbGFiZWxcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBoYXMgbGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4dGVybmFsTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gaXNMYWJlbChlbGVtZW50LmxhYmVsKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBvc2l0aW9uIGZvciBzZXF1ZW5jZSBmbG93IGxhYmVsc1xuICpcbiAqIEBwYXJhbSAge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gKiBAcmV0dXJuIHtQb2ludH0gdGhlIGxhYmVsIHBvc2l0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93TGFiZWxQb3NpdGlvbih3YXlwb2ludHMpIHtcblxuICAvLyBnZXQgdGhlIHdheXBvaW50cyBtaWRcbiAgdmFyIG1pZCA9IHdheXBvaW50cy5sZW5ndGggLyAyIC0gMTtcblxuICB2YXIgZmlyc3QgPSB3YXlwb2ludHNbTWF0aC5mbG9vcihtaWQpXTtcbiAgdmFyIHNlY29uZCA9IHdheXBvaW50c1tNYXRoLmNlaWwobWlkICsgMC4wMSldO1xuXG4gIC8vIGdldCBwb3NpdGlvblxuICB2YXIgcG9zaXRpb24gPSBnZXRXYXlwb2ludHNNaWQod2F5cG9pbnRzKTtcblxuICAvLyBjYWxjdWxhdGUgYW5nbGVcbiAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuKChzZWNvbmQueSAtIGZpcnN0LnkpIC8gKHNlY29uZC54IC0gZmlyc3QueCkpO1xuXG4gIHZhciB4ID0gcG9zaXRpb24ueCxcbiAgICAgIHkgPSBwb3NpdGlvbi55O1xuXG4gIGlmIChNYXRoLmFicyhhbmdsZSkgPCBNYXRoLlBJIC8gMikge1xuICAgIHkgLT0gRkxPV19MQUJFTF9JTkRFTlQ7XG4gIH0gZWxzZSB7XG4gICAgeCArPSBGTE9XX0xBQkVMX0lOREVOVDtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyIG9mIHdheXBvaW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gKiBAcmV0dXJuIHtQb2ludH0gdGhlIG1pZCBwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2F5cG9pbnRzTWlkKHdheXBvaW50cykge1xuXG4gIHZhciBtaWQgPSB3YXlwb2ludHMubGVuZ3RoIC8gMiAtIDE7XG5cbiAgdmFyIGZpcnN0ID0gd2F5cG9pbnRzW01hdGguZmxvb3IobWlkKV07XG4gIHZhciBzZWNvbmQgPSB3YXlwb2ludHNbTWF0aC5jZWlsKG1pZCArIDAuMDEpXTtcblxuICByZXR1cm4ge1xuICAgIHg6IGZpcnN0LnggKyAoc2Vjb25kLnggLSBmaXJzdC54KSAvIDIsXG4gICAgeTogZmlyc3QueSArIChzZWNvbmQueSAtIGZpcnN0LnkpIC8gMlxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpIHtcblxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICByZXR1cm4gZ2V0Rmxvd0xhYmVsUG9zaXRpb24oZWxlbWVudC53YXlwb2ludHMpO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgKyBERUZBVUxUX0xBQkVMX1NJWkUuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGggLyAyLFxuICAgICAgeTogZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQgKyBERUZBVUxUX0xBQkVMX1NJWkUuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiBlbGVtZW50cyBsYWJlbCwgcGFyc2VkIGZyb20gdGhlIGVsZW1lbnRzIERJIG9yXG4gKiBnZW5lcmF0ZWQgZnJvbSBpdHMgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7QnBtbkVsZW1lbnR9IHNlbWFudGljXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbExhYmVsQm91bmRzKHNlbWFudGljLCBlbGVtZW50KSB7XG5cbiAgdmFyIG1pZCxcbiAgICAgIHNpemUsXG4gICAgICBib3VuZHMsXG4gICAgICBkaSA9IHNlbWFudGljLmRpLFxuICAgICAgbGFiZWwgPSBkaS5sYWJlbDtcblxuICBpZiAobGFiZWwgJiYgbGFiZWwuYm91bmRzKSB7XG4gICAgYm91bmRzID0gbGFiZWwuYm91bmRzO1xuXG4gICAgc2l6ZSA9IHtcbiAgICAgIHdpZHRoOiBNYXRoLm1heChERUZBVUxUX0xBQkVMX1NJWkUud2lkdGgsIGJvdW5kcy53aWR0aCksXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHRcbiAgICB9O1xuXG4gICAgbWlkID0ge1xuICAgICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyLFxuICAgICAgeTogYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG5cbiAgICBtaWQgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgc2l6ZSA9IERFRkFVTFRfTEFCRUxfU0laRTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oe1xuICAgIHg6IG1pZC54IC0gc2l6ZS53aWR0aCAvIDIsXG4gICAgeTogbWlkLnkgLSBzaXplLmhlaWdodCAvIDJcbiAgfSwgc2l6ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xufVxuIiwiLyoqXG4gKiBJcyBhbiBlbGVtZW50IG9mIHRoZSBnaXZlbiBCUE1OIHR5cGU/XG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V8TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzKGVsZW1lbnQsIHR5cGUpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuIGJvICYmICh0eXBlb2YgYm8uJGluc3RhbmNlT2YgPT09ICdmdW5jdGlvbicpICYmIGJvLiRpbnN0YW5jZU9mKHR5cGUpO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBidXNpbmVzcyBvYmplY3QgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChlbGVtZW50ICYmIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QpIHx8IGVsZW1lbnQ7XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgY2hhbmdlZCBvciBleGNoYW5nZWQuXG4gKlxuICogQHNlZSBodHRwOi8vYnBtbi5pby9saWNlbnNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5cbmltcG9ydCB7XG4gIGRvbWlmeSxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGVcbn0gZnJvbSAnbWluLWRvbSc7XG5cblxuLy8gaW5saW5lZCAuLi8uLi9yZXNvdXJjZXMvbG9nby5zdmdcbnZhciBCUE1OSU9fTE9HT19TVkcgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNC4wMiA1LjU3XCIgd2lkdGg9XCI1M1wiIGhlaWdodD1cIjIxXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGVcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xLjg4Ljkydi4xNGMwIC40MS0uMTMuNjgtLjQuOC4zMy4xNC40Ni40NC40Ni44NnYuMzNjMCAuNjEtLjMzLjk1LS45NS45NUgwVjBoLjk1Yy42NSAwIC45My4zLjkzLjkyek0uNjMuNTd2MS4wNmguMjRjLjI0IDAgLjM4LS4xLjM4LS40M1YuOThjMC0uMjgtLjEtLjQtLjMyLS40em0wIDEuNjN2MS4yMmguMzZjLjIgMCAuMzItLjEuMzItLjM5di0uMzVjMC0uMzctLjEyLS40OC0uNC0uNDhILjYzek00LjE4Ljk5di41MmMwIC42NC0uMzEuOTgtLjk0Ljk4aC0uM1Y0aC0uNjJWMGguOTJjLjYzIDAgLjk0LjM1Ljk0Ljk5ek0yLjk0LjU3djEuMzVoLjNjLjIgMCAuMy0uMDkuMy0uMzd2LS42YzAtLjI5LS4xLS4zOC0uMy0uMzhoLS4zem0yLjg5IDIuMjdMNi4yNSAwaC44OHY0aC0uNlYxLjEyTDYuMSAzLjk5aC0uNmwtLjQ2LTIuODJ2Mi44MmgtLjU1VjBoLjg3ek04LjE0IDEuMVY0aC0uNTZWMGguNzlMOSAyLjRWMGguNTZ2NGgtLjY0em0yLjQ5IDIuMjl2LjZoLS42di0uNnpNMTIuMTIgMWMwLS42My4zMy0xIC45NS0xIC42MSAwIC45NS4zNy45NSAxdjIuMDRjMCAuNjQtLjM0IDEtLjk1IDEtLjYyIDAtLjk1LS4zNy0uOTUtMXptLjYyIDIuMDhjMCAuMjguMTMuMzkuMzMuMzlzLjMyLS4xLjMyLS40Vi45OGMwLS4yOS0uMTItLjQtLjMyLS40cy0uMzMuMTEtLjMzLjR6XCIvPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTAgNC41M2gxNC4wMnYxLjA0SDB6TTExLjA4IDBoLjYzdi42MmgtLjYzem0uNjMgNFYxaC0uNjN2Mi45OHpcIi8+PC9zdmc+JztcblxuZXhwb3J0IHZhciBCUE1OSU9fSU1HID0gQlBNTklPX0xPR09fU1ZHO1xuXG5mdW5jdGlvbiBjc3MoYXR0cnMpIHtcbiAgcmV0dXJuIGF0dHJzLmpvaW4oJzsnKTtcbn1cblxuZXhwb3J0IHZhciBMSU5LX1NUWUxFUyA9IGNzcyhbXG4gICdjb2xvcjogIzQwNDA0MCdcbl0pO1xuXG52YXIgTElHSFRCT1hfU1RZTEVTID0gY3NzKFtcbiAgJ3otaW5kZXg6IDEwMDEnLFxuICAncG9zaXRpb246IGZpeGVkJyxcbiAgJ3RvcDogMCcsXG4gICdsZWZ0OiAwJyxcbiAgJ3JpZ2h0OiAwJyxcbiAgJ2JvdHRvbTogMCdcbl0pO1xuXG52YXIgQkFDS0RST1BfU1RZTEVTID0gY3NzKFtcbiAgJ3dpZHRoOiAxMDAlJyxcbiAgJ2hlaWdodDogMTAwJScsXG4gICdiYWNrZ3JvdW5kOiByZ2JhKDQwLDQwLDQwLDAuMiknXG5dKTtcblxudmFyIE5PVElDRV9TVFlMRVMgPSBjc3MoW1xuICAncG9zaXRpb246IGFic29sdXRlJyxcbiAgJ2xlZnQ6IDUwJScsXG4gICd0b3A6IDQwJScsXG4gICd0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlKScsXG4gICd3aWR0aDogMjYwcHgnLFxuICAncGFkZGluZzogMTBweCcsXG4gICdiYWNrZ3JvdW5kOiB3aGl0ZScsXG4gICdib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLDAsMCwwLjMpJyxcbiAgJ2ZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgJ2ZvbnQtc2l6ZTogMTRweCcsXG4gICdkaXNwbGF5OiBmbGV4JyxcbiAgJ2xpbmUtaGVpZ2h0OiAxLjMnXG5dKTtcblxudmFyIExJR0hUQk9YX01BUktVUCA9XG4gICc8ZGl2IGNsYXNzPVwiYmpzLXBvd2VyZWQtYnktbGlnaHRib3hcIiBzdHlsZT1cIicgKyBMSUdIVEJPWF9TVFlMRVMgKyAnXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiIHN0eWxlPVwiJyArIEJBQ0tEUk9QX1NUWUxFUyArICdcIj48L2Rpdj4nICtcbiAgICAnPGRpdiBjbGFzcz1cIm5vdGljZVwiIHN0eWxlPVwiJyArIE5PVElDRV9TVFlMRVMgKyAnXCI+JyArXG4gICAgICAnPGEgaHJlZj1cImh0dHBzOi8vYnBtbi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCIgc3R5bGU9XCJtYXJnaW46IDE1cHggMjBweCAxNXB4IDEwcHg7IGFsaWduLXNlbGY6IGNlbnRlcjsnICsgTElOS19TVFlMRVMgKyAnXCI+JyArXG4gICAgICAgIEJQTU5JT19JTUcgK1xuICAgICAgJzwvYT4nICtcbiAgICAgICc8c3Bhbj4nICtcbiAgICAgICAgJ1dlYi1iYXNlZCB0b29saW5nIGZvciBCUE1OLCBETU4gYW5kIENNTU4gZGlhZ3JhbXMgJyArXG4gICAgICAgICdwb3dlcmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL2JwbW4uaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiPmJwbW4uaW88L2E+LicgK1xuICAgICAgJzwvc3Bhbj4nICtcbiAgICAnPC9kaXY+JyArXG4gICc8L2Rpdj4nO1xuXG5cbnZhciBsaWdodGJveDtcblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW4oKSB7XG5cbiAgaWYgKCFsaWdodGJveCkge1xuICAgIGxpZ2h0Ym94ID0gZG9taWZ5KExJR0hUQk9YX01BUktVUCk7XG5cbiAgICBkb21EZWxlZ2F0ZS5iaW5kKGxpZ2h0Ym94LCAnLmJhY2tkcm9wJywgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGlnaHRib3gpO1xuICAgIH0pO1xuICB9XG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaWdodGJveCk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9saWIvRGlhZ3JhbSc7IiwiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdkaWRpJztcblxuaW1wb3J0IENvcmVNb2R1bGUgZnJvbSAnLi9jb3JlJztcblxuXG4vKipcbiAqIEJvb3RzdHJhcCBhbiBpbmplY3RvciBmcm9tIGEgbGlzdCBvZiBtb2R1bGVzLCBpbnN0YW50aWF0aW5nIGEgbnVtYmVyIG9mIGRlZmF1bHQgY29tcG9uZW50c1xuICpcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBib290c3RyYXBNb2R1bGVzXG4gKlxuICogQHJldHVybiB7ZGlkaS5JbmplY3Rvcn0gYSBpbmplY3RvciB0byB1c2UgdG8gYWNjZXNzIHRoZSBjb21wb25lbnRzXG4gKi9cbmZ1bmN0aW9uIGJvb3RzdHJhcChib290c3RyYXBNb2R1bGVzKSB7XG5cbiAgdmFyIG1vZHVsZXMgPSBbXSxcbiAgICAgIGNvbXBvbmVudHMgPSBbXTtcblxuICBmdW5jdGlvbiBoYXNNb2R1bGUobSkge1xuICAgIHJldHVybiBtb2R1bGVzLmluZGV4T2YobSkgPj0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZE1vZHVsZShtKSB7XG4gICAgbW9kdWxlcy5wdXNoKG0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaXQobSkge1xuICAgIGlmIChoYXNNb2R1bGUobSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAobS5fX2RlcGVuZHNfXyB8fCBbXSkuZm9yRWFjaCh2aXNpdCk7XG5cbiAgICBpZiAoaGFzTW9kdWxlKG0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRkTW9kdWxlKG0pO1xuXG4gICAgKG0uX19pbml0X18gfHwgW10pLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgY29tcG9uZW50cy5wdXNoKGMpO1xuICAgIH0pO1xuICB9XG5cbiAgYm9vdHN0cmFwTW9kdWxlcy5mb3JFYWNoKHZpc2l0KTtcblxuICB2YXIgaW5qZWN0b3IgPSBuZXcgSW5qZWN0b3IobW9kdWxlcyk7XG5cbiAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcblxuICAgIHRyeSB7XG5cbiAgICAgIC8vIGVhZ2VybHkgcmVzb2x2ZSBjb21wb25lbnQgKGZuIG9yIHN0cmluZylcbiAgICAgIGluamVjdG9yW3R5cGVvZiBjID09PSAnc3RyaW5nJyA/ICdnZXQnIDogJ2ludm9rZSddKGMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbnN0YW50aWF0ZSBjb21wb25lbnQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5qZWN0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbmplY3RvciBmcm9tIHBhc3NlZCBvcHRpb25zLlxuICpcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7ZGlkaS5JbmplY3Rvcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5qZWN0b3Iob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBjb25maWdNb2R1bGUgPSB7XG4gICAgJ2NvbmZpZyc6IFsndmFsdWUnLCBvcHRpb25zXVxuICB9O1xuXG4gIHZhciBtb2R1bGVzID0gWyBjb25maWdNb2R1bGUsIENvcmVNb2R1bGUgXS5jb25jYXQob3B0aW9ucy5tb2R1bGVzIHx8IFtdKTtcblxuICByZXR1cm4gYm9vdHN0cmFwKG1vZHVsZXMpO1xufVxuXG5cbi8qKlxuICogVGhlIG1haW4gZGlhZ3JhbS1qcyBlbnRyeSBwb2ludCB0aGF0IGJvb3RzdHJhcHMgdGhlIGRpYWdyYW0gd2l0aCB0aGUgZ2l2ZW5cbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVG8gcmVnaXN0ZXIgZXh0ZW5zaW9ucyB3aXRoIHRoZSBkaWFncmFtLCBwYXNzIHRoZW0gYXMgQXJyYXk8ZGlkaS5Nb2R1bGU+IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAY2xhc3MgZGpzLkRpYWdyYW1cbiAqIEBtZW1iZXJPZiBkanNcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGNhcHRpb24+Q3JlYXRpbmcgYSBwbHVnLWluIHRoYXQgbG9ncyB3aGVuZXZlciBhIHNoYXBlIGlzIGFkZGVkIHRvIHRoZSBjYW52YXMuPC9jYXB0aW9uPlxuICpcbiAqIC8vIHBsdWctaW4gaW1wbGVtZW5lbnRhdGlvblxuICogZnVuY3Rpb24gTXlMb2dnaW5nUGx1Z2luKGV2ZW50QnVzKSB7XG4gKiAgIGV2ZW50QnVzLm9uKCdzaGFwZS5hZGRlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coJ3NoYXBlICcsIGV2ZW50LnNoYXBlLCAnIHdhcyBhZGRlZCB0byB0aGUgZGlhZ3JhbScpO1xuICogICB9KTtcbiAqIH1cbiAqXG4gKiAvLyBleHBvcnQgYXMgbW9kdWxlXG4gKiBleHBvcnQgZGVmYXVsdCB7XG4gKiAgIF9faW5pdF9fOiBbICdteUxvZ2dpbmdQbHVnaW4nIF0sXG4gKiAgICAgbXlMb2dnaW5nUGx1Z2luOiBbICd0eXBlJywgTXlMb2dnaW5nUGx1Z2luIF1cbiAqIH07XG4gKlxuICpcbiAqIC8vIGluc3RhbnRpYXRlIHRoZSBkaWFncmFtIHdpdGggdGhlIG5ldyBwbHVnLWluXG4gKlxuICogaW1wb3J0IE15TG9nZ2luZ01vZHVsZSBmcm9tICdwYXRoLXRvLW15LWxvZ2dpbmctcGx1Z2luJztcbiAqXG4gKiB2YXIgZGlhZ3JhbSA9IG5ldyBEaWFncmFtKHtcbiAqICAgbW9kdWxlczogW1xuICogICAgIE15TG9nZ2luZ01vZHVsZVxuICogICBdXG4gKiB9KTtcbiAqXG4gKiBkaWFncmFtLmludm9rZShbICdjYW52YXMnLCBmdW5jdGlvbihjYW52YXMpIHtcbiAqICAgLy8gYWRkIHNoYXBlIHRvIGRyYXdpbmcgY2FudmFzXG4gKiAgIGNhbnZhcy5hZGRTaGFwZSh7IHg6IDEwLCB5OiAxMCB9KTtcbiAqIH0pO1xuICpcbiAqIC8vICdzaGFwZSAuLi4gd2FzIGFkZGVkIHRvIHRoZSBkaWFncmFtJyBsb2dnZWQgdG8gY29uc29sZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gZXh0ZXJuYWwgbW9kdWxlcyB0byBpbnN0YW50aWF0ZSB3aXRoIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2RpZGkuSW5qZWN0b3J9IFtpbmplY3Rvcl0gYW4gKG9wdGlvbmFsKSBpbmplY3RvciB0byBib290c3RyYXAgdGhlIGRpYWdyYW0gd2l0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWFncmFtKG9wdGlvbnMsIGluamVjdG9yKSB7XG5cbiAgLy8gY3JlYXRlIGluamVjdG9yIHVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZFxuICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3IgPSBpbmplY3RvciB8fCBjcmVhdGVJbmplY3RvcihvcHRpb25zKTtcblxuICAvLyBBUElcblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSBkaWFncmFtIHNlcnZpY2VcbiAgICpcbiAgICogQG1ldGhvZCBEaWFncmFtI2dldFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGlhZ3JhbSBzZXJ2aWNlIHRvIGJlIHJldHJpZXZlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdHJpY3Q9dHJ1ZV0gaWYgZmFsc2UsIHJlc29sdmUgbWlzc2luZyBzZXJ2aWNlcyB0byBudWxsXG4gICAqL1xuICB0aGlzLmdldCA9IGluamVjdG9yLmdldDtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBmdW5jdGlvbiBpbnRvIHdoaWNoIGRpYWdyYW0gc2VydmljZXMgYXJlIGluamVjdGVkXG4gICAqXG4gICAqIEBtZXRob2QgRGlhZ3JhbSNpbnZva2VcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3RbXX0gZm4gdGhlIGZ1bmN0aW9uIHRvIHJlc29sdmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGxvY2FscyBhIG51bWJlciBvZiBsb2NhbHMgdG8gdXNlIHRvIHJlc29sdmUgY2VydGFpbiBkZXBlbmRlbmNpZXNcbiAgICovXG4gIHRoaXMuaW52b2tlID0gaW5qZWN0b3IuaW52b2tlO1xuXG4gIC8vIGluaXRcblxuICAvLyBpbmRpY2F0ZSB2aWEgZXZlbnRcblxuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYWxsIHBsdWctaW5zIGFyZSBsb2FkZWQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGZpcmUgb3RoZXIgZXZlbnRzIHRvIGludGVyZXN0ZWQgcGx1Zy1pbnNcbiAgICpcbiAgICogQG1lbWJlck9mIERpYWdyYW1cbiAgICpcbiAgICogQGV2ZW50IGRpYWdyYW0uaW5pdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAqICAgZXZlbnRCdXMuZmlyZSgnbXktY3VzdG9tLWV2ZW50JywgeyBmb286ICdCQVInIH0pO1xuICAgKiB9KTtcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuZ2V0KCdldmVudEJ1cycpLmZpcmUoJ2RpYWdyYW0uaW5pdCcpO1xufVxuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGRpYWdyYW1cbiAqXG4gKiBAbWV0aG9kICBEaWFncmFtI2Rlc3Ryb3lcbiAqL1xuRGlhZ3JhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmdldCgnZXZlbnRCdXMnKS5maXJlKCdkaWFncmFtLmRlc3Ryb3knKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGhlIGRpYWdyYW0sIHJlbW92aW5nIGFsbCBjb250ZW50cy5cbiAqL1xuRGlhZ3JhbS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5nZXQoJ2V2ZW50QnVzJykuZmlyZSgnZGlhZ3JhbS5jbGVhcicpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGlzRnVuY3Rpb24sXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG4vKipcbiAqIEEgdXRpbGl0eSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBsdWctaW4gaW50byB0aGUgY29tbWFuZCBleGVjdXRpb24gZm9yXG4gKiBleHRlbnNpb24gYW5kL29yIHZhbGlkYXRpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG4gKlxuICogaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG4gKlxuICogZnVuY3Rpb24gQ29tbWFuZExvZ2dlcihldmVudEJ1cykge1xuICogICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG4gKlxuICogICB0aGlzLnByZUV4ZWN1dGUoZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgICBjb25zb2xlLmxvZygnY29tbWFuZCBwcmUtZXhlY3V0ZScsIGV2ZW50KTtcbiAqICAgfSk7XG4gKiB9XG4gKlxuICogaW5oZXJpdHMoQ29tbWFuZExvZ2dlciwgQ29tbWFuZEludGVyY2VwdG9yKTtcbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbW1hbmRJbnRlcmNlcHRvcihldmVudEJ1cykge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xufVxuXG5Db21tYW5kSW50ZXJjZXB0b3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5mdW5jdGlvbiB1bndyYXBFdmVudChmbiwgdGhhdCkge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZm4uY2FsbCh0aGF0IHx8IG51bGwsIGV2ZW50LmNvbnRleHQsIGV2ZW50LmNvbW1hbmQsIGV2ZW50KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhbiBpbnRlcmNlcHRvciBmb3IgYSBjb21tYW5kIGV4ZWN1dGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtldmVudHNdIGxpc3Qgb2YgY29tbWFuZHMgdG8gcmVnaXN0ZXIgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaG9va10gY29tbWFuZCBob29rLCBpLmUuIHByZUV4ZWN1dGUsIGV4ZWN1dGVkIHRvIGxpc3RlbiBvblxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV0gdGhlIHByaW9yaXR5IG9uIHdoaWNoIHRvIGhvb2sgaW50byB0aGUgZXhlY3V0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyRm4gaW50ZXJjZXB0b3IgdG8gYmUgaW52b2tlZCB3aXRoIChldmVudClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdW53cmFwIGlmIHRydWUsIHVud3JhcCB0aGUgZXZlbnQgYW5kIHBhc3MgKGNvbnRleHQsIGNvbW1hbmQsIGV2ZW50KSB0byB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciBpbnN0ZWFkXG4gKiBAcGFyYW0ge09iamVjdH0gW3RoYXRdIFBhc3MgY29udGV4dCAoYHRoaXNgKSB0byB0aGUgaGFuZGxlciBmdW5jdGlvblxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnRzLCBob29rLCBwcmlvcml0eSwgaGFuZGxlckZuLCB1bndyYXAsIHRoYXQpIHtcblxuICBpZiAoaXNGdW5jdGlvbihob29rKSB8fCBpc051bWJlcihob29rKSkge1xuICAgIHRoYXQgPSB1bndyYXA7XG4gICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgIGhhbmRsZXJGbiA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gaG9vaztcbiAgICBob29rID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0Z1bmN0aW9uKHByaW9yaXR5KSkge1xuICAgIHRoYXQgPSB1bndyYXA7XG4gICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgIGhhbmRsZXJGbiA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIGlmIChpc09iamVjdCh1bndyYXApKSB7XG4gICAgdGhhdCA9IHVud3JhcDtcbiAgICB1bndyYXAgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNGdW5jdGlvbihoYW5kbGVyRm4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGVyRm4gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWlzQXJyYXkoZXZlbnRzKSkge1xuICAgIGV2ZW50cyA9IFsgZXZlbnRzIF07XG4gIH1cblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIGNvbmNhdCBjb21tYW5kU3RhY2soLmV2ZW50KT8oLmhvb2spP1xuICAgIHZhciBmdWxsRXZlbnQgPSBbICdjb21tYW5kU3RhY2snLCBldmVudCwgaG9vayBdLmZpbHRlcihmdW5jdGlvbihlKSB7IHJldHVybiBlOyB9KS5qb2luKCcuJyk7XG5cbiAgICBldmVudEJ1cy5vbihmdWxsRXZlbnQsIHByaW9yaXR5LCB1bndyYXAgPyB1bndyYXBFdmVudChoYW5kbGVyRm4sIHRoYXQpIDogaGFuZGxlckZuLCB0aGF0KTtcbiAgfSk7XG59O1xuXG5cbnZhciBob29rcyA9IFtcbiAgJ2NhbkV4ZWN1dGUnLFxuICAncHJlRXhlY3V0ZScsXG4gICdwcmVFeGVjdXRlZCcsXG4gICdleGVjdXRlJyxcbiAgJ2V4ZWN1dGVkJyxcbiAgJ3Bvc3RFeGVjdXRlJyxcbiAgJ3Bvc3RFeGVjdXRlZCcsXG4gICdyZXZlcnQnLFxuICAncmV2ZXJ0ZWQnXG5dO1xuXG4vKlxuICogSW5zdGFsbCBob29rIHNob3J0Y3V0c1xuICpcbiAqIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgQ29tbWFuZEludGVyY2VwdG9yIyhwcmVFeGVjdXRlfC4uLnxyZXZlcnRlZCkgbWV0aG9kc1xuICogd2hpY2ggd2lsbCBpbiB0ZXJtIGZvcndhcmQgdG8gQ29tbWFuZEludGVyY2VwdG9yI29uLlxuICovXG5mb3JFYWNoKGhvb2tzLCBmdW5jdGlvbihob29rKSB7XG5cbiAgLyoqXG4gICAqIHtjYW5FeGVjdXRlfHByZUV4ZWN1dGV8cHJlRXhlY3V0ZWR8ZXhlY3V0ZXxleGVjdXRlZHxwb3N0RXhlY3V0ZXxwb3N0RXhlY3V0ZWR8cmV2ZXJ0fHJldmVydGVkfVxuICAgKlxuICAgKiBBIG5hbWVkIGhvb2sgZm9yIHBsdWdnaW5nIGludG8gdGhlIGNvbW1hbmQgZXhlY3V0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtldmVudHNdIGxpc3Qgb2YgY29tbWFuZHMgdG8gcmVnaXN0ZXIgb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV0gdGhlIHByaW9yaXR5IG9uIHdoaWNoIHRvIGhvb2sgaW50byB0aGUgZXhlY3V0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJGbiBpbnRlcmNlcHRvciB0byBiZSBpbnZva2VkIHdpdGggKGV2ZW50KVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1bndyYXA9ZmFsc2VdIGlmIHRydWUsIHVud3JhcCB0aGUgZXZlbnQgYW5kIHBhc3MgKGNvbnRleHQsIGNvbW1hbmQsIGV2ZW50KSB0byB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyIGluc3RlYWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb25cbiAgICovXG4gIENvbW1hbmRJbnRlcmNlcHRvci5wcm90b3R5cGVbaG9va10gPSBmdW5jdGlvbihldmVudHMsIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCkge1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZlbnRzKSB8fCBpc051bWJlcihldmVudHMpKSB7XG4gICAgICB0aGF0ID0gdW53cmFwO1xuICAgICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgICAgaGFuZGxlckZuID0gcHJpb3JpdHk7XG4gICAgICBwcmlvcml0eSA9IGV2ZW50cztcbiAgICAgIGV2ZW50cyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5vbihldmVudHMsIGhvb2ssIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCk7XG4gIH07XG59KTtcbiIsImltcG9ydCB7XG4gIHVuaXF1ZUJ5LFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IG9mZmVycyB1bi0gYW5kIHJlZG9hYmxlIGV4ZWN1dGlvbiBvZiBjb21tYW5kcy5cbiAqXG4gKiBUaGUgY29tbWFuZCBzdGFjayBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIG1vZGVsaW5nIGFjdGlvbnNcbiAqIGluIGEgdW4tIGFuZCByZWRvYWJsZSBtYW5uZXIuIFRvIGRvIHRoaXMgaXQgZGVsZWdhdGVzIHRoZSBhY3R1YWxcbiAqIGNvbW1hbmQgZXhlY3V0aW9uIHRvIHtAbGluayBDb21tYW5kSGFuZGxlcn1zLlxuICpcbiAqIENvbW1hbmQgaGFuZGxlcnMgcHJvdmlkZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjZXhlY3V0ZShjdHgpfSBhbmRcbiAqIHtAbGluayBDb21tYW5kSGFuZGxlciNyZXZlcnQoY3R4KX0gbWV0aG9kcyB0byB1bi0gYW5kIHJlZG8gYSBjb21tYW5kXG4gKiBpZGVudGlmaWVkIGJ5IGEgY29tbWFuZCBjb250ZXh0LlxuICpcbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIGV2ZW50c1xuICpcbiAqIEluIHRoZSBwcm9jZXNzIHRoZSBjb21tYW5kIHN0YWNrIGZpcmVzIGEgbnVtYmVyIG9mIGxpZmUtY3ljbGUgZXZlbnRzXG4gKiB0aGF0IG90aGVyIGNvbXBvbmVudHMgdG8gcGFydGljaXBhdGUgaW4gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqICAgICogcHJlRXhlY3V0ZVxuICogICAgKiBwcmVFeGVjdXRlZFxuICogICAgKiBleGVjdXRlXG4gKiAgICAqIGV4ZWN1dGVkXG4gKiAgICAqIHBvc3RFeGVjdXRlXG4gKiAgICAqIHBvc3RFeGVjdXRlZFxuICogICAgKiByZXZlcnRcbiAqICAgICogcmV2ZXJ0ZWRcbiAqXG4gKiBBIHNwZWNpYWwgZXZlbnQgaXMgdXNlZCBmb3IgdmFsaWRhdGluZywgd2hldGhlciBhIGNvbW1hbmQgY2FuIGJlXG4gKiBwZXJmb3JtZWQgcHJpb3IgdG8gaXRzIGV4ZWN1dGlvbi5cbiAqXG4gKiAgICAqIGNhbkV4ZWN1dGVcbiAqXG4gKiBFYWNoIG9mIHRoZSBldmVudHMgaXMgZmlyZWQgYXMgYGNvbW1hbmRTdGFjay57ZXZlbnROYW1lfWAgYW5kXG4gKiBgY29tbWFuZFN0YWNrLntjb21tYW5kTmFtZX0ue2V2ZW50TmFtZX1gLCByZXNwZWN0aXZlbHkuIFRoaXMgZ2l2ZXNcbiAqIGNvbXBvbmVudHMgZmluZSBncmFpbmVkIGNvbnRyb2wgb24gd2hlcmUgdG8gaG9vayBpbnRvLlxuICpcbiAqIFRoZSBldmVudCBvYmplY3QgZmlyZWQgdHJhbnNwb3J0cyBgY29tbWFuZGAsIHRoZSBuYW1lIG9mIHRoZVxuICogY29tbWFuZCBhbmQgYGNvbnRleHRgLCB0aGUgY29tbWFuZCBjb250ZXh0LlxuICpcbiAqXG4gKiAjIyBDcmVhdGluZyBDb21tYW5kIEhhbmRsZXJzXG4gKlxuICogQ29tbWFuZCBoYW5kbGVycyBzaG91bGQgcHJvdmlkZSB0aGUge0BsaW5rIENvbW1hbmRIYW5kbGVyI2V4ZWN1dGUoY3R4KX1cbiAqIGFuZCB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjcmV2ZXJ0KGN0eCl9IG1ldGhvZHMgdG8gaW1wbGVtZW50XG4gKiByZWRvaW5nIGFuZCB1bmRvaW5nIG9mIGEgY29tbWFuZC5cbiAqXG4gKiBBIGNvbW1hbmQgaGFuZGxlciBfbXVzdF8gZW5zdXJlIHVuZG8gaXMgcGVyZm9ybWVkIHByb3Blcmx5IGluIG9yZGVyXG4gKiBub3QgdG8gYnJlYWsgdGhlIHVuZG8gY2hhaW4uIEl0IG11c3QgYWxzbyByZXR1cm4gdGhlIHNoYXBlcyB0aGF0XG4gKiBnb3QgY2hhbmdlZCBkdXJpbmcgdGhlIGBleGVjdXRlYCBhbmQgYHJldmVydGAgb3BlcmF0aW9ucy5cbiAqXG4gKiBDb21tYW5kIGhhbmRsZXJzIG1heSBleGVjdXRlIG90aGVyIG1vZGVsaW5nIG9wZXJhdGlvbnMgKGFuZCB0aHVzXG4gKiBjb21tYW5kcykgaW4gdGhlaXIgYHByZUV4ZWN1dGVgIGFuZCBgcG9zdEV4ZWN1dGVgIHBoYXNlcy4gVGhlIGNvbW1hbmRcbiAqIHN0YWNrIHdpbGwgcHJvcGVybHkgZ3JvdXAgYWxsIGNvbW1hbmRzIHRvZ2V0aGVyIGludG8gYSBsb2dpY2FsIHVuaXRcbiAqIHRoYXQgbWF5IGJlIHJlLSBhbmQgdW5kb25lIGF0b21pY2FsbHkuXG4gKlxuICogQ29tbWFuZCBoYW5kbGVycyBtdXN0IG5vdCBleGVjdXRlIG90aGVyIGNvbW1hbmRzIGZyb20gd2l0aGluIHRoZWlyXG4gKiBjb3JlIGltcGxlbWVudGF0aW9uIChgZXhlY3V0ZWAsIGByZXZlcnRgKS5cbiAqXG4gKlxuICogIyMgQ2hhbmdlIFRyYWNraW5nXG4gKlxuICogRHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIENvbW1hbmRTdGFjayBpdCB3aWxsIGtlZXAgdHJhY2sgb2YgYWxsXG4gKiBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGR1cmluZyB0aGUgY29tbWFuZCdzIGV4ZWN1dGlvbi5cbiAqXG4gKiBBdCB0aGUgZW5kIG9mIHRoZSBDb21tYW5kU3RhY2sgZXhlY3V0aW9uIGl0IHdpbGwgbm90aWZ5IGludGVyZXN0ZWRcbiAqIGNvbXBvbmVudHMgdmlhIGFuICdlbGVtZW50cy5jaGFuZ2VkJyBldmVudCB3aXRoIGFsbCB0aGUgZGlydHlcbiAqIGVsZW1lbnRzLlxuICpcbiAqIFRoZSBldmVudCBjYW4gYmUgcGlja2VkIHVwIGJ5IGNvbXBvbmVudHMgdGhhdCBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZmFjdFxuICogdGhhdCBlbGVtZW50cyBoYXZlIGJlZW4gY2hhbmdlZC4gT25lIHVzZSBjYXNlIGZvciB0aGlzIGlzIHVwZGF0aW5nXG4gKiB0aGVpciBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gYWZ0ZXIgbW92aW5nIC8gcmVzaXppbmcgb3IgZGVsZXRpb24uXG4gKlxuICogQHNlZSBDb21tYW5kSGFuZGxlclxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb21tYW5kU3RhY2soZXZlbnRCdXMsIGluamVjdG9yKSB7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGFsbCByZWdpc3RlcmVkIGNvbW1hbmQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9oYW5kbGVyTWFwID0ge307XG5cbiAgLyoqXG4gICAqIEEgc3RhY2sgY29udGFpbmluZyBhbGwgcmUvdW5kb2FibGUgYWN0aW9ucyBvbiB0aGUgZGlhZ3JhbVxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXk8T2JqZWN0Pn1cbiAgICovXG4gIHRoaXMuX3N0YWNrID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGluZGV4IG9uIHRoZSBzdGFja1xuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdGhpcy5fc3RhY2tJZHggPSAtMTtcblxuICAvKipcbiAgICogQ3VycmVudCBhY3RpdmUgY29tbWFuZFN0YWNrIGV4ZWN1dGlvblxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fY3VycmVudEV4ZWN1dGlvbiA9IHtcbiAgICBhY3Rpb25zOiBbXSxcbiAgICBkaXJ0eTogW11cbiAgfTtcblxuXG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG5cbiAgdGhpcy5fdWlkID0gMTtcblxuICBldmVudEJ1cy5vbihbXG4gICAgJ2RpYWdyYW0uZGVzdHJveScsXG4gICAgJ2RpYWdyYW0uY2xlYXInXG4gIF0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xlYXIoZmFsc2UpO1xuICB9LCB0aGlzKTtcbn1cblxuQ29tbWFuZFN0YWNrLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdpbmplY3RvcicgXTtcblxuXG4vKipcbiAqIEV4ZWN1dGUgYSBjb21tYW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmQgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIGVudmlyb25tZW50IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgaW5cbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29tbWFuZCwgY29udGV4dCkge1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciBhY3Rpb24gPSB7IGNvbW1hbmQ6IGNvbW1hbmQsIGNvbnRleHQ6IGNvbnRleHQgfTtcblxuICB0aGlzLl9wdXNoQWN0aW9uKGFjdGlvbik7XG4gIHRoaXMuX2ludGVybmFsRXhlY3V0ZShhY3Rpb24pO1xuICB0aGlzLl9wb3BBY3Rpb24oYWN0aW9uKTtcbn07XG5cblxuLyoqXG4gKiBBc2sgd2hldGhlciBhIGdpdmVuIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkLlxuICpcbiAqIEltcGxlbWVudG9ycyBtYXkgaG9vayBpbnRvIHRoZSBtZWNoYW5pc20gb24gdHdvIHdheXM6XG4gKlxuICogICAqIGluIGV2ZW50IGxpc3RlbmVyczpcbiAqXG4gKiAgICAgVXNlcnMgbWF5IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiB2aWEgYW4gZXZlbnQgbGlzdGVuZXIuXG4gKiAgICAgSXQgbXVzdCBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYGNvbW1hbmRTdGFjay4oPGNvbW1hbmQ+LiljYW5FeGVjdXRlYCBldmVudHMuXG4gKlxuICogICAqIGluIGNvbW1hbmQgaGFuZGxlcnM6XG4gKlxuICogICAgIElmIHRoZSBtZXRob2Qge0BsaW5rIENvbW1hbmRIYW5kbGVyI2NhbkV4ZWN1dGV9IGlzIGltcGxlbWVudGVkIGluIGEgaGFuZGxlclxuICogICAgIGl0IHdpbGwgYmUgY2FsbGVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgZXhlY3V0aW9uIGlzIGFsbG93ZWQuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBjb21tYW5kIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dCB0aGUgZW52aXJvbm1lbnQgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCBpblxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuY2FuRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbW1hbmQsIGNvbnRleHQpIHtcblxuICB2YXIgYWN0aW9uID0geyBjb21tYW5kOiBjb21tYW5kLCBjb250ZXh0OiBjb250ZXh0IH07XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9nZXRIYW5kbGVyKGNvbW1hbmQpO1xuXG4gIHZhciByZXN1bHQgPSB0aGlzLl9maXJlKGNvbW1hbmQsICdjYW5FeGVjdXRlJywgYWN0aW9uKTtcblxuICAvLyBoYW5kbGVyI2NhbkV4ZWN1dGUgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBubyBsaXN0ZW5lclxuICAvLyBkZWNpZGVkIG9uIGEgcmVzdWx0IGFscmVhZHlcbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIuY2FuRXhlY3V0ZSkge1xuICAgICAgcmVzdWx0ID0gaGFuZGxlci5jYW5FeGVjdXRlKGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKlxuICogQ2xlYXIgdGhlIGNvbW1hbmQgc3RhY2ssIGVyYXNpbmcgYWxsIHVuZG8gLyByZWRvIGhpc3RvcnlcbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGVtaXQpIHtcbiAgdGhpcy5fc3RhY2subGVuZ3RoID0gMDtcbiAgdGhpcy5fc3RhY2tJZHggPSAtMTtcblxuICBpZiAoZW1pdCAhPT0gZmFsc2UpIHtcbiAgICB0aGlzLl9maXJlKCdjaGFuZ2VkJyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBVbmRvIGxhc3QgY29tbWFuZChzKVxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGFjdGlvbiA9IHRoaXMuX2dldFVuZG9BY3Rpb24oKSxcbiAgICAgIG5leHQ7XG5cbiAgaWYgKGFjdGlvbikge1xuICAgIHRoaXMuX3B1c2hBY3Rpb24oYWN0aW9uKTtcblxuICAgIHdoaWxlIChhY3Rpb24pIHtcbiAgICAgIHRoaXMuX2ludGVybmFsVW5kbyhhY3Rpb24pO1xuICAgICAgbmV4dCA9IHRoaXMuX2dldFVuZG9BY3Rpb24oKTtcblxuICAgICAgaWYgKCFuZXh0IHx8IG5leHQuaWQgIT09IGFjdGlvbi5pZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYWN0aW9uID0gbmV4dDtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3BBY3Rpb24oKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlZG8gbGFzdCBjb21tYW5kKHMpXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUucmVkbyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYWN0aW9uID0gdGhpcy5fZ2V0UmVkb0FjdGlvbigpLFxuICAgICAgbmV4dDtcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgdGhpcy5fcHVzaEFjdGlvbihhY3Rpb24pO1xuXG4gICAgd2hpbGUgKGFjdGlvbikge1xuICAgICAgdGhpcy5faW50ZXJuYWxFeGVjdXRlKGFjdGlvbiwgdHJ1ZSk7XG4gICAgICBuZXh0ID0gdGhpcy5fZ2V0UmVkb0FjdGlvbigpO1xuXG4gICAgICBpZiAoIW5leHQgfHwgbmV4dC5pZCAhPT0gYWN0aW9uLmlkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24gPSBuZXh0O1xuICAgIH1cblxuICAgIHRoaXMuX3BvcEFjdGlvbigpO1xuICB9XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBoYW5kbGVyIGluc3RhbmNlIHdpdGggdGhlIGNvbW1hbmQgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICogQHBhcmFtIHtDb21tYW5kSGFuZGxlcn0gaGFuZGxlclxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29tbWFuZCwgaGFuZGxlcikge1xuICB0aGlzLl9zZXRIYW5kbGVyKGNvbW1hbmQsIGhhbmRsZXIpO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgaGFuZGxlciB0eXBlIHdpdGggdGhlIGNvbW1hbmQgc3RhY2tcbiAqIGJ5IGluc3RhbnRpYXRpbmcgaXQgYW5kIGluamVjdGluZyBpdHMgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhIGNvbnN0cnVjdG9yIGZvciBhIHtAbGluayBDb21tYW5kSGFuZGxlcn1cbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5yZWdpc3RlckhhbmRsZXIgPSBmdW5jdGlvbihjb21tYW5kLCBoYW5kbGVyQ2xzKSB7XG5cbiAgaWYgKCFjb21tYW5kIHx8ICFoYW5kbGVyQ2xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGFuZCBoYW5kbGVyQ2xzIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9pbmplY3Rvci5pbnN0YW50aWF0ZShoYW5kbGVyQ2xzKTtcbiAgdGhpcy5yZWdpc3Rlcihjb21tYW5kLCBoYW5kbGVyKTtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuY2FuVW5kbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9nZXRVbmRvQWN0aW9uKCk7XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLmNhblJlZG8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICEhdGhpcy5fZ2V0UmVkb0FjdGlvbigpO1xufTtcblxuLy8gc3RhY2sgYWNjZXNzICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2dldFJlZG9BY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrSWR4ICsgMV07XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2dldFVuZG9BY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrSWR4XTtcbn07XG5cblxuLy8gaW50ZXJuYWwgZnVuY3Rpb25hbGl0eSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2ludGVybmFsVW5kbyA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGNvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCxcbiAgICAgIGNvbnRleHQgPSBhY3Rpb24uY29udGV4dDtcblxuICB2YXIgaGFuZGxlciA9IHRoaXMuX2dldEhhbmRsZXIoY29tbWFuZCk7XG5cbiAgLy8gZ3VhcmQgYWdhaW5zdCBpbGxlZ2FsIG5lc3RlZCBjb21tYW5kIHN0YWNrIGludm9jYXRpb25zXG4gIHRoaXMuX2F0b21pY0RvKGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ3JldmVydCcsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5yZXZlcnQpIHtcbiAgICAgIHNlbGYuX21hcmtEaXJ0eShoYW5kbGVyLnJldmVydChjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgc2VsZi5fcmV2ZXJ0ZWRBY3Rpb24oYWN0aW9uKTtcblxuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ3JldmVydGVkJywgYWN0aW9uKTtcbiAgfSk7XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihjb21tYW5kLCBxdWFsaWZpZXIsIGV2ZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgIGV2ZW50ID0gcXVhbGlmaWVyO1xuICAgIHF1YWxpZmllciA9IG51bGw7XG4gIH1cblxuICB2YXIgbmFtZXMgPSBxdWFsaWZpZXIgPyBbIGNvbW1hbmQgKyAnLicgKyBxdWFsaWZpZXIsIHF1YWxpZmllciBdIDogWyBjb21tYW5kIF0sXG4gICAgICBpLCBuYW1lLCByZXN1bHQ7XG5cbiAgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudChldmVudCk7XG5cbiAgZm9yIChpID0gMDsgKG5hbWUgPSBuYW1lc1tpXSk7IGkrKykge1xuICAgIHJlc3VsdCA9IHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvbW1hbmRTdGFjay4nICsgbmFtZSwgZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2NyZWF0ZUlkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl91aWQrKztcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2F0b21pY0RvID0gZnVuY3Rpb24oZm4pIHtcblxuICB2YXIgZXhlY3V0aW9uID0gdGhpcy5fY3VycmVudEV4ZWN1dGlvbjtcblxuICBleGVjdXRpb24uYXRvbWljID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uLmF0b21pYyA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9pbnRlcm5hbEV4ZWN1dGUgPSBmdW5jdGlvbihhY3Rpb24sIHJlZG8pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBjb21tYW5kID0gYWN0aW9uLmNvbW1hbmQsXG4gICAgICBjb250ZXh0ID0gYWN0aW9uLmNvbnRleHQ7XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9nZXRIYW5kbGVyKGNvbW1hbmQpO1xuXG4gIGlmICghaGFuZGxlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gY29tbWFuZCBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIDwnICsgY29tbWFuZCArICc+Jyk7XG4gIH1cblxuICB0aGlzLl9wdXNoQWN0aW9uKGFjdGlvbik7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncHJlRXhlY3V0ZScsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5wcmVFeGVjdXRlKSB7XG4gICAgICBoYW5kbGVyLnByZUV4ZWN1dGUoY29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncHJlRXhlY3V0ZWQnLCBhY3Rpb24pO1xuICB9XG5cbiAgLy8gZ3VhcmQgYWdhaW5zdCBpbGxlZ2FsIG5lc3RlZCBjb21tYW5kIHN0YWNrIGludm9jYXRpb25zXG4gIHRoaXMuX2F0b21pY0RvKGZ1bmN0aW9uKCkge1xuXG4gICAgc2VsZi5fZmlyZShjb21tYW5kLCAnZXhlY3V0ZScsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5leGVjdXRlKSB7XG5cbiAgICAgIC8vIGFjdHVhbCBleGVjdXRlICsgbWFyayByZXR1cm4gcmVzdWx0cyBhcyBkaXJ0eVxuICAgICAgc2VsZi5fbWFya0RpcnR5KGhhbmRsZXIuZXhlY3V0ZShjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgLy8gbG9nIHRvIHN0YWNrXG4gICAgc2VsZi5fZXhlY3V0ZWRBY3Rpb24oYWN0aW9uLCByZWRvKTtcblxuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ2V4ZWN1dGVkJywgYWN0aW9uKTtcbiAgfSk7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncG9zdEV4ZWN1dGUnLCBhY3Rpb24pO1xuXG4gICAgaWYgKGhhbmRsZXIucG9zdEV4ZWN1dGUpIHtcbiAgICAgIGhhbmRsZXIucG9zdEV4ZWN1dGUoY29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncG9zdEV4ZWN1dGVkJywgYWN0aW9uKTtcbiAgfVxuXG4gIHRoaXMuX3BvcEFjdGlvbihhY3Rpb24pO1xufTtcblxuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9wdXNoQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uKSB7XG5cbiAgdmFyIGV4ZWN1dGlvbiA9IHRoaXMuX2N1cnJlbnRFeGVjdXRpb24sXG4gICAgICBhY3Rpb25zID0gZXhlY3V0aW9uLmFjdGlvbnM7XG5cbiAgdmFyIGJhc2VBY3Rpb24gPSBhY3Rpb25zWzBdO1xuXG4gIGlmIChleGVjdXRpb24uYXRvbWljKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIGludm9jYXRpb24gaW4gPGV4ZWN1dGU+IG9yIDxyZXZlcnQ+IHBoYXNlIChhY3Rpb246ICcgKyBhY3Rpb24uY29tbWFuZCArICcpJyk7XG4gIH1cblxuICBpZiAoIWFjdGlvbi5pZCkge1xuICAgIGFjdGlvbi5pZCA9IChiYXNlQWN0aW9uICYmIGJhc2VBY3Rpb24uaWQpIHx8IHRoaXMuX2NyZWF0ZUlkKCk7XG4gIH1cblxuICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fcG9wQWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciBleGVjdXRpb24gPSB0aGlzLl9jdXJyZW50RXhlY3V0aW9uLFxuICAgICAgYWN0aW9ucyA9IGV4ZWN1dGlvbi5hY3Rpb25zLFxuICAgICAgZGlydHkgPSBleGVjdXRpb24uZGlydHk7XG5cbiAgYWN0aW9ucy5wb3AoKTtcblxuICBpZiAoIWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudHMuY2hhbmdlZCcsIHsgZWxlbWVudHM6IHVuaXF1ZUJ5KCdpZCcsIGRpcnR5LnJldmVyc2UoKSkgfSk7XG5cbiAgICBkaXJ0eS5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fZmlyZSgnY2hhbmdlZCcpO1xuICB9XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX21hcmtEaXJ0eSA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBleGVjdXRpb24gPSB0aGlzLl9jdXJyZW50RXhlY3V0aW9uO1xuXG4gIGlmICghZWxlbWVudHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbGVtZW50cyA9IGlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbIGVsZW1lbnRzIF07XG5cbiAgZXhlY3V0aW9uLmRpcnR5ID0gZXhlY3V0aW9uLmRpcnR5LmNvbmNhdChlbGVtZW50cyk7XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2V4ZWN1dGVkQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uLCByZWRvKSB7XG4gIHZhciBzdGFja0lkeCA9ICsrdGhpcy5fc3RhY2tJZHg7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fc3RhY2suc3BsaWNlKHN0YWNrSWR4LCB0aGlzLl9zdGFjay5sZW5ndGgsIGFjdGlvbik7XG4gIH1cbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fcmV2ZXJ0ZWRBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgdGhpcy5fc3RhY2tJZHgtLTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fZ2V0SGFuZGxlciA9IGZ1bmN0aW9uKGNvbW1hbmQpIHtcbiAgcmV0dXJuIHRoaXMuX2hhbmRsZXJNYXBbY29tbWFuZF07XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9zZXRIYW5kbGVyID0gZnVuY3Rpb24oY29tbWFuZCwgaGFuZGxlcikge1xuICBpZiAoIWNvbW1hbmQgfHwgIWhhbmRsZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgYW5kIGhhbmRsZXIgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9oYW5kbGVyTWFwW2NvbW1hbmRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvdmVycmlkaW5nIGhhbmRsZXIgZm9yIGNvbW1hbmQgPCcgKyBjb21tYW5kICsgJz4nKTtcbiAgfVxuXG4gIHRoaXMuX2hhbmRsZXJNYXBbY29tbWFuZF0gPSBoYW5kbGVyO1xufTtcbiIsImltcG9ydCBDb21tYW5kU3RhY2sgZnJvbSAnLi9Db21tYW5kU3RhY2snO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbW1hbmRTdGFjazogWyAndHlwZScsIENvbW1hbmRTdGFjayBdXG59O1xuIiwiaW1wb3J0IHtcbiAgaXNOdW1iZXIsXG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgZXZlcnksXG4gIGRlYm91bmNlLFxuICBiaW5kLFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGdldFR5cGVcbn0gZnJvbSAnLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICB0cmFuc2Zvcm0gYXMgc3ZnVHJhbnNmb3JtXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHsgY3JlYXRlTWF0cml4IGFzIGNyZWF0ZU1hdHJpeCB9IGZyb20gJ3Rpbnktc3ZnJztcblxuXG5mdW5jdGlvbiByb3VuZChudW1iZXIsIHJlc29sdXRpb24pIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogcmVzb2x1dGlvbikgLyByZXNvbHV0aW9uO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVQeChudW1iZXIpIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG51bWJlcikgPyBudW1iZXIgKyAncHgnIDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBIVE1MIGNvbnRhaW5lciBlbGVtZW50IGZvciBhIFNWRyBlbGVtZW50IHdpdGhcbiAqIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gdGhlIGNvbnRhaW5lciBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IGFzc2lnbih7fSwgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9LCBvcHRpb25zKTtcblxuICB2YXIgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuYm9keTtcblxuICAvLyBjcmVhdGUgYSA8ZGl2PiBhcm91bmQgdGhlIHN2ZyBlbGVtZW50IHdpdGggdGhlIHJlc3BlY3RpdmUgc2l6ZVxuICAvLyB0aGlzIHdheSB3ZSBjYW4gYWx3YXlzIGdldCB0aGUgY29ycmVjdCBjb250YWluZXIgc2l6ZVxuICAvLyAodGhpcyBpcyBpbXBvc3NpYmxlIGZvciA8c3ZnPiBlbGVtZW50cyBhdCB0aGUgbW9tZW50KVxuICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBhcmVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2Rqcy1jb250YWluZXInKTtcblxuICBhc3NpZ24ocGFyZW50LnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHdpZHRoOiBlbnN1cmVQeChvcHRpb25zLndpZHRoKSxcbiAgICBoZWlnaHQ6IGVuc3VyZVB4KG9wdGlvbnMuaGVpZ2h0KVxuICB9KTtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQocGFyZW50KTtcblxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHcm91cChwYXJlbnQsIGNscywgY2hpbGRJbmRleCkge1xuICB2YXIgZ3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKGNscyk7XG5cbiAgdmFyIGluZGV4ID0gY2hpbGRJbmRleCAhPT0gdW5kZWZpbmVkID8gY2hpbGRJbmRleCA6IHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG5cbiAgLy8gbXVzdCBlbnN1cmUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vZGUgb3IgX251bGxfXG4gIC8vIGNmLiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS9pbnNlcnRCZWZvcmVcbiAgcGFyZW50Lmluc2VydEJlZm9yZShncm91cCwgcGFyZW50LmNoaWxkTm9kZXNbaW5kZXhdIHx8IG51bGwpO1xuXG4gIHJldHVybiBncm91cDtcbn1cblxudmFyIEJBU0VfTEFZRVIgPSAnYmFzZSc7XG5cblxudmFyIFJFUVVJUkVEX01PREVMX0FUVFJTID0ge1xuICBzaGFwZTogWyAneCcsICd5JywgJ3dpZHRoJywgJ2hlaWdodCcgXSxcbiAgY29ubmVjdGlvbjogWyAnd2F5cG9pbnRzJyBdXG59O1xuXG4vKipcbiAqIFRoZSBtYWluIGRyYXdpbmcgY2FudmFzLlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGVtaXRzIENhbnZhcyNjYW52YXMuaW5pdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0dyYXBoaWNzRmFjdG9yeX0gZ3JhcGhpY3NGYWN0b3J5XG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhbnZhcyhjb25maWcsIGV2ZW50QnVzLCBncmFwaGljc0ZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xuXG4gIHRoaXMuX2luaXQoY29uZmlnIHx8IHt9KTtcbn1cblxuQ2FudmFzLiRpbmplY3QgPSBbXG4gICdjb25maWcuY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2dyYXBoaWNzRmFjdG9yeScsXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG5cbkNhbnZhcy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihjb25maWcpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICAvLyBDcmVhdGVzIGEgPHN2Zz4gZWxlbWVudCB0aGF0IGlzIHdyYXBwZWQgaW50byBhIDxkaXY+LlxuICAvLyBUaGlzIHdheSB3ZSBhcmUgYWx3YXlzIGFibGUgdG8gY29ycmVjdGx5IGZpZ3VyZSBvdXQgdGhlIHNpemUgb2YgdGhlIHN2ZyBlbGVtZW50XG4gIC8vIGJ5IHF1ZXJ5aW5nIHRoZSBwYXJlbnQgbm9kZS5cbiAgLy9cbiAgLy8gKEl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgdGhlIHNpemUgb2YgYSBzdmcgZWxlbWVudCBjcm9zcyBicm93c2VyIEAgMjAxNC0wNC0wMSlcbiAgLy9cbiAgLy8gPGRpdiBjbGFzcz1cImRqcy1jb250YWluZXJcIiBzdHlsZT1cIndpZHRoOiB7ZGVzaXJlZC13aWR0aH0sIGhlaWdodDoge2Rlc2lyZWQtaGVpZ2h0fVwiPlxuICAvLyAgIDxzdmcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxuICAvLyAgICAuLi5cbiAgLy8gICA8L3N2Zz5cbiAgLy8gPC9kaXY+XG5cbiAgLy8gaHRtbCBjb250YWluZXJcbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcihjb25maWcpO1xuXG4gIHZhciBzdmcgPSB0aGlzLl9zdmcgPSBzdmdDcmVhdGUoJ3N2ZycpO1xuICBzdmdBdHRyKHN2ZywgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9KTtcblxuICBzdmdBcHBlbmQoY29udGFpbmVyLCBzdmcpO1xuXG4gIHZhciB2aWV3cG9ydCA9IHRoaXMuX3ZpZXdwb3J0ID0gY3JlYXRlR3JvdXAoc3ZnLCAndmlld3BvcnQnKTtcblxuICB0aGlzLl9sYXllcnMgPSB7fTtcblxuICAvLyBkZWJvdW5jZSBjYW52YXMudmlld2JveC5jaGFuZ2VkIGV2ZW50c1xuICAvLyBmb3Igc21vb3RoZXIgZGlhZ3JhbSBpbnRlcmFjdGlvblxuICBpZiAoY29uZmlnLmRlZmVyVXBkYXRlICE9PSBmYWxzZSkge1xuICAgIHRoaXMuX3ZpZXdib3hDaGFuZ2VkID0gZGVib3VuY2UoYmluZCh0aGlzLl92aWV3Ym94Q2hhbmdlZCwgdGhpcyksIDMwMCk7XG4gIH1cblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIGNhbnZhcyBpcyByZWFkeSB0byBiZSBkcmF3biBvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICAgKlxuICAgICAqIEBldmVudCBjYW52YXMuaW5pdFxuICAgICAqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IHN2ZyB0aGUgY3JlYXRlZCBzdmcgZWxlbWVudFxuICAgICAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gdmlld3BvcnQgdGhlIGRpcmVjdCBwYXJlbnQgb2YgZGlhZ3JhbSBlbGVtZW50cyBhbmQgc2hhcGVzXG4gICAgICovXG4gICAgZXZlbnRCdXMuZmlyZSgnY2FudmFzLmluaXQnLCB7XG4gICAgICBzdmc6IHN2ZyxcbiAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydFxuICAgIH0pO1xuXG4gIH0sIHRoaXMpO1xuXG4gIC8vIHJlc2V0IHZpZXdib3ggb24gc2hhcGUgY2hhbmdlcyB0b1xuICAvLyByZWNvbXB1dGUgdGhlIHZpZXdib3hcbiAgZXZlbnRCdXMub24oW1xuICAgICdzaGFwZS5hZGRlZCcsXG4gICAgJ2Nvbm5lY3Rpb24uYWRkZWQnLFxuICAgICdzaGFwZS5yZW1vdmVkJyxcbiAgICAnY29ubmVjdGlvbi5yZW1vdmVkJyxcbiAgICAnZWxlbWVudHMuY2hhbmdlZCdcbiAgXSwgZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXMuX2NhY2hlZFZpZXdib3g7XG4gIH0sIHRoaXMpO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCA1MDAsIHRoaXMuX2Rlc3Ryb3ksIHRoaXMpO1xuICBldmVudEJ1cy5vbignZGlhZ3JhbS5jbGVhcicsIDUwMCwgdGhpcy5fY2xlYXIsIHRoaXMpO1xufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKGVtaXQpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLmRlc3Ryb3knLCB7XG4gICAgc3ZnOiB0aGlzLl9zdmcsXG4gICAgdmlld3BvcnQ6IHRoaXMuX3ZpZXdwb3J0XG4gIH0pO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gIH1cblxuICBkZWxldGUgdGhpcy5fc3ZnO1xuICBkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICBkZWxldGUgdGhpcy5fbGF5ZXJzO1xuICBkZWxldGUgdGhpcy5fcm9vdEVsZW1lbnQ7XG4gIGRlbGV0ZSB0aGlzLl92aWV3cG9ydDtcbn07XG5cbkNhbnZhcy5wcm90b3R5cGUuX2NsZWFyID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBhbGxFbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRBbGwoKTtcblxuICAvLyByZW1vdmUgYWxsIGVsZW1lbnRzXG4gIGFsbEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHZhciB0eXBlID0gZ2V0VHlwZShlbGVtZW50KTtcblxuICAgIGlmICh0eXBlID09PSAncm9vdCcpIHtcbiAgICAgIHNlbGYuc2V0Um9vdEVsZW1lbnQobnVsbCwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuX3JlbW92ZUVsZW1lbnQoZWxlbWVudCwgdHlwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIHZpZXcgYm94XG4gIGRlbGV0ZSB0aGlzLl9jYWNoZWRWaWV3Ym94O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGxheWVyIG9uIHdoaWNoXG4gKiBhbGwgZWxlbWVudHMgYXJlIGRyYXduLlxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5DYW52YXMucHJvdG90eXBlLmdldERlZmF1bHRMYXllciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRMYXllcihCQVNFX0xBWUVSLCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGxheWVyIHRoYXQgaXMgdXNlZCB0byBkcmF3IGVsZW1lbnRzXG4gKiBvciBhbm5vdGF0aW9ucyBvbiBpdC5cbiAqXG4gKiBOb24tZXhpc3RpbmcgbGF5ZXJzIHJldHJpZXZlZCB0aHJvdWdoIHRoaXMgbWV0aG9kXG4gKiB3aWxsIGJlIGNyZWF0ZWQuIER1cmluZyBjcmVhdGlvbiwgdGhlIG9wdGlvbmFsIGluZGV4XG4gKiBtYXkgYmUgdXNlZCB0byBjcmVhdGUgbGF5ZXJzIGJlbG93IG9yIGFib3ZlIGV4aXN0aW5nIGxheWVycy5cbiAqIEEgbGF5ZXIgd2l0aCBhIGNlcnRhaW4gaW5kZXggaXMgYWx3YXlzIGNyZWF0ZWQgYWJvdmUgYWxsXG4gKiBleGlzdGluZyBsYXllcnMgd2l0aCB0aGUgc2FtZSBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKlxuICogQHJldHVybnMge1NWR0VsZW1lbnR9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0TGF5ZXIgPSBmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuXG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzcGVjaWZ5IGEgbmFtZScpO1xuICB9XG5cbiAgdmFyIGxheWVyID0gdGhpcy5fbGF5ZXJzW25hbWVdO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICBsYXllciA9IHRoaXMuX2xheWVyc1tuYW1lXSA9IHRoaXMuX2NyZWF0ZUxheWVyKG5hbWUsIGluZGV4KTtcbiAgfVxuXG4gIC8vIHRocm93IGFuIGVycm9yIGlmIGxheWVyIGNyZWF0aW9uIC8gcmV0cml2YWwgaXNcbiAgLy8gcmVxdWVzdGVkIG9uIGRpZmZlcmVudCBpbmRleFxuICBpZiAodHlwZW9mIGluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiBsYXllci5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xheWVyIDwnICsgbmFtZSArICc+IGFscmVhZHkgY3JlYXRlZCBhdCBpbmRleCA8JyArIGluZGV4ICsgJz4nKTtcbiAgfVxuXG4gIHJldHVybiBsYXllci5ncm91cDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGdpdmVuIGxheWVyIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTBdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBsYXllciBkZXNjcmlwdG9yIHdpdGggeyBpbmRleCwgZ3JvdXA6IFNWR0dyb3VwIH1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fY3JlYXRlTGF5ZXIgPSBmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuXG4gIGlmICghaW5kZXgpIHtcbiAgICBpbmRleCA9IDA7XG4gIH1cblxuICB2YXIgY2hpbGRJbmRleCA9IHJlZHVjZSh0aGlzLl9sYXllcnMsIGZ1bmN0aW9uKGNoaWxkSW5kZXgsIGxheWVyKSB7XG4gICAgaWYgKGluZGV4ID49IGxheWVyLmluZGV4KSB7XG4gICAgICBjaGlsZEluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkSW5kZXg7XG4gIH0sIDApO1xuXG4gIHJldHVybiB7XG4gICAgZ3JvdXA6IGNyZWF0ZUdyb3VwKHRoaXMuX3ZpZXdwb3J0LCAnbGF5ZXItJyArIG5hbWUsIGNoaWxkSW5kZXgpLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xuXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGh0bWwgZWxlbWVudCB0aGF0IGVuY2xvc2VzIHRoZVxuICogZHJhd2luZyBjYW52YXMuXG4gKlxuICogQHJldHVybiB7RE9NTm9kZX1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5nZXRDb250YWluZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbn07XG5cblxuLy8gbWFya2VycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNhbnZhcy5wcm90b3R5cGUuX3VwZGF0ZU1hcmtlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1hcmtlciwgYWRkKSB7XG4gIHZhciBjb250YWluZXI7XG5cbiAgaWYgKCFlbGVtZW50LmlkKSB7XG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudCk7XG4gIH1cblxuICAvLyB3ZSBuZWVkIHRvIGFjY2VzcyBhbGxcbiAgY29udGFpbmVyID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5Ll9lbGVtZW50c1tlbGVtZW50LmlkXTtcblxuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2goWyBjb250YWluZXIuZ2Z4LCBjb250YWluZXIuc2Vjb25kYXJ5R2Z4IF0sIGZ1bmN0aW9uKGdmeCkge1xuICAgIGlmIChnZngpIHtcblxuICAgICAgLy8gaW52b2tlIGVpdGhlciBhZGRDbGFzcyBvciByZW1vdmVDbGFzcyBiYXNlZCBvbiBtb2RlXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQobWFya2VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5yZW1vdmUobWFya2VyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBtYXJrZXIgaGFzIGJlZW4gdXBkYXRlZCBmb3IgYW4gZWxlbWVudFxuICAgKlxuICAgKiBAZXZlbnQgZWxlbWVudC5tYXJrZXIudXBkYXRlXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkVsZW1lbnR9IGVsZW1lbnQgdGhlIHNoYXBlXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2hhcGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IG1hcmtlclxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGFkZCB0cnVlIGlmIHRoZSBtYXJrZXIgd2FzIGFkZGVkLCBmYWxzZSBpZiBpdCBnb3QgcmVtb3ZlZFxuICAgKi9cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudC5tYXJrZXIudXBkYXRlJywgeyBlbGVtZW50OiBlbGVtZW50LCBnZng6IGNvbnRhaW5lci5nZngsIG1hcmtlcjogbWFya2VyLCBhZGQ6ICEhYWRkIH0pO1xufTtcblxuXG4vKipcbiAqIEFkZHMgYSBtYXJrZXIgdG8gYW4gZWxlbWVudCAoYmFzaWNhbGx5IGEgY3NzIGNsYXNzKS5cbiAqXG4gKiBGaXJlcyB0aGUgZWxlbWVudC5tYXJrZXIudXBkYXRlIGV2ZW50LCBtYWtpbmcgaXQgcG9zc2libGUgdG9cbiAqIGludGVncmF0ZSBleHRlbnNpb24gaW50byB0aGUgbWFya2VyIGxpZmUtY3ljbGUsIHRvby5cbiAqXG4gKiBAZXhhbXBsZVxuICogY2FudmFzLmFkZE1hcmtlcignZm9vJywgJ3NvbWUtbWFya2VyJyk7XG4gKlxuICogdmFyIGZvb0dmeCA9IGNhbnZhcy5nZXRHcmFwaGljcygnZm9vJyk7XG4gKlxuICogZm9vR2Z4OyAvLyA8ZyBjbGFzcz1cIi4uLiBzb21lLW1hcmtlclwiPiAuLi4gPC9nPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya2VyXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuYWRkTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyKSB7XG4gIHRoaXMuX3VwZGF0ZU1hcmtlcihlbGVtZW50LCBtYXJrZXIsIHRydWUpO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBhIG1hcmtlciBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogRmlyZXMgdGhlIGVsZW1lbnQubWFya2VyLnVwZGF0ZSBldmVudCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvXG4gKiBpbnRlZ3JhdGUgZXh0ZW5zaW9uIGludG8gdGhlIG1hcmtlciBsaWZlLWN5Y2xlLCB0b28uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1hcmtlclxuICovXG5DYW52YXMucHJvdG90eXBlLnJlbW92ZU1hcmtlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1hcmtlcikge1xuICB0aGlzLl91cGRhdGVNYXJrZXIoZWxlbWVudCwgbWFya2VyLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBtYXJrZXIgb24gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gbWFya2VyXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuaGFzTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyKSB7XG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGdmeCA9IHRoaXMuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG5cbiAgcmV0dXJuIHN2Z0NsYXNzZXMoZ2Z4KS5oYXMobWFya2VyKTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBhIG1hcmtlciBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEZpcmVzIHRoZSBlbGVtZW50Lm1hcmtlci51cGRhdGUgZXZlbnQsIG1ha2luZyBpdCBwb3NzaWJsZSB0b1xuICogaW50ZWdyYXRlIGV4dGVuc2lvbiBpbnRvIHRoZSBtYXJrZXIgbGlmZS1jeWNsZSwgdG9vLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ3xkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBtYXJrZXJcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS50b2dnbGVNYXJrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBtYXJrZXIpIHtcbiAgaWYgKHRoaXMuaGFzTWFya2VyKGVsZW1lbnQsIG1hcmtlcikpIHtcbiAgICB0aGlzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtYXJrZXIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYWRkTWFya2VyKGVsZW1lbnQsIG1hcmtlcik7XG4gIH1cbn07XG5cbkNhbnZhcy5wcm90b3R5cGUuZ2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yb290RWxlbWVudCkge1xuICAgIHRoaXMuc2V0Um9vdEVsZW1lbnQoeyBpZDogJ19faW1wbGljaXRyb290JywgY2hpbGRyZW46IFtdIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50O1xufTtcblxuXG5cbi8vIHJvb3QgZWxlbWVudCBoYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogU2V0cyBhIGdpdmVuIGVsZW1lbnQgYXMgdGhlIG5ldyByb290IGVsZW1lbnQgZm9yIHRoZSBjYW52YXNcbiAqIGFuZCByZXR1cm5zIHRoZSBuZXcgcm9vdCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGRqcy5tb2RlbC5Sb290fSBlbGVtZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvdmVycmlkZV0gd2hldGhlciB0byBvdmVycmlkZSB0aGUgY3VycmVudCByb290IGVsZW1lbnQsIGlmIGFueVxuICpcbiAqIEByZXR1cm4ge09iamVjdHxkanMubW9kZWwuUm9vdH0gbmV3IHJvb3QgZWxlbWVudFxuICovXG5DYW52YXMucHJvdG90eXBlLnNldFJvb3RFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgb3ZlcnJpZGUpIHtcblxuICBpZiAoZWxlbWVudCkge1xuICAgIHRoaXMuX2Vuc3VyZVZhbGlkKCdyb290JywgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudFJvb3QgPSB0aGlzLl9yb290RWxlbWVudCxcbiAgICAgIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgaWYgKGN1cnJlbnRSb290KSB7XG4gICAgaWYgKCFvdmVycmlkZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290RWxlbWVudCBhbHJlYWR5IHNldCwgbmVlZCB0byBzcGVjaWZ5IG92ZXJyaWRlJyk7XG4gICAgfVxuXG4gICAgLy8gc2ltdWxhdGUgZWxlbWVudCByZW1vdmUgZXZlbnQgc2VxdWVuY2VcbiAgICBldmVudEJ1cy5maXJlKCdyb290LnJlbW92ZScsIHsgZWxlbWVudDogY3VycmVudFJvb3QgfSk7XG4gICAgZXZlbnRCdXMuZmlyZSgncm9vdC5yZW1vdmVkJywgeyBlbGVtZW50OiBjdXJyZW50Um9vdCB9KTtcblxuICAgIGVsZW1lbnRSZWdpc3RyeS5yZW1vdmUoY3VycmVudFJvb3QpO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICB2YXIgZ2Z4ID0gdGhpcy5nZXREZWZhdWx0TGF5ZXIoKTtcblxuICAgIC8vIHJlc2VtYmxlIGVsZW1lbnQgYWRkIGV2ZW50IHNlcXVlbmNlXG4gICAgZXZlbnRCdXMuZmlyZSgncm9vdC5hZGQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG5cbiAgICBlbGVtZW50UmVnaXN0cnkuYWRkKGVsZW1lbnQsIGdmeCwgdGhpcy5fc3ZnKTtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ3Jvb3QuYWRkZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9XG5cbiAgdGhpcy5fcm9vdEVsZW1lbnQgPSBlbGVtZW50O1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG5cbi8vIGFkZCBmdW5jdGlvbmFsaXR5IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ2FudmFzLnByb3RvdHlwZS5fZW5zdXJlVmFsaWQgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50KSB7XG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHdpdGggaWQgJyArIGVsZW1lbnQuaWQgKyAnIGFscmVhZHkgZXhpc3RzJyk7XG4gIH1cblxuICB2YXIgcmVxdWlyZWRBdHRycyA9IFJFUVVJUkVEX01PREVMX0FUVFJTW3R5cGVdO1xuXG4gIHZhciB2YWxpZCA9IGV2ZXJ5KHJlcXVpcmVkQXR0cnMsIGZ1bmN0aW9uKGF0dHIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnRbYXR0cl0gIT09ICd1bmRlZmluZWQnO1xuICB9KTtcblxuICBpZiAoIXZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ211c3Qgc3VwcGx5IHsgJyArIHJlcXVpcmVkQXR0cnMuam9pbignLCAnKSArICcgfSB3aXRoICcgKyB0eXBlKTtcbiAgfVxufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fc2V0UGFyZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuICBjb2xsZWN0aW9uQWRkKHBhcmVudC5jaGlsZHJlbiwgZWxlbWVudCwgcGFyZW50SW5kZXgpO1xuICBlbGVtZW50LnBhcmVudCA9IHBhcmVudDtcbn07XG5cbi8qKlxuICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBjYW52YXMuXG4gKlxuICogVGhpcyB3aXJlcyB0aGUgcGFyZW50IDwtPiBjaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmRcbiAqIGEgZXhwbGljaXRseSBzcGVjaWZpZWQgcGFyZW50IG9yIGFuIGltcGxpY2l0IHJvb3QgZWxlbWVudC5cbiAqXG4gKiBEdXJpbmcgYWRkIGl0IGVtaXRzIHRoZSBldmVudHNcbiAqXG4gKiAgKiA8e3R5cGV9LmFkZD4gKGVsZW1lbnQsIHBhcmVudClcbiAqICAqIDx7dHlwZX0uYWRkZWQ+IChlbGVtZW50LCBnZngpXG4gKlxuICogRXh0ZW5zaW9ucyBtYXkgaG9vayBpbnRvIHRoZXNlIGV2ZW50cyB0byBwZXJmb3JtIHRoZWlyIG1hZ2ljLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLkJhc2V9IFtwYXJlbnRdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhcmVudEluZGV4XVxuICpcbiAqIEByZXR1cm4ge09iamVjdHxkanMubW9kZWwuQmFzZX0gdGhlIGFkZGVkIGVsZW1lbnRcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fYWRkRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHBhcmVudCwgcGFyZW50SW5kZXgpIHtcblxuICBwYXJlbnQgPSBwYXJlbnQgfHwgdGhpcy5nZXRSb290RWxlbWVudCgpO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzLFxuICAgICAgZ3JhcGhpY3NGYWN0b3J5ID0gdGhpcy5fZ3JhcGhpY3NGYWN0b3J5O1xuXG4gIHRoaXMuX2Vuc3VyZVZhbGlkKHR5cGUsIGVsZW1lbnQpO1xuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcuYWRkJywgeyBlbGVtZW50OiBlbGVtZW50LCBwYXJlbnQ6IHBhcmVudCB9KTtcblxuICB0aGlzLl9zZXRQYXJlbnQoZWxlbWVudCwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG5cbiAgLy8gY3JlYXRlIGdyYXBoaWNzXG4gIHZhciBnZnggPSBncmFwaGljc0ZhY3RvcnkuY3JlYXRlKHR5cGUsIGVsZW1lbnQsIHBhcmVudEluZGV4KTtcblxuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkuYWRkKGVsZW1lbnQsIGdmeCk7XG5cbiAgLy8gdXBkYXRlIGl0cyB2aXN1YWxcbiAgZ3JhcGhpY3NGYWN0b3J5LnVwZGF0ZSh0eXBlLCBlbGVtZW50LCBnZngpO1xuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcuYWRkZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBBZGRzIGEgc2hhcGUgdG8gdGhlIGNhbnZhc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGRqcy5tb2RlbC5TaGFwZX0gc2hhcGUgdG8gYWRkIHRvIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbcGFyZW50XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBhZGRlZCBzaGFwZVxuICovXG5DYW52YXMucHJvdG90eXBlLmFkZFNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIHBhcmVudCwgcGFyZW50SW5kZXgpIHtcbiAgcmV0dXJuIHRoaXMuX2FkZEVsZW1lbnQoJ3NoYXBlJywgc2hhcGUsIHBhcmVudCwgcGFyZW50SW5kZXgpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY29ubmVjdGlvbiB0byB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb24gdG8gYWRkIHRvIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbcGFyZW50XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gdGhlIGFkZGVkIGNvbm5lY3Rpb25cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5hZGRDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuICByZXR1cm4gdGhpcy5fYWRkRWxlbWVudCgnY29ubmVjdGlvbicsIGNvbm5lY3Rpb24sIHBhcmVudCwgcGFyZW50SW5kZXgpO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIHJlbW92ZSBlbGVtZW50XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlKSB7XG5cbiAgdmFyIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGdyYXBoaWNzRmFjdG9yeSA9IHRoaXMuX2dyYXBoaWNzRmFjdG9yeSxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgZWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudC5pZCB8fCBlbGVtZW50KTtcblxuICBpZiAoIWVsZW1lbnQpIHtcblxuICAgIC8vIGVsZW1lbnQgd2FzIHJlbW92ZWQgYWxyZWFkeVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcucmVtb3ZlJywgeyBlbGVtZW50OiBlbGVtZW50IH0pO1xuXG4gIGdyYXBoaWNzRmFjdG9yeS5yZW1vdmUoZWxlbWVudCk7XG5cbiAgLy8gdW5zZXQgcGFyZW50IDwtPiBjaGlsZCByZWxhdGlvbnNoaXBcbiAgY29sbGVjdGlvblJlbW92ZShlbGVtZW50LnBhcmVudCAmJiBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiwgZWxlbWVudCk7XG4gIGVsZW1lbnQucGFyZW50ID0gbnVsbDtcblxuICBldmVudEJ1cy5maXJlKHR5cGUgKyAnLnJlbW92ZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG5cbiAgZWxlbWVudFJlZ2lzdHJ5LnJlbW92ZShlbGVtZW50KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIGEgc2hhcGUgZnJvbSB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZSBvciBzaGFwZSBpZCB0byBiZSByZW1vdmVkXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLlNoYXBlfSB0aGUgcmVtb3ZlZCBzaGFwZVxuICovXG5DYW52YXMucHJvdG90eXBlLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUpIHtcblxuICAvKipcbiAgICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgc2hhcGUgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYW52YXMuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICpcbiAgICogQGV2ZW50IHNoYXBlLnJlbW92ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudCB0aGUgc2hhcGUgZGVzY3JpcHRvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gZ2Z4IHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNoYXBlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBzaGFwZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQG1lbWJlck9mIENhbnZhc1xuICAgKlxuICAgKiBAZXZlbnQgc2hhcGUucmVtb3ZlZFxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudCB0aGUgc2hhcGUgZGVzY3JpcHRvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gZ2Z4IHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNoYXBlXG4gICAqL1xuICByZXR1cm4gdGhpcy5fcmVtb3ZlRWxlbWVudChzaGFwZSwgJ3NoYXBlJyk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb24gb3IgY29ubmVjdGlvbiBpZCB0byBiZSByZW1vdmVkXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkNvbm5lY3Rpb259IHRoZSByZW1vdmVkIGNvbm5lY3Rpb25cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5yZW1vdmVDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBjb25uZWN0aW9uIGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ2FudmFzXG4gICAqXG4gICAqIEBldmVudCBjb25uZWN0aW9uLnJlbW92ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5Db25uZWN0aW9ufSBlbGVtZW50IHRoZSBjb25uZWN0aW9uIGRlc2NyaXB0b3JcbiAgICogQHByb3BlcnR5IHtPYmplY3R9IGdmeCB0aGUgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBjb25uZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ2FudmFzXG4gICAqXG4gICAqIEBldmVudCBjb25uZWN0aW9uLnJlbW92ZWRcbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQHByb3BlcnR5IHtkanMubW9kZWwuQ29ubmVjdGlvbn0gZWxlbWVudCB0aGUgY29ubmVjdGlvbiBkZXNjcmlwdG9yXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29ubmVjdGlvblxuICAgKi9cbiAgcmV0dXJuIHRoaXMuX3JlbW92ZUVsZW1lbnQoY29ubmVjdGlvbiwgJ2Nvbm5lY3Rpb24nKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGdyYXBoaWNhbCBvYmplY3QgdW5kZXJsYXlpbmcgYSBjZXJ0YWluIGRpYWdyYW0gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50IGRlc2NyaXB0b3Igb2YgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlY29uZGFyeT1mYWxzZV0gd2hldGhlciB0byByZXR1cm4gdGhlIHNlY29uZGFyeSBjb25uZWN0ZWQgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0R3JhcGhpY3MgPSBmdW5jdGlvbihlbGVtZW50LCBzZWNvbmRhcnkpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50LCBzZWNvbmRhcnkpO1xufTtcblxuXG4vKipcbiAqIFBlcmZvcm0gYSB2aWV3Ym94IHVwZGF0ZSB2aWEgYSBnaXZlbiBjaGFuZ2UgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhbmdlRm5cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fY2hhbmdlVmlld2JveCA9IGZ1bmN0aW9uKGNoYW5nZUZuKSB7XG5cbiAgLy8gbm90aWZ5IG90aGVycyBvZiB0aGUgdXBjb21pbmcgdmlld2JveCBjaGFuZ2VcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnKTtcblxuICAvLyBwZXJmb3JtIGFjdHVhbCBjaGFuZ2VcbiAgY2hhbmdlRm4uYXBwbHkodGhpcyk7XG5cbiAgLy8gcmVzZXQgdGhlIGNhY2hlZCB2aWV3Ym94IHNvIHRoYXRcbiAgLy8gYSBuZXcgZ2V0IG9wZXJhdGlvbiBvbiB2aWV3Ym94IG9yIHpvb21cbiAgLy8gdHJpZ2dlcnMgYSB2aWV3Ym94IHJlLWNvbXB1dGF0aW9uXG4gIHRoaXMuX2NhY2hlZFZpZXdib3ggPSBudWxsO1xuXG4gIC8vIG5vdGlmeSBvdGhlcnMgb2YgdGhlIGNoYW5nZTsgdGhpcyBzdGVwXG4gIC8vIG1heSBvciBtYXkgbm90IGJlIGRlYm91bmNlZFxuICB0aGlzLl92aWV3Ym94Q2hhbmdlZCgpO1xufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fdmlld2JveENoYW5nZWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLnZpZXdib3guY2hhbmdlZCcsIHsgdmlld2JveDogdGhpcy52aWV3Ym94KCkgfSk7XG59O1xuXG5cbi8qKlxuICogR2V0cyBvciBzZXRzIHRoZSB2aWV3IGJveCBvZiB0aGUgY2FudmFzLCBpLmUuIHRoZVxuICogYXJlYSB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQuXG4gKlxuICogVGhlIGdldHRlciBtYXkgcmV0dXJuIGEgY2FjaGVkIHZpZXdib3ggKGlmIGl0IGlzIGN1cnJlbnRseVxuICogY2hhbmdpbmcpLiBUbyBmb3JjZSBhIHJlY29tcHV0YXRpb24sIHBhc3MgYGZhbHNlYCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjYW52YXMudmlld2JveCh7IHg6IDEwMCwgeTogMTAwLCB3aWR0aDogNTAwLCBoZWlnaHQ6IDUwMCB9KVxuICpcbiAqIC8vIHNldHMgdGhlIHZpc2libGUgYXJlYSBvZiB0aGUgZGlhZ3JhbSB0byAoMTAwfDEwMCkgLT4gKDYwMHwxMDApXG4gKiAvLyBhbmQgYW5kIHNjYWxlcyBpdCBhY2NvcmRpbmcgdG8gdGhlIGRpYWdyYW0gd2lkdGhcbiAqXG4gKiB2YXIgdmlld2JveCA9IGNhbnZhcy52aWV3Ym94KCk7IC8vIHBhc3MgYGZhbHNlYCB0byBmb3JjZSByZWNvbXB1dGluZyB0aGUgYm94LlxuICpcbiAqIGNvbnNvbGUubG9nKHZpZXdib3gpO1xuICogLy8ge1xuICogLy8gICBpbm5lcjogRGltZW5zaW9ucyxcbiAqIC8vICAgb3V0ZXI6IERpbWVuc2lvbnMsXG4gKiAvLyAgIHNjYWxlLFxuICogLy8gICB4LCB5LFxuICogLy8gICB3aWR0aCwgaGVpZ2h0XG4gKiAvLyB9XG4gKlxuICogLy8gaWYgdGhlIGN1cnJlbnQgZGlhZ3JhbSBpcyB6b29tZWQgYW5kIHNjcm9sbGVkLCB5b3UgbWF5IHJlc2V0IGl0IHRvIHRoZVxuICogLy8gZGVmYXVsdCB6b29tIHZpYSB0aGlzIG1ldGhvZCwgdG9vOlxuICpcbiAqIHZhciB6b29tZWRBbmRTY3JvbGxlZFZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuICpcbiAqIGNhbnZhcy52aWV3Ym94KHtcbiAqICAgeDogMCxcbiAqICAgeTogMCxcbiAqICAgd2lkdGg6IHpvb21lZEFuZFNjcm9sbGVkVmlld2JveC5vdXRlci53aWR0aCxcbiAqICAgaGVpZ2h0OiB6b29tZWRBbmRTY3JvbGxlZFZpZXdib3gub3V0ZXIuaGVpZ2h0XG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtib3hdIHRoZSBuZXcgdmlldyBib3ggdG8gc2V0XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC54IHRoZSB0b3AgbGVmdCBYIGNvb3JkaW5hdGUgb2YgdGhlIGNhbnZhcyB2aXNpYmxlIGluIHZpZXcgYm94XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC55IHRoZSB0b3AgbGVmdCBZIGNvb3JkaW5hdGUgb2YgdGhlIGNhbnZhcyB2aXNpYmxlIGluIHZpZXcgYm94XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC53aWR0aCB0aGUgdmlzaWJsZSB3aWR0aFxuICogQHBhcmFtICB7bnVtYmVyfSBib3guaGVpZ2h0XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgY3VycmVudCB2aWV3IGJveFxuICovXG5DYW52YXMucHJvdG90eXBlLnZpZXdib3ggPSBmdW5jdGlvbihib3gpIHtcblxuICBpZiAoYm94ID09PSB1bmRlZmluZWQgJiYgdGhpcy5fY2FjaGVkVmlld2JveCkge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZWRWaWV3Ym94O1xuICB9XG5cbiAgdmFyIHZpZXdwb3J0ID0gdGhpcy5fdmlld3BvcnQsXG4gICAgICBpbm5lckJveCxcbiAgICAgIG91dGVyQm94ID0gdGhpcy5nZXRTaXplKCksXG4gICAgICBtYXRyaXgsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzY2FsZSxcbiAgICAgIHgsIHk7XG5cbiAgaWYgKCFib3gpIHtcblxuICAgIC8vIGNvbXB1dGUgdGhlIGlubmVyIGJveCBiYXNlZCBvbiB0aGVcbiAgICAvLyBkaWFncmFtcyBkZWZhdWx0IGxheWVyLiBUaGlzIGFsbG93cyB1cyB0byBleGNsdWRlXG4gICAgLy8gZXh0ZXJuYWwgY29tcG9uZW50cywgc3VjaCBhcyBvdmVybGF5c1xuICAgIGlubmVyQm94ID0gdGhpcy5nZXREZWZhdWx0TGF5ZXIoKS5nZXRCQm94KCk7XG5cbiAgICB0cmFuc2Zvcm0gPSBzdmdUcmFuc2Zvcm0odmlld3BvcnQpO1xuICAgIG1hdHJpeCA9IHRyYW5zZm9ybSA/IHRyYW5zZm9ybS5tYXRyaXggOiBjcmVhdGVNYXRyaXgoKTtcbiAgICBzY2FsZSA9IHJvdW5kKG1hdHJpeC5hLCAxMDAwKTtcblxuICAgIHggPSByb3VuZCgtbWF0cml4LmUgfHwgMCwgMTAwMCk7XG4gICAgeSA9IHJvdW5kKC1tYXRyaXguZiB8fCAwLCAxMDAwKTtcblxuICAgIGJveCA9IHRoaXMuX2NhY2hlZFZpZXdib3ggPSB7XG4gICAgICB4OiB4ID8geCAvIHNjYWxlIDogMCxcbiAgICAgIHk6IHkgPyB5IC8gc2NhbGUgOiAwLFxuICAgICAgd2lkdGg6IG91dGVyQm94LndpZHRoIC8gc2NhbGUsXG4gICAgICBoZWlnaHQ6IG91dGVyQm94LmhlaWdodCAvIHNjYWxlLFxuICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgaW5uZXI6IHtcbiAgICAgICAgd2lkdGg6IGlubmVyQm94LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGlubmVyQm94LmhlaWdodCxcbiAgICAgICAgeDogaW5uZXJCb3gueCxcbiAgICAgICAgeTogaW5uZXJCb3gueVxuICAgICAgfSxcbiAgICAgIG91dGVyOiBvdXRlckJveFxuICAgIH07XG5cbiAgICByZXR1cm4gYm94O1xuICB9IGVsc2Uge1xuXG4gICAgdGhpcy5fY2hhbmdlVmlld2JveChmdW5jdGlvbigpIHtcbiAgICAgIHNjYWxlID0gTWF0aC5taW4ob3V0ZXJCb3gud2lkdGggLyBib3gud2lkdGgsIG91dGVyQm94LmhlaWdodCAvIGJveC5oZWlnaHQpO1xuXG4gICAgICB2YXIgbWF0cml4ID0gdGhpcy5fc3ZnLmNyZWF0ZVNWR01hdHJpeCgpXG4gICAgICAgIC5zY2FsZShzY2FsZSlcbiAgICAgICAgLnRyYW5zbGF0ZSgtYm94LngsIC1ib3gueSk7XG5cbiAgICAgIHN2Z1RyYW5zZm9ybSh2aWV3cG9ydCwgbWF0cml4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBib3g7XG59O1xuXG5cbi8qKlxuICogR2V0cyBvciBzZXRzIHRoZSBzY3JvbGwgb2YgdGhlIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2RlbHRhXSB0aGUgbmV3IHNjcm9sbCB0byBhcHBseS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlbHRhLmR4XVxuICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YS5keV1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5zY3JvbGwgPSBmdW5jdGlvbihkZWx0YSkge1xuXG4gIHZhciBub2RlID0gdGhpcy5fdmlld3BvcnQ7XG4gIHZhciBtYXRyaXggPSBub2RlLmdldENUTSgpO1xuXG4gIGlmIChkZWx0YSkge1xuICAgIHRoaXMuX2NoYW5nZVZpZXdib3goZnVuY3Rpb24oKSB7XG4gICAgICBkZWx0YSA9IGFzc2lnbih7IGR4OiAwLCBkeTogMCB9LCBkZWx0YSB8fCB7fSk7XG5cbiAgICAgIG1hdHJpeCA9IHRoaXMuX3N2Zy5jcmVhdGVTVkdNYXRyaXgoKS50cmFuc2xhdGUoZGVsdGEuZHgsIGRlbHRhLmR5KS5tdWx0aXBseShtYXRyaXgpO1xuXG4gICAgICBzZXRDVE0obm9kZSwgbWF0cml4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7IHg6IG1hdHJpeC5lLCB5OiBtYXRyaXguZiB9O1xufTtcblxuXG4vKipcbiAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCB6b29tIG9mIHRoZSBjYW52YXMsIG9wdGlvbmFsbHkgem9vbWluZ1xuICogdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cbiAqXG4gKiBUaGUgZ2V0dGVyIG1heSByZXR1cm4gYSBjYWNoZWQgem9vbSBsZXZlbC4gQ2FsbCBpdCB3aXRoIGBmYWxzZWAgYXNcbiAqIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIHRoZSBjdXJyZW50IGxldmVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW25ld1NjYWxlXSB0aGUgbmV3IHpvb20gbGV2ZWwsIGVpdGhlciBhIG51bWJlciwgaS5lLiAwLjksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYGZpdC12aWV3cG9ydGAgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGZpdCB0aGUgY3VycmVudCB2aWV3cG9ydFxuICogQHBhcmFtIHtzdHJpbmd8UG9pbnR9IFtjZW50ZXJdIHRoZSByZWZlcmVuY2UgcG9pbnQgeyB4OiAuLiwgeTogLi59IHRvIHpvb20gdG8sICdhdXRvJyB0byB6b29tIGludG8gbWlkIG9yIG51bGxcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjdXJyZW50IHNjYWxlXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuem9vbSA9IGZ1bmN0aW9uKG5ld1NjYWxlLCBjZW50ZXIpIHtcblxuICBpZiAoIW5ld1NjYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld2JveChuZXdTY2FsZSkuc2NhbGU7XG4gIH1cblxuICBpZiAobmV3U2NhbGUgPT09ICdmaXQtdmlld3BvcnQnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpdFZpZXdwb3J0KGNlbnRlcik7XG4gIH1cblxuICB2YXIgb3V0ZXIsXG4gICAgICBtYXRyaXg7XG5cbiAgdGhpcy5fY2hhbmdlVmlld2JveChmdW5jdGlvbigpIHtcblxuICAgIGlmICh0eXBlb2YgY2VudGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgb3V0ZXIgPSB0aGlzLnZpZXdib3goKS5vdXRlcjtcblxuICAgICAgY2VudGVyID0ge1xuICAgICAgICB4OiBvdXRlci53aWR0aCAvIDIsXG4gICAgICAgIHk6IG91dGVyLmhlaWdodCAvIDJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbWF0cml4ID0gdGhpcy5fc2V0Wm9vbShuZXdTY2FsZSwgY2VudGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJvdW5kKG1hdHJpeC5hLCAxMDAwKTtcbn07XG5cbmZ1bmN0aW9uIHNldENUTShub2RlLCBtKSB7XG4gIHZhciBtc3RyID0gJ21hdHJpeCgnICsgbS5hICsgJywnICsgbS5iICsgJywnICsgbS5jICsgJywnICsgbS5kICsgJywnICsgbS5lICsgJywnICsgbS5mICsgJyknO1xuICBub2RlLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbXN0cik7XG59XG5cbkNhbnZhcy5wcm90b3R5cGUuX2ZpdFZpZXdwb3J0ID0gZnVuY3Rpb24oY2VudGVyKSB7XG5cbiAgdmFyIHZib3ggPSB0aGlzLnZpZXdib3goKSxcbiAgICAgIG91dGVyID0gdmJveC5vdXRlcixcbiAgICAgIGlubmVyID0gdmJveC5pbm5lcixcbiAgICAgIG5ld1NjYWxlLFxuICAgICAgbmV3Vmlld2JveDtcblxuICAvLyBkaXNwbGF5IHRoZSBjb21wbGV0ZSBkaWFncmFtIHdpdGhvdXQgem9vbWluZyBpbi5cbiAgLy8gaW5zdGVhZCBvZiByZWx5aW5nIG9uIGludGVybmFsIHpvb20sIHdlIHBlcmZvcm0gYVxuICAvLyBoYXJkIHJlc2V0IG9uIHRoZSBjYW52YXMgdmlld2JveCB0byByZWFsaXplIHRoaXNcbiAgLy9cbiAgLy8gaWYgZGlhZ3JhbSBkb2VzIG5vdCBuZWVkIHRvIGJlIHpvb21lZCBpbiwgd2UgZm9jdXMgaXQgYXJvdW5kXG4gIC8vIHRoZSBkaWFncmFtIG9yaWdpbiBpbnN0ZWFkXG5cbiAgaWYgKGlubmVyLnggPj0gMCAmJlxuICAgICAgaW5uZXIueSA+PSAwICYmXG4gICAgICBpbm5lci54ICsgaW5uZXIud2lkdGggPD0gb3V0ZXIud2lkdGggJiZcbiAgICAgIGlubmVyLnkgKyBpbm5lci5oZWlnaHQgPD0gb3V0ZXIuaGVpZ2h0ICYmXG4gICAgICAhY2VudGVyKSB7XG5cbiAgICBuZXdWaWV3Ym94ID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogTWF0aC5tYXgoaW5uZXIud2lkdGggKyBpbm5lci54LCBvdXRlci53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGgubWF4KGlubmVyLmhlaWdodCArIGlubmVyLnksIG91dGVyLmhlaWdodClcbiAgICB9O1xuICB9IGVsc2Uge1xuXG4gICAgbmV3U2NhbGUgPSBNYXRoLm1pbigxLCBvdXRlci53aWR0aCAvIGlubmVyLndpZHRoLCBvdXRlci5oZWlnaHQgLyBpbm5lci5oZWlnaHQpO1xuICAgIG5ld1ZpZXdib3ggPSB7XG4gICAgICB4OiBpbm5lci54ICsgKGNlbnRlciA/IGlubmVyLndpZHRoIC8gMiAtIG91dGVyLndpZHRoIC8gbmV3U2NhbGUgLyAyIDogMCksXG4gICAgICB5OiBpbm5lci55ICsgKGNlbnRlciA/IGlubmVyLmhlaWdodCAvIDIgLSBvdXRlci5oZWlnaHQgLyBuZXdTY2FsZSAvIDIgOiAwKSxcbiAgICAgIHdpZHRoOiBvdXRlci53aWR0aCAvIG5ld1NjYWxlLFxuICAgICAgaGVpZ2h0OiBvdXRlci5oZWlnaHQgLyBuZXdTY2FsZVxuICAgIH07XG4gIH1cblxuICB0aGlzLnZpZXdib3gobmV3Vmlld2JveCk7XG5cbiAgcmV0dXJuIHRoaXMudmlld2JveChmYWxzZSkuc2NhbGU7XG59O1xuXG5cbkNhbnZhcy5wcm90b3R5cGUuX3NldFpvb20gPSBmdW5jdGlvbihzY2FsZSwgY2VudGVyKSB7XG5cbiAgdmFyIHN2ZyA9IHRoaXMuX3N2ZyxcbiAgICAgIHZpZXdwb3J0ID0gdGhpcy5fdmlld3BvcnQ7XG5cbiAgdmFyIG1hdHJpeCA9IHN2Zy5jcmVhdGVTVkdNYXRyaXgoKTtcbiAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG5cbiAgdmFyIGNlbnRlclBvaW50LFxuICAgICAgb3JpZ2luYWxQb2ludCxcbiAgICAgIGN1cnJlbnRNYXRyaXgsXG4gICAgICBzY2FsZU1hdHJpeCxcbiAgICAgIG5ld01hdHJpeDtcblxuICBjdXJyZW50TWF0cml4ID0gdmlld3BvcnQuZ2V0Q1RNKCk7XG5cbiAgdmFyIGN1cnJlbnRTY2FsZSA9IGN1cnJlbnRNYXRyaXguYTtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgY2VudGVyUG9pbnQgPSBhc3NpZ24ocG9pbnQsIGNlbnRlcik7XG5cbiAgICAvLyByZXZlcnQgYXBwbGllZCB2aWV3cG9ydCB0cmFuc2Zvcm1hdGlvbnNcbiAgICBvcmlnaW5hbFBvaW50ID0gY2VudGVyUG9pbnQubWF0cml4VHJhbnNmb3JtKGN1cnJlbnRNYXRyaXguaW52ZXJzZSgpKTtcblxuICAgIC8vIGNyZWF0ZSBzY2FsZSBtYXRyaXhcbiAgICBzY2FsZU1hdHJpeCA9IG1hdHJpeFxuICAgICAgLnRyYW5zbGF0ZShvcmlnaW5hbFBvaW50LngsIG9yaWdpbmFsUG9pbnQueSlcbiAgICAgIC5zY2FsZSgxIC8gY3VycmVudFNjYWxlICogc2NhbGUpXG4gICAgICAudHJhbnNsYXRlKC1vcmlnaW5hbFBvaW50LngsIC1vcmlnaW5hbFBvaW50LnkpO1xuXG4gICAgbmV3TWF0cml4ID0gY3VycmVudE1hdHJpeC5tdWx0aXBseShzY2FsZU1hdHJpeCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3TWF0cml4ID0gbWF0cml4LnNjYWxlKHNjYWxlKTtcbiAgfVxuXG4gIHNldENUTSh0aGlzLl92aWV3cG9ydCwgbmV3TWF0cml4KTtcblxuICByZXR1cm4gbmV3TWF0cml4O1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNhbnZhc1xuICpcbiAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsXG4gICAgaGVpZ2h0OiB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0XG4gIH07XG59O1xuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBhYnNvbHV0ZSBib3VuZGluZyBib3ggZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogVGhlIGFic29sdXRlIGJvdW5kaW5nIGJveCBtYXkgYmUgdXNlZCB0byBkaXNwbGF5IG92ZXJsYXlzIGluIHRoZVxuICogY2FsbGVycyAoYnJvd3NlcikgY29vcmRpbmF0ZSBzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIHpvb21lZCBpbi9vdXRcbiAqIGNhbnZhcyBjb29yZGluYXRlcy5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50RGVzY3JpcHRvcn0gZWxlbWVudFxuICogQHJldHVybiB7Qm91bmRzfSB0aGUgYWJzb2x1dGUgYm91bmRpbmcgYm94XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0QWJzb2x1dGVCQm94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgdmJveCA9IHRoaXMudmlld2JveCgpO1xuICB2YXIgYmJveDtcblxuICAvLyBjb25uZWN0aW9uXG4gIC8vIHVzZSBzdmcgYmJveFxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICB2YXIgZ2Z4ID0gdGhpcy5nZXRHcmFwaGljcyhlbGVtZW50KTtcblxuICAgIGJib3ggPSBnZnguZ2V0QkJveCgpO1xuICB9XG5cbiAgLy8gc2hhcGVzXG4gIC8vIHVzZSBkYXRhXG4gIGVsc2Uge1xuICAgIGJib3ggPSBlbGVtZW50O1xuICB9XG5cbiAgdmFyIHggPSBiYm94LnggKiB2Ym94LnNjYWxlIC0gdmJveC54ICogdmJveC5zY2FsZTtcbiAgdmFyIHkgPSBiYm94LnkgKiB2Ym94LnNjYWxlIC0gdmJveC55ICogdmJveC5zY2FsZTtcblxuICB2YXIgd2lkdGggPSBiYm94LndpZHRoICogdmJveC5zY2FsZTtcbiAgdmFyIGhlaWdodCA9IGJib3guaGVpZ2h0ICogdmJveC5zY2FsZTtcblxuICByZXR1cm4ge1xuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5cbi8qKlxuICogRmlyZXMgYW4gZXZlbnQgaW4gb3JkZXIgb3RoZXIgbW9kdWxlcyBjYW4gcmVhY3QgdG8gdGhlXG4gKiBjYW52YXMgcmVzaXppbmdcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5yZXNpemVkID0gZnVuY3Rpb24oKSB7XG5cbiAgLy8gZm9yY2UgcmVjb21wdXRhdGlvbiBvZiB2aWV3IGJveFxuICBkZWxldGUgdGhpcy5fY2FjaGVkVmlld2JveDtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdjYW52YXMucmVzaXplZCcpO1xufTtcbiIsImltcG9ydCB7XG4gIGNyZWF0ZVxufSBmcm9tICcuLi9tb2RlbCc7XG5cbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBBIGZhY3RvcnkgZm9yIGRpYWdyYW0tanMgc2hhcGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVsZW1lbnRGYWN0b3J5KCkge1xuICB0aGlzLl91aWQgPSAxMjtcbn1cblxuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlUm9vdCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgncm9vdCcsIGF0dHJzKTtcbn07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVMYWJlbCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnbGFiZWwnLCBhdHRycyk7XG59O1xuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlU2hhcGUgPSBmdW5jdGlvbihhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ3NoYXBlJywgYXR0cnMpO1xufTtcblxuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2Nvbm5lY3Rpb24nLCBhdHRycyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIG1vZGVsIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdHlwZSBhbmRcbiAqIGEgbnVtYmVyIG9mIHByZS1zZXQgYXR0cmlidXRlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSAge09iamVjdH0gYXR0cnNcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfSB0aGUgbmV3bHkgY3JlYXRlZCBtb2RlbCBpbnN0YW5jZVxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcblxuICBhdHRycyA9IGFzc2lnbih7fSwgYXR0cnMgfHwge30pO1xuXG4gIGlmICghYXR0cnMuaWQpIHtcbiAgICBhdHRycy5pZCA9IHR5cGUgKyAnXycgKyAodGhpcy5fdWlkKyspO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZSh0eXBlLCBhdHRycyk7XG59OyIsInZhciBFTEVNRU5UX0lEID0gJ2RhdGEtZWxlbWVudC1pZCc7XG5cbmltcG9ydCB7IGF0dHIgYXMgc3ZnQXR0ciB9IGZyb20gJ3Rpbnktc3ZnJztcblxuXG4vKipcbiAqIEBjbGFzc1xuICpcbiAqIEEgcmVnaXN0cnkgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgc2hhcGVzIGluIHRoZSBkaWFncmFtLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbGVtZW50UmVnaXN0cnkoZXZlbnRCdXMpIHtcbiAgdGhpcy5fZWxlbWVudHMgPSB7fTtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xufVxuXG5FbGVtZW50UmVnaXN0cnkuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcGFpciBvZiAoZWxlbWVudCwgZ2Z4LCAoc2Vjb25kYXJ5R2Z4KSkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW3NlY29uZGFyeUdmeF0gb3B0aW9uYWwgb3RoZXIgZWxlbWVudCB0byByZWdpc3RlciwgdG9vXG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4LCBzZWNvbmRhcnlHZngpIHtcblxuICB2YXIgaWQgPSBlbGVtZW50LmlkO1xuXG4gIHRoaXMuX3ZhbGlkYXRlSWQoaWQpO1xuXG4gIC8vIGFzc29jaWF0ZSBkb20gbm9kZSB3aXRoIGVsZW1lbnRcbiAgc3ZnQXR0cihnZngsIEVMRU1FTlRfSUQsIGlkKTtcblxuICBpZiAoc2Vjb25kYXJ5R2Z4KSB7XG4gICAgc3ZnQXR0cihzZWNvbmRhcnlHZngsIEVMRU1FTlRfSUQsIGlkKTtcbiAgfVxuXG4gIHRoaXMuX2VsZW1lbnRzW2lkXSA9IHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZngsIHNlY29uZGFyeUdmeDogc2Vjb25kYXJ5R2Z4IH07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZWxlbWVudHMgPSB0aGlzLl9lbGVtZW50cyxcbiAgICAgIGlkID0gZWxlbWVudC5pZCB8fCBlbGVtZW50LFxuICAgICAgY29udGFpbmVyID0gaWQgJiYgZWxlbWVudHNbaWRdO1xuXG4gIGlmIChjb250YWluZXIpIHtcblxuICAgIC8vIHVuc2V0IGVsZW1lbnQgaWQgb24gZ2Z4XG4gICAgc3ZnQXR0cihjb250YWluZXIuZ2Z4LCBFTEVNRU5UX0lELCAnJyk7XG5cbiAgICBpZiAoY29udGFpbmVyLnNlY29uZGFyeUdmeCkge1xuICAgICAgc3ZnQXR0cihjb250YWluZXIuc2Vjb25kYXJ5R2Z4LCBFTEVNRU5UX0lELCAnJyk7XG4gICAgfVxuXG4gICAgZGVsZXRlIGVsZW1lbnRzW2lkXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGlkIG9mIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3SWRcbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS51cGRhdGVJZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0lkKSB7XG5cbiAgdGhpcy5fdmFsaWRhdGVJZChuZXdJZCk7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQgPSB0aGlzLmdldChlbGVtZW50KTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2VsZW1lbnQudXBkYXRlSWQnLCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBuZXdJZDogbmV3SWRcbiAgfSk7XG5cbiAgdmFyIGdmeCA9IHRoaXMuZ2V0R3JhcGhpY3MoZWxlbWVudCksXG4gICAgICBzZWNvbmRhcnlHZnggPSB0aGlzLmdldEdyYXBoaWNzKGVsZW1lbnQsIHRydWUpO1xuXG4gIHRoaXMucmVtb3ZlKGVsZW1lbnQpO1xuXG4gIGVsZW1lbnQuaWQgPSBuZXdJZDtcblxuICB0aGlzLmFkZChlbGVtZW50LCBnZngsIHNlY29uZGFyeUdmeCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbW9kZWwgZWxlbWVudCBmb3IgYSBnaXZlbiBpZCBvciBncmFwaGljcy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGVsZW1lbnRSZWdpc3RyeS5nZXQoJ1NvbWVFbGVtZW50SWRfMScpO1xuICogZWxlbWVudFJlZ2lzdHJ5LmdldChnZngpO1xuICpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xTVkdFbGVtZW50fSBmaWx0ZXIgZm9yIHNlbGVjdGluZyB0aGUgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfVxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGZpbHRlcikge1xuICB2YXIgaWQ7XG5cbiAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBmaWx0ZXI7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBmaWx0ZXIgJiYgc3ZnQXR0cihmaWx0ZXIsIEVMRU1FTlRfSUQpO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2VsZW1lbnRzW2lkXTtcbiAgcmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXIuZWxlbWVudDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIGEgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fVxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKGZuKSB7XG5cbiAgdmFyIGZpbHRlcmVkID0gW107XG5cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICAgIGlmIChmbihlbGVtZW50LCBnZngpKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYWxsIHJlbmRlcmVkIG1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGU7IH0pO1xufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIGRpYWdyYW0gZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oZm4pIHtcblxuICB2YXIgbWFwID0gdGhpcy5fZWxlbWVudHM7XG5cbiAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IG1hcFtpZF0sXG4gICAgICAgIGVsZW1lbnQgPSBjb250YWluZXIuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gY29udGFpbmVyLmdmeDtcblxuICAgIHJldHVybiBmbihlbGVtZW50LCBnZngpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gZWxlbWVudCBvciBpdHMgaWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcygnU29tZUVsZW1lbnRJZF8xJyk7XG4gKiBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3Mocm9vdEVsZW1lbnQpOyAvLyA8ZyAuLi4+XG4gKlxuICogZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKHJvb3RFbGVtZW50LCB0cnVlKTsgLy8gPHN2ZyAuLi4+XG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBmaWx0ZXJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlY29uZGFyeT1mYWxzZV0gd2hldGhlciB0byByZXR1cm4gdGhlIHNlY29uZGFyeSBjb25uZWN0ZWQgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZ2V0R3JhcGhpY3MgPSBmdW5jdGlvbihmaWx0ZXIsIHNlY29uZGFyeSkge1xuICB2YXIgaWQgPSBmaWx0ZXIuaWQgfHwgZmlsdGVyO1xuXG4gIHZhciBjb250YWluZXIgPSB0aGlzLl9lbGVtZW50c1tpZF07XG4gIHJldHVybiBjb250YWluZXIgJiYgKHNlY29uZGFyeSA/IGNvbnRhaW5lci5zZWNvbmRhcnlHZnggOiBjb250YWluZXIuZ2Z4KTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBnaXZlbiBpZCBhbmQgc2lnbmFscyBhIHByb2JsZW1cbiAqIHdpdGggYW4gZXhjZXB0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBpZCBpcyBlbXB0eSBvciBhbHJlYWR5IGFzc2lnbmVkXG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuX3ZhbGlkYXRlSWQgPSBmdW5jdGlvbihpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IG11c3QgaGF2ZSBhbiBpZCcpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2VsZW1lbnRzW2lkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCB3aXRoIGlkICcgKyBpZCArICcgYWxyZWFkeSBhZGRlZCcpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbixcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGJpbmQsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBGTl9SRUYgPSAnX19mbic7XG5cbnZhciBERUZBVUxUX1BSSU9SSVRZID0gMTAwMDtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGV2ZW50IGJ1cy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGFjcm9zcyBhIGRpYWdyYW0gaW5zdGFuY2UuXG4gKiBPdGhlciBwYXJ0cyBvZiBhIGRpYWdyYW0gY2FuIHVzZSBpdCB0byBsaXN0ZW4gdG8gYW5kIGJyb2FkY2FzdCBldmVudHMuXG4gKlxuICpcbiAqICMjIFJlZ2lzdGVyaW5nIGZvciBFdmVudHNcbiAqXG4gKiBUaGUgZXZlbnQgYnVzIHByb3ZpZGVzIHRoZSB7QGxpbmsgRXZlbnRCdXMjb259IGFuZCB7QGxpbmsgRXZlbnRCdXMjb25jZX1cbiAqIG1ldGhvZHMgdG8gcmVnaXN0ZXIgZm9yIGV2ZW50cy4ge0BsaW5rIEV2ZW50QnVzI29mZn0gY2FuIGJlIHVzZWQgdG9cbiAqIHJlbW92ZSBldmVudCByZWdpc3RyYXRpb25zLiBMaXN0ZW5lcnMgcmVjZWl2ZSBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgRXZlbnR9XG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIEl0IGFsbG93cyB0aGVtIHRvIGhvb2sgaW50byB0aGUgZXZlbnQgZXhlY3V0aW9uLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50XG4gKiBldmVudEJ1cy5vbignZm9vJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqXG4gKiAgIC8vIGFjY2VzcyBldmVudCB0eXBlXG4gKiAgIGV2ZW50LnR5cGU7IC8vICdmb28nXG4gKlxuICogICAvLyBzdG9wIHByb3BhZ2F0aW9uIHRvIG90aGVyIGxpc3RlbmVyc1xuICogICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAqXG4gKiAgIC8vIHByZXZlbnQgZXZlbnQgZGVmYXVsdFxuICogICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICogfSk7XG4gKlxuICogLy8gbGlzdGVuIGZvciBldmVudCB3aXRoIGN1c3RvbSBwYXlsb2FkXG4gKiBldmVudEJ1cy5vbignYmFyJywgZnVuY3Rpb24oZXZlbnQsIHBheWxvYWQpIHtcbiAqICAgY29uc29sZS5sb2cocGF5bG9hZCk7XG4gKiB9KTtcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50IHJldHVybmluZyB2YWx1ZVxuICogZXZlbnRCdXMub24oJ2Zvb2JhcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKlxuICogICAvLyBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uICsgcHJldmVudCBkZWZhdWx0XG4gKiAgIHJldHVybiBmYWxzZTtcbiAqXG4gKiAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gKyByZXR1cm4gY3VzdG9tIHJlc3VsdFxuICogICByZXR1cm4ge1xuICogICAgIGNvbXBsZXg6ICdsaXN0ZW5pbmcgcmVzdWx0J1xuICogICB9O1xuICogfSk7XG4gKlxuICpcbiAqIC8vIGxpc3RlbiB3aXRoIGN1c3RvbSBwcmlvcml0eSAoZGVmYXVsdD0xMDAwLCBoaWdoZXIgaXMgYmV0dGVyKVxuICogZXZlbnRCdXMub24oJ3ByaW9yaXR5Zm9vJywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgY29uc29sZS5sb2coJ2ludm9rZWQgZmlyc3QhJyk7XG4gKiB9KTtcbiAqXG4gKlxuICogLy8gbGlzdGVuIGZvciBldmVudCBhbmQgcGFzcyB0aGUgY29udGV4dCAoYHRoaXNgKVxuICogZXZlbnRCdXMub24oJ2Zvb2JhcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgIHRoaXMuZm9vKCk7XG4gKiB9LCB0aGlzKTtcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyBFbWl0dGluZyBFdmVudHNcbiAqXG4gKiBFdmVudHMgY2FuIGJlIGVtaXR0ZWQgdmlhIHRoZSBldmVudCBidXMgdXNpbmcge0BsaW5rIEV2ZW50QnVzI2ZpcmV9LlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBmYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb25cbiAqIC8vIHdhcyBwcmV2ZW50ZWQgYnkgbGlzdGVuZXJzXG4gKiBpZiAoZXZlbnRCdXMuZmlyZSgnZm9vJykgPT09IGZhbHNlKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdkZWZhdWx0IGhhcyBiZWVuIHByZXZlbnRlZCEnKTtcbiAqIH07XG4gKlxuICpcbiAqIC8vIGN1c3RvbSBhcmdzICsgcmV0dXJuIHZhbHVlIGxpc3RlbmVyXG4gKiBldmVudEJ1cy5vbignc3VtJywgZnVuY3Rpb24oZXZlbnQsIGEsIGIpIHtcbiAqICAgcmV0dXJuIGEgKyBiO1xuICogfSk7XG4gKlxuICogLy8geW91IGNhbiBwYXNzIGN1c3RvbSBhcmd1bWVudHMgKyByZXRyaWV2ZSByZXN1bHQgdmFsdWVzLlxuICogdmFyIHN1bSA9IGV2ZW50QnVzLmZpcmUoJ3N1bScsIDEsIDIpO1xuICogY29uc29sZS5sb2coc3VtKTsgLy8gM1xuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEV2ZW50QnVzKCkge1xuICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcblxuICAvLyBjbGVhbnVwIG9uIGRlc3Ryb3kgb24gbG93ZXN0IHByaW9yaXR5IHRvIGFsbG93XG4gIC8vIG1lc3NhZ2UgcGFzc2luZyB1bnRpbCB0aGUgYml0dGVyIGVuZFxuICB0aGlzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCAxLCB0aGlzLl9kZXN0cm95LCB0aGlzKTtcbn1cblxuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyIGZvciBldmVudHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAqXG4gKiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdpdGggYGV2ZW50LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzYFxuICogdGhhdCBoYXZlIGJlZW4gcGFzc2VkIHRvIHtAbGluayBFdmVudEJ1cyNmaXJlfS5cbiAqXG4gKiBSZXR1cm5pbmcgZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHdpbGwgcHJldmVudCB0aGUgZXZlbnRzIGRlZmF1bHQgYWN0aW9uXG4gKiAoaWYgYW55IGlzIHNwZWNpZmllZCkuIFRvIHN0b3AgYW4gZXZlbnQgZnJvbSBiZWluZyBwcm9jZXNzZWQgZnVydGhlciBpblxuICogb3RoZXIgbGlzdGVuZXJzIGV4ZWN1dGUge0BsaW5rIEV2ZW50I3N0b3BQcm9wYWdhdGlvbn0uXG4gKlxuICogUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCBgdW5kZWZpbmVkYCBmcm9tIGEgbGlzdGVuZXIgd2lsbCBzdG9wIHRoZSBsaXN0ZW5lciBwcm9wYWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBldmVudHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHk9MTAwMF0gdGhlIHByaW9yaXR5IGluIHdoaWNoIHRoaXMgbGlzdGVuZXIgaXMgY2FsbGVkLCBsYXJnZXIgaXMgaGlnaGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50cywgcHJpb3JpdHksIGNhbGxiYWNrLCB0aGF0KSB7XG5cbiAgZXZlbnRzID0gaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogWyBldmVudHMgXTtcblxuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0aGF0ID0gY2FsbGJhY2s7XG4gICAgY2FsbGJhY2sgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICBpZiAoIWlzTnVtYmVyKHByaW9yaXR5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJpb3JpdHkgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgdmFyIGFjdHVhbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgaWYgKHRoYXQpIHtcbiAgICBhY3R1YWxDYWxsYmFjayA9IGJpbmQoY2FsbGJhY2ssIHRoYXQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHJlbWVtYmVyIGFuZCBhcmUgYWJsZSB0byByZW1vdmVcbiAgICAvLyBib3VuZCBjYWxsYmFja3MgdmlhIHtAbGluayAjb2ZmfSB1c2luZyB0aGUgb3JpZ2luYWxcbiAgICAvLyBjYWxsYmFja1xuICAgIGFjdHVhbENhbGxiYWNrW0ZOX1JFRl0gPSBjYWxsYmFja1tGTl9SRUZdIHx8IGNhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLl9hZGRMaXN0ZW5lcihlLCB7XG4gICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICBjYWxsYmFjazogYWN0dWFsQ2FsbGJhY2ssXG4gICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaXMgZXhlY3V0ZWQgb25seSBvbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCB0aGUgZXZlbnQgbmFtZSB0byByZWdpc3RlciBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHk9MTAwMF0gdGhlIHByaW9yaXR5IGluIHdoaWNoIHRoaXMgbGlzdGVuZXIgaXMgY2FsbGVkLCBsYXJnZXIgaXMgaGlnaGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24oZXZlbnQsIHByaW9yaXR5LCBjYWxsYmFjaywgdGhhdCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKGlzRnVuY3Rpb24ocHJpb3JpdHkpKSB7XG4gICAgdGhhdCA9IGNhbGxiYWNrO1xuICAgIGNhbGxiYWNrID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgaWYgKCFpc051bWJlcihwcmlvcml0eSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByaW9yaXR5IG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2suYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcblxuICAgIHNlbGYub2ZmKGV2ZW50LCB3cmFwcGVkQ2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSByZW1lbWJlciBhbmQgYXJlIGFibGUgdG8gcmVtb3ZlXG4gIC8vIGJvdW5kIGNhbGxiYWNrcyB2aWEge0BsaW5rICNvZmZ9IHVzaW5nIHRoZSBvcmlnaW5hbFxuICAvLyBjYWxsYmFja1xuICB3cmFwcGVkQ2FsbGJhY2tbRk5fUkVGXSA9IGNhbGxiYWNrO1xuXG4gIHRoaXMub24oZXZlbnQsIHByaW9yaXR5LCB3cmFwcGVkQ2FsbGJhY2spO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzIGJ5IGV2ZW50IGFuZCBjYWxsYmFjay5cbiAqXG4gKiBJZiBubyBjYWxsYmFjayBpcyBnaXZlbiwgYWxsIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCBuYW1lIGFyZSBiZWluZyByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGV2ZW50c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXVxuICovXG5FdmVudEJ1cy5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24oZXZlbnRzLCBjYWxsYmFjaykge1xuXG4gIGV2ZW50cyA9IGlzQXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IFsgZXZlbnRzIF07XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi5fcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrKTtcbiAgfSk7XG5cbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgYW4gRXZlbnRCdXMgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50LCByZWNvZ25pemVkIGJ5IHRoZSBldmVudEJ1c1xuICovXG5FdmVudEJ1cy5wcm90b3R5cGUuY3JlYXRlRXZlbnQgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBldmVudCA9IG5ldyBJbnRlcm5hbEV2ZW50KCk7XG5cbiAgZXZlbnQuaW5pdChkYXRhKTtcblxuICByZXR1cm4gZXZlbnQ7XG59O1xuXG5cbi8qKlxuICogRmlyZXMgYSBuYW1lZCBldmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGZpcmUgZXZlbnQgYnkgbmFtZVxuICogZXZlbnRzLmZpcmUoJ2ZvbycpO1xuICpcbiAqIC8vIGZpcmUgZXZlbnQgb2JqZWN0IHdpdGggbmVzdGVkIHR5cGVcbiAqIHZhciBldmVudCA9IHsgdHlwZTogJ2ZvbycgfTtcbiAqIGV2ZW50cy5maXJlKGV2ZW50KTtcbiAqXG4gKiAvLyBmaXJlIGV2ZW50IHdpdGggZXhwbGljaXQgdHlwZVxuICogdmFyIGV2ZW50ID0geyB4OiAxMCwgeTogMjAgfTtcbiAqIGV2ZW50cy5maXJlKCdlbGVtZW50Lm1vdmVkJywgZXZlbnQpO1xuICpcbiAqIC8vIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGV2ZW50XG4gKiBldmVudHMub24oJ2ZvbycsIGZ1bmN0aW9uKGV2ZW50LCBiYXIpIHtcbiAqICAgYWxlcnQoYmFyKTtcbiAqIH0pO1xuICpcbiAqIGV2ZW50cy5maXJlKHsgdHlwZTogJ2ZvbycgfSwgJ0kgYW0gYmFyIScpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gdGhlIG9wdGlvbmFsIGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZXZlbnRdIHRoZSBldmVudCBvYmplY3RcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSBldmVudHMgcmV0dXJuIHZhbHVlLCBpZiBzcGVjaWZpZWQgb3IgZmFsc2UgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGFjdGlvbiB3YXMgcHJldmVudGVkIGJ5IGxpc3RlbmVyc1xuICovXG5FdmVudEJ1cy5wcm90b3R5cGUuZmlyZSA9IGZ1bmN0aW9uKHR5cGUsIGRhdGEpIHtcbiAgdmFyIGV2ZW50LFxuICAgICAgZmlyc3RMaXN0ZW5lcixcbiAgICAgIHJldHVyblZhbHVlLFxuICAgICAgYXJncztcblxuICBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBkYXRhID0gdHlwZTtcbiAgICB0eXBlID0gZGF0YS50eXBlO1xuICB9XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBldmVudCB0eXBlIHNwZWNpZmllZCcpO1xuICB9XG5cbiAgZmlyc3RMaXN0ZW5lciA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXTtcblxuICBpZiAoIWZpcnN0TGlzdGVuZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB3ZSBtYWtlIHN1cmUgd2UgZmlyZSBpbnN0YW5jZXMgb2Ygb3VyIGhvbWUgbWFkZVxuICAvLyBldmVudHMgaGVyZS4gV2Ugd3JhcCB0aGVtIG9ubHkgb25jZSwgdGhvdWdoXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgSW50ZXJuYWxFdmVudCkge1xuXG4gICAgLy8gd2UgYXJlIGZpbmUsIHdlIGFscmVhZCBoYXZlIGFuIGV2ZW50XG4gICAgZXZlbnQgPSBkYXRhO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChkYXRhKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBwYXNzIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyXG4gIGFyZ3NbMF0gPSBldmVudDtcblxuICAvLyBvcmlnaW5hbCBldmVudCB0eXBlIChpbiBjYXNlIHdlIGRlbGVnYXRlKVxuICB2YXIgb3JpZ2luYWxUeXBlID0gZXZlbnQudHlwZTtcblxuICAvLyB1cGRhdGUgZXZlbnQgdHlwZSBiZWZvcmUgZGVsZWdhdGlvblxuICBpZiAodHlwZSAhPT0gb3JpZ2luYWxUeXBlKSB7XG4gICAgZXZlbnQudHlwZSA9IHR5cGU7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVyblZhbHVlID0gdGhpcy5faW52b2tlTGlzdGVuZXJzKGV2ZW50LCBhcmdzLCBmaXJzdExpc3RlbmVyKTtcbiAgfSBmaW5hbGx5IHtcblxuICAgIC8vIHJlc2V0IGV2ZW50IHR5cGUgYWZ0ZXIgZGVsZWdhdGlvblxuICAgIGlmICh0eXBlICE9PSBvcmlnaW5hbFR5cGUpIHtcbiAgICAgIGV2ZW50LnR5cGUgPSBvcmlnaW5hbFR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHRoZSByZXR1cm4gdmFsdWUgdG8gZmFsc2UgaWYgdGhlIGV2ZW50IGRlZmF1bHRcbiAgLy8gZ290IHByZXZlbnRlZCBhbmQgbm8gb3RoZXIgcmV0dXJuIHZhbHVlIGV4aXN0c1xuICBpZiAocmV0dXJuVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cblxuRXZlbnRCdXMucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHtcbiAgcmV0dXJuIHRoaXMuZmlyZSgnZXJyb3InLCB7IGVycm9yOiBlcnJvciB9KSA9PT0gZmFsc2U7XG59O1xuXG5cbkV2ZW50QnVzLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbn07XG5cbkV2ZW50QnVzLnByb3RvdHlwZS5faW52b2tlTGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQsIGFyZ3MsIGxpc3RlbmVyKSB7XG5cbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHdoaWxlIChsaXN0ZW5lcikge1xuXG4gICAgLy8gaGFuZGxlIHN0b3BwZWQgcHJvcGFnYXRpb25cbiAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm5WYWx1ZSA9IHRoaXMuX2ludm9rZUxpc3RlbmVyKGV2ZW50LCBhcmdzLCBsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5FdmVudEJ1cy5wcm90b3R5cGUuX2ludm9rZUxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGFyZ3MsIGxpc3RlbmVyKSB7XG5cbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG5cbiAgICAvLyByZXR1cm5pbmcgZmFsc2UgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uXG4gICAgcmV0dXJuVmFsdWUgPSBpbnZva2VGdW5jdGlvbihsaXN0ZW5lci5jYWxsYmFjaywgYXJncyk7XG5cbiAgICAvLyBzdG9wIHByb3BhZ2F0aW9uIG9uIHJldHVybiB2YWx1ZVxuICAgIGlmIChyZXR1cm5WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBkZWZhdWx0IG9uIHJldHVybiBmYWxzZVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmhhbmRsZUVycm9yKGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWQgZXJyb3IgaW4gZXZlbnQgbGlzdGVuZXInKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLypcbiAqIEFkZCBuZXcgbGlzdGVuZXIgd2l0aCBhIGNlcnRhaW4gcHJpb3JpdHkgdG8gdGhlIGxpc3RcbiAqIG9mIGxpc3RlbmVycyAoZm9yIHRoZSBnaXZlbiBldmVudCkuXG4gKlxuICogVGhlIHNlbWFudGljcyBvZiBsaXN0ZW5lciByZWdpc3RyYXRpb24gLyBsaXN0ZW5lciBleGVjdXRpb24gYXJlXG4gKiBmaXJzdCByZWdpc3RlciwgZmlyc3Qgc2VydmU6IE5ldyBsaXN0ZW5lcnMgd2lsbCBhbHdheXMgYmUgaW5zZXJ0ZWRcbiAqIGFmdGVyIGV4aXN0aW5nIGxpc3RlbmVycyB3aXRoIHRoZSBzYW1lIHByaW9yaXR5LlxuICpcbiAqIEV4YW1wbGU6IEluc2VydGluZyB0d28gbGlzdGVuZXJzIHdpdGggcHJpb3JpdHkgMTAwMCBhbmQgMTMwMFxuICpcbiAqICAgICogYmVmb3JlOiBbIDE1MDAsIDE1MDAsIDEwMDAsIDEwMDAgXVxuICogICAgKiBhZnRlcjogWyAxNTAwLCAxNTAwLCAobmV3PTEzMDApLCAxMDAwLCAxMDAwLCAobmV3PTEwMDApIF1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBsaXN0ZW5lciB7IHByaW9yaXR5LCBjYWxsYmFjayB9XG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5fYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgbmV3TGlzdGVuZXIpIHtcblxuICB2YXIgbGlzdGVuZXIgPSB0aGlzLl9nZXRMaXN0ZW5lcnMoZXZlbnQpLFxuICAgICAgcHJldmlvdXNMaXN0ZW5lcjtcblxuICAvLyBubyBwcmlvciBsaXN0ZW5lcnNcbiAgaWYgKCFsaXN0ZW5lcikge1xuICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV3TGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIG9yZGVyIGxpc3RlbmVycyBieSBwcmlvcml0eSBmcm9tXG4gIC8vIDAgKGhpZ2gpIHRvIG4gPiAwIChsb3cpXG4gIHdoaWxlIChsaXN0ZW5lcikge1xuXG4gICAgaWYgKGxpc3RlbmVyLnByaW9yaXR5IDwgbmV3TGlzdGVuZXIucHJpb3JpdHkpIHtcblxuICAgICAgbmV3TGlzdGVuZXIubmV4dCA9IGxpc3RlbmVyO1xuXG4gICAgICBpZiAocHJldmlvdXNMaXN0ZW5lcikge1xuICAgICAgICBwcmV2aW91c0xpc3RlbmVyLm5leHQgPSBuZXdMaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV3TGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlvdXNMaXN0ZW5lciA9IGxpc3RlbmVyO1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgfVxuXG4gIC8vIGFkZCBuZXcgbGlzdGVuZXIgdG8gYmFja1xuICBwcmV2aW91c0xpc3RlbmVyLm5leHQgPSBuZXdMaXN0ZW5lcjtcbn07XG5cblxuRXZlbnRCdXMucHJvdG90eXBlLl9nZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLl9saXN0ZW5lcnNbbmFtZV07XG59O1xuXG5FdmVudEJ1cy5wcm90b3R5cGUuX3NldExpc3RlbmVycyA9IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7XG4gIHRoaXMuX2xpc3RlbmVyc1tuYW1lXSA9IGxpc3RlbmVyO1xufTtcblxuRXZlbnRCdXMucHJvdG90eXBlLl9yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjaykge1xuXG4gIHZhciBsaXN0ZW5lciA9IHRoaXMuX2dldExpc3RlbmVycyhldmVudCksXG4gICAgICBuZXh0TGlzdGVuZXIsXG4gICAgICBwcmV2aW91c0xpc3RlbmVyLFxuICAgICAgbGlzdGVuZXJDYWxsYmFjaztcblxuICBpZiAoIWNhbGxiYWNrKSB7XG5cbiAgICAvLyBjbGVhciBsaXN0ZW5lcnNcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoZXZlbnQsIG51bGwpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2hpbGUgKGxpc3RlbmVyKSB7XG5cbiAgICBuZXh0TGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuXG4gICAgbGlzdGVuZXJDYWxsYmFjayA9IGxpc3RlbmVyLmNhbGxiYWNrO1xuXG4gICAgaWYgKGxpc3RlbmVyQ2FsbGJhY2sgPT09IGNhbGxiYWNrIHx8IGxpc3RlbmVyQ2FsbGJhY2tbRk5fUkVGXSA9PT0gY2FsbGJhY2spIHtcbiAgICAgIGlmIChwcmV2aW91c0xpc3RlbmVyKSB7XG4gICAgICAgIHByZXZpb3VzTGlzdGVuZXIubmV4dCA9IG5leHRMaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gbmV3IGZpcnN0IGxpc3RlbmVyXG4gICAgICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV4dExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2aW91c0xpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgbGlzdGVuZXIgPSBuZXh0TGlzdGVuZXI7XG4gIH1cbn07XG5cbi8qKlxuICogQSBldmVudCB0aGF0IGlzIGVtaXR0ZWQgdmlhIHRoZSBldmVudCBidXMuXG4gKi9cbmZ1bmN0aW9uIEludGVybmFsRXZlbnQoKSB7IH1cblxuSW50ZXJuYWxFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbn07XG5cbkludGVybmFsRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG59O1xuXG5JbnRlcm5hbEV2ZW50LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oZGF0YSkge1xuICBhc3NpZ24odGhpcywgZGF0YSB8fCB7fSk7XG59O1xuXG5cbi8qKlxuICogSW52b2tlIGZ1bmN0aW9uLiBCZSBmYXN0Li4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gYXJnc1xuICpcbiAqIEByZXR1cm4ge0FueX1cbiAqL1xuZnVuY3Rpb24gaW52b2tlRnVuY3Rpb24oZm4sIGFyZ3MpIHtcbiAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgcmVkdWNlXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2hpbGRyZW4sXG4gIGdldFZpc3VhbFxufSBmcm9tICcuLi91dGlsL0dyYXBoaWNzVXRpbCc7XG5cbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7IGNsZWFyIGFzIGRvbUNsZWFyIH0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgaXNGcmFtZUVsZW1lbnRcbn0gZnJvbSAnLi4vdXRpbC9FbGVtZW50cyc7XG5cbi8qKlxuICogQSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBncmFwaGljYWwgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcmFwaGljc0ZhY3RvcnkoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cbkdyYXBoaWNzRmFjdG9yeS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnICwgJ2VsZW1lbnRSZWdpc3RyeScgXTtcblxuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLl9nZXRDaGlsZHJlbkNvbnRhaW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgZ2Z4ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuXG4gIHZhciBjaGlsZHJlbkdmeDtcblxuICAvLyByb290IGVsZW1lbnRcbiAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgIGNoaWxkcmVuR2Z4ID0gZ2Z4O1xuICB9IGVsc2Uge1xuICAgIGNoaWxkcmVuR2Z4ID0gZ2V0Q2hpbGRyZW4oZ2Z4KTtcbiAgICBpZiAoIWNoaWxkcmVuR2Z4KSB7XG4gICAgICBjaGlsZHJlbkdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQ2xhc3NlcyhjaGlsZHJlbkdmeCkuYWRkKCdkanMtY2hpbGRyZW4nKTtcblxuICAgICAgc3ZnQXBwZW5kKGdmeC5wYXJlbnROb2RlLCBjaGlsZHJlbkdmeCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuR2Z4O1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBhbmQgcmV0dXJucyB0aGVcbiAqIGNsZWFyZWQgdmlzdWFsICh0aGUgPGcgY2xhc3M9XCJkanMtdmlzdWFsXCIgLz4gZWxlbWVudCkuXG4gKi9cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuX2NsZWFyID0gZnVuY3Rpb24oZ2Z4KSB7XG4gIHZhciB2aXN1YWwgPSBnZXRWaXN1YWwoZ2Z4KTtcblxuICBkb21DbGVhcih2aXN1YWwpO1xuXG4gIHJldHVybiB2aXN1YWw7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBnZnggY29udGFpbmVyIGZvciBzaGFwZXMgYW5kIGNvbm5lY3Rpb25zXG4gKlxuICogVGhlIGxheW91dCBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIDxnIGNsYXNzPVwiZGpzLWdyb3VwXCI+XG4gKlxuICogICA8IS0tIHRoZSBnZnggLS0+XG4gKiAgIDxnIGNsYXNzPVwiZGpzLWVsZW1lbnQgZGpzLShzaGFwZXxjb25uZWN0aW9ufGZyYW1lKVwiPlxuICogICAgIDxnIGNsYXNzPVwiZGpzLXZpc3VhbFwiPlxuICogICAgICAgPCEtLSB0aGUgcmVuZGVyZXIgZHJhd3MgaW4gaGVyZSAtLT5cbiAqICAgICA8L2c+XG4gKlxuICogICAgIDwhLS0gZXh0ZW5zaW9ucyAob3ZlcmxheXMsIGNsaWNrIGJveCwgLi4uKSBnb2VzIGhlcmVcbiAqICAgPC9nPlxuICpcbiAqICAgPCEtLSB0aGUgZ2Z4IGNoaWxkIG5vZGVzIC0tPlxuICogICA8ZyBjbGFzcz1cImRqcy1jaGlsZHJlblwiPjwvZz5cbiAqIDwvZz5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudCwgaS5lLiBzaGFwZSB8IGNvbm5lY3Rpb25cbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2NoaWxkcmVuR2Z4XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF0gcG9zaXRpb24gdG8gY3JlYXRlIGNvbnRhaW5lciBpbiBwYXJlbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRnJhbWVdIGlzIGZyYW1lIGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICovXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLl9jcmVhdGVDb250YWluZXIgPSBmdW5jdGlvbihcbiAgICB0eXBlLCBjaGlsZHJlbkdmeCwgcGFyZW50SW5kZXgsIGlzRnJhbWVcbikge1xuICB2YXIgb3V0ZXJHZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3NlcyhvdXRlckdmeCkuYWRkKCdkanMtZ3JvdXAnKTtcblxuICAvLyBpbnNlcnQgbm9kZSBhdCBwb3NpdGlvblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHByZXBlbmRUbyhvdXRlckdmeCwgY2hpbGRyZW5HZngsIGNoaWxkcmVuR2Z4LmNoaWxkTm9kZXNbcGFyZW50SW5kZXhdKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdBcHBlbmQoY2hpbGRyZW5HZngsIG91dGVyR2Z4KTtcbiAgfVxuXG4gIHZhciBnZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3NlcyhnZngpLmFkZCgnZGpzLWVsZW1lbnQnKTtcbiAgc3ZnQ2xhc3NlcyhnZngpLmFkZCgnZGpzLScgKyB0eXBlKTtcblxuICBpZiAoaXNGcmFtZSkge1xuICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQoJ2Rqcy1mcmFtZScpO1xuICB9XG5cbiAgc3ZnQXBwZW5kKG91dGVyR2Z4LCBnZngpO1xuXG4gIC8vIGNyZWF0ZSB2aXN1YWxcbiAgdmFyIHZpc3VhbCA9IHN2Z0NyZWF0ZSgnZycpO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGdmeCwgdmlzdWFsKTtcblxuICByZXR1cm4gZ2Z4O1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwYXJlbnRJbmRleCkge1xuICB2YXIgY2hpbGRyZW5HZnggPSB0aGlzLl9nZXRDaGlsZHJlbkNvbnRhaW5lcihlbGVtZW50LnBhcmVudCk7XG4gIHJldHVybiB0aGlzLl9jcmVhdGVDb250YWluZXIodHlwZSwgY2hpbGRyZW5HZngsIHBhcmVudEluZGV4LCBpc0ZyYW1lRWxlbWVudChlbGVtZW50KSk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLnVwZGF0ZUNvbnRhaW5tZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgcGFyZW50cztcblxuICBwYXJlbnRzID0gcmVkdWNlKGVsZW1lbnRzLCBmdW5jdGlvbihtYXAsIGUpIHtcblxuICAgIGlmIChlLnBhcmVudCkge1xuICAgICAgbWFwW2UucGFyZW50LmlkXSA9IGUucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcblxuICAvLyB1cGRhdGUgYWxsIHBhcmVudHMgb2YgY2hhbmdlZCBhbmQgcmVvcmdhbml6ZWQgdGhlaXIgY2hpbGRyZW5cbiAgLy8gaW4gdGhlIGNvcnJlY3Qgb3JkZXIgKGFzIGluZGljYXRlZCBpbiBvdXIgbW9kZWwpXG4gIGZvckVhY2gocGFyZW50cywgZnVuY3Rpb24ocGFyZW50KSB7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuR2Z4ID0gc2VsZi5fZ2V0Q2hpbGRyZW5Db250YWluZXIocGFyZW50KTtcblxuICAgIGZvckVhY2goY2hpbGRyZW4uc2xpY2UoKS5yZXZlcnNlKCksIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGRHZnggPSBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoY2hpbGQpO1xuXG4gICAgICBwcmVwZW5kVG8oY2hpbGRHZngucGFyZW50Tm9kZSwgY2hpbGRyZW5HZngpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24odmlzdWFsLCBlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuc2hhcGUnLCB7IGdmeDogdmlzdWFsLCBlbGVtZW50OiBlbGVtZW50IH0pO1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuZ2V0U2hhcGVQYXRoJywgZWxlbWVudCk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmRyYXdDb25uZWN0aW9uID0gZnVuY3Rpb24odmlzdWFsLCBlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuY29ubmVjdGlvbicsIHsgZ2Z4OiB2aXN1YWwsIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmdldENvbm5lY3Rpb25QYXRoID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuZ2V0Q29ubmVjdGlvblBhdGgnLCB3YXlwb2ludHMpO1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBnZngpIHtcblxuICAvLyBkbyBOT1QgdXBkYXRlIHJvb3QgZWxlbWVudFxuICBpZiAoIWVsZW1lbnQucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZpc3VhbCA9IHRoaXMuX2NsZWFyKGdmeCk7XG5cbiAgLy8gcmVkcmF3XG4gIGlmICh0eXBlID09PSAnc2hhcGUnKSB7XG4gICAgdGhpcy5kcmF3U2hhcGUodmlzdWFsLCBlbGVtZW50KTtcblxuICAgIC8vIHVwZGF0ZSBwb3NpdGlvbmluZ1xuICAgIHRyYW5zbGF0ZShnZngsIGVsZW1lbnQueCwgZWxlbWVudC55KTtcbiAgfSBlbHNlXG4gIGlmICh0eXBlID09PSAnY29ubmVjdGlvbicpIHtcbiAgICB0aGlzLmRyYXdDb25uZWN0aW9uKHZpc3VhbCwgZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGU6ICcgKyB0eXBlKTtcbiAgfVxuXG4gIGlmIChlbGVtZW50LmhpZGRlbikge1xuICAgIHN2Z0F0dHIoZ2Z4LCAnZGlzcGxheScsICdub25lJyk7XG4gIH0gZWxzZSB7XG4gICAgc3ZnQXR0cihnZngsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gIH1cbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZ2Z4ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuXG4gIC8vIHJlbW92ZVxuICBzdmdSZW1vdmUoZ2Z4LnBhcmVudE5vZGUpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gcHJlcGVuZFRvKG5ld05vZGUsIHBhcmVudE5vZGUsIHNpYmxpbmdOb2RlKSB7XG4gIHZhciBub2RlID0gc2libGluZ05vZGUgfHwgcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gIC8vIGRvIG5vdCBwcmVwZW5kIG5vZGUgdG8gaXRzZWxmIHRvIHByZXZlbnQgSUUgZnJvbSBjcmFzaGluZ1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy83NDZcbiAgaWYgKG5ld05vZGUgPT09IG5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCBub2RlKTtcbn1cbiIsImltcG9ydCBEcmF3TW9kdWxlIGZyb20gJy4uL2RyYXcnO1xuXG5pbXBvcnQgQ2FudmFzIGZyb20gJy4vQ2FudmFzJztcbmltcG9ydCBFbGVtZW50UmVnaXN0cnkgZnJvbSAnLi9FbGVtZW50UmVnaXN0cnknO1xuaW1wb3J0IEVsZW1lbnRGYWN0b3J5IGZyb20gJy4vRWxlbWVudEZhY3RvcnknO1xuaW1wb3J0IEV2ZW50QnVzIGZyb20gJy4vRXZlbnRCdXMnO1xuaW1wb3J0IEdyYXBoaWNzRmFjdG9yeSBmcm9tICcuL0dyYXBoaWNzRmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgRHJhd01vZHVsZSBdLFxuICBfX2luaXRfXzogWyAnY2FudmFzJyBdLFxuICBjYW52YXM6IFsgJ3R5cGUnLCBDYW52YXMgXSxcbiAgZWxlbWVudFJlZ2lzdHJ5OiBbICd0eXBlJywgRWxlbWVudFJlZ2lzdHJ5IF0sXG4gIGVsZW1lbnRGYWN0b3J5OiBbICd0eXBlJywgRWxlbWVudEZhY3RvcnkgXSxcbiAgZXZlbnRCdXM6IFsgJ3R5cGUnLCBFdmVudEJ1cyBdLFxuICBncmFwaGljc0ZhY3Rvcnk6IFsgJ3R5cGUnLCBHcmFwaGljc0ZhY3RvcnkgXVxufTsiLCJ2YXIgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkgPSAxMDAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIHNoYXBlIGFuZCBjb25uZWN0aW9uIHJlbmRlcmVycy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtudW1iZXJ9IFtyZW5kZXJQcmlvcml0eT0xMDAwXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCYXNlUmVuZGVyZXIoZXZlbnRCdXMsIHJlbmRlclByaW9yaXR5KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5IHx8IERFRkFVTFRfUkVOREVSX1BSSU9SSVRZO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3JlbmRlci5zaGFwZScsICdyZW5kZXIuY29ubmVjdGlvbicgXSwgcmVuZGVyUHJpb3JpdHksIGZ1bmN0aW9uKGV2dCwgY29udGV4dCkge1xuICAgIHZhciB0eXBlID0gZXZ0LnR5cGUsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIHZpc3VhbHMgPSBjb250ZXh0LmdmeDtcblxuICAgIGlmIChzZWxmLmNhblJlbmRlcihlbGVtZW50KSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdyZW5kZXIuc2hhcGUnKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmRyYXdTaGFwZSh2aXN1YWxzLCBlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxmLmRyYXdDb25uZWN0aW9uKHZpc3VhbHMsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAncmVuZGVyLmdldFNoYXBlUGF0aCcsICdyZW5kZXIuZ2V0Q29ubmVjdGlvblBhdGgnXSwgcmVuZGVyUHJpb3JpdHksIGZ1bmN0aW9uKGV2dCwgZWxlbWVudCkge1xuICAgIGlmIChzZWxmLmNhblJlbmRlcihlbGVtZW50KSkge1xuICAgICAgaWYgKGV2dC50eXBlID09PSAncmVuZGVyLmdldFNoYXBlUGF0aCcpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0U2hhcGVQYXRoKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0Q29ubmVjdGlvblBhdGgoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBTaG91bGQgY2hlY2sgd2hldGhlciAqdGhpcyogcmVuZGVyZXIgY2FuIHJlbmRlclxuICogdGhlIGVsZW1lbnQvY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzaGFwZSdzIHNuYXAgc3ZnIGVsZW1lbnQgdG8gYmUgZHJhd24gb24gdGhlIGBjYW52YXNgLlxuICpcbiAqIEBwYXJhbSB7ZGpzLkdyYXBoaWNzfSB2aXN1YWxzXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm5zIHtTbmFwLnN2Z30gW3JldHVybnMgYSBTbmFwLnN2ZyBwYXBlciBlbGVtZW50IF1cbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzaGFwZSdzIHNuYXAgc3ZnIGVsZW1lbnQgdG8gYmUgZHJhd24gb24gdGhlIGBjYW52YXNgLlxuICpcbiAqIEBwYXJhbSB7ZGpzLkdyYXBoaWNzfSB2aXN1YWxzXG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJucyB7U25hcC5zdmd9IFtyZXR1cm5zIGEgU25hcC5zdmcgcGFwZXIgZWxlbWVudCBdXG4gKi9cbkJhc2VSZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEdldHMgdGhlIFNWRyBwYXRoIG9mIGEgc2hhcGUgdGhhdCByZXByZXNlbnRzIGl0J3MgdmlzdWFsIGJvdW5kcy5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gc3ZnIHBhdGhcbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEdldHMgdGhlIFNWRyBwYXRoIG9mIGEgY29ubmVjdGlvbiB0aGF0IHJlcHJlc2VudHMgaXQncyB2aXN1YWwgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gc3ZnIHBhdGhcbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5nZXRDb25uZWN0aW9uUGF0aCA9IGZ1bmN0aW9uKCkge307XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZVJlbmRlcmVyIGZyb20gJy4vQmFzZVJlbmRlcmVyJztcblxuaW1wb3J0IHtcbiAgY29tcG9uZW50c1RvUGF0aCxcbiAgY3JlYXRlTGluZVxufSBmcm9tICcuLi91dGlsL1JlbmRlclV0aWwnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBpc0ZyYW1lRWxlbWVudFxufSBmcm9tICcuLi91dGlsL0VsZW1lbnRzJztcblxuLy8gYXBwbHkgZGVmYXVsdCByZW5kZXJlciB3aXRoIGxvd2VzdCBwb3NzaWJsZSBwcmlvcml0eVxuLy8gc28gdGhhdCBpdCBvbmx5IGtpY2tzIGluIGlmIG5vb25lIGVsc2UgY291bGQgcmVuZGVyXG52YXIgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkgPSAxO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHJlbmRlcmVyIHVzZWQgZm9yIHNoYXBlcyBhbmQgY29ubmVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7U3R5bGVzfSBzdHlsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVmYXVsdFJlbmRlcmVyKGV2ZW50QnVzLCBzdHlsZXMpIHtcblxuICAvL1xuICBCYXNlUmVuZGVyZXIuY2FsbCh0aGlzLCBldmVudEJ1cywgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkpO1xuXG4gIHRoaXMuQ09OTkVDVElPTl9TVFlMRSA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJyBdLCB7IHN0cm9rZVdpZHRoOiA1LCBzdHJva2U6ICdmdWNoc2lhJyB9KTtcbiAgdGhpcy5TSEFQRV9TVFlMRSA9IHN0eWxlcy5zdHlsZSh7IGZpbGw6ICd3aGl0ZScsIHN0cm9rZTogJ2Z1Y2hzaWEnLCBzdHJva2VXaWR0aDogMiB9KTtcbiAgdGhpcy5GUkFNRV9TVFlMRSA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJyBdLCB7IHN0cm9rZTogJ2Z1Y2hzaWEnLCBzdHJva2VEYXNoYXJyYXk6IDQsIHN0cm9rZVdpZHRoOiAyIH0pO1xufVxuXG5pbmhlcml0cyhEZWZhdWx0UmVuZGVyZXIsIEJhc2VSZW5kZXJlcik7XG5cblxuRGVmYXVsdFJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIGRyYXdTaGFwZSh2aXN1YWxzLCBlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cihyZWN0LCB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoIHx8IDAsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCB8fCAwXG4gIH0pO1xuXG4gIGlmIChpc0ZyYW1lRWxlbWVudChlbGVtZW50KSkge1xuICAgIHN2Z0F0dHIocmVjdCwgdGhpcy5GUkFNRV9TVFlMRSk7XG4gIH0gZWxzZSB7XG4gICAgc3ZnQXR0cihyZWN0LCB0aGlzLlNIQVBFX1NUWUxFKTtcbiAgfVxuXG4gIHN2Z0FwcGVuZCh2aXN1YWxzLCByZWN0KTtcblxuICByZXR1cm4gcmVjdDtcbn07XG5cbkRlZmF1bHRSZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbiBkcmF3Q29ubmVjdGlvbih2aXN1YWxzLCBjb25uZWN0aW9uKSB7XG5cbiAgdmFyIGxpbmUgPSBjcmVhdGVMaW5lKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCB0aGlzLkNPTk5FQ1RJT05fU1RZTEUpO1xuICBzdmdBcHBlbmQodmlzdWFscywgbGluZSk7XG5cbiAgcmV0dXJuIGxpbmU7XG59O1xuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmdldFNoYXBlUGF0aCA9IGZ1bmN0aW9uIGdldFNoYXBlUGF0aChzaGFwZSkge1xuXG4gIHZhciB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcblxuICB2YXIgc2hhcGVQYXRoID0gW1xuICAgIFsnTScsIHgsIHldLFxuICAgIFsnbCcsIHdpZHRoLCAwXSxcbiAgICBbJ2wnLCAwLCBoZWlnaHRdLFxuICAgIFsnbCcsIC13aWR0aCwgMF0sXG4gICAgWyd6J11cbiAgXTtcblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChzaGFwZVBhdGgpO1xufTtcblxuRGVmYXVsdFJlbmRlcmVyLnByb3RvdHlwZS5nZXRDb25uZWN0aW9uUGF0aCA9IGZ1bmN0aW9uIGdldENvbm5lY3Rpb25QYXRoKGNvbm5lY3Rpb24pIHtcbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIHZhciBpZHgsIHBvaW50LCBjb25uZWN0aW9uUGF0aCA9IFtdO1xuXG4gIGZvciAoaWR4ID0gMDsgKHBvaW50ID0gd2F5cG9pbnRzW2lkeF0pOyBpZHgrKykge1xuXG4gICAgLy8gdGFrZSBpbnZpc2libGUgZG9ja2luZyBpbnRvIGFjY291bnRcbiAgICAvLyB3aGVuIGNyZWF0aW5nIHRoZSBwYXRoXG4gICAgcG9pbnQgPSBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcblxuICAgIGNvbm5lY3Rpb25QYXRoLnB1c2goWyBpZHggPT09IDAgPyAnTScgOiAnTCcsIHBvaW50LngsIHBvaW50LnkgXSk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChjb25uZWN0aW9uUGF0aCk7XG59O1xuXG5cbkRlZmF1bHRSZW5kZXJlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnc3R5bGVzJyBdO1xuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgYXNzaWduLFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYW5hZ2VzIHNoYXBlIHN0eWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHlsZXMoKSB7XG5cbiAgdmFyIGRlZmF1bHRUcmFpdHMgPSB7XG5cbiAgICAnbm8tZmlsbCc6IHtcbiAgICAgIGZpbGw6ICdub25lJ1xuICAgIH0sXG4gICAgJ25vLWJvcmRlcic6IHtcbiAgICAgIHN0cm9rZU9wYWNpdHk6IDAuMFxuICAgIH0sXG4gICAgJ25vLWV2ZW50cyc6IHtcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICAgIH1cbiAgfTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHN0eWxlIGRlZmluaXRpb24gZnJvbSBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIHRyYWl0cyBhbmQgYW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gdHJhaXRzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYWRkaXRpb25hbEF0dHJzXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gdGhlIHN0eWxlIGRlZmludGlvblxuICAgKi9cbiAgdGhpcy5jbHMgPSBmdW5jdGlvbihjbGFzc05hbWUsIHRyYWl0cywgYWRkaXRpb25hbEF0dHJzKSB7XG4gICAgdmFyIGF0dHJzID0gdGhpcy5zdHlsZSh0cmFpdHMsIGFkZGl0aW9uYWxBdHRycyk7XG5cbiAgICByZXR1cm4gYXNzaWduKGF0dHJzLCB7ICdjbGFzcyc6IGNsYXNzTmFtZSB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGRzIGEgc3R5bGUgZGVmaW5pdGlvbiBmcm9tIGEgbGlzdCBvZiB0cmFpdHMgYW5kIGFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IHRyYWl0c1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFkZGl0aW9uYWxBdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBzdHlsZSBkZWZpbnRpb25cbiAgICovXG4gIHRoaXMuc3R5bGUgPSBmdW5jdGlvbih0cmFpdHMsIGFkZGl0aW9uYWxBdHRycykge1xuXG4gICAgaWYgKCFpc0FycmF5KHRyYWl0cykgJiYgIWFkZGl0aW9uYWxBdHRycykge1xuICAgICAgYWRkaXRpb25hbEF0dHJzID0gdHJhaXRzO1xuICAgICAgdHJhaXRzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGF0dHJzID0gcmVkdWNlKHRyYWl0cywgZnVuY3Rpb24oYXR0cnMsIHQpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oYXR0cnMsIGRlZmF1bHRUcmFpdHNbdF0gfHwge30pO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBhZGRpdGlvbmFsQXR0cnMgPyBhc3NpZ24oYXR0cnMsIGFkZGl0aW9uYWxBdHRycykgOiBhdHRycztcbiAgfTtcblxuICB0aGlzLmNvbXB1dGVTdHlsZSA9IGZ1bmN0aW9uKGN1c3RvbSwgdHJhaXRzLCBkZWZhdWx0U3R5bGVzKSB7XG4gICAgaWYgKCFpc0FycmF5KHRyYWl0cykpIHtcbiAgICAgIGRlZmF1bHRTdHlsZXMgPSB0cmFpdHM7XG4gICAgICB0cmFpdHMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZi5zdHlsZSh0cmFpdHMgfHwgW10sIGFzc2lnbih7fSwgZGVmYXVsdFN0eWxlcywgY3VzdG9tIHx8IHt9KSk7XG4gIH07XG59XG4iLCJpbXBvcnQgRGVmYXVsdFJlbmRlcmVyIGZyb20gJy4vRGVmYXVsdFJlbmRlcmVyJztcbmltcG9ydCBTdHlsZXMgZnJvbSAnLi9TdHlsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdkZWZhdWx0UmVuZGVyZXInIF0sXG4gIGRlZmF1bHRSZW5kZXJlcjogWyAndHlwZScsIERlZmF1bHRSZW5kZXJlciBdLFxuICBzdHlsZXM6IFsgJ3R5cGUnLCBTdHlsZXMgXVxufTtcbiIsImltcG9ydCB7XG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuZnVuY3Rpb24gbGFzdChhcnIpIHtcbiAgcmV0dXJuIGFyciAmJiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuXG5mdW5jdGlvbiBzb3J0VG9wT3JNaWRkbGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC55O1xufVxuXG5mdW5jdGlvbiBzb3J0TGVmdE9yQ2VudGVyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQueDtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIGFsaWdubWVudFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbnZhciBBTElHTk1FTlRfU09SVElORyA9IHtcbiAgbGVmdDogc29ydExlZnRPckNlbnRlcixcbiAgY2VudGVyOiBzb3J0TGVmdE9yQ2VudGVyLFxuICByaWdodDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoO1xuICB9LFxuICB0b3A6IHNvcnRUb3BPck1pZGRsZSxcbiAgbWlkZGxlOiBzb3J0VG9wT3JNaWRkbGUsXG4gIGJvdHRvbTogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodDtcbiAgfVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBbGlnbkVsZW1lbnRzKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbkFsaWduRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbi8qKlxuICogR2V0IHRoZSByZWxldmFudCBcImF4aXNcIiBhbmQgXCJkaW1lbnNpb25cIiByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHR5cGUgb2YgYWxpZ25tZW50XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxlZnR8cmlnaHR8Y2VudGVyfHRvcHxib3R0b218bWlkZGxlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB7IGF4aXMsIGRpbWVuc2lvbiB9XG4gKi9cbkFsaWduRWxlbWVudHMucHJvdG90eXBlLl9nZXRPcmllbnRhdGlvbkRldGFpbHMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciB2ZXJ0aWNhbCA9IFsgJ3RvcCcsICdib3R0b20nLCAnbWlkZGxlJyBdLFxuICAgICAgYXhpcyA9ICd4JyxcbiAgICAgIGRpbWVuc2lvbiA9ICd3aWR0aCc7XG5cbiAgaWYgKHZlcnRpY2FsLmluZGV4T2YodHlwZSkgIT09IC0xKSB7XG4gICAgYXhpcyA9ICd5JztcbiAgICBkaW1lbnNpb24gPSAnaGVpZ2h0JztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXhpczogYXhpcyxcbiAgICBkaW1lbnNpb246IGRpbWVuc2lvblxuICB9O1xufTtcblxuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUuX2lzVHlwZSA9IGZ1bmN0aW9uKHR5cGUsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlcy5pbmRleE9mKHR5cGUpICE9PSAtMTtcbn07XG5cbi8qKlxuICogR2V0IGEgcG9pbnQgb24gdGhlIHJlbGV2YW50IGF4aXMgd2hlcmUgZWxlbWVudHMgc2hvdWxkIGFsaWduIHRvXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxlZnR8cmlnaHR8Y2VudGVyfHRvcHxib3R0b218bWlkZGxlXG4gKiBAcGFyYW0gIHtBcnJheX0gc29ydGVkRWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFsaWduRWxlbWVudHMucHJvdG90eXBlLl9hbGlnbm1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKHR5cGUsIHNvcnRlZEVsZW1lbnRzKSB7XG4gIHZhciBvcmllbnRhdGlvbiA9IHRoaXMuX2dldE9yaWVudGF0aW9uRGV0YWlscyh0eXBlKSxcbiAgICAgIGF4aXMgPSBvcmllbnRhdGlvbi5heGlzLFxuICAgICAgZGltZW5zaW9uID0gb3JpZW50YXRpb24uZGltZW5zaW9uLFxuICAgICAgYWxpZ25tZW50ID0ge30sXG4gICAgICBjZW50ZXJzID0ge30sXG4gICAgICBoYXNTaGFyZWRDZW50ZXJzID0gZmFsc2UsXG4gICAgICBjZW50ZXJlZEVsZW1lbnRzLFxuICAgICAgZmlyc3RFbGVtZW50LFxuICAgICAgbGFzdEVsZW1lbnQ7XG5cbiAgZnVuY3Rpb24gZ2V0TWlkZGxlT3JUb3AoZmlyc3QsIGxhc3QpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZmlyc3RbYXhpc10gKyBsYXN0W2F4aXNdICsgbGFzdFtkaW1lbnNpb25dKSAvIDIpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdsZWZ0JywgJ3RvcCcgXSkpIHtcbiAgICBhbGlnbm1lbnRbdHlwZV0gPSBzb3J0ZWRFbGVtZW50c1swXVtheGlzXTtcblxuICB9IGVsc2UgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdyaWdodCcsICdib3R0b20nIF0pKSB7XG4gICAgbGFzdEVsZW1lbnQgPSBsYXN0KHNvcnRlZEVsZW1lbnRzKTtcblxuICAgIGFsaWdubWVudFt0eXBlXSA9IGxhc3RFbGVtZW50W2F4aXNdICsgbGFzdEVsZW1lbnRbZGltZW5zaW9uXTtcblxuICB9IGVsc2UgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdjZW50ZXInLCAnbWlkZGxlJyBdKSkge1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjZW50ZXIgc2hhcmVkIGJ5IG1vcmUgdGhhbiBvbmUgc2hhcGVcbiAgICAvLyBpZiBub3QsIGp1c3QgdGFrZSB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZVxuICAgIGZvckVhY2goc29ydGVkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjZW50ZXIgPSBlbGVtZW50W2F4aXNdICsgTWF0aC5yb3VuZChlbGVtZW50W2RpbWVuc2lvbl0gLyAyKTtcblxuICAgICAgaWYgKGNlbnRlcnNbY2VudGVyXSkge1xuICAgICAgICBjZW50ZXJzW2NlbnRlcl0uZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRlcnNbY2VudGVyXSA9IHtcbiAgICAgICAgICBlbGVtZW50czogWyBlbGVtZW50IF0sXG4gICAgICAgICAgY2VudGVyOiBjZW50ZXJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNlbnRlcmVkRWxlbWVudHMgPSBzb3J0QnkoY2VudGVycywgZnVuY3Rpb24oY2VudGVyKSB7XG4gICAgICBpZiAoY2VudGVyLmVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaGFzU2hhcmVkQ2VudGVycyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjZW50ZXIuZWxlbWVudHMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKGhhc1NoYXJlZENlbnRlcnMpIHtcbiAgICAgIGFsaWdubWVudFt0eXBlXSA9IGxhc3QoY2VudGVyZWRFbGVtZW50cykuY2VudGVyO1xuXG4gICAgICByZXR1cm4gYWxpZ25tZW50O1xuICAgIH1cblxuICAgIGZpcnN0RWxlbWVudCA9IHNvcnRlZEVsZW1lbnRzWzBdO1xuXG4gICAgc29ydGVkRWxlbWVudHMgPSBzb3J0Qnkoc29ydGVkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50W2F4aXNdICsgZWxlbWVudFtkaW1lbnNpb25dO1xuICAgIH0pO1xuXG4gICAgbGFzdEVsZW1lbnQgPSBsYXN0KHNvcnRlZEVsZW1lbnRzKTtcblxuICAgIGFsaWdubWVudFt0eXBlXSA9IGdldE1pZGRsZU9yVG9wKGZpcnN0RWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGFsaWdubWVudDtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGFsaWdubWVudCBvZiBhIHNlbGVjdGlvbiBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5fSBlbGVtZW50cyBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGUgbGVmdHxyaWdodHxjZW50ZXJ8dG9wfGJvdHRvbXxtaWRkbGVcbiAqL1xuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0eXBlKSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudC53YXlwb2ludHMgfHwgZWxlbWVudC5ob3N0IHx8IGVsZW1lbnQubGFiZWxUYXJnZXQpO1xuICB9KTtcblxuICB2YXIgc29ydEZuID0gQUxJR05NRU5UX1NPUlRJTkdbdHlwZV07XG5cbiAgdmFyIHNvcnRlZEVsZW1lbnRzID0gc29ydEJ5KGZpbHRlcmVkRWxlbWVudHMsIHNvcnRGbik7XG5cbiAgdmFyIGFsaWdubWVudCA9IHRoaXMuX2FsaWdubWVudFBvc2l0aW9uKHR5cGUsIHNvcnRlZEVsZW1lbnRzKTtcblxuICBtb2RlbGluZy5hbGlnbkVsZW1lbnRzKHNvcnRlZEVsZW1lbnRzLCBhbGlnbm1lbnQpO1xufTtcbiIsImltcG9ydCBBbGlnbkVsZW1lbnRzIGZyb20gJy4vQWxpZ25FbGVtZW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2FsaWduRWxlbWVudHMnIF0sXG4gIGFsaWduRWxlbWVudHM6IFsgJ3R5cGUnLCBBbGlnbkVsZW1lbnRzIF1cbn07XG4iLCJpbXBvcnQge1xuICBmbGF0dGVuLFxuICBmaWx0ZXIsXG4gIGZvckVhY2gsXG4gIGdyb3VwQnksXG4gIG1hcCxcbiAgdW5pb25CeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cbmltcG9ydCB7IGdldE5ld0F0dGFjaFNoYXBlRGVsdGEgfSBmcm9tICcuLi8uLi91dGlsL0F0dGFjaFV0aWwnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MSxcbiAgICBISUdIX1BSSU9SSVRZID0gMTQwMTtcblxudmFyIE1BUktFUl9BVFRBQ0ggPSAnYXR0YWNoLW9rJztcblxuXG4vKipcbiAqIEFkZHMgdGhlIG5vdGlvbiBvZiBhdHRhY2hlZCBlbGVtZW50cyB0byB0aGUgbW9kZWxlci5cbiAqXG4gKiBPcHRpb25hbGx5IGRlcGVuZHMgb24gYGRpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmVgIHRvIHJlbmRlclxuICogdGhlIGF0dGFjaGVkIGVsZW1lbnRzIGR1cmluZyBtb3ZlIHByZXZpZXcuXG4gKlxuICogT3B0aW9uYWxseSBkZXBlbmRzIG9uIGBkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1zdXBwb3J0YFxuICogdG8gcmVuZGVyIGF0dGFjaGVkIGxhYmVscyBkdXJpbmcgbW92ZSBwcmV2aWV3LlxuICpcbiAqIEBwYXJhbSB7ZGlkaS5JbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXR0YWNoU3VwcG9ydChpbmplY3RvciwgZXZlbnRCdXMsIGNhbnZhcywgcnVsZXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBtb3ZlUHJldmlldyA9IGluamVjdG9yLmdldCgnbW92ZVByZXZpZXcnLCBmYWxzZSk7XG5cblxuICAvLyByZW1vdmUgYWxsIHRoZSBhdHRhY2hlZCBlbGVtZW50cyBmcm9tIHRoZSBzaGFwZXMgdG8gYmUgdmFsaWRhdGVkXG4gIC8vIGFkZCBhbGwgdGhlIGF0dGFjaGVkIHNoYXBlcyB0byB0aGUgb3ZlcmFsbCBsaXN0IG9mIG1vdmVkIHNoYXBlc1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgdmFsaWRhdGVkU2hhcGVzID0gY29udGV4dC52YWxpZGF0ZWRTaGFwZXM7XG5cbiAgICBjb250ZXh0LnNoYXBlcyA9IGFkZEF0dGFjaGVkKHNoYXBlcyk7XG5cbiAgICBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyA9IHJlbW92ZUF0dGFjaGVkKHZhbGlkYXRlZFNoYXBlcyk7XG4gIH0pO1xuXG4gIC8vIGFkZCBhdHRhY2hlcnMgdG8gdGhlIHZpc3VhbCdzIGdyb3VwXG4gIG1vdmVQcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGF0dGFjaGVycyA9IGdldEF0dGFjaGVycyhzaGFwZXMpO1xuXG4gICAgZm9yRWFjaChhdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICBtb3ZlUHJldmlldy5tYWtlRHJhZ2dhYmxlKGNvbnRleHQsIGF0dGFjaGVyLCB0cnVlKTtcblxuICAgICAgZm9yRWFjaChhdHRhY2hlci5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIG1vdmVQcmV2aWV3Lm1ha2VEcmFnZ2FibGUoY29udGV4dCwgbGFiZWwsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGFkZCBhdHRhY2gtb2sgbWFya2VyIHRvIGN1cnJlbnQgaG9zdFxuICBtb3ZlUHJldmlldyAmJiBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcblxuICAgIGlmIChzaGFwZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gc2hhcGVzWzBdO1xuXG4gICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgaWYgKGhvc3QpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoaG9zdCwgTUFSS0VSX0FUVEFDSCk7XG5cbiAgICAgIGV2ZW50QnVzLm9uY2UoW1xuICAgICAgICAnc2hhcGUubW92ZS5vdXQnLFxuICAgICAgICAnc2hhcGUubW92ZS5jbGVhbnVwJ1xuICAgICAgXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG9zdCwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFkZCBhbGwgYXR0YWNoZXJzIHRvIG1vdmUgY2xvc3VyZVxuICB0aGlzLnByZUV4ZWN1dGVkKCdlbGVtZW50cy5tb3ZlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgYXR0YWNoZXJzID0gZ2V0QXR0YWNoZXJzKHNoYXBlcyk7XG5cbiAgICBmb3JFYWNoKGF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIGNsb3N1cmUuYWRkKGF0dGFjaGVyLCBjbG9zdXJlLnRvcExldmVsW2F0dGFjaGVyLmhvc3QuaWRdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gcGVyZm9ybSB0aGUgYXR0YWNoaW5nIGFmdGVyIHNoYXBlcyBhcmUgZG9uZSBtb3ZpbmdcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIG5ld0hvc3QgPSBjb250ZXh0Lm5ld0hvc3QsXG4gICAgICAgIGF0dGFjaGVycztcblxuICAgIC8vIG9ubHkgc2luZ2xlIGVsZW1lbnRzIGNhbiBiZSBhdHRhY2hlZFxuICAgIC8vIG11bHRpcGx5IGVsZW1lbnRzIGNhbiBiZSBkZXRhY2hlZFxuICAgIGlmIChuZXdIb3N0ICYmIHNoYXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobmV3SG9zdCkge1xuICAgICAgYXR0YWNoZXJzID0gc2hhcGVzO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGZpbmQgYXR0YWNoZXJzIG1vdmVkIHdpdGhvdXQgaG9zdFxuICAgICAgYXR0YWNoZXJzID0gZmlsdGVyKHNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICAgIHJldHVybiBpc0F0dGFjaGVyKHNoYXBlKSAmJiAhaW5jbHVkZXMoc2hhcGVzLCBob3N0KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvckVhY2goYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgbW9kZWxpbmcudXBkYXRlQXR0YWNobWVudChhdHRhY2hlciwgbmV3SG9zdCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGVuc3VyZSBpbnZhbGlkIGF0dGFjaG1lbnQgY29ubmVjdGlvbnMgYXJlIHJlbW92ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgc2hhcGVzID0gZS5jb250ZXh0LnNoYXBlcztcblxuICAgIGZvckVhY2goc2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuXG4gICAgICBmb3JFYWNoKHNoYXBlLmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcblxuICAgICAgICAvLyByZW1vdmUgaW52YWxpZCBvdXRnb2luZyBjb25uZWN0aW9uc1xuICAgICAgICBmb3JFYWNoKGF0dGFjaGVyLm91dGdvaW5nLnNsaWNlKCksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0Jywge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IGNvbm5lY3Rpb24udGFyZ2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyByZW1vdmUgaW52YWxpZCBpbmNvbWluZyBjb25uZWN0aW9uc1xuICAgICAgICBmb3JFYWNoKGF0dGFjaGVyLmluY29taW5nLnNsaWNlKCksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0Jywge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IGNvbm5lY3Rpb24udGFyZ2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgaG9zdCA9IGNvbnRleHQuaG9zdDtcblxuICAgIGlmIChob3N0KSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KHNoYXBlLCBob3N0KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBhdHRhY2htZW50cyBpZiB0aGUgaG9zdCBpcyByZXBsYWNlZFxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlO1xuXG4gICAgLy8gbW92ZSB0aGUgYXR0YWNoZXJzIHRvIHRoZSBuZXcgaG9zdFxuICAgIHNhdmVDbGVhcihvbGRTaGFwZS5hdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLm1vdmUnLCB7XG4gICAgICAgIHRhcmdldDogbmV3U2hhcGUsXG4gICAgICAgIHNoYXBlczogW2F0dGFjaGVyXVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhbGxvd2VkID09PSAnYXR0YWNoJykge1xuICAgICAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KGF0dGFjaGVyLCBuZXdTaGFwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb2RlbGluZy5yZW1vdmVTaGFwZShhdHRhY2hlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBtb3ZlIGF0dGFjaGVycyBpZiBuZXcgaG9zdCBoYXMgZGlmZmVyZW50IHNpemVcbiAgICBpZiAobmV3U2hhcGUuYXR0YWNoZXJzLmxlbmd0aCkge1xuXG4gICAgICBmb3JFYWNoKG5ld1NoYXBlLmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgICAgdmFyIGRlbHRhID0gZ2V0TmV3QXR0YWNoU2hhcGVEZWx0YShhdHRhY2hlciwgb2xkU2hhcGUsIG5ld1NoYXBlKTtcbiAgICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGF0dGFjaGVyLCBkZWx0YSwgYXR0YWNoZXIucGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9KTtcblxuICAvLyBtb3ZlIHNoYXBlIG9uIGhvc3QgcmVzaXplXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG9sZEJvdW5kcyA9IGNvbnRleHQub2xkQm91bmRzLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgICAgYXR0YWNoZXJzID0gc2hhcGUuYXR0YWNoZXJzLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuYXR0YWNoU3VwcG9ydCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIHZhciBkZWx0YSA9IGdldE5ld0F0dGFjaFNoYXBlRGVsdGEoYXR0YWNoZXIsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGF0dGFjaGVyLCBkZWx0YSwgYXR0YWNoZXIucGFyZW50KTtcblxuICAgICAgZm9yRWFjaChhdHRhY2hlci5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIG1vZGVsaW5nLm1vdmVTaGFwZShsYWJlbCwgZGVsdGEsIGxhYmVsLnBhcmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGF0dGFjaG1lbnRzXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBzaGFwZSA9IGV2ZW50LmNvbnRleHQuc2hhcGU7XG5cbiAgICBzYXZlQ2xlYXIoc2hhcGUuYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUoYXR0YWNoZXIpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNoYXBlLmhvc3QpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQoc2hhcGUsIG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmluaGVyaXRzKEF0dGFjaFN1cHBvcnQsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkF0dGFjaFN1cHBvcnQuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdydWxlcycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLyoqXG4gKiBSZXR1cm4gYXR0YWNoZXJzIG9mIHRoZSBnaXZlbiBzaGFwZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gc2hhcGVzXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59XG4gKi9cbmZ1bmN0aW9uIGdldEF0dGFjaGVycyhzaGFwZXMpIHtcbiAgcmV0dXJuIGZsYXR0ZW4obWFwKHNoYXBlcywgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiBzLmF0dGFjaGVycyB8fCBbXTtcbiAgfSkpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvbWJpbmVkIGxpc3Qgb2YgZWxlbWVudHMgYW5kXG4gKiBhdHRhY2hlcnMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZpbHRlcmVkXG4gKi9cbmZ1bmN0aW9uIGFkZEF0dGFjaGVkKGVsZW1lbnRzKSB7XG4gIHZhciBhdHRhY2hlcnMgPSBnZXRBdHRhY2hlcnMoZWxlbWVudHMpO1xuXG4gIHJldHVybiB1bmlvbkJ5KCdpZCcsIGVsZW1lbnRzLCBhdHRhY2hlcnMpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGZpbHRlcmVkIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBkbyBub3RcbiAqIGNvbnRhaW4gYXR0YWNoZWQgZWxlbWVudHMgd2l0aCBob3N0cyBiZWluZyBwYXJ0XG4gKiBvZiB0aGUgc2VsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZpbHRlcmVkXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF0dGFjaGVkKGVsZW1lbnRzKSB7XG5cbiAgdmFyIGlkcyA9IGdyb3VwQnkoZWxlbWVudHMsICdpZCcpO1xuXG4gIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB3aGlsZSAoZWxlbWVudCkge1xuXG4gICAgICAvLyBob3N0IGluIHNlbGVjdGlvblxuICAgICAgaWYgKGVsZW1lbnQuaG9zdCAmJiBpZHNbZWxlbWVudC5ob3N0LmlkXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQXR0YWNoZXIoc2hhcGUpIHtcbiAgcmV0dXJuICEhc2hhcGUuaG9zdDtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufSIsImltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBBdHRhY2hTdXBwb3J0IGZyb20gJy4vQXR0YWNoU3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBSdWxlc01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYXR0YWNoU3VwcG9ydCcgXSxcbiAgYXR0YWNoU3VwcG9ydDogWyAndHlwZScsIEF0dGFjaFN1cHBvcnQgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzVFJCTCxcbiAgZ2V0TWlkXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHsgREVGQVVMVF9ESVNUQU5DRSB9IGZyb20gJy4vQXV0b1BsYWNlVXRpbCc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAxMDA7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBwbGFjZXMgZWxlbWVudHMgY29ubmVjdGVkIHRvIGV4aXN0aW5nIG9uZXNcbiAqIHRvIGFuIGFwcHJvcHJpYXRlIHBvc2l0aW9uIGluIGFuIF9hdXRvbWF0ZWRfIGZhc2hpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZShldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2U7XG5cbiAgICByZXR1cm4gZ2V0TmV3U2hhcGVQb3NpdGlvbihzb3VyY2UsIHNoYXBlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBzaGFwZSB0byBzb3VyY2UgYXQgYXBwcm9wcmlhdGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzb3VyY2VcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqXG4gICAqIEByZXR1cm4ge2Rqcy5tb2RlbC5TaGFwZX0gYXBwZW5kZWQgc2hhcGVcbiAgICovXG4gIHRoaXMuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBzaGFwZSwgaGludHMpIHtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2F1dG9QbGFjZS5zdGFydCcsIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG5cbiAgICAvLyBhbGxvdyBvdGhlcnMgdG8gcHJvdmlkZSB0aGUgcG9zaXRpb25cbiAgICB2YXIgcG9zaXRpb24gPSBldmVudEJ1cy5maXJlKCdhdXRvUGxhY2UnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0pO1xuXG4gICAgdmFyIG5ld1NoYXBlID0gbW9kZWxpbmcuYXBwZW5kU2hhcGUoc291cmNlLCBzaGFwZSwgcG9zaXRpb24sIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2F1dG9QbGFjZS5lbmQnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHNoYXBlOiBuZXdTaGFwZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1NoYXBlO1xuICB9O1xuXG59XG5cbkF1dG9QbGFjZS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBGaW5kIHRoZSBuZXcgcG9zaXRpb24gZm9yIHRoZSB0YXJnZXQgZWxlbWVudCB0b1xuICogY29ubmVjdCB0byBzb3VyY2UuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudFxuICogQHBhcmFtICB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtoaW50cy5kZWZhdWx0RGlzdGFuY2VdXG4gKlxuICogQHJldHVybnMge1BvaW50fVxuICovXG5mdW5jdGlvbiBnZXROZXdTaGFwZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB2YXIgZGlzdGFuY2UgPSBoaW50cy5kZWZhdWx0RGlzdGFuY2UgfHwgREVGQVVMVF9ESVNUQU5DRTtcblxuICB2YXIgc291cmNlTWlkID0gZ2V0TWlkKHNvdXJjZSksXG4gICAgICBzb3VyY2VUcmJsID0gYXNUUkJMKHNvdXJjZSk7XG5cbiAgLy8gc2ltcGx5IHB1dCBlbGVtZW50IHJpZ2h0IG5leHQgdG8gc291cmNlXG4gIHJldHVybiB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCArIGRpc3RhbmNlICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlTWlkLnlcbiAgfTtcbn0iLCIvKipcbiAqIFNlbGVjdCBlbGVtZW50IGFmdGVyIGF1dG8gcGxhY2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBzZWxlY3Rpb24pIHtcblxuICBldmVudEJ1cy5vbignYXV0b1BsYWNlLmVuZCcsIDUwMCwgZnVuY3Rpb24oZSkge1xuICAgIHNlbGVjdGlvbi5zZWxlY3QoZS5zaGFwZSk7XG4gIH0pO1xuXG59XG5cbkF1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdzZWxlY3Rpb24nXG5dOyIsImltcG9ydCB7XG4gIGFzVFJCTCxcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZFxufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbi8vIHBhZGRpbmcgdG8gZGV0ZWN0IGVsZW1lbnQgcGxhY2VtZW50XG52YXIgUExBQ0VNRU5UX0RFVEVDVElPTl9QQUQgPSAxMDtcblxuZXhwb3J0IHZhciBERUZBVUxUX0RJU1RBTkNFID0gNTA7XG5cbnZhciBERUZBVUxUX01BWF9ESVNUQU5DRSA9IDI1MDtcblxuXG4vKipcbiAqIEdldCBmcmVlIHBvc2l0aW9uIHN0YXJ0aW5nIGZyb20gZ2l2ZW4gcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IGVsZW1lbnRcbiAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXROZXh0UG9zaXRpb25cbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2V0TmV4dFBvc2l0aW9uKSB7XG4gIHZhciBjb25uZWN0ZWRBdFBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY29ubmVjdGVkQXRQb3NpdGlvbiA9IGdldENvbm5lY3RlZEF0UG9zaXRpb24oc291cmNlLCBwb3NpdGlvbiwgZWxlbWVudCkpKSB7XG4gICAgcG9zaXRpb24gPSBnZXROZXh0UG9zaXRpb24oZWxlbWVudCwgcG9zaXRpb24sIGNvbm5lY3RlZEF0UG9zaXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybnMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG5leHQgcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5leHRQb3NpdGlvbkRpcmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtuZXh0UG9zaXRpb25EaXJlY3Rpb24ueF1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbbmV4dFBvc2l0aW9uRGlyZWN0aW9uLnldXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBwcmV2aW91c1Bvc2l0aW9uLCBjb25uZWN0ZWRBdFBvc2l0aW9uKSB7XG4gICAgdmFyIG5leHRQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHByZXZpb3VzUG9zaXRpb24ueCxcbiAgICAgIHk6IHByZXZpb3VzUG9zaXRpb24ueVxuICAgIH07XG5cbiAgICBbICd4JywgJ3knIF0uZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XG5cbiAgICAgIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb25Gb3JBeGlzID0gbmV4dFBvc2l0aW9uRGlyZWN0aW9uWyBheGlzIF07XG5cbiAgICAgIGlmICghbmV4dFBvc2l0aW9uRGlyZWN0aW9uRm9yQXhpcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSBheGlzID09PSAneCcgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICAgIHZhciBtYXJnaW4gPSBuZXh0UG9zaXRpb25EaXJlY3Rpb25Gb3JBeGlzLm1hcmdpbixcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IG5leHRQb3NpdGlvbkRpcmVjdGlvbkZvckF4aXMubWluRGlzdGFuY2U7XG5cbiAgICAgIGlmIChtYXJnaW4gPCAwKSB7XG4gICAgICAgIG5leHRQb3NpdGlvblsgYXhpcyBdID0gTWF0aC5taW4oXG4gICAgICAgICAgY29ubmVjdGVkQXRQb3NpdGlvblsgYXhpcyBdICsgbWFyZ2luIC0gZWxlbWVudFsgZGltZW5zaW9uIF0gLyAyLFxuICAgICAgICAgIHByZXZpb3VzUG9zaXRpb25bIGF4aXMgXSAtIG1pbkRpc3RhbmNlICsgbWFyZ2luXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0UG9zaXRpb25bIGF4aXMgXSA9IE1hdGgubWF4KFxuICAgICAgICAgIGNvbm5lY3RlZEF0UG9zaXRpb25bIGF4aXMgXSArIGNvbm5lY3RlZEF0UG9zaXRpb25bIGRpbWVuc2lvbiBdICsgbWFyZ2luICsgZWxlbWVudFsgZGltZW5zaW9uIF0gLyAyLFxuICAgICAgICAgIHByZXZpb3VzUG9zaXRpb25bIGF4aXMgXSArIG1pbkRpc3RhbmNlICsgbWFyZ2luXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV4dFBvc2l0aW9uO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB0YXJnZXQgYXQgZ2l2ZW4gcG9zaXRpb24sIGlmIGRlZmluZWQuXG4gKlxuICogVGhpcyB0YWtlcyBjb25uZWN0ZWQgZWxlbWVudHMgZnJvbSBob3N0IGFuZCBhdHRhY2hlcnNcbiAqIGludG8gYWNjb3VudCwgdG9vLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkQXRQb3NpdGlvbihzb3VyY2UsIHBvc2l0aW9uLCBlbGVtZW50KSB7XG5cbiAgdmFyIGJvdW5kcyA9IHtcbiAgICB4OiBwb3NpdGlvbi54IC0gKGVsZW1lbnQud2lkdGggLyAyKSxcbiAgICB5OiBwb3NpdGlvbi55IC0gKGVsZW1lbnQuaGVpZ2h0IC8gMiksXG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9O1xuXG4gIHZhciBjbG9zdXJlID0gZ2V0QXV0b1BsYWNlQ2xvc3VyZShzb3VyY2UsIGVsZW1lbnQpO1xuXG4gIHJldHVybiBmaW5kKGNsb3N1cmUsIGZ1bmN0aW9uKHRhcmdldCkge1xuXG4gICAgaWYgKHRhcmdldCA9PT0gZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHRhcmdldCwgYm91bmRzLCBQTEFDRU1FTlRfREVURUNUSU9OX1BBRCk7XG5cbiAgICByZXR1cm4gb3JpZW50YXRpb24gPT09ICdpbnRlcnNlY3QnO1xuICB9KTtcbn1cblxuLyoqXG4qIENvbXB1dGUgb3B0aW1hbCBkaXN0YW5jZSBiZXR3ZWVuIHNvdXJjZSBhbmQgdGFyZ2V0IGJhc2VkIG9uIGV4aXN0aW5nIGNvbm5lY3Rpb25zIHRvIGFuZCBmcm9tIHNvdXJjZS5cbiogQXNzdW1lcyBsZWZ0LXRvLXJpZ2h0IGFuZCB0b3AtdG8tZG93biBtb2RlbGluZy5cbipcbiogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuKiBAcGFyYW0ge251bWJlcn0gW2hpbnRzLmRlZmF1bHREaXN0YW5jZV1cbiogQHBhcmFtIHtzdHJpbmd9IFtoaW50cy5kaXJlY3Rpb25dXG4qIEBwYXJhbSB7RnVuY3Rpb259IFtoaW50cy5maWx0ZXJdXG4qIEBwYXJhbSB7RnVuY3Rpb259IFtoaW50cy5nZXRXZWlnaHRdXG4qIEBwYXJhbSB7bnVtYmVyfSBbaGludHMubWF4RGlzdGFuY2VdXG4qIEBwYXJhbSB7c3RyaW5nfSBbaGludHMucmVmZXJlbmNlXVxuKlxuKiBAcmV0dXJuIHtudW1iZXJ9XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3RlZERpc3RhbmNlKHNvdXJjZSwgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICAvLyB0YXJnZXRzID4gc291cmNlcyBieSBkZWZhdWx0XG4gIGZ1bmN0aW9uIGdldERlZmF1bHRXZWlnaHQoY29ubmVjdGlvbikge1xuICAgIHJldHVybiBjb25uZWN0aW9uLnNvdXJjZSA9PT0gc291cmNlID8gMSA6IC0xO1xuICB9XG5cbiAgdmFyIGRlZmF1bHREaXN0YW5jZSA9IGhpbnRzLmRlZmF1bHREaXN0YW5jZSB8fCBERUZBVUxUX0RJU1RBTkNFLFxuICAgICAgZGlyZWN0aW9uID0gaGludHMuZGlyZWN0aW9uIHx8ICdlJyxcbiAgICAgIGZpbHRlciA9IGhpbnRzLmZpbHRlcixcbiAgICAgIGdldFdlaWdodCA9IGhpbnRzLmdldFdlaWdodCB8fCBnZXREZWZhdWx0V2VpZ2h0LFxuICAgICAgbWF4RGlzdGFuY2UgPSBoaW50cy5tYXhEaXN0YW5jZSB8fCBERUZBVUxUX01BWF9ESVNUQU5DRSxcbiAgICAgIHJlZmVyZW5jZSA9IGhpbnRzLnJlZmVyZW5jZSB8fCAnc3RhcnQnO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgZmlsdGVyID0gbm9uZUZpbHRlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgIGlmIChyZWZlcmVuY2UgPT09ICdzdGFydCcpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChhKS50b3AgLSBhc1RSQkwoYikuYm90dG9tO1xuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYSkudG9wIC0gZ2V0TWlkKGIpLnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLnRvcCAtIGFzVFJCTChiKS50b3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgICAgaWYgKHJlZmVyZW5jZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLmxlZnQgLSBhc1RSQkwoYikucmlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChhKS5sZWZ0IC0gZ2V0TWlkKGIpLng7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLmxlZnQgLSBhc1RSQkwoYikubGVmdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3MnKSB7XG4gICAgICBpZiAocmVmZXJlbmNlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYikudG9wIC0gYXNUUkJMKGEpLmJvdHRvbTtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gZ2V0TWlkKGIpLnkgLSBhc1RSQkwoYSkuYm90dG9tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChiKS5ib3R0b20gLSBhc1RSQkwoYSkuYm90dG9tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVmZXJlbmNlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYikubGVmdCAtIGFzVFJCTChhKS5yaWdodDtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gZ2V0TWlkKGIpLnggLSBhc1RSQkwoYSkucmlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGIpLnJpZ2h0IC0gYXNUUkJMKGEpLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VzRGlzdGFuY2VzID0gc291cmNlLmluY29taW5nXG4gICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgLm1hcChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgd2VpZ2h0ID0gZ2V0V2VpZ2h0KGNvbm5lY3Rpb24pO1xuXG4gICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHQgPCAwXG4gICAgICAgID8gZ2V0RGlzdGFuY2UoY29ubmVjdGlvbi5zb3VyY2UsIHNvdXJjZSlcbiAgICAgICAgOiBnZXREaXN0YW5jZShzb3VyY2UsIGNvbm5lY3Rpb24uc291cmNlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbm5lY3Rpb24uc291cmNlLmlkLFxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gIHZhciB0YXJnZXRzRGlzdGFuY2VzID0gc291cmNlLm91dGdvaW5nXG4gICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgLm1hcChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgd2VpZ2h0ID0gZ2V0V2VpZ2h0KGNvbm5lY3Rpb24pO1xuXG4gICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHQgPiAwXG4gICAgICAgID8gZ2V0RGlzdGFuY2Uoc291cmNlLCBjb25uZWN0aW9uLnRhcmdldClcbiAgICAgICAgOiBnZXREaXN0YW5jZShjb25uZWN0aW9uLnRhcmdldCwgc291cmNlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbm5lY3Rpb24udGFyZ2V0LmlkLFxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gIHZhciBkaXN0YW5jZXMgPSBzb3VyY2VzRGlzdGFuY2VzLmNvbmNhdCh0YXJnZXRzRGlzdGFuY2VzKS5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yWyBjdXJyZW50VmFsdWUuaWQgKyAnX193ZWlnaHRfJyArIGN1cnJlbnRWYWx1ZS53ZWlnaHQgXSA9IGN1cnJlbnRWYWx1ZTtcblxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwge30pO1xuXG4gIHZhciBkaXN0YW5jZXNHcm91cGVkID0gcmVkdWNlKGRpc3RhbmNlcywgZnVuY3Rpb24oYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkge1xuICAgIHZhciBkaXN0YW5jZSA9IGN1cnJlbnRWYWx1ZS5kaXN0YW5jZSxcbiAgICAgICAgd2VpZ2h0ID0gY3VycmVudFZhbHVlLndlaWdodDtcblxuICAgIGlmIChkaXN0YW5jZSA8IDAgfHwgZGlzdGFuY2UgPiBtYXhEaXN0YW5jZSkge1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIGlmICghYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSkge1xuICAgICAgYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSA9IDA7XG4gICAgfVxuXG4gICAgYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSArPSAxICogd2VpZ2h0O1xuXG4gICAgaWYgKCFhY2N1bXVsYXRvci5kaXN0YW5jZSB8fCBhY2N1bXVsYXRvclsgYWNjdW11bGF0b3IuZGlzdGFuY2UgXSA8IGFjY3VtdWxhdG9yWyBTdHJpbmcoZGlzdGFuY2UpIF0pIHtcbiAgICAgIGFjY3VtdWxhdG9yLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIGRpc3RhbmNlc0dyb3VwZWQuZGlzdGFuY2UgfHwgZGVmYXVsdERpc3RhbmNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbm5lY3RlZCBlbGVtZW50cyBhcm91bmQgdGhlIGdpdmVuIHNvdXJjZS5cbiAqXG4gKiBUaGlzIGluY2x1ZGVzOlxuICpcbiAqICAgLSBjb25uZWN0ZWQgZWxlbWVudHNcbiAqICAgLSBob3N0IGNvbm5lY3RlZCBlbGVtZW50c1xuICogICAtIGF0dGFjaGVycyBjb25uZWN0ZWQgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59XG4gKi9cbmZ1bmN0aW9uIGdldEF1dG9QbGFjZUNsb3N1cmUoc291cmNlKSB7XG5cbiAgdmFyIGFsbENvbm5lY3RlZCA9IGdldENvbm5lY3RlZChzb3VyY2UpO1xuXG4gIGlmIChzb3VyY2UuaG9zdCkge1xuICAgIGFsbENvbm5lY3RlZCA9IGFsbENvbm5lY3RlZC5jb25jYXQoZ2V0Q29ubmVjdGVkKHNvdXJjZS5ob3N0KSk7XG4gIH1cblxuICBpZiAoc291cmNlLmF0dGFjaGVycykge1xuICAgIGFsbENvbm5lY3RlZCA9IGFsbENvbm5lY3RlZC5jb25jYXQoc291cmNlLmF0dGFjaGVycy5yZWR1Y2UoZnVuY3Rpb24oc2hhcGVzLCBhdHRhY2hlcikge1xuICAgICAgcmV0dXJuIHNoYXBlcy5jb25jYXQoZ2V0Q29ubmVjdGVkKGF0dGFjaGVyKSk7XG4gICAgfSwgW10pKTtcbiAgfVxuXG4gIHJldHVybiBhbGxDb25uZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3RlZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRUYXJnZXRzKGVsZW1lbnQpLmNvbmNhdChnZXRTb3VyY2VzKGVsZW1lbnQpKTtcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlcyhzaGFwZSkge1xuICByZXR1cm4gc2hhcGUuaW5jb21pbmcubWFwKGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gY29ubmVjdGlvbi5zb3VyY2U7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRzKHNoYXBlKSB7XG4gIHJldHVybiBzaGFwZS5vdXRnb2luZy5tYXAoZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHJldHVybiBjb25uZWN0aW9uLnRhcmdldDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vbmVGaWx0ZXIoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IEF1dG9QbGFjZSBmcm9tICcuL0F1dG9QbGFjZSc7XG5pbXBvcnQgQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9BdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2F1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yJyBdLFxuICBhdXRvUGxhY2U6IFsgJ3R5cGUnLCBBdXRvUGxhY2UgXSxcbiAgYXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBBdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvciBdXG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGdldEJCb3ggYXMgZ2V0Qm91bmRpbmdCb3ggfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBhc0JvdW5kc1xufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmxhdHRlbixcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgZ3JvdXBCeSxcbiAgaXNBcnJheSxcbiAgbWF0Y2hQYXR0ZXJuLFxuICBwaWNrLFxuICB2YWx1ZXNcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG4vKipcbiAqIEFuIGF1dG8gcmVzaXplIGNvbXBvbmVudCB0aGF0IHRha2VzIGNhcmUgb2YgZXhwYW5kaW5nIGEgcGFyZW50IGVsZW1lbnRcbiAqIGlmIGNoaWxkIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG9yIG1vdmVkIGNsb3NlIHRoZSBwYXJlbnRzIGVkZ2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvUmVzaXplKGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIG1vZGVsaW5nLCBydWxlcykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLmNyZWF0ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCB8fCBjb250ZXh0Lm5ld1BhcmVudDtcblxuICAgIGlmIChoaW50cy5hdXRvUmVzaXplID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX2V4cGFuZChbIHNoYXBlIF0sIHBhcmVudCk7XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ2VsZW1lbnRzLm1vdmUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGZsYXR0ZW4odmFsdWVzKGNvbnRleHQuY2xvc3VyZS50b3BMZXZlbCkpLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHM7XG5cbiAgICB2YXIgYXV0b1Jlc2l6ZSA9IGhpbnRzID8gaGludHMuYXV0b1Jlc2l6ZSA6IHRydWU7XG5cbiAgICBpZiAoYXV0b1Jlc2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kaW5ncyA9IGdyb3VwQnkoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5pZDtcbiAgICB9KTtcblxuICAgIGZvckVhY2goZXhwYW5kaW5ncywgZnVuY3Rpb24oZWxlbWVudHMsIHBhcmVudElkKSB7XG5cbiAgICAgIC8vIG9wdGlvbmFsbHkgZmlsdGVyIGVsZW1lbnRzIHRvIGJlIGNvbnNpZGVyZWQgd2hlbiByZXNpemluZ1xuICAgICAgaWYgKGlzQXJyYXkoYXV0b1Jlc2l6ZSkpIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBmaW5kKGF1dG9SZXNpemUsIG1hdGNoUGF0dGVybih7IGlkOiBlbGVtZW50LmlkIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX2V4cGFuZChlbGVtZW50cywgcGFyZW50SWQpO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS50b2dnbGVDb2xsYXBzZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGhpbnRzICYmIGhpbnRzLmF1dG9SZXNpemUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlLmNvbGxhcHNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX2V4cGFuZChzaGFwZS5jaGlsZHJlbiB8fCBbXSwgc2hhcGUpO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS5yZXNpemUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xuXG4gICAgaWYgKGhpbnRzICYmIGhpbnRzLmF1dG9SZXNpemUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgc2VsZi5fZXhwYW5kKFsgc2hhcGUgXSwgcGFyZW50KTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkF1dG9SZXNpemUuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdtb2RlbGluZycsXG4gICdydWxlcydcbl07XG5cbmluaGVyaXRzKEF1dG9SZXNpemUsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5ldyBib3VuZHMgb2YgdGhlIHRhcmdldCBzaGFwZSwgZ2l2ZW5cbiAqIGEgbnVtYmVyIG9mIGVsZW1lbnRzIGhhdmUgYmVlbiBtb3ZlZCBvciBhZGRlZCBpbnRvIHRoZSBwYXJlbnQuXG4gKlxuICogVGhpcyBtZXRob2QgY29uc2lkZXJzIHRoZSBjdXJyZW50IHNpemUsIHRoZSBhZGRlZCBlbGVtZW50cyBhcyB3ZWxsIGFzXG4gKiB0aGUgcHJvdmlkZWQgcGFkZGluZyBmb3IgdGhlIG5ldyBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHRhcmdldFxuICovXG5BdXRvUmVzaXplLnByb3RvdHlwZS5fZ2V0T3B0aW1hbEJvdW5kcyA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcblxuICB2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXQodGFyZ2V0KSxcbiAgICAgIHBhZGRpbmcgPSB0aGlzLmdldFBhZGRpbmcodGFyZ2V0KTtcblxuICB2YXIgZWxlbWVudHNUcmJsID0gYXNUUkJMKGdldEJvdW5kaW5nQm94KGVsZW1lbnRzKSksXG4gICAgICB0YXJnZXRUcmJsID0gYXNUUkJMKHRhcmdldCk7XG5cbiAgdmFyIG5ld1RyYmwgPSB7fTtcblxuICBpZiAoZWxlbWVudHNUcmJsLnRvcCAtIHRhcmdldFRyYmwudG9wIDwgcGFkZGluZy50b3ApIHtcbiAgICBuZXdUcmJsLnRvcCA9IGVsZW1lbnRzVHJibC50b3AgLSBvZmZzZXQudG9wO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRzVHJibC5sZWZ0IC0gdGFyZ2V0VHJibC5sZWZ0IDwgcGFkZGluZy5sZWZ0KSB7XG4gICAgbmV3VHJibC5sZWZ0ID0gZWxlbWVudHNUcmJsLmxlZnQgLSBvZmZzZXQubGVmdDtcbiAgfVxuXG4gIGlmICh0YXJnZXRUcmJsLnJpZ2h0IC0gZWxlbWVudHNUcmJsLnJpZ2h0IDwgcGFkZGluZy5yaWdodCkge1xuICAgIG5ld1RyYmwucmlnaHQgPSBlbGVtZW50c1RyYmwucmlnaHQgKyBvZmZzZXQucmlnaHQ7XG4gIH1cblxuICBpZiAodGFyZ2V0VHJibC5ib3R0b20gLSBlbGVtZW50c1RyYmwuYm90dG9tIDwgcGFkZGluZy5ib3R0b20pIHtcbiAgICBuZXdUcmJsLmJvdHRvbSA9IGVsZW1lbnRzVHJibC5ib3R0b20gKyBvZmZzZXQuYm90dG9tO1xuICB9XG5cbiAgcmV0dXJuIGFzQm91bmRzKGFzc2lnbih7fSwgdGFyZ2V0VHJibCwgbmV3VHJibCkpO1xufTtcblxuXG4vKipcbiAqIEV4cGFuZCB0aGUgdGFyZ2V0IHNoYXBlIHJlc3BlY3RpbmcgcnVsZXMsIG9mZnNldCBhbmQgcGFkZGluZ1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfHN0cmluZ30gdGFyZ2V0fHRhcmdldElkXG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbihlbGVtZW50cywgdGFyZ2V0KSB7XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgdGFyZ2V0ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldCh0YXJnZXQpO1xuICB9XG5cbiAgdmFyIGFsbG93ZWQgPSB0aGlzLl9ydWxlcy5hbGxvd2VkKCdlbGVtZW50LmF1dG9SZXNpemUnLCB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgIHRhcmdldDogdGFyZ2V0XG4gIH0pO1xuXG4gIGlmICghYWxsb3dlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgbmV3IGJvdW5kc1xuICB2YXIgbmV3Qm91bmRzID0gdGhpcy5fZ2V0T3B0aW1hbEJvdW5kcyhlbGVtZW50cywgdGFyZ2V0KTtcblxuICBpZiAoIWJvdW5kc0NoYW5nZWQobmV3Qm91bmRzLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHJlc2l6ZURpcmVjdGlvbnMgPSBnZXRSZXNpemVEaXJlY3Rpb25zKHBpY2sodGFyZ2V0LCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdKSwgbmV3Qm91bmRzKTtcblxuICAvLyByZXNpemUgdGhlIHBhcmVudCBzaGFwZVxuICB0aGlzLnJlc2l6ZSh0YXJnZXQsIG5ld0JvdW5kcywge1xuICAgIGF1dG9SZXNpemU6IHJlc2l6ZURpcmVjdGlvbnNcbiAgfSk7XG5cbiAgdmFyIHBhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG5cbiAgLy8gcmVjdXJzaXZlbHkgZXhwYW5kIHBhcmVudCBlbGVtZW50c1xuICBpZiAocGFyZW50KSB7XG4gICAgdGhpcy5fZXhwYW5kKFsgdGFyZ2V0IF0sIHBhcmVudCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBHZXQgdGhlIGFtb3VudCB0byBleHBhbmQgdGhlIGdpdmVuIHNoYXBlIGluIGVhY2ggZGlyZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge1RSQkx9XG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLmdldE9mZnNldCA9IGZ1bmN0aW9uKHNoYXBlKSB7XG4gIHJldHVybiB7IHRvcDogNjAsIGJvdHRvbTogNjAsIGxlZnQ6IDEwMCwgcmlnaHQ6IDEwMCB9O1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgYWN0aXZhdGlvbiB0aHJlc2hvbGQgZm9yIGVhY2ggc2lkZSBmb3Igd2hpY2hcbiAqIHJlc2l6ZSB0cmlnZ2Vycy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtUUkJMfVxuICovXG5BdXRvUmVzaXplLnByb3RvdHlwZS5nZXRQYWRkaW5nID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHsgdG9wOiAyLCBib3R0b206IDIsIGxlZnQ6IDE1LCByaWdodDogMTUgfTtcbn07XG5cblxuLyoqXG4gKiBQZXJmb3JtIHRoZSBhY3R1YWwgcmVzaXplIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge3N0cmluZ30gW2hpbnRzLmF1dG9SZXNpemVdXG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMsIGhpbnRzKSB7XG4gIHRoaXMuX21vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbn07XG5cblxuZnVuY3Rpb24gYm91bmRzQ2hhbmdlZChuZXdCb3VuZHMsIG9sZEJvdW5kcykge1xuICByZXR1cm4gKFxuICAgIG5ld0JvdW5kcy54ICE9PSBvbGRCb3VuZHMueCB8fFxuICAgIG5ld0JvdW5kcy55ICE9PSBvbGRCb3VuZHMueSB8fFxuICAgIG5ld0JvdW5kcy53aWR0aCAhPT0gb2xkQm91bmRzLndpZHRoIHx8XG4gICAgbmV3Qm91bmRzLmhlaWdodCAhPT0gb2xkQm91bmRzLmhlaWdodFxuICApO1xufVxuXG4vKipcbiAqIEdldCBkaXJlY3Rpb25zIG9mIHJlc2l6ZSBhcyB7bnx3fHN8ZX0gZS5nLiBcIm53XCIuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJlc2l6ZSBkaXJlY3Rpb25zIGFzIHtufHd8c3xlfS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVzaXplRGlyZWN0aW9ucyhvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICB2YXIgZGlyZWN0aW9ucyA9ICcnO1xuXG4gIG9sZEJvdW5kcyA9IGFzVFJCTChvbGRCb3VuZHMpO1xuICBuZXdCb3VuZHMgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICBpZiAob2xkQm91bmRzLnRvcCA+IG5ld0JvdW5kcy50b3ApIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ24nKTtcbiAgfVxuXG4gIGlmIChvbGRCb3VuZHMucmlnaHQgPCBuZXdCb3VuZHMucmlnaHQpIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ3cnKTtcbiAgfVxuXG4gIGlmIChvbGRCb3VuZHMuYm90dG9tIDwgbmV3Qm91bmRzLmJvdHRvbSkge1xuICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLmNvbmNhdCgncycpO1xuICB9XG5cbiAgaWYgKG9sZEJvdW5kcy5sZWZ0ID4gbmV3Qm91bmRzLmxlZnQpIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ2UnKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3Rpb25zO1xufSIsImltcG9ydCBSdWxlUHJvdmlkZXIgZnJvbSAnLi4vcnVsZXMvUnVsZVByb3ZpZGVyJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuLyoqXG4gKiBUaGlzIGlzIGEgYmFzZSBydWxlIHByb3ZpZGVyIGZvciB0aGUgZWxlbWVudC5hdXRvUmVzaXplIHJ1bGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9SZXNpemVQcm92aWRlcihldmVudEJ1cykge1xuXG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50LmF1dG9SZXNpemUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIHNlbGYuY2FuUmVzaXplKGNvbnRleHQuZWxlbWVudHMsIGNvbnRleHQudGFyZ2V0KTtcbiAgfSk7XG59XG5cbkF1dG9SZXNpemVQcm92aWRlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmluaGVyaXRzKEF1dG9SZXNpemVQcm92aWRlciwgUnVsZVByb3ZpZGVyKTtcblxuLyoqXG4gKiBOZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWIgY2xhc3NlcyB0byBhbGxvdyBhY3R1YWwgYXV0byByZXNpemVcbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5BdXRvUmVzaXplUHJvdmlkZXIucHJvdG90eXBlLmNhblJlc2l6ZSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTsiLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cblxuLyoqXG4gKiBJbml0aWF0ZXMgY2FudmFzIHNjcm9sbGluZyBpZiBjdXJyZW50IGN1cnNvciBwb2ludCBpcyBjbG9zZSB0byBhIGJvcmRlci5cbiAqIENhbmNlbGxlZCB3aGVuIGN1cnJlbnQgcG9pbnQgbW92ZXMgYmFjayBpbnNpZGUgdGhlIHNjcm9sbGluZyBib3JkZXJzXG4gKiBvciBjYW5jZWxsZWQgbWFudWFsbHkuXG4gKlxuICogRGVmYXVsdCBvcHRpb25zIDpcbiAqICAgc2Nyb2xsVGhyZXNob2xkSW46IFsgMjAsIDIwLCAyMCwgMjAgXSxcbiAqICAgc2Nyb2xsVGhyZXNob2xkT3V0OiBbIDAsIDAsIDAsIDAgXSxcbiAqICAgc2Nyb2xsUmVwZWF0VGltZW91dDogMTUsXG4gKiAgIHNjcm9sbFN0ZXA6IDEwXG4gKlxuICogVGhyZXNob2xkIG9yZGVyOlxuICogICBbIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSBdXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9TY3JvbGwoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHRoaXMuX29wdHMgPSBhc3NpZ24oe1xuICAgIHNjcm9sbFRocmVzaG9sZEluOiBbIDIwLCAyMCwgMjAsIDIwIF0sXG4gICAgc2Nyb2xsVGhyZXNob2xkT3V0OiBbIDAsIDAsIDAsIDAgXSxcbiAgICBzY3JvbGxSZXBlYXRUaW1lb3V0OiAxNSxcbiAgICBzY3JvbGxTdGVwOiAxMFxuICB9LCBjb25maWcpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignZHJhZy5tb3ZlJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBwb2ludCA9IHNlbGYuX3RvQm9yZGVyUG9pbnQoZSk7XG5cbiAgICBzZWxmLnN0YXJ0U2Nyb2xsKHBvaW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZHJhZy5jbGVhbnVwJyBdLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnN0b3BTY3JvbGwoKTtcbiAgfSk7XG59XG5cbkF1dG9TY3JvbGwuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5hdXRvU2Nyb2xsJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07XG5cblxuLyoqXG4gKiBTdGFydHMgc2Nyb2xsaW5nIGxvb3AuXG4gKiBQb2ludCBpcyBnaXZlbiBpbiBnbG9iYWwgc2NhbGUgaW4gY2FudmFzIGNvbnRhaW5lciBib3ggcGxhbmUuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBwb2ludCB7IHg6IFgsIHk6IFkgfVxuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zdGFydFNjcm9sbCA9IGZ1bmN0aW9uKHBvaW50KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcbiAgdmFyIG9wdHMgPSB0aGlzLl9vcHRzO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBjYW52YXMuZ2V0Q29udGFpbmVyKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgdmFyIGRpZmYgPSBbXG4gICAgcG9pbnQueCxcbiAgICBwb2ludC55LFxuICAgIGNsaWVudFJlY3Qud2lkdGggLSBwb2ludC54LFxuICAgIGNsaWVudFJlY3QuaGVpZ2h0IC0gcG9pbnQueVxuICBdO1xuXG4gIHRoaXMuc3RvcFNjcm9sbCgpO1xuXG4gIHZhciBkeCA9IDAsXG4gICAgICBkeSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBpZiAoYmV0d2VlbihkaWZmW2ldLCBvcHRzLnNjcm9sbFRocmVzaG9sZE91dFtpXSwgb3B0cy5zY3JvbGxUaHJlc2hvbGRJbltpXSkpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGR4ID0gb3B0cy5zY3JvbGxTdGVwO1xuICAgICAgfSBlbHNlIGlmIChpID09IDEpIHtcbiAgICAgICAgZHkgPSBvcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gMikge1xuICAgICAgICBkeCA9IC1vcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gMykge1xuICAgICAgICBkeSA9IC1vcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGR4ICE9PSAwIHx8IGR5ICE9PSAwKSB7XG4gICAgY2FudmFzLnNjcm9sbCh7IGR4OiBkeCwgZHk6IGR5IH0pO1xuXG4gICAgdGhpcy5fc2Nyb2xsaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc3RhcnRTY3JvbGwocG9pbnQpO1xuICAgIH0sIG9wdHMuc2Nyb2xsUmVwZWF0VGltZW91dCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJldHdlZW4odmFsLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA8IHZhbCAmJiB2YWwgPCBlbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG4vKipcbiAqIFN0b3BzIHNjcm9sbGluZyBsb29wLlxuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zdG9wU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gIGNsZWFyVGltZW91dCh0aGlzLl9zY3JvbGxpbmcpO1xufTtcblxuXG4vKipcbiAqIE92ZXJyaWRlcyBkZWZhdWx0cyBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB0aGlzLl9vcHRzID0gYXNzaWduKHt9LCB0aGlzLl9vcHRzLCBvcHRpb25zKTtcbn07XG5cblxuLyoqXG4gKiBDb252ZXJ0cyBldmVudCB0byBhIHBvaW50IGluIGNhbnZhcyBjb250YWluZXIgcGxhbmUgaW4gZ2xvYmFsIHNjYWxlLlxuICpcbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbkF1dG9TY3JvbGwucHJvdG90eXBlLl90b0JvcmRlclBvaW50ID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSB0aGlzLl9jYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICB2YXIgZ2xvYmFsUG9zaXRpb24gPSB0b1BvaW50KGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuXG4gIHJldHVybiB7XG4gICAgeDogZ2xvYmFsUG9zaXRpb24ueCAtIGNsaWVudFJlY3QubGVmdCxcbiAgICB5OiBnbG9iYWxQb3NpdGlvbi55IC0gY2xpZW50UmVjdC50b3BcbiAgfTtcbn07IiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcblxuaW1wb3J0IEF1dG9TY3JvbGwgZnJvbSAnLi9BdXRvU2Nyb2xsJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gIF0sXG4gIF9faW5pdF9fOiBbICdhdXRvU2Nyb2xsJyBdLFxuICBhdXRvU2Nyb2xsOiBbICd0eXBlJywgQXV0b1Njcm9sbCBdXG59OyIsImltcG9ydCB7IGZpbHRlclJlZHVuZGFudFdheXBvaW50cyB9IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxudmFyIFJFQ09OTkVDVF9TVEFSVCA9ICdyZWNvbm5lY3RTdGFydCcsXG4gICAgUkVDT05ORUNUX0VORCA9ICdyZWNvbm5lY3RFbmQnLFxuICAgIFVQREFURV9XQVlQT0lOVFMgPSAndXBkYXRlV2F5cG9pbnRzJztcblxuXG4vKipcbiAqIE1vdmUgYmVuZHBvaW50cyB0aHJvdWdoIGRyYWcgYW5kIGRyb3AgdG8gYWRkL3JlbW92ZSBiZW5kcG9pbnRzIG9yIHJlY29ubmVjdCBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCZW5kcG9pbnRNb3ZlKGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzLCBkcmFnZ2luZywgcnVsZXMsIG1vZGVsaW5nKSB7XG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG5cbiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50LCBjb25uZWN0aW9uLCBiZW5kcG9pbnRJbmRleCwgaW5zZXJ0KSB7XG4gICAgdmFyIGdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhjb25uZWN0aW9uKSxcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgdHlwZTtcblxuICAgIGlmICghaW5zZXJ0ICYmIGJlbmRwb2ludEluZGV4ID09PSAwKSB7XG4gICAgICB0eXBlID0gUkVDT05ORUNUX1NUQVJUO1xuICAgIH0gZWxzZVxuICAgIGlmICghaW5zZXJ0ICYmIGJlbmRwb2ludEluZGV4ID09PSB3YXlwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgdHlwZSA9IFJFQ09OTkVDVF9FTkQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSBVUERBVEVfV0FZUE9JTlRTO1xuICAgIH1cblxuICAgIHZhciBjb21tYW5kID0gdHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUyA/ICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycgOiAnY29ubmVjdGlvbi5yZWNvbm5lY3QnO1xuXG4gICAgdmFyIGFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlOiB0YXJnZXQsXG4gICAgICAgIHRhcmdldDogc291cmNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkcmFnZ2luZy5pbml0KGV2ZW50LCAnYmVuZHBvaW50Lm1vdmUnLCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25HZng6IGdmeCxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWQsXG4gICAgICAgICAgYmVuZHBvaW50SW5kZXg6IGJlbmRwb2ludEluZGV4LFxuICAgICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgaW5zZXJ0OiBpbnNlcnQsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcixcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICAgIC8vIGNhY2hlIGhvdmVyIHN0YXRlXG4gICAgY29udGV4dC5ob3ZlciA9IGhvdmVyO1xuXG4gICAgdmFyIGFsbG93ZWQ7XG5cbiAgICBpZiAoIWhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbW1hbmQgPSB0eXBlID09PSBVUERBVEVfV0FZUE9JTlRTID8gJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyA6ICdjb25uZWN0aW9uLnJlY29ubmVjdCc7XG5cbiAgICBhbGxvd2VkID0gY29udGV4dC5hbGxvd2VkID0gcnVsZXMuYWxsb3dlZChjb21tYW5kLCB7XG4gICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgc291cmNlOiB0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQgPyBob3ZlciA6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgY29udGV4dC5zb3VyY2UgPSB0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQgPyBob3ZlciA6IHNvdXJjZTtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0O1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgICBhbGxvd2VkID0gY29udGV4dC5hbGxvd2VkID0gcnVsZXMuYWxsb3dlZChjb21tYW5kLCB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZTogdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0LFxuICAgICAgICB0YXJnZXQ6IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgY29udGV4dC5zb3VyY2UgPSB0eXBlID09PSBSRUNPTk5FQ1RfRU5EID8gaG92ZXIgOiB0YXJnZXQ7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnYmVuZHBvaW50Lm1vdmUub3V0JywgJ2JlbmRwb2ludC5tb3ZlLmNsZWFudXAnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xuXG4gICAgY29udGV4dC5ob3ZlciA9IG51bGw7XG4gICAgY29udGV4dC5zb3VyY2UgPSBudWxsO1xuICAgIGNvbnRleHQudGFyZ2V0ID0gbnVsbDtcblxuICAgIGNvbnRleHQuYWxsb3dlZCA9IGZhbHNlO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQsXG4gICAgICAgIGJlbmRwb2ludEluZGV4ID0gY29udGV4dC5iZW5kcG9pbnRJbmRleCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgaW5zZXJ0ID0gY29udGV4dC5pbnNlcnQsXG4gICAgICAgIG5ld1dheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKCksXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZSxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgLy8gZW5zdXJlIGludGVnZXIgdmFsdWVzIChpbXBvcnRhbnQgaWYgem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgIHZhciBkb2NraW5nID0ge1xuICAgICAgeDogcm91bmQoZXZlbnQueCksXG4gICAgICB5OiByb3VuZChldmVudC55KVxuICAgIH07XG5cbiAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUykge1xuICAgICAgaWYgKGluc2VydCkge1xuXG4gICAgICAgIC8vIGluc2VydCBuZXcgYmVuZHBvaW50XG4gICAgICAgIG5ld1dheXBvaW50cy5zcGxpY2UoYmVuZHBvaW50SW5kZXgsIDAsIGRvY2tpbmcpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBzd2FwIHByZXZpb3VzIHdheXBvaW50IHdpdGggbW92ZWQgb25lXG4gICAgICAgIG5ld1dheXBvaW50c1tiZW5kcG9pbnRJbmRleF0gPSBkb2NraW5nO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXNzIGhpbnRzIGFib3V0IGFjdHVhbCBtb3ZlZCBiZW5kcG9pbnRcbiAgICAgIC8vIHVzZWZ1bCBmb3IgY29ubmVjdGlvbi9sYWJlbCBsYXlvdXRcbiAgICAgIGhpbnRzLmJlbmRwb2ludE1vdmUgPSB7XG4gICAgICAgIGluc2VydDogaW5zZXJ0LFxuICAgICAgICBiZW5kcG9pbnRJbmRleDogYmVuZHBvaW50SW5kZXhcbiAgICAgIH07XG5cbiAgICAgIG5ld1dheXBvaW50cyA9IHRoaXMuY3JvcFdheXBvaW50cyhjb25uZWN0aW9uLCBuZXdXYXlwb2ludHMpO1xuXG4gICAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKG5ld1dheXBvaW50cyksIGhpbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCkge1xuICAgICAgICBoaW50cy5kb2NraW5nID0gJ3NvdXJjZSc7XG5cbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGhpbnRzLmRvY2tpbmcgPSAndGFyZ2V0JztcblxuICAgICAgICAgIGhpbnRzLm5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gUkVDT05ORUNUX0VORCkge1xuICAgICAgICBoaW50cy5kb2NraW5nID0gJ3RhcmdldCc7XG5cbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGhpbnRzLmRvY2tpbmcgPSAnc291cmNlJztcblxuICAgICAgICAgIGhpbnRzLm5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbW9kZWxpbmcucmVjb25uZWN0KGNvbm5lY3Rpb24sIHNvdXJjZSwgdGFyZ2V0LCBkb2NraW5nLCBoaW50cyk7XG4gICAgfVxuICB9LCB0aGlzKTtcbn1cblxuQmVuZHBvaW50TW92ZS4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuQmVuZHBvaW50TW92ZS5wcm90b3R5cGUuY3JvcFdheXBvaW50cyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cykge1xuICB2YXIgY29ubmVjdGlvbkRvY2tpbmcgPSB0aGlzLl9pbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25Eb2NraW5nJywgZmFsc2UpO1xuXG4gIGlmICghY29ubmVjdGlvbkRvY2tpbmcpIHtcbiAgICByZXR1cm4gbmV3V2F5cG9pbnRzO1xuICB9XG5cbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICBuZXdXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICBjb25uZWN0aW9uLndheXBvaW50cyA9IHdheXBvaW50cztcblxuICByZXR1cm4gbmV3V2F5cG9pbnRzO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmV2ZXJzZShjb250ZXh0KSB7XG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0LFxuICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICBpZiAodHlwZSA9PT0gUkVDT05ORUNUX1NUQVJUKSB7XG4gICAgcmV0dXJuIGhvdmVyICYmIHRhcmdldCAmJiBob3ZlciA9PT0gdGFyZ2V0ICYmIHNvdXJjZSAhPT0gdGFyZ2V0O1xuICB9XG5cbiAgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9FTkQpIHtcbiAgICByZXR1cm4gaG92ZXIgJiYgc291cmNlICYmIGhvdmVyID09PSBzb3VyY2UgJiYgc291cmNlICE9PSB0YXJnZXQ7XG4gIH1cbn0iLCJpbXBvcnQge1xuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgeyBhZGRCZW5kcG9pbnQgfSBmcm9tICcuL0JlbmRwb2ludFV0aWwnO1xuXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5pbXBvcnQgeyBpc1JldmVyc2UgfSBmcm9tICcuL0JlbmRwb2ludE1vdmUnO1xuXG52YXIgUkVDT05ORUNUX1NUQVJUID0gJ3JlY29ubmVjdFN0YXJ0JyxcbiAgICBSRUNPTk5FQ1RfRU5EID0gJ3JlY29ubmVjdEVuZCcsXG4gICAgVVBEQVRFX1dBWVBPSU5UUyA9ICd1cGRhdGVXYXlwb2ludHMnO1xuXG52YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snLFxuICAgIE1BUktFUl9DT05ORUNUX0hPVkVSID0gJ2Nvbm5lY3QtaG92ZXInLFxuICAgIE1BUktFUl9DT05ORUNUX1VQREFUSU5HID0gJ2Rqcy11cGRhdGluZycsXG4gICAgTUFSS0VSX0VMRU1FTlRfSElEREVOID0gJ2Rqcy1lbGVtZW50LWhpZGRlbic7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTEwMDtcblxuLyoqXG4gKiBQcmV2aWV3IGNvbm5lY3Rpb24gd2hpbGUgbW92aW5nIGJlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludE1vdmVQcmV2aWV3KGJlbmRwb2ludE1vdmUsIGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzKSB7XG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG5cbiAgdmFyIGNvbm5lY3Rpb25QcmV2aWV3ID0gaW5qZWN0b3IuZ2V0KCdjb25uZWN0aW9uUHJldmlldycsIGZhbHNlKTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBjb250ZXh0LmJlbmRwb2ludEluZGV4LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBpbnNlcnQgPSBjb250ZXh0Lmluc2VydCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIG5ld1dheXBvaW50cyA9IHdheXBvaW50cy5zbGljZSgpO1xuXG4gICAgY29udGV4dC53YXlwb2ludHMgPSB3YXlwb2ludHM7XG5cbiAgICBpZiAoaW5zZXJ0KSB7XG5cbiAgICAgIC8vIGluc2VydCBwbGFjZWhvbGRlciBmb3IgbmV3IGJlbmRwb2ludFxuICAgICAgbmV3V2F5cG9pbnRzLnNwbGljZShiZW5kcG9pbnRJbmRleCwgMCwgeyB4OiBldmVudC54LCB5OiBldmVudC55IH0pO1xuICAgIH1cblxuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gICAgLy8gYWRkIGRyYWdnZXIgZ2Z4XG4gICAgdmFyIGRyYWdnZXJHZnggPSBjb250ZXh0LmRyYWdnZXJHZnggPSBhZGRCZW5kcG9pbnQoY2FudmFzLmdldExheWVyKCdvdmVybGF5cycpKTtcblxuICAgIHN2Z0NsYXNzZXMoZHJhZ2dlckdmeCkuYWRkKCdkanMtZHJhZ2dpbmcnKTtcblxuICAgIGNhbnZhcy5hZGRNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0VMRU1FTlRfSElEREVOKTtcbiAgICBjYW52YXMuYWRkTWFya2VyKGNvbm5lY3Rpb24sIE1BUktFUl9DT05ORUNUX1VQREFUSU5HKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihob3ZlciwgTUFSS0VSX0NPTk5FQ1RfSE9WRVIpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9OT1RfT0spO1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBNQVJLRVJfTk9UX09LKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYmVuZHBvaW50Lm1vdmUub3V0JyxcbiAgICAnYmVuZHBvaW50Lm1vdmUuY2xlYW51cCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIHRhcmdldCA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsb3dlZCA9IGNvbnRleHQuYWxsb3dlZCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBjb250ZXh0LmJlbmRwb2ludEluZGV4LFxuICAgICAgICBkcmFnZ2VyR2Z4ID0gY29udGV4dC5kcmFnZ2VyR2Z4LFxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICAgIHR5cGUgPSBjb250ZXh0LnR5cGUsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKSxcbiAgICAgICAgYmVuZHBvaW50ID0geyB4OiBldmVudC54LCB5OiBldmVudC55IH0sXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cyA9IHt9O1xuXG4gICAgaWYgKGNvbm5lY3Rpb25QcmV2aWV3KSB7XG4gICAgICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0KSB7XG4gICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0ID0gaGludHMuY29ubmVjdGlvblN0YXJ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoaGludHMuY29ubmVjdGlvbkVuZCkge1xuICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQpIHtcbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCB8fCBiZW5kcG9pbnQ7XG5cbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnNvdXJjZSA9IHRhcmdldDtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnRhcmdldCA9IGhvdmVyIHx8IHNvdXJjZTtcblxuICAgICAgICAgIG5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5jb25uZWN0aW9uU3RhcnQgPSBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25TdGFydCB8fCBiZW5kcG9pbnQ7XG5cbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnNvdXJjZSA9IGhvdmVyIHx8IHNvdXJjZTtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfRU5EKSB7XG4gICAgICAgIGlmIChpc1JldmVyc2UoY29udGV4dCkpIHtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGJlbmRwb2ludDtcblxuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuc291cmNlID0gaG92ZXIgfHwgdGFyZ2V0O1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMudGFyZ2V0ID0gc291cmNlO1xuXG4gICAgICAgICAgbmV3V2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgPSBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgfHwgYmVuZHBvaW50O1xuXG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy50YXJnZXQgPSBob3ZlciB8fCB0YXJnZXQ7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5ub0Nyb3BwaW5nID0gdHJ1ZTtcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5ub0xheW91dCA9IHRydWU7XG4gICAgICAgIG5ld1dheXBvaW50c1sgYmVuZHBvaW50SW5kZXggXSA9IGJlbmRwb2ludDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IFVQREFURV9XQVlQT0lOVFMpIHtcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gYmVuZHBvaW50TW92ZS5jcm9wV2F5cG9pbnRzKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG4gICAgICB9XG5cbiAgICAgIGRyYXdQcmV2aWV3SGludHMud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gICAgICBjb25uZWN0aW9uUHJldmlldy5kcmF3UHJldmlldyhjb250ZXh0LCBhbGxvd2VkLCBkcmF3UHJldmlld0hpbnRzKTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZHJhZ2dlckdmeCwgZXZlbnQueCwgZXZlbnQueSk7XG4gIH0sIHRoaXMpO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYmVuZHBvaW50Lm1vdmUuZW5kJyxcbiAgICAnYmVuZHBvaW50Lm1vdmUuY2FuY2VsJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgZHJhZ2dlckdmeCA9IGNvbnRleHQuZHJhZ2dlckdmeCxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29udGV4dC53YXlwb2ludHM7XG5cbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHdheXBvaW50cztcblxuICAgIC8vIHJlbW92ZSBkcmFnZ2VyIGdmeFxuICAgIHN2Z1JlbW92ZShkcmFnZ2VyR2Z4KTtcblxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcpO1xuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0VMRU1FTlRfSElEREVOKTtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgTUFSS0VSX09LKTtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIHRhcmdldCA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgIH1cblxuICAgIGlmIChjb25uZWN0aW9uUHJldmlldykge1xuICAgICAgY29ubmVjdGlvblByZXZpZXcuY2xlYW5VcChjb250ZXh0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5CZW5kcG9pbnRNb3ZlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnYmVuZHBvaW50TW92ZScsXG4gICdpbmplY3RvcicsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dOyIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IHNldFNuYXBwZWQgfSBmcm9tICcuLi9zbmFwcGluZy9TbmFwVXRpbCc7XG5cbnZhciBhYnM9IE1hdGguYWJzLFxuICAgIHJvdW5kID0gTWF0aC5yb3VuZDtcblxudmFyIFRPTEVSQU5DRSA9IDEwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludFNuYXBwaW5nKGV2ZW50QnVzKSB7XG5cbiAgZnVuY3Rpb24gc25hcFRvKHZhbHVlcywgdmFsdWUpIHtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIHZhciBpID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkgaWYgKGFicyh2YWx1ZXNbaV0gLSB2YWx1ZSkgPD0gVE9MRVJBTkNFKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlcyA9ICt2YWx1ZXM7XG4gICAgICB2YXIgcmVtID0gdmFsdWUgJSB2YWx1ZXM7XG5cbiAgICAgIGlmIChyZW0gPCBUT0xFUkFOQ0UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIC0gcmVtO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtID4gdmFsdWVzIC0gVE9MRVJBTkNFKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAtIHJlbSArIHZhbHVlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBtaWQoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LndpZHRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiByb3VuZChlbGVtZW50LndpZHRoIC8gMiArIGVsZW1lbnQueCksXG4gICAgICAgIHk6IHJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMiArIGVsZW1lbnQueSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gY29ubmVjdGlvbiBzZWdtZW50IHNuYXBwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBnZXRDb25uZWN0aW9uU2VnbWVudFNuYXBzKGNvbnRleHQpIHtcblxuICAgIHZhciBzbmFwUG9pbnRzID0gY29udGV4dC5zbmFwUG9pbnRzLFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgc2VnbWVudFN0YXJ0ID0gY29udGV4dC5zZWdtZW50U3RhcnQsXG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5zZWdtZW50U3RhcnRJbmRleCxcbiAgICAgICAgc2VnbWVudEVuZCA9IGNvbnRleHQuc2VnbWVudEVuZCxcbiAgICAgICAgc2VnbWVudEVuZEluZGV4ID0gY29udGV4dC5zZWdtZW50RW5kSW5kZXgsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXM7XG5cbiAgICBpZiAoc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVdheXBvaW50cyA9IFtcbiAgICAgIHdheXBvaW50c1tzZWdtZW50U3RhcnRJbmRleCAtIDFdLFxuICAgICAgc2VnbWVudFN0YXJ0LFxuICAgICAgc2VnbWVudEVuZCxcbiAgICAgIHdheXBvaW50c1tzZWdtZW50RW5kSW5kZXggKyAxXVxuICAgIF07XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPCAyKSB7XG4gICAgICByZWZlcmVuY2VXYXlwb2ludHMudW5zaGlmdChtaWQoY29ubmVjdGlvbi5zb3VyY2UpKTtcbiAgICB9XG5cbiAgICBpZiAoc2VnbWVudEVuZEluZGV4ID4gd2F5cG9pbnRzLmxlbmd0aCAtIDMpIHtcbiAgICAgIHJlZmVyZW5jZVdheXBvaW50cy51bnNoaWZ0KG1pZChjb25uZWN0aW9uLnRhcmdldCkpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc25hcFBvaW50cyA9IHNuYXBQb2ludHMgPSB7IGhvcml6b250YWw6IFtdICwgdmVydGljYWw6IFtdIH07XG5cbiAgICBmb3JFYWNoKHJlZmVyZW5jZVdheXBvaW50cywgZnVuY3Rpb24ocCkge1xuXG4gICAgICAvLyB3ZSBzbmFwIG9uIGV4aXN0aW5nIGJlbmRwb2ludHMgb25seSxcbiAgICAgIC8vIG5vdCBwbGFjZWhvbGRlcnMgdGhhdCBhcmUgaW5zZXJ0ZWQgZHVyaW5nIGFkZFxuICAgICAgaWYgKHApIHtcbiAgICAgICAgcCA9IHAub3JpZ2luYWwgfHwgcDtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgICAgc25hcFBvaW50cy5ob3Jpem9udGFsLnB1c2gocC55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgICBzbmFwUG9pbnRzLnZlcnRpY2FsLnB1c2gocC54KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gIH1cblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5tb3ZlJywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNuYXBQb2ludHMgPSBnZXRDb25uZWN0aW9uU2VnbWVudFNuYXBzKGNvbnRleHQpLFxuICAgICAgICB4ID0gZXZlbnQueCxcbiAgICAgICAgeSA9IGV2ZW50LnksXG4gICAgICAgIHN4LCBzeTtcblxuICAgIGlmICghc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNuYXBcbiAgICBzeCA9IHNuYXBUbyhzbmFwUG9pbnRzLnZlcnRpY2FsLCB4KTtcbiAgICBzeSA9IHNuYXBUbyhzbmFwUG9pbnRzLmhvcml6b250YWwsIHkpO1xuXG5cbiAgICAvLyBjb3JyZWN0aW9uIHgveVxuICAgIHZhciBjeCA9ICh4IC0gc3gpLFxuICAgICAgICBjeSA9ICh5IC0gc3kpO1xuXG4gICAgLy8gdXBkYXRlIGRlbHRhXG4gICAgYXNzaWduKGV2ZW50LCB7XG4gICAgICBkeDogZXZlbnQuZHggLSBjeCxcbiAgICAgIGR5OiBldmVudC5keSAtIGN5LFxuICAgICAgeDogc3gsXG4gICAgICB5OiBzeVxuICAgIH0pO1xuXG4gICAgLy8gb25seSBzZXQgc25hcHBlZCBpZiBhY3R1YWxseSBzbmFwcGVkXG4gICAgaWYgKGN4IHx8IHNuYXBQb2ludHMudmVydGljYWwuaW5kZXhPZih4KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd4Jywgc3gpO1xuICAgIH1cblxuICAgIGlmIChjeSB8fCBzbmFwUG9pbnRzLmhvcml6b250YWwuaW5kZXhPZih5KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5Jywgc3kpO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBiZW5kcG9pbnQgc25hcHBpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGdldEJlbmRwb2ludFNuYXBzKGNvbnRleHQpIHtcblxuICAgIHZhciBzbmFwUG9pbnRzID0gY29udGV4dC5zbmFwUG9pbnRzLFxuICAgICAgICB3YXlwb2ludHMgPSBjb250ZXh0LmNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBiZW5kcG9pbnRJbmRleCA9IGNvbnRleHQuYmVuZHBvaW50SW5kZXg7XG5cbiAgICBpZiAoc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVdheXBvaW50cyA9IFsgd2F5cG9pbnRzW2JlbmRwb2ludEluZGV4IC0gMV0sIHdheXBvaW50c1tiZW5kcG9pbnRJbmRleCArIDFdIF07XG5cbiAgICBjb250ZXh0LnNuYXBQb2ludHMgPSBzbmFwUG9pbnRzID0geyBob3Jpem9udGFsOiBbXSAsIHZlcnRpY2FsOiBbXSB9O1xuXG4gICAgZm9yRWFjaChyZWZlcmVuY2VXYXlwb2ludHMsIGZ1bmN0aW9uKHApIHtcblxuICAgICAgLy8gd2Ugc25hcCBvbiBleGlzdGluZyBiZW5kcG9pbnRzIG9ubHksXG4gICAgICAvLyBub3QgcGxhY2Vob2xkZXJzIHRoYXQgYXJlIGluc2VydGVkIGR1cmluZyBhZGRcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHAgPSBwLm9yaWdpbmFsIHx8IHA7XG5cbiAgICAgICAgc25hcFBvaW50cy5ob3Jpem9udGFsLnB1c2gocC55KTtcbiAgICAgICAgc25hcFBvaW50cy52ZXJ0aWNhbC5wdXNoKHAueCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc25hcFBvaW50cztcbiAgfVxuXG5cbiAgZXZlbnRCdXMub24oWyAnYmVuZHBvaW50Lm1vdmUubW92ZScsICdiZW5kcG9pbnQubW92ZS5lbmQnIF0sIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNuYXBQb2ludHMgPSBnZXRCZW5kcG9pbnRTbmFwcyhjb250ZXh0KSxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICBob3Zlck1pZCA9IGhvdmVyICYmIG1pZChob3ZlciksXG4gICAgICAgIHggPSBldmVudC54LFxuICAgICAgICB5ID0gZXZlbnQueSxcbiAgICAgICAgc3gsIHN5O1xuXG4gICAgaWYgKCFzbmFwUG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc25hcCB0byBob3ZlciBtaWRcbiAgICBzeCA9IHNuYXBUbyhob3Zlck1pZCA/IHNuYXBQb2ludHMudmVydGljYWwuY29uY2F0KFsgaG92ZXJNaWQueCBdKSA6IHNuYXBQb2ludHMudmVydGljYWwsIHgpO1xuICAgIHN5ID0gc25hcFRvKGhvdmVyTWlkID8gc25hcFBvaW50cy5ob3Jpem9udGFsLmNvbmNhdChbIGhvdmVyTWlkLnkgXSkgOiBzbmFwUG9pbnRzLmhvcml6b250YWwsIHkpO1xuXG4gICAgLy8gY29ycmVjdGlvbiB4L3lcbiAgICB2YXIgY3ggPSAoeCAtIHN4KSxcbiAgICAgICAgY3kgPSAoeSAtIHN5KTtcblxuICAgIC8vIHVwZGF0ZSBkZWx0YVxuICAgIGFzc2lnbihldmVudCwge1xuICAgICAgZHg6IGV2ZW50LmR4IC0gY3gsXG4gICAgICBkeTogZXZlbnQuZHkgLSBjeSxcbiAgICAgIHg6IGV2ZW50LnggLSBjeCxcbiAgICAgIHk6IGV2ZW50LnkgLSBjeVxuICAgIH0pO1xuXG4gICAgLy8gb25seSBzZXQgc25hcHBlZCBpZiBhY3R1YWxseSBzbmFwcGVkXG4gICAgaWYgKGN4IHx8IHNuYXBQb2ludHMudmVydGljYWwuaW5kZXhPZih4KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd4Jywgc3gpO1xuICAgIH1cblxuICAgIGlmIChjeSB8fCBzbmFwUG9pbnRzLmhvcml6b250YWwuaW5kZXhPZih5KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5Jywgc3kpO1xuICAgIH1cbiAgfSk7XG59XG5cblxuQmVuZHBvaW50U25hcHBpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZFBvaW50LFxuICBwb2ludHNBbGlnbmVkXG59IGZyb20gJy4uLy4uL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHJvdGF0ZSxcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEFwcHJveEludGVyc2VjdGlvblxufSBmcm9tICcuLi8uLi91dGlsL0xpbmVJbnRlcnNlY3Rpb24nO1xuXG5leHBvcnQgdmFyIEJFTkRQT0lOVF9DTFMgPSAnZGpzLWJlbmRwb2ludCc7XG5leHBvcnQgdmFyIFNFR01FTlRfRFJBR0dFUl9DTFMgPSAnZGpzLXNlZ21lbnQtZHJhZ2dlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbnZhc0Nvb3JkaW5hdGVzKGNhbnZhcywgZXZlbnQpIHtcblxuICB2YXIgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KSxcbiAgICAgIGNsaWVudFJlY3QgPSBjYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIG9mZnNldDtcblxuICAvLyBjYW52YXMgcmVsYXRpdmUgcG9zaXRpb25cblxuICBvZmZzZXQgPSB7XG4gICAgeDogY2xpZW50UmVjdC5sZWZ0LFxuICAgIHk6IGNsaWVudFJlY3QudG9wXG4gIH07XG5cbiAgLy8gdXBkYXRlIGFjdHVhbCBldmVudCBwYXlsb2FkIHdpdGggY2FudmFzIHJlbGF0aXZlIG1lYXN1cmVzXG5cbiAgdmFyIHZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuXG4gIHJldHVybiB7XG4gICAgeDogdmlld2JveC54ICsgKHBvc2l0aW9uLnggLSBvZmZzZXQueCkgLyB2aWV3Ym94LnNjYWxlLFxuICAgIHk6IHZpZXdib3gueSArIChwb3NpdGlvbi55IC0gb2Zmc2V0LnkpIC8gdmlld2JveC5zY2FsZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbkludGVyc2VjdGlvbihjYW52YXMsIHdheXBvaW50cywgZXZlbnQpIHtcbiAgdmFyIGxvY2FsUG9zaXRpb24gPSB0b0NhbnZhc0Nvb3JkaW5hdGVzKGNhbnZhcywgZXZlbnQpLFxuICAgICAgaW50ZXJzZWN0aW9uID0gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgbG9jYWxQb3NpdGlvbik7XG5cbiAgcmV0dXJuIGludGVyc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJlbmRwb2ludChwYXJlbnRHZngsIGNscykge1xuICB2YXIgZ3JvdXBHZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cEdmeCkuYWRkKEJFTkRQT0lOVF9DTFMpO1xuXG4gIHN2Z0FwcGVuZChwYXJlbnRHZngsIGdyb3VwR2Z4KTtcblxuICB2YXIgdmlzdWFsID0gc3ZnQ3JlYXRlKCdjaXJjbGUnKTtcbiAgc3ZnQXR0cih2aXN1YWwsIHtcbiAgICBjeDogMCxcbiAgICBjeTogMCxcbiAgICByOiA0XG4gIH0pO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGdyb3VwR2Z4LCB2aXN1YWwpO1xuXG4gIHZhciBoaXQgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICBzdmdBdHRyKGhpdCwge1xuICAgIGN4OiAwLFxuICAgIGN5OiAwLFxuICAgIHI6IDEwXG4gIH0pO1xuICBzdmdDbGFzc2VzKGhpdCkuYWRkKCdkanMtaGl0Jyk7XG5cbiAgc3ZnQXBwZW5kKGdyb3VwR2Z4LCBoaXQpO1xuXG4gIGlmIChjbHMpIHtcbiAgICBzdmdDbGFzc2VzKGdyb3VwR2Z4KS5hZGQoY2xzKTtcbiAgfVxuXG4gIHJldHVybiBncm91cEdmeDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGFyYWxsZWxEcmFnZ2VyKHBhcmVudEdmeCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBhbGlnbm1lbnQpIHtcbiAgdmFyIGRyYWdnZXJHZnggPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdBcHBlbmQocGFyZW50R2Z4LCBkcmFnZ2VyR2Z4KTtcblxuICB2YXIgd2lkdGggPSAxNCxcbiAgICAgIGhlaWdodCA9IDMsXG4gICAgICBwYWRkaW5nID0gMTEsXG4gICAgICBoaXRXaWR0aCA9IGNhbGN1bGF0ZUhpdFdpZHRoKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgYWxpZ25tZW50KSxcbiAgICAgIGhpdEhlaWdodCA9IGhlaWdodCArIHBhZGRpbmc7XG5cbiAgdmFyIHZpc3VhbCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuICBzdmdBdHRyKHZpc3VhbCwge1xuICAgIHg6IC13aWR0aCAvIDIsXG4gICAgeTogLWhlaWdodCAvIDIsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH0pO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGRyYWdnZXJHZngsIHZpc3VhbCk7XG5cbiAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuICBzdmdBdHRyKGhpdCwge1xuICAgIHg6IC1oaXRXaWR0aCAvIDIsXG4gICAgeTogLWhpdEhlaWdodCAvIDIsXG4gICAgd2lkdGg6IGhpdFdpZHRoLFxuICAgIGhlaWdodDogaGl0SGVpZ2h0XG4gIH0pO1xuICBzdmdDbGFzc2VzKGhpdCkuYWRkKCdkanMtaGl0Jyk7XG5cbiAgc3ZnQXBwZW5kKGRyYWdnZXJHZngsIGhpdCk7XG5cbiAgcm90YXRlKGRyYWdnZXJHZngsIGFsaWdubWVudCA9PT0gJ3YnID8gOTAgOiAwLCAwLCAwKTtcblxuICByZXR1cm4gZHJhZ2dlckdmeDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudERyYWdnZXIocGFyZW50R2Z4LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpIHtcblxuICB2YXIgZ3JvdXBHZnggPSBzdmdDcmVhdGUoJ2cnKSxcbiAgICAgIG1pZCA9IGdldE1pZFBvaW50KHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCksXG4gICAgICBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgZ3JvdXBHZngpO1xuXG4gIGNyZWF0ZVBhcmFsbGVsRHJhZ2dlcihncm91cEdmeCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBhbGlnbm1lbnQpO1xuXG4gIHN2Z0NsYXNzZXMoZ3JvdXBHZngpLmFkZChTRUdNRU5UX0RSQUdHRVJfQ0xTKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cEdmeCkuYWRkKGFsaWdubWVudCA9PT0gJ2gnID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJyk7XG5cbiAgdHJhbnNsYXRlKGdyb3VwR2Z4LCBtaWQueCwgbWlkLnkpO1xuXG4gIHJldHVybiBncm91cEdmeDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHJlZ2lvbiBmb3Igc2VnbWVudCBtb3ZlIHdoaWNoIGlzIDIvMyBvZiB0aGUgZnVsbCBzZWdtZW50IGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRMZW5ndGhcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbihzZWdtZW50TGVuZ3RoKSB7XG4gIHJldHVybiBNYXRoLmFicyhNYXRoLnJvdW5kKHNlZ21lbnRMZW5ndGggKiAyIC8gMykpO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVIaXRXaWR0aChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGFsaWdubWVudCkge1xuICB2YXIgc2VnbWVudExlbmd0aFhBeGlzID0gc2VnbWVudEVuZC54IC0gc2VnbWVudFN0YXJ0LngsXG4gICAgICBzZWdtZW50TGVuZ3RoWUF4aXMgPSBzZWdtZW50RW5kLnkgLSBzZWdtZW50U3RhcnQueTtcblxuICByZXR1cm4gYWxpZ25tZW50ID09PSAnaCcgP1xuICAgIGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGhYQXhpcykgOlxuICAgIGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGhZQXhpcyk7XG59XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBCRU5EUE9JTlRfQ0xTLFxuICBTRUdNRU5UX0RSQUdHRVJfQ0xTLFxuICBhZGRCZW5kcG9pbnQsXG4gIGFkZFNlZ21lbnREcmFnZ2VyLFxuICBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbixcbiAgZ2V0Q29ubmVjdGlvbkludGVyc2VjdGlvblxufSBmcm9tICcuL0JlbmRwb2ludFV0aWwnO1xuXG5pbXBvcnQge1xuICBlc2NhcGVDU1Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9Fc2NhcGVVdGlsJztcblxuaW1wb3J0IHtcbiAgcG9pbnRzQWxpZ25lZCxcbiAgZ2V0TWlkUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBhZGRzIGVkaXRhYmxlIGJlbmRwb2ludHMgdG8gY29ubmVjdGlvbnMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludHMoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgaW50ZXJhY3Rpb25FdmVudHMsXG4gICAgYmVuZHBvaW50TW92ZSwgY29ubmVjdGlvblNlZ21lbnRNb3ZlKSB7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpbnRlcnNlY3Rpb24gcG9pbnQgaXMgaW5zaWRlIG1pZGRsZSByZWdpb24gb2Ygc2VnbWVudCwgYWRqdXN0ZWQgYnlcbiAgICogb3B0aW9uYWwgdGhyZXNob2xkXG4gICAqL1xuICBmdW5jdGlvbiBpc0ludGVyc2VjdGlvbk1pZGRsZShpbnRlcnNlY3Rpb24sIHdheXBvaW50cywgdHJlc2hvbGQpIHtcbiAgICB2YXIgaWR4ID0gaW50ZXJzZWN0aW9uLmluZGV4LFxuICAgICAgICBwID0gaW50ZXJzZWN0aW9uLnBvaW50LFxuICAgICAgICBwMCwgcDEsIG1pZCwgYWxpZ25lZCwgeERlbHRhLCB5RGVsdGE7XG5cbiAgICBpZiAoaWR4IDw9IDAgfHwgaW50ZXJzZWN0aW9uLmJlbmRwb2ludCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHAwID0gd2F5cG9pbnRzW2lkeCAtIDFdO1xuICAgIHAxID0gd2F5cG9pbnRzW2lkeF07XG4gICAgbWlkID0gZ2V0TWlkUG9pbnQocDAsIHAxKSxcbiAgICBhbGlnbmVkID0gcG9pbnRzQWxpZ25lZChwMCwgcDEpO1xuICAgIHhEZWx0YSA9IE1hdGguYWJzKHAueCAtIG1pZC54KTtcbiAgICB5RGVsdGEgPSBNYXRoLmFicyhwLnkgLSBtaWQueSk7XG5cbiAgICByZXR1cm4gYWxpZ25lZCAmJiB4RGVsdGEgPD0gdHJlc2hvbGQgJiYgeURlbHRhIDw9IHRyZXNob2xkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHRocmVzaG9sZCBmcm9tIGEgY29ubmVjdGlvbidzIG1pZGRsZSB3aGljaCBmaXRzIHRoZSB0d28tdGhpcmQtcmVnaW9uXG4gICAqL1xuICBmdW5jdGlvbiBjYWxjdWxhdGVJbnRlcnNlY3Rpb25UaHJlc2hvbGQoY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICByZWxldmFudFNlZ21lbnQsIGFsaWdubWVudCwgc2VnbWVudExlbmd0aCwgdGhyZXNob2xkO1xuXG4gICAgaWYgKGludGVyc2VjdGlvbi5pbmRleCA8PSAwIHx8IGludGVyc2VjdGlvbi5iZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHNlZ21lbnQgcmVsYXRpdmUgdG8gY29ubmVjdGlvbiBpbnRlcnNlY3Rpb25cbiAgICByZWxldmFudFNlZ21lbnQgPSB7XG4gICAgICBzdGFydDogd2F5cG9pbnRzW2ludGVyc2VjdGlvbi5pbmRleCAtIDFdLFxuICAgICAgZW5kOiB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XVxuICAgIH07XG5cbiAgICBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKHJlbGV2YW50U2VnbWVudC5zdGFydCwgcmVsZXZhbnRTZWdtZW50LmVuZCk7XG5cbiAgICBpZiAoIWFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFsaWdubWVudCA9PT0gJ2gnKSB7XG4gICAgICBzZWdtZW50TGVuZ3RoID0gcmVsZXZhbnRTZWdtZW50LmVuZC54IC0gcmVsZXZhbnRTZWdtZW50LnN0YXJ0Lng7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRMZW5ndGggPSByZWxldmFudFNlZ21lbnQuZW5kLnkgLSByZWxldmFudFNlZ21lbnQuc3RhcnQueTtcbiAgICB9XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhyZXNob2xkIHJlbGF0aXZlIHRvIDIvMyBvZiBzZWdtZW50IGxlbmd0aFxuICAgIHRocmVzaG9sZCA9IGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGgpIC8gMjtcblxuICAgIHJldHVybiB0aHJlc2hvbGQ7XG4gIH1cblxuICBmdW5jdGlvbiBhY3RpdmF0ZUJlbmRwb2ludE1vdmUoZXZlbnQsIGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIGludGVyc2VjdGlvbiA9IGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb24oY2FudmFzLCB3YXlwb2ludHMsIGV2ZW50KSxcbiAgICAgICAgdGhyZXNob2xkO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJlc2hvbGQgPSBjYWxjdWxhdGVJbnRlcnNlY3Rpb25UaHJlc2hvbGQoY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uKTtcblxuICAgIGlmIChpc0ludGVyc2VjdGlvbk1pZGRsZShpbnRlcnNlY3Rpb24sIHdheXBvaW50cywgdGhyZXNob2xkKSkge1xuICAgICAgY29ubmVjdGlvblNlZ21lbnRNb3ZlLnN0YXJ0KGV2ZW50LCBjb25uZWN0aW9uLCBpbnRlcnNlY3Rpb24uaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZW5kcG9pbnRNb3ZlLnN0YXJ0KGV2ZW50LCBjb25uZWN0aW9uLCBpbnRlcnNlY3Rpb24uaW5kZXgsICFpbnRlcnNlY3Rpb24uYmVuZHBvaW50KTtcbiAgICB9XG5cbiAgICAvLyB3ZSd2ZSBoYW5kbGVkIHRoZSBldmVudFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYmluZEludGVyYWN0aW9uRXZlbnRzKG5vZGUsIGV2ZW50TmFtZSwgZWxlbWVudCkge1xuXG4gICAgZG9tRXZlbnQuYmluZChub2RlLCBldmVudE5hbWUsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpbnRlcmFjdGlvbkV2ZW50cy50cmlnZ2VyTW91c2VFdmVudChldmVudE5hbWUsIGV2ZW50LCBlbGVtZW50KTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihlbGVtZW50LCBjcmVhdGUpIHtcblxuICAgIHZhciBsYXllciA9IGNhbnZhcy5nZXRMYXllcignb3ZlcmxheXMnKSxcbiAgICAgICAgZ2Z4ID0gZG9tUXVlcnkoJy5kanMtYmVuZHBvaW50c1tkYXRhLWVsZW1lbnQtaWQ9XCInICsgZXNjYXBlQ1NTKGVsZW1lbnQuaWQpICsgJ1wiXScsIGxheWVyKTtcblxuICAgIGlmICghZ2Z4ICYmIGNyZWF0ZSkge1xuICAgICAgZ2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG4gICAgICBzdmdBdHRyKGdmeCwgeyAnZGF0YS1lbGVtZW50LWlkJzogZWxlbWVudC5pZCB9KTtcbiAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQoJ2Rqcy1iZW5kcG9pbnRzJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChsYXllciwgZ2Z4KTtcblxuICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKGdmeCwgJ21vdXNlZG93bicsIGVsZW1lbnQpO1xuICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKGdmeCwgJ2NsaWNrJywgZWxlbWVudCk7XG4gICAgICBiaW5kSW50ZXJhY3Rpb25FdmVudHMoZ2Z4LCAnZGJsY2xpY2snLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2Z4O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VnbWVudERyYWdnZXIoaWR4LCBwYXJlbnRHZngpIHtcbiAgICByZXR1cm4gZG9tUXVlcnkoXG4gICAgICAnLmRqcy1zZWdtZW50LWRyYWdnZXJbZGF0YS1zZWdtZW50LWlkeD1cIicgKyBpZHggKyAnXCJdJyxcbiAgICAgIHBhcmVudEdmeFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCZW5kcG9pbnRzKGdmeCwgY29ubmVjdGlvbikge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XG4gICAgICB2YXIgYmVuZHBvaW50ID0gYWRkQmVuZHBvaW50KGdmeCk7XG5cbiAgICAgIHN2Z0FwcGVuZChnZngsIGJlbmRwb2ludCk7XG5cbiAgICAgIHRyYW5zbGF0ZShiZW5kcG9pbnQsIHAueCwgcC55KTtcbiAgICB9KTtcblxuICAgIC8vIGFkZCBmbG9hdGluZyBiZW5kcG9pbnRcbiAgICBhZGRCZW5kcG9pbnQoZ2Z4LCAnZmxvYXRpbmcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNlZ21lbnREcmFnZ2VycyhnZngsIGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICAgIHZhciBzZWdtZW50U3RhcnQsXG4gICAgICAgIHNlZ21lbnRFbmQsXG4gICAgICAgIHNlZ21lbnREcmFnZ2VyR2Z4O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YXlwb2ludHMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgc2VnbWVudFN0YXJ0ID0gd2F5cG9pbnRzW2kgLSAxXTtcbiAgICAgIHNlZ21lbnRFbmQgPSB3YXlwb2ludHNbaV07XG5cbiAgICAgIGlmIChwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkpIHtcbiAgICAgICAgc2VnbWVudERyYWdnZXJHZnggPSBhZGRTZWdtZW50RHJhZ2dlcihnZngsIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgICAgICAgc3ZnQXR0cihzZWdtZW50RHJhZ2dlckdmeCwgeyAnZGF0YS1zZWdtZW50LWlkeCc6IGkgfSk7XG5cbiAgICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKHNlZ21lbnREcmFnZ2VyR2Z4LCAnbW91c2Vtb3ZlJywgY29ubmVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJCZW5kcG9pbnRzKGdmeCkge1xuICAgIGZvckVhY2goZG9tUXVlcnlBbGwoJy4nICsgQkVORFBPSU5UX0NMUywgZ2Z4KSwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgc3ZnUmVtb3ZlKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJTZWdtZW50RHJhZ2dlcnMoZ2Z4KSB7XG4gICAgZm9yRWFjaChkb21RdWVyeUFsbCgnLicgKyBTRUdNRU5UX0RSQUdHRVJfQ0xTLCBnZngpLCBmdW5jdGlvbihub2RlKSB7XG4gICAgICBzdmdSZW1vdmUobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRIYW5kbGVzKGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciBnZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKCFnZngpIHtcbiAgICAgIGdmeCA9IGdldEJlbmRwb2ludHNDb250YWluZXIoY29ubmVjdGlvbiwgdHJ1ZSk7XG5cbiAgICAgIGNyZWF0ZUJlbmRwb2ludHMoZ2Z4LCBjb25uZWN0aW9uKTtcbiAgICAgIGNyZWF0ZVNlZ21lbnREcmFnZ2VycyhnZngsIGNvbm5lY3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBnZng7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVIYW5kbGVzKGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciBnZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGdmeCkge1xuICAgICAgY2xlYXJTZWdtZW50RHJhZ2dlcnMoZ2Z4KTtcbiAgICAgIGNsZWFyQmVuZHBvaW50cyhnZngpO1xuICAgICAgY3JlYXRlU2VnbWVudERyYWdnZXJzKGdmeCwgY29ubmVjdGlvbik7XG4gICAgICBjcmVhdGVCZW5kcG9pbnRzKGdmeCwgY29ubmVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRmxvYXRpbmdCZW5kcG9pbnRQb3NpdGlvbihwYXJlbnRHZngsIGludGVyc2VjdGlvbikge1xuICAgIHZhciBmbG9hdGluZyA9IGRvbVF1ZXJ5KCcuZmxvYXRpbmcnLCBwYXJlbnRHZngpLFxuICAgICAgICBwb2ludCA9IGludGVyc2VjdGlvbi5wb2ludDtcblxuICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZmxvYXRpbmcsIHBvaW50LngsIHBvaW50LnkpO1xuXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTZWdtZW50RHJhZ2dlclBvc2l0aW9uKHBhcmVudEdmeCwgaW50ZXJzZWN0aW9uLCB3YXlwb2ludHMpIHtcblxuICAgIHZhciBkcmFnZ2VyR2Z4ID0gZ2V0U2VnbWVudERyYWdnZXIoaW50ZXJzZWN0aW9uLmluZGV4LCBwYXJlbnRHZngpLFxuICAgICAgICBzZWdtZW50U3RhcnQgPSB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4IC0gMV0sXG4gICAgICAgIHNlZ21lbnRFbmQgPSB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XSxcbiAgICAgICAgcG9pbnQgPSBpbnRlcnNlY3Rpb24ucG9pbnQsXG4gICAgICAgIG1pZCA9IGdldE1pZFBvaW50KHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCksXG4gICAgICAgIGFsaWdubWVudCA9IHBvaW50c0FsaWduZWQoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSxcbiAgICAgICAgZHJhZ2dlclZpc3VhbCwgcmVsYXRpdmVQb3NpdGlvbjtcblxuICAgIGlmICghZHJhZ2dlckdmeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRyYWdnZXJWaXN1YWwgPSBnZXREcmFnZ2VyVmlzdWFsKGRyYWdnZXJHZngpO1xuXG4gICAgcmVsYXRpdmVQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHBvaW50LnggLSBtaWQueCxcbiAgICAgIHk6IHBvaW50LnkgLSBtaWQueVxuICAgIH07XG5cbiAgICBpZiAoYWxpZ25tZW50ID09PSAndicpIHtcblxuICAgICAgLy8gcm90YXRlIHBvc2l0aW9uXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiByZWxhdGl2ZVBvc2l0aW9uLnksXG4gICAgICAgIHk6IHJlbGF0aXZlUG9zaXRpb24ueFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZHJhZ2dlclZpc3VhbCwgcmVsYXRpdmVQb3NpdGlvbi54LCByZWxhdGl2ZVBvc2l0aW9uLnkpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdXBkYXRlSGFuZGxlcyhldmVudC5lbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24ucmVtb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZ2Z4ID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihldmVudC5lbGVtZW50KTtcblxuICAgIGlmIChnZngpIHtcbiAgICAgIHN2Z1JlbW92ZShnZngpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubWFya2VyLnVwZGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGJlbmRwb2ludHNHZng7XG5cbiAgICBpZiAoIWVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYmVuZHBvaW50c0dmeCA9IGFkZEhhbmRsZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoZXZlbnQuYWRkKSB7XG4gICAgICBzdmdDbGFzc2VzKGJlbmRwb2ludHNHZngpLmFkZChldmVudC5tYXJrZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmdDbGFzc2VzKGJlbmRwb2ludHNHZngpLnJlbW92ZShldmVudC5tYXJrZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vtb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgd2F5cG9pbnRzID0gZWxlbWVudC53YXlwb2ludHMsXG4gICAgICAgIGJlbmRwb2ludHNHZngsXG4gICAgICAgIGludGVyc2VjdGlvbjtcblxuICAgIGlmICh3YXlwb2ludHMpIHtcbiAgICAgIGJlbmRwb2ludHNHZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGVsZW1lbnQsIHRydWUpO1xuXG4gICAgICBpbnRlcnNlY3Rpb24gPSBnZXRDb25uZWN0aW9uSW50ZXJzZWN0aW9uKGNhbnZhcywgd2F5cG9pbnRzLCBldmVudC5vcmlnaW5hbEV2ZW50KTtcblxuICAgICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVGbG9hdGluZ0JlbmRwb2ludFBvc2l0aW9uKGJlbmRwb2ludHNHZngsIGludGVyc2VjdGlvbik7XG5cbiAgICAgIGlmICghaW50ZXJzZWN0aW9uLmJlbmRwb2ludCkge1xuICAgICAgICB1cGRhdGVTZWdtZW50RHJhZ2dlclBvc2l0aW9uKGJlbmRwb2ludHNHZngsIGludGVyc2VjdGlvbiwgd2F5cG9pbnRzKTtcbiAgICAgIH1cblxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCxcbiAgICAgICAgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGl2YXRlQmVuZHBvaW50TW92ZShvcmlnaW5hbEV2ZW50LCBlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NlbGVjdGlvbi5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgbmV3U2VsZWN0aW9uID0gZXZlbnQubmV3U2VsZWN0aW9uLFxuICAgICAgICBwcmltYXJ5ID0gbmV3U2VsZWN0aW9uWzBdO1xuXG4gICAgaWYgKHByaW1hcnkgJiYgcHJpbWFyeS53YXlwb2ludHMpIHtcbiAgICAgIGFkZEhhbmRsZXMocHJpbWFyeSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICBhZGRIYW5kbGVzKGVsZW1lbnQpO1xuICAgICAgaW50ZXJhY3Rpb25FdmVudHMucmVnaXN0ZXJFdmVudChldmVudC5nZngsICdtb3VzZW1vdmUnLCAnZWxlbWVudC5tb3VzZW1vdmUnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm91dCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaW50ZXJhY3Rpb25FdmVudHMudW5yZWdpc3RlckV2ZW50KGV2ZW50LmdmeCwgJ21vdXNlbW92ZScsICdlbGVtZW50Lm1vdXNlbW92ZScpO1xuICB9KTtcblxuICAvLyB1cGRhdGUgYmVuZHBvaW50IGNvbnRhaW5lciBkYXRhIGF0dHJpYnV0ZSBvbiBlbGVtZW50IElEIGNoYW5nZVxuICBldmVudEJ1cy5vbignZWxlbWVudC51cGRhdGVJZCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgbmV3SWQgPSBjb250ZXh0Lm5ld0lkO1xuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICB2YXIgYmVuZHBvaW50Q29udGFpbmVyID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihlbGVtZW50KTtcblxuICAgICAgaWYgKGJlbmRwb2ludENvbnRhaW5lcikge1xuICAgICAgICBzdmdBdHRyKGJlbmRwb2ludENvbnRhaW5lciwgeyAnZGF0YS1lbGVtZW50LWlkJzogbmV3SWQgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBBUElcblxuICB0aGlzLmFkZEhhbmRsZXMgPSBhZGRIYW5kbGVzO1xuICB0aGlzLnVwZGF0ZUhhbmRsZXMgPSB1cGRhdGVIYW5kbGVzO1xuICB0aGlzLmdldEJlbmRwb2ludHNDb250YWluZXIgPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyO1xuICB0aGlzLmdldFNlZ21lbnREcmFnZ2VyID0gZ2V0U2VnbWVudERyYWdnZXI7XG59XG5cbkJlbmRwb2ludHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdpbnRlcmFjdGlvbkV2ZW50cycsXG4gICdiZW5kcG9pbnRNb3ZlJyxcbiAgJ2Nvbm5lY3Rpb25TZWdtZW50TW92ZSdcbl07XG5cblxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREcmFnZ2VyVmlzdWFsKGRyYWdnZXJHZngpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KCcuZGpzLXZpc3VhbCcsIGRyYWdnZXJHZngpO1xufSIsImltcG9ydCB7XG4gIHBvaW50c0FsaWduZWQsXG4gIHBvaW50c09uTGluZVxufSBmcm9tICcuLi8uLi91dGlsL0dlb21ldHJ5JztcblxuaW1wb3J0IHtcbiAgYWRkU2VnbWVudERyYWdnZXIsXG4gIGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb25cbn0gZnJvbSAnLi9CZW5kcG9pbnRVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkLFxuICBnZXRPcmllbnRhdGlvblxufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbnZhciBNQVJLRVJfQ09OTkVDVF9IT1ZFUiA9ICdjb25uZWN0LWhvdmVyJyxcbiAgICBNQVJLRVJfQ09OTkVDVF9VUERBVElORyA9ICdkanMtdXBkYXRpbmcnO1xuXG5pbXBvcnQge1xuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxuXG5mdW5jdGlvbiBheGlzQWRkKHBvaW50LCBheGlzLCBkZWx0YSkge1xuICByZXR1cm4gYXhpc1NldChwb2ludCwgYXhpcywgcG9pbnRbYXhpc10gKyBkZWx0YSk7XG59XG5cbmZ1bmN0aW9uIGF4aXNTZXQocG9pbnQsIGF4aXMsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgeDogKGF4aXMgPT09ICd4JyA/IHZhbHVlIDogcG9pbnQueCksXG4gICAgeTogKGF4aXMgPT09ICd5JyA/IHZhbHVlIDogcG9pbnQueSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXhpc0ZlbmNlZChwb3NpdGlvbiwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBheGlzKSB7XG5cbiAgdmFyIG1heFZhbHVlID0gTWF0aC5tYXgoc2VnbWVudFN0YXJ0W2F4aXNdLCBzZWdtZW50RW5kW2F4aXNdKSxcbiAgICAgIG1pblZhbHVlID0gTWF0aC5taW4oc2VnbWVudFN0YXJ0W2F4aXNdLCBzZWdtZW50RW5kW2F4aXNdKTtcblxuICB2YXIgcGFkZGluZyA9IDIwO1xuXG4gIHZhciBmZW5jZWRWYWx1ZSA9IE1hdGgubWluKE1hdGgubWF4KG1pblZhbHVlICsgcGFkZGluZywgcG9zaXRpb25bYXhpc10pLCBtYXhWYWx1ZSAtIHBhZGRpbmcpO1xuXG4gIHJldHVybiBheGlzU2V0KHNlZ21lbnRTdGFydCwgYXhpcywgZmVuY2VkVmFsdWUpO1xufVxuXG5mdW5jdGlvbiBmbGlwQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkb2NraW5nIHBvaW50IG9uIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIENvbXB1dGUgYSByZWFzb25hYmxlIGRvY2tpbmcsIGlmIG5vbiBleGlzdHMuXG4gKlxuICogQHBhcmFtICB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHJlZmVyZW5jZUVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gbW92ZUF4aXMgKHh8eSlcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZnVuY3Rpb24gZ2V0RG9ja2luZyhwb2ludCwgcmVmZXJlbmNlRWxlbWVudCwgbW92ZUF4aXMpIHtcblxuICB2YXIgcmVmZXJlbmNlTWlkLFxuICAgICAgaW52ZXJzZUF4aXM7XG5cbiAgaWYgKHBvaW50Lm9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIHBvaW50Lm9yaWdpbmFsO1xuICB9IGVsc2Uge1xuICAgIHJlZmVyZW5jZU1pZCA9IGdldE1pZChyZWZlcmVuY2VFbGVtZW50KTtcbiAgICBpbnZlcnNlQXhpcyA9IGZsaXBBeGlzKG1vdmVBeGlzKTtcblxuICAgIHJldHVybiBheGlzU2V0KHBvaW50LCBpbnZlcnNlQXhpcywgcmVmZXJlbmNlTWlkW2ludmVyc2VBeGlzXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGltcGxlbWVudHMgbW92aW5nIG9mIGJlbmRwb2ludHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29ubmVjdGlvblNlZ21lbnRNb3ZlKFxuICAgIGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzLFxuICAgIGRyYWdnaW5nLCBncmFwaGljc0ZhY3RvcnksIG1vZGVsaW5nKSB7XG5cbiAgLy8gb3B0aW9uYWwgY29ubmVjdGlvbiBkb2NraW5nIGludGVncmF0aW9uXG4gIHZhciBjb25uZWN0aW9uRG9ja2luZyA9IGluamVjdG9yLmdldCgnY29ubmVjdGlvbkRvY2tpbmcnLCBmYWxzZSk7XG5cblxuICAvLyBBUElcblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIGNvbm5lY3Rpb24sIGlkeCkge1xuXG4gICAgdmFyIGNvbnRleHQsXG4gICAgICAgIGdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhjb25uZWN0aW9uKSxcbiAgICAgICAgc2VnbWVudFN0YXJ0SW5kZXggPSBpZHggLSAxLFxuICAgICAgICBzZWdtZW50RW5kSW5kZXggPSBpZHgsXG4gICAgICAgIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBzZWdtZW50U3RhcnQgPSB3YXlwb2ludHNbc2VnbWVudFN0YXJ0SW5kZXhdLFxuICAgICAgICBzZWdtZW50RW5kID0gd2F5cG9pbnRzW3NlZ21lbnRFbmRJbmRleF0sXG4gICAgICAgIGludGVyc2VjdGlvbiA9IGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb24oY2FudmFzLCB3YXlwb2ludHMsIGV2ZW50KSxcbiAgICAgICAgZGlyZWN0aW9uLCBheGlzLCBkcmFnUG9zaXRpb247XG5cbiAgICBkaXJlY3Rpb24gPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgICAvLyBkbyBub3QgbW92ZSBkaWFnb25hbCBjb25uZWN0aW9uXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXhpcyB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gbW92ZSB0aGluZ3NcbiAgICBheGlzID0gZGlyZWN0aW9uID09PSAndicgPyAneCcgOiAneSc7XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgIHNlZ21lbnRTdGFydCA9IGdldERvY2tpbmcoc2VnbWVudFN0YXJ0LCBjb25uZWN0aW9uLnNvdXJjZSwgYXhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnRFbmRJbmRleCA9PT0gd2F5cG9pbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNlZ21lbnRFbmQgPSBnZXREb2NraW5nKHNlZ21lbnRFbmQsIGNvbm5lY3Rpb24udGFyZ2V0LCBheGlzKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XG4gICAgICBkcmFnUG9zaXRpb24gPSBpbnRlcnNlY3Rpb24ucG9pbnQ7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gc2V0IHRvIHNlZ21lbnQgY2VudGVyIGFzIGRlZmF1bHRcbiAgICAgIGRyYWdQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogKHNlZ21lbnRTdGFydC54ICsgc2VnbWVudEVuZC54KSAvIDIsXG4gICAgICAgIHk6IChzZWdtZW50U3RhcnQueSArIHNlZ21lbnRFbmQueSkgLyAyXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnRleHQgPSB7XG4gICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgc2VnbWVudFN0YXJ0SW5kZXg6IHNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgc2VnbWVudEVuZEluZGV4OiBzZWdtZW50RW5kSW5kZXgsXG4gICAgICBzZWdtZW50U3RhcnQ6IHNlZ21lbnRTdGFydCxcbiAgICAgIHNlZ21lbnRFbmQ6IHNlZ21lbnRFbmQsXG4gICAgICBheGlzOiBheGlzLFxuICAgICAgZHJhZ1Bvc2l0aW9uOiBkcmFnUG9zaXRpb25cbiAgICB9O1xuXG4gICAgZHJhZ2dpbmcuaW5pdChldmVudCwgZHJhZ1Bvc2l0aW9uLCAnY29ubmVjdGlvblNlZ21lbnQubW92ZScsIHtcbiAgICAgIGN1cnNvcjogYXhpcyA9PT0gJ3gnID8gJ3Jlc2l6ZS1ldycgOiAncmVzaXplLW5zJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkdmeDogZ2Z4LFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyb3AgY29ubmVjdGlvbiBpZiBjb25uZWN0aW9uIGNyb3BwaW5nIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxQb2ludD59IG5ld1dheXBvaW50c1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IGNyb3BwZWQgY29ubmVjdGlvbiB3YXlwb2ludHNcbiAgICovXG4gIGZ1bmN0aW9uIGNyb3BDb25uZWN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cykge1xuXG4gICAgLy8gY3JvcCBjb25uZWN0aW9uLCBpZiBkb2NraW5nIHNlcnZpY2UgaXMgcHJvdmlkZWQgb25seVxuICAgIGlmICghY29ubmVjdGlvbkRvY2tpbmcpIHtcbiAgICAgIHJldHVybiBuZXdXYXlwb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIG9sZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBjcm9wcGVkV2F5cG9pbnRzO1xuXG4gICAgLy8gdGVtcG9yYXJ5IHNldCBuZXcgd2F5cG9pbnRzXG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgICBjcm9wcGVkV2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICAgIC8vIHJlc3RvcmUgb2xkIHdheXBvaW50c1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gb2xkV2F5cG9pbnRzO1xuXG4gICAgcmV0dXJuIGNyb3BwZWRXYXlwb2ludHM7XG4gIH1cblxuICAvLyBEUkFHR0lORyBJTVBMRU1FTlRBVElPTlxuXG4gIGZ1bmN0aW9uIHJlZHJhd0Nvbm5lY3Rpb24oZGF0YSkge1xuICAgIGdyYXBoaWNzRmFjdG9yeS51cGRhdGUoJ2Nvbm5lY3Rpb24nLCBkYXRhLmNvbm5lY3Rpb24sIGRhdGEuY29ubmVjdGlvbkdmeCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVEcmFnZ2VyKGNvbnRleHQsIHNlZ21lbnRPZmZzZXQsIGV2ZW50KSB7XG5cbiAgICB2YXIgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMsXG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5zZWdtZW50U3RhcnRJbmRleCArIHNlZ21lbnRPZmZzZXQsXG4gICAgICAgIHNlZ21lbnRTdGFydCA9IG5ld1dheXBvaW50c1tzZWdtZW50U3RhcnRJbmRleF0sXG4gICAgICAgIHNlZ21lbnRFbmRJbmRleCA9IGNvbnRleHQuc2VnbWVudEVuZEluZGV4ICsgc2VnbWVudE9mZnNldCxcbiAgICAgICAgc2VnbWVudEVuZCA9IG5ld1dheXBvaW50c1tzZWdtZW50RW5kSW5kZXhdLFxuICAgICAgICBheGlzID0gZmxpcEF4aXMoY29udGV4dC5heGlzKTtcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgZHJhZ2dlciBkb2VzIG5vdCBtb3ZlXG4gICAgLy8gb3V0c2lkZSB0aGUgY29ubmVjdGlvblxuICAgIHZhciBkcmFnZ2VyUG9zaXRpb24gPSBheGlzRmVuY2VkKGV2ZW50LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGF4aXMpO1xuXG4gICAgLy8gdXBkYXRlIGRyYWdnZXJcbiAgICB0cmFuc2xhdGUoY29udGV4dC5kcmFnZ2VyR2Z4LCBkcmFnZ2VyUG9zaXRpb24ueCwgZHJhZ2dlclBvc2l0aW9uLnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB3YXlwb2ludHMgZm9yIHJlZHVuZGFudCBvbmVzIChpLmUuIG9uIHRoZSBzYW1lIGF4aXMpLlxuICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCB3YXlwb2ludHMgYW5kIHRoZSBvZmZzZXQgcmVsYXRlZCB0byB0aGUgc2VnbWVudCBtb3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc2VnbWVudFN0YXJ0SW5kZXggb2YgbW92ZWQgc2VnbWVudCBzdGFydFxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHsgZmlsdGVyZWRXYXlwb2ludHMsIHNlZ21lbnRPZmZzZXQgfVxuICAgKi9cbiAgZnVuY3Rpb24gZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKHdheXBvaW50cywgc2VnbWVudFN0YXJ0SW5kZXgpIHtcblxuICAgIHZhciBzZWdtZW50T2Zmc2V0ID0gMDtcblxuICAgIHZhciBmaWx0ZXJlZFdheXBvaW50cyA9IHdheXBvaW50cy5maWx0ZXIoZnVuY3Rpb24ociwgaWR4KSB7XG4gICAgICBpZiAocG9pbnRzT25MaW5lKHdheXBvaW50c1tpZHggLSAxXSwgd2F5cG9pbnRzW2lkeCArIDFdLCByKSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBwb2ludCBhbmQgaW5jcmVtZW50IG9mZnNldFxuICAgICAgICBzZWdtZW50T2Zmc2V0ID0gaWR4IDw9IHNlZ21lbnRTdGFydEluZGV4ID8gc2VnbWVudE9mZnNldCAtIDEgOiBzZWdtZW50T2Zmc2V0O1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGRvbnQgcmVtb3ZlIHBvaW50XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB3YXlwb2ludHM6IGZpbHRlcmVkV2F5cG9pbnRzLFxuICAgICAgc2VnbWVudE9mZnNldDogc2VnbWVudE9mZnNldFxuICAgIH07XG4gIH1cblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBldmVudC5jb25uZWN0aW9uLFxuICAgICAgICBsYXllciA9IGNhbnZhcy5nZXRMYXllcignb3ZlcmxheXMnKTtcblxuICAgIGNvbnRleHQub3JpZ2luYWxXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cy5zbGljZSgpO1xuXG4gICAgLy8gYWRkIGRyYWdnZXIgZ2Z4XG4gICAgY29udGV4dC5kcmFnZ2VyR2Z4ID0gYWRkU2VnbWVudERyYWdnZXIobGF5ZXIsIGNvbnRleHQuc2VnbWVudFN0YXJ0LCBjb250ZXh0LnNlZ21lbnRFbmQpO1xuICAgIHN2Z0NsYXNzZXMoY29udGV4dC5kcmFnZ2VyR2Z4KS5hZGQoJ2Rqcy1kcmFnZ2luZycpO1xuXG4gICAgY2FudmFzLmFkZE1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfQ09OTkVDVF9VUERBVElORyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzZWdtZW50U3RhcnRJbmRleCA9IGNvbnRleHQuc2VnbWVudFN0YXJ0SW5kZXgsXG4gICAgICAgIHNlZ21lbnRFbmRJbmRleCA9IGNvbnRleHQuc2VnbWVudEVuZEluZGV4LFxuICAgICAgICBzZWdtZW50U3RhcnQgPSBjb250ZXh0LnNlZ21lbnRTdGFydCxcbiAgICAgICAgc2VnbWVudEVuZCA9IGNvbnRleHQuc2VnbWVudEVuZCxcbiAgICAgICAgYXhpcyA9IGNvbnRleHQuYXhpcztcblxuICAgIHZhciBuZXdXYXlwb2ludHMgPSBjb250ZXh0Lm9yaWdpbmFsV2F5cG9pbnRzLnNsaWNlKCksXG4gICAgICAgIG5ld1NlZ21lbnRTdGFydCA9IGF4aXNBZGQoc2VnbWVudFN0YXJ0LCBheGlzLCBldmVudFsnZCcgKyBheGlzXSksXG4gICAgICAgIG5ld1NlZ21lbnRFbmQgPSBheGlzQWRkKHNlZ21lbnRFbmQsIGF4aXMsIGV2ZW50WydkJyArIGF4aXNdKTtcblxuICAgIC8vIG9yaWdpbmFsIHdheXBvaW50IGNvdW50IGFuZCBhZGRlZCAvIHJlbW92ZWRcbiAgICAvLyBmcm9tIHN0YXJ0IHdheXBvaW50IGRlbHRhLiBXZSB1c2UgdGhlIGxhdGVyXG4gICAgLy8gdG8gcmV0cmlldmUgdGhlIHVwZGF0ZWQgc2VnbWVudFN0YXJ0SW5kZXggLyBzZWdtZW50RW5kSW5kZXhcbiAgICB2YXIgd2F5cG9pbnRDb3VudCA9IG5ld1dheXBvaW50cy5sZW5ndGgsXG4gICAgICAgIHNlZ21lbnRPZmZzZXQgPSAwO1xuXG4gICAgLy8gbW92ZSBzZWdtZW50IHN0YXJ0IC8gZW5kIGJ5IGF4aXMgZGVsdGFcbiAgICBuZXdXYXlwb2ludHNbc2VnbWVudFN0YXJ0SW5kZXhdID0gbmV3U2VnbWVudFN0YXJ0O1xuICAgIG5ld1dheXBvaW50c1tzZWdtZW50RW5kSW5kZXhdID0gbmV3U2VnbWVudEVuZDtcblxuICAgIHZhciBzb3VyY2VUb1NlZ21lbnRPcmllbnRhdGlvbixcbiAgICAgICAgdGFyZ2V0VG9TZWdtZW50T3JpZW50YXRpb247XG5cbiAgICAvLyBoYW5kbGUgZmlyc3Qgc2VnbWVudFxuICAgIGlmIChzZWdtZW50U3RhcnRJbmRleCA8IDIpIHtcbiAgICAgIHNvdXJjZVRvU2VnbWVudE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oY29ubmVjdGlvbi5zb3VyY2UsIG5ld1NlZ21lbnRTdGFydCk7XG5cbiAgICAgIC8vIGZpcnN0IGJlbmRwb2ludCwgcmVtb3ZlIGZpcnN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPT09IDEpIHtcblxuICAgICAgICBpZiAoc291cmNlVG9TZWdtZW50T3JpZW50YXRpb24gPT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzWzBdID0gbmV3U2VnbWVudFN0YXJ0O1xuICAgICAgICAgIHNlZ21lbnRPZmZzZXQtLTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkb2NraW5nIHBvaW50LCBhZGQgc2VnbWVudCBpZiBub3QgaW50ZXJzZWN0aW5nIGFueW1vcmVcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoc291cmNlVG9TZWdtZW50T3JpZW50YXRpb24gIT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzLnVuc2hpZnQoc2VnbWVudFN0YXJ0KTtcbiAgICAgICAgICBzZWdtZW50T2Zmc2V0Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbGFzdCBzZWdtZW50XG4gICAgaWYgKHNlZ21lbnRFbmRJbmRleCA+IHdheXBvaW50Q291bnQgLSAzKSB7XG4gICAgICB0YXJnZXRUb1NlZ21lbnRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKGNvbm5lY3Rpb24udGFyZ2V0LCBuZXdTZWdtZW50RW5kKTtcblxuICAgICAgLy8gbGFzdCBiZW5kcG9pbnQsIHJlbW92ZSBsYXN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBpZiAoc2VnbWVudEVuZEluZGV4ID09PSB3YXlwb2ludENvdW50IC0gMikge1xuXG4gICAgICAgIGlmICh0YXJnZXRUb1NlZ21lbnRPcmllbnRhdGlvbiA9PT0gJ2ludGVyc2VjdCcpIHtcbiAgICAgICAgICBuZXdXYXlwb2ludHMucG9wKCk7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzW25ld1dheXBvaW50cy5sZW5ndGggLSAxXSA9IG5ld1NlZ21lbnRFbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gbGFzdCBiZW5kcG9pbnQsIHJlbW92ZSBsYXN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldFRvU2VnbWVudE9yaWVudGF0aW9uICE9PSAnaW50ZXJzZWN0Jykge1xuICAgICAgICAgIG5ld1dheXBvaW50cy5wdXNoKHNlZ21lbnRFbmQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGNvbm5lY3Rpb24gd2F5cG9pbnRzXG4gICAgY29udGV4dC5uZXdXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyA9IGNyb3BDb25uZWN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG5cbiAgICAvLyB1cGRhdGUgZHJhZ2dlciBwb3NpdGlvblxuICAgIHVwZGF0ZURyYWdnZXIoY29udGV4dCwgc2VnbWVudE9mZnNldCwgZXZlbnQpO1xuXG4gICAgLy8gc2F2ZSBzZWdtZW50T2Zmc2V0IGluIGNvbnRleHRcbiAgICBjb250ZXh0Lm5ld1NlZ21lbnRTdGFydEluZGV4ID0gc2VnbWVudFN0YXJ0SW5kZXggKyBzZWdtZW50T2Zmc2V0O1xuXG4gICAgLy8gcmVkcmF3IGNvbm5lY3Rpb25cbiAgICByZWRyYXdDb25uZWN0aW9uKGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgZXZlbnQuY29udGV4dC5ob3ZlciA9IGV2ZW50LmhvdmVyO1xuICAgIGNhbnZhcy5hZGRNYXJrZXIoZXZlbnQuaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLm91dCcsXG4gICAgJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuY2xlYW51cCdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIHJlbW92ZSBjb25uZWN0IG1hcmtlclxuICAgIC8vIGlmIGl0IHdhcyBhZGRlZFxuICAgIHZhciBob3ZlciA9IGV2ZW50LmNvbnRleHQuaG92ZXI7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIGRyYWdnZXIgZ2Z4XG4gICAgaWYgKGNvbnRleHQuZHJhZ2dlckdmeCkge1xuICAgICAgc3ZnUmVtb3ZlKGNvbnRleHQuZHJhZ2dlckdmeCk7XG4gICAgfVxuXG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfQ09OTkVDVF9VUERBVElORyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5jYW5jZWwnLFxuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmVuZCdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IGNvbnRleHQub3JpZ2luYWxXYXlwb2ludHM7XG5cbiAgICByZWRyYXdDb25uZWN0aW9uKGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMsXG4gICAgICAgIG5ld1NlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5uZXdTZWdtZW50U3RhcnRJbmRleDtcblxuICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGFjdHVhbCBwaXhlbCB2YWx1ZXMgYmVuZHBvaW50XG4gICAgLy8gY29vcmRpbmF0ZXMgKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICBuZXdXYXlwb2ludHMgPSBuZXdXYXlwb2ludHMubWFwKGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9yaWdpbmFsOiBwLm9yaWdpbmFsLFxuICAgICAgICB4OiBNYXRoLnJvdW5kKHAueCksXG4gICAgICAgIHk6IE1hdGgucm91bmQocC55KVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIGFwcGx5IGZpbHRlciByZWR1bmFudCB3YXlwb2ludHNcbiAgICB2YXIgZmlsdGVyZWQgPSBmaWx0ZXJSZWR1bmRhbnRXYXlwb2ludHMobmV3V2F5cG9pbnRzLCBuZXdTZWdtZW50U3RhcnRJbmRleCk7XG5cbiAgICAvLyBnZXQgZmlsdGVyZWQgd2F5cG9pbnRzXG4gICAgdmFyIGZpbHRlcmVkV2F5cG9pbnRzID0gZmlsdGVyZWQud2F5cG9pbnRzLFxuICAgICAgICBjcm9wcGVkV2F5cG9pbnRzID0gY3JvcENvbm5lY3Rpb24oY29ubmVjdGlvbiwgZmlsdGVyZWRXYXlwb2ludHMpLFxuICAgICAgICBzZWdtZW50T2Zmc2V0ID0gZmlsdGVyZWQuc2VnbWVudE9mZnNldDtcblxuICAgIHZhciBoaW50cyA9IHtcbiAgICAgIHNlZ21lbnRNb3ZlOiB7XG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4OiBjb250ZXh0LnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBuZXdTZWdtZW50U3RhcnRJbmRleDogbmV3U2VnbWVudFN0YXJ0SW5kZXggKyBzZWdtZW50T2Zmc2V0XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1vZGVsaW5nLnVwZGF0ZVdheXBvaW50cyhjb25uZWN0aW9uLCBjcm9wcGVkV2F5cG9pbnRzLCBoaW50cyk7XG4gIH0pO1xufVxuXG5Db25uZWN0aW9uU2VnbWVudE1vdmUuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdncmFwaGljc0ZhY3RvcnknLFxuICAnbW9kZWxpbmcnXG5dO1xuIiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBCZW5kcG9pbnRzIGZyb20gJy4vQmVuZHBvaW50cyc7XG5pbXBvcnQgQmVuZHBvaW50TW92ZSBmcm9tICcuL0JlbmRwb2ludE1vdmUnO1xuaW1wb3J0IEJlbmRwb2ludE1vdmVQcmV2aWV3IGZyb20gJy4vQmVuZHBvaW50TW92ZVByZXZpZXcnO1xuaW1wb3J0IENvbm5lY3Rpb25TZWdtZW50TW92ZSBmcm9tICcuL0Nvbm5lY3Rpb25TZWdtZW50TW92ZSc7XG5pbXBvcnQgQmVuZHBvaW50U25hcHBpbmcgZnJvbSAnLi9CZW5kcG9pbnRTbmFwcGluZyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdiZW5kcG9pbnRzJywgJ2JlbmRwb2ludFNuYXBwaW5nJywgJ2JlbmRwb2ludE1vdmVQcmV2aWV3JyBdLFxuICBiZW5kcG9pbnRzOiBbICd0eXBlJywgQmVuZHBvaW50cyBdLFxuICBiZW5kcG9pbnRNb3ZlOiBbICd0eXBlJywgQmVuZHBvaW50TW92ZSBdLFxuICBiZW5kcG9pbnRNb3ZlUHJldmlldzogWyAndHlwZScsIEJlbmRwb2ludE1vdmVQcmV2aWV3IF0sXG4gIGNvbm5lY3Rpb25TZWdtZW50TW92ZTogWyAndHlwZScsIENvbm5lY3Rpb25TZWdtZW50TW92ZSBdLFxuICBiZW5kcG9pbnRTbmFwcGluZzogWyAndHlwZScsIEJlbmRwb2ludFNuYXBwaW5nIF1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRUeXBlIGFzIGdldEVsZW1lbnRUeXBlXG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG4vKipcbiAqIEFkZHMgY2hhbmdlIHN1cHBvcnQgdG8gdGhlIGRpYWdyYW0sIGluY2x1ZGluZ1xuICpcbiAqIDx1bD5cbiAqICAgPGxpPnJlZHJhd2luZyBzaGFwZXMgYW5kIGNvbm5lY3Rpb25zIG9uIGNoYW5nZTwvbGk+XG4gKiA8L3VsPlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0dyYXBoaWNzRmFjdG9yeX0gZ3JhcGhpY3NGYWN0b3J5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENoYW5nZVN1cHBvcnQoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGdyYXBoaWNzRmFjdG9yeSkge1xuXG5cbiAgLy8gcmVkcmF3IHNoYXBlcyAvIGNvbm5lY3Rpb25zIG9uIGNoYW5nZVxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgLy8gZWxlbWVudCBtaWdodCBoYXZlIGJlZW4gZGVsZXRlZCBhbmQgcmVwbGFjZWQgYnkgbmV3IGVsZW1lbnQgd2l0aCBzYW1lIElEXG4gICAgLy8gdGh1cyBjaGVjayBmb3IgcGFyZW50IG9mIGVsZW1lbnQgZXhjZXB0IGZvciByb290IGVsZW1lbnRcbiAgICBpZiAoZWxlbWVudC5wYXJlbnQgfHwgZWxlbWVudCA9PT0gY2FudmFzLmdldFJvb3RFbGVtZW50KCkpIHtcbiAgICAgIGV2ZW50LmdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBzaGFwZSArIGdmeCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWRcbiAgICBpZiAoIWV2ZW50LmdmeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50QnVzLmZpcmUoZ2V0RWxlbWVudFR5cGUoZWxlbWVudCkgKyAnLmNoYW5nZWQnLCBldmVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50cy5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50cyA9IGV2ZW50LmVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICBldmVudEJ1cy5maXJlKCdlbGVtZW50LmNoYW5nZWQnLCB7IGVsZW1lbnQ6IGUgfSk7XG4gICAgfSk7XG5cbiAgICBncmFwaGljc0ZhY3RvcnkudXBkYXRlQ29udGFpbm1lbnRzKGVsZW1lbnRzKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGdyYXBoaWNzRmFjdG9yeS51cGRhdGUoJ3NoYXBlJywgZXZlbnQuZWxlbWVudCwgZXZlbnQuZ2Z4KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZ3JhcGhpY3NGYWN0b3J5LnVwZGF0ZSgnY29ubmVjdGlvbicsIGV2ZW50LmVsZW1lbnQsIGV2ZW50LmdmeCk7XG4gIH0pO1xufVxuXG5DaGFuZ2VTdXBwb3J0LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2dyYXBoaWNzRmFjdG9yeSdcbl07IiwiaW1wb3J0IENoYW5nZVN1cHBvcnQgZnJvbSAnLi9DaGFuZ2VTdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnY2hhbmdlU3VwcG9ydCddLFxuICBjaGFuZ2VTdXBwb3J0OiBbICd0eXBlJywgQ2hhbmdlU3VwcG9ydCBdXG59OyIsIi8qKlxuICogQSBjbGlwIGJvYXJkIHN0dWJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2xpcGJvYXJkKCkge31cblxuXG5DbGlwYm9hcmQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZGF0YTtcbn07XG5cbkNsaXBib2FyZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLl9kYXRhID0gZGF0YTtcbn07XG5cbkNsaXBib2FyZC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gIGRlbGV0ZSB0aGlzLl9kYXRhO1xuXG4gIHJldHVybiBkYXRhO1xufTtcblxuQ2xpcGJvYXJkLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5fZGF0YTtcbn07IiwiaW1wb3J0IENsaXBib2FyZCBmcm9tICcuL0NsaXBib2FyZCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY2xpcGJvYXJkOiBbICd0eXBlJywgQ2xpcGJvYXJkIF1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRNaWRcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc05pbCxcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbm5lY3QoZXZlbnRCdXMsIGRyYWdnaW5nLCBtb2RlbGluZywgcnVsZXMpIHtcblxuICAvLyBydWxlc1xuXG4gIGZ1bmN0aW9uIGNhbkNvbm5lY3Qoc291cmNlLCB0YXJnZXQpIHtcbiAgICByZXR1cm4gcnVsZXMuYWxsb3dlZCgnY29ubmVjdGlvbi5jcmVhdGUnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5Db25uZWN0UmV2ZXJzZShzb3VyY2UsIHRhcmdldCkge1xuICAgIHJldHVybiBjYW5Db25uZWN0KHRhcmdldCwgc291cmNlKTtcbiAgfVxuXG5cbiAgLy8gZXZlbnQgaGFuZGxlcnNcblxuICBldmVudEJ1cy5vbignY29ubmVjdC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzdGFydCA9IGNvbnRleHQuc3RhcnQsXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXG4gICAgICAgIGNhbkV4ZWN1dGU7XG5cbiAgICAvLyBjYWNoZSBob3ZlciBzdGF0ZVxuICAgIGNvbnRleHQuaG92ZXIgPSBob3ZlcjtcblxuICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5Db25uZWN0KHN0YXJ0LCBob3Zlcik7XG5cbiAgICAvLyBpZ25vcmUgaG92ZXJcbiAgICBpZiAoaXNOaWwoY2FuRXhlY3V0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRleHQuc291cmNlID0gc3RhcnQ7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IGhvdmVyO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSA9IGNhbkNvbm5lY3RSZXZlcnNlKHN0YXJ0LCBob3Zlcik7XG5cbiAgICAvLyBpZ25vcmUgaG92ZXJcbiAgICBpZiAoaXNOaWwoY2FuRXhlY3V0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRleHQuc291cmNlID0gaG92ZXI7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IHN0YXJ0O1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY29ubmVjdC5vdXQnLCAnY29ubmVjdC5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIGNvbnRleHQuaG92ZXIgPSBudWxsO1xuICAgIGNvbnRleHQuc291cmNlID0gbnVsbDtcbiAgICBjb250ZXh0LnRhcmdldCA9IG51bGw7XG5cbiAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGNvbnRleHQuY29ubmVjdGlvblN0YXJ0LFxuICAgICAgICBjb25uZWN0aW9uRW5kID0ge1xuICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoIWNhbkV4ZWN1dGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYXR0cnMgPSBudWxsLFxuICAgICAgICBoaW50cyA9IHtcbiAgICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IGlzUmV2ZXJzZShjb250ZXh0KSA/IGNvbm5lY3Rpb25FbmQgOiBjb25uZWN0aW9uU3RhcnQsXG4gICAgICAgICAgY29ubmVjdGlvbkVuZDogaXNSZXZlcnNlKGNvbnRleHQpID8gY29ubmVjdGlvblN0YXJ0IDogY29ubmVjdGlvbkVuZFxuICAgICAgICB9O1xuXG4gICAgaWYgKGlzT2JqZWN0KGNhbkV4ZWN1dGUpKSB7XG4gICAgICBhdHRycyA9IGNhbkV4ZWN1dGU7XG4gICAgfVxuXG4gICAgbW9kZWxpbmcuY29ubmVjdChzb3VyY2UsIHRhcmdldCwgYXR0cnMsIGhpbnRzKTtcbiAgfSk7XG5cblxuICAvLyBBUElcblxuICAvKipcbiAgICogU3RhcnQgY29ubmVjdCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHN0YXJ0XG4gICAqIEBwYXJhbSB7UG9pbnR9IFtjb25uZWN0aW9uU3RhcnRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2F1dG9BY3RpdmF0ZT1mYWxzZV1cbiAgICovXG4gIHRoaXMuc3RhcnQgPSBmdW5jdGlvbihldmVudCwgc3RhcnQsIGNvbm5lY3Rpb25TdGFydCwgYXV0b0FjdGl2YXRlKSB7XG4gICAgaWYgKCFpc09iamVjdChjb25uZWN0aW9uU3RhcnQpKSB7XG4gICAgICBhdXRvQWN0aXZhdGUgPSBjb25uZWN0aW9uU3RhcnQ7XG4gICAgICBjb25uZWN0aW9uU3RhcnQgPSBnZXRNaWQoc3RhcnQpO1xuICAgIH1cblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsICdjb25uZWN0Jywge1xuICAgICAgYXV0b0FjdGl2YXRlOiBhdXRvQWN0aXZhdGUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNoYXBlOiBzdGFydCxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IGNvbm5lY3Rpb25TdGFydFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbkNvbm5lY3QuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmV2ZXJzZShjb250ZXh0KSB7XG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gIHJldHVybiBob3ZlciAmJiBzb3VyY2UgJiYgaG92ZXIgPT09IHNvdXJjZSAmJiBzb3VyY2UgIT09IHRhcmdldDtcbn0iLCJpbXBvcnQgeyBpc1JldmVyc2UgfSBmcm9tICcuL0Nvbm5lY3QnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDExMDAsXG4gICAgTE9XX1BSSU9SSVRZID0gOTAwO1xuXG52YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snO1xuXG4vKipcbiAqIFNob3dzIGNvbm5lY3Rpb24gcHJldmlldyBkdXJpbmcgY29ubmVjdC5cbiAqXG4gKiBAcGFyYW0ge2RpZGkuSW5qZWN0b3J9IGluamVjdG9yXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb25uZWN0UHJldmlldyhpbmplY3RvciwgZXZlbnRCdXMsIGNhbnZhcykge1xuICB2YXIgY29ubmVjdGlvblByZXZpZXcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25QcmV2aWV3JywgZmFsc2UpO1xuXG4gIGNvbm5lY3Rpb25QcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdjb25uZWN0Lm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY2FuQ29ubmVjdCA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0LFxuICAgICAgICBzdGFydFBvc2l0aW9uID0gY29udGV4dC5zdGFydFBvc2l0aW9uLFxuICAgICAgICBjb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCxcbiAgICAgICAgY29ubmVjdGlvbkVuZCA9IGNvbnRleHQuY29ubmVjdGlvbkVuZCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb25TdGFydCkge1xuICAgICAgY29ubmVjdGlvblN0YXJ0ID0gaXNSZXZlcnNlKGNvbnRleHQpID8ge1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55XG4gICAgICB9IDogc3RhcnRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbm5lY3Rpb25FbmQpIHtcbiAgICAgIGNvbm5lY3Rpb25FbmQgPSBpc1JldmVyc2UoY29udGV4dCkgPyBzdGFydFBvc2l0aW9uIDoge1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbm5lY3Rpb25QcmV2aWV3LmRyYXdQcmV2aWV3KGNvbnRleHQsIGNhbkNvbm5lY3QsIHtcbiAgICAgIHNvdXJjZTogc291cmNlIHx8IHN0YXJ0LFxuICAgICAgdGFyZ2V0OiB0YXJnZXQgfHwgaG92ZXIsXG4gICAgICBjb25uZWN0aW9uU3RhcnQ6IGNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQ6IGNvbm5lY3Rpb25FbmRcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuaG92ZXInLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlO1xuXG4gICAgLy8gaWdub3JlIGhvdmVyXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBjYW5FeGVjdXRlID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY29ubmVjdC5vdXQnLFxuICAgICdjb25uZWN0LmNsZWFudXAnXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGhvdmVyID0gZXZlbnQuaG92ZXI7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9PSyk7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfTk9UX09LKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbm5lY3Rpb25QcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdjb25uZWN0LmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGNvbm5lY3Rpb25QcmV2aWV3LmNsZWFuVXAoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xufVxuXG5Db25uZWN0UHJldmlldy4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJ1xuXTtcbiIsImltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5pbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuXG5pbXBvcnQgQ29ubmVjdCBmcm9tICcuL0Nvbm5lY3QnO1xuaW1wb3J0IENvbm5lY3RQcmV2aWV3IGZyb20gJy4vQ29ubmVjdFByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgU2VsZWN0aW9uTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIERyYWdnaW5nTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ2Nvbm5lY3RQcmV2aWV3J1xuICBdLFxuICBjb25uZWN0OiBbICd0eXBlJywgQ29ubmVjdCBdLFxuICBjb25uZWN0UHJldmlldzogWyAndHlwZScsIENvbm5lY3RQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZSxcbiAgY2xlYXIgYXMgc3ZnQ2xlYXJcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uLFxuICBnZXRNaWRcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5cbnZhciBNQVJLRVJfQ09OTkVDVElPTl9QUkVWSUVXID0gJ2Rqcy1jb25uZWN0aW9uLXByZXZpZXcnO1xuXG4vKipcbiAqIERyYXdzIGNvbm5lY3Rpb24gcHJldmlldy4gT3B0aW9uYWxseSwgdGhpcyBjYW4gdXNlIGxheW91dGVyIGFuZCBjb25uZWN0aW9uIGRvY2tpbmcgdG8gZHJhd1xuICogYmV0dGVyIGxvb2tpbmcgcHJldmlld3MuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtHcmFwaGljc0ZhY3Rvcnl9IGdyYXBoaWNzRmFjdG9yeVxuICogQHBhcmFtIHtFbGVtZW50RmFjdG9yeX0gZWxlbWVudEZhY3RvcnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29ubmVjdGlvblByZXZpZXcoXG4gICAgaW5qZWN0b3IsXG4gICAgY2FudmFzLFxuICAgIGdyYXBoaWNzRmFjdG9yeSxcbiAgICBlbGVtZW50RmFjdG9yeVxuKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuXG4gIC8vIG9wdGlvbmFsIGNvbXBvbmVudHNcbiAgdGhpcy5fY29ubmVjdGlvbkRvY2tpbmcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25Eb2NraW5nJywgZmFsc2UpO1xuICB0aGlzLl9sYXlvdXRlciA9IGluamVjdG9yLmdldCgnbGF5b3V0ZXInLCBmYWxzZSk7XG59XG5cbkNvbm5lY3Rpb25QcmV2aWV3LiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdjYW52YXMnLFxuICAnZ3JhcGhpY3NGYWN0b3J5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5J1xuXTtcblxuLyoqXG4gKiBEcmF3IGNvbm5lY3Rpb24gcHJldmlldy5cbiAqXG4gKiBQcm92aWRlIGF0IGxlYXN0IG9uZSBvZiA8c291cmNlLCBjb25uZWN0aW9uU3RhcnQ+IGFuZCA8dGFyZ2V0LCBjb25uZWN0aW9uRW5kPiB0byBjcmVhdGUgYSBwcmV2aWV3LlxuICogSW4gdGhlIGNsZWFuIHVwIHN0YWdlLCBjYWxsIGBjb25uZWN0aW9uUHJldmlldyNjbGVhblVwYCB3aXRoIHRoZSBjb250ZXh0IHRvIHJlbW92ZSBwcmV2aWV3LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdHxib29sZWFufSBjYW5Db25uZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBbaGludHMuc291cmNlXSBzb3VyY2UgZWxlbWVudFxuICogQHBhcmFtIHtkanMubW9kZWwuc2hhcGV9IFtoaW50cy50YXJnZXRdIHRhcmdldCBlbGVtZW50XG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvblN0YXJ0XSBjb25uZWN0aW9uIHByZXZpZXcgc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uRW5kXSBjb25uZWN0aW9uIHByZXZpZXcgZW5kXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gW2hpbnRzLndheXBvaW50c10gcHJvdmlkZWQgd2F5cG9pbnRzIGZvciBwcmV2aWV3XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5ub0xheW91dF0gdHJ1ZSBpZiBwcmV2aWV3IHNob3VsZCBub3QgYmUgbGFpZCBvdXRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpbnRzLm5vQ3JvcHBpbmddIHRydWUgaWYgcHJldmlldyBzaG91bGQgbm90IGJlIGNyb3BwZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpbnRzLm5vTm9vcF0gdHJ1ZSBpZiBzaW1wbGUgY29ubmVjdGlvbiBzaG91bGQgbm90IGJlIGRyYXduXG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5kcmF3UHJldmlldyA9IGZ1bmN0aW9uKGNvbnRleHQsIGNhbkNvbm5lY3QsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICB2YXIgY29ubmVjdGlvblByZXZpZXdHZnggPSBjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4LFxuICAgICAgZ2V0Q29ubmVjdGlvbiA9IGNvbnRleHQuZ2V0Q29ubmVjdGlvbixcbiAgICAgIHNvdXJjZSA9IGhpbnRzLnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGhpbnRzLnRhcmdldCxcbiAgICAgIHdheXBvaW50cyA9IGhpbnRzLndheXBvaW50cyxcbiAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGhpbnRzLmNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kLFxuICAgICAgbm9MYXlvdXQgPSBoaW50cy5ub0xheW91dCxcbiAgICAgIG5vQ3JvcHBpbmcgPSBoaW50cy5ub0Nyb3BwaW5nLFxuICAgICAgbm9Ob29wID0gaGludHMubm9Ob29wLFxuICAgICAgY29ubmVjdGlvbjtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKCFjb25uZWN0aW9uUHJldmlld0dmeCkge1xuICAgIGNvbm5lY3Rpb25QcmV2aWV3R2Z4ID0gY29udGV4dC5jb25uZWN0aW9uUHJldmlld0dmeCA9IHRoaXMuY3JlYXRlQ29ubmVjdGlvblByZXZpZXdHZngoKTtcbiAgfVxuXG4gIHN2Z0NsZWFyKGNvbm5lY3Rpb25QcmV2aWV3R2Z4KTtcblxuICBpZiAoIWdldENvbm5lY3Rpb24pIHtcbiAgICBnZXRDb25uZWN0aW9uID0gY29udGV4dC5nZXRDb25uZWN0aW9uID0gY2FjaGVSZXR1cm5WYWx1ZXMoZnVuY3Rpb24oY2FuQ29ubmVjdCwgc291cmNlLCB0YXJnZXQpIHtcbiAgICAgIHJldHVybiBzZWxmLmdldENvbm5lY3Rpb24oY2FuQ29ubmVjdCwgc291cmNlLCB0YXJnZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNhbkNvbm5lY3QpIHtcbiAgICBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbihjYW5Db25uZWN0LCBzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAhbm9Ob29wICYmIHRoaXMuZHJhd05vb3BQcmV2aWV3KGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBoaW50cyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSB3YXlwb2ludHMgfHwgW107XG5cbiAgLy8gb3B0aW9uYWwgbGF5b3V0XG4gIGlmICh0aGlzLl9sYXlvdXRlciAmJiAhbm9MYXlvdXQpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2xheW91dGVyLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNvbm5lY3Rpb25TdGFydDogY29ubmVjdGlvblN0YXJ0LFxuICAgICAgY29ubmVjdGlvbkVuZDogY29ubmVjdGlvbkVuZCxcbiAgICAgIHdheXBvaW50czogaGludHMud2F5cG9pbnRzIHx8IGNvbm5lY3Rpb24ud2F5cG9pbnRzXG4gICAgfSk7XG4gIH1cblxuICAvLyBmYWxsYmFjayBpZiBubyB3YXlwb2ludHMgd2VyZSBwcm92aWRlZCBub3IgY3JlYXRlZCB3aXRoIGxheW91dGVyXG4gIGlmICghY29ubmVjdGlvbi53YXlwb2ludHMgfHwgIWNvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCkge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gW1xuICAgICAgc291cmNlID8gZ2V0TWlkKHNvdXJjZSkgOiBjb25uZWN0aW9uU3RhcnQsXG4gICAgICB0YXJnZXQgPyBnZXRNaWQodGFyZ2V0KSA6IGNvbm5lY3Rpb25FbmRcbiAgICBdO1xuICB9XG5cbiAgLy8gb3B0aW9uYWwgY3JvcHBpbmdcbiAgaWYgKHRoaXMuX2Nvbm5lY3Rpb25Eb2NraW5nICYmIChzb3VyY2UgfHwgdGFyZ2V0KSAmJiAhbm9Dcm9wcGluZykge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gdGhpcy5fY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uLCBzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICB0aGlzLl9ncmFwaGljc0ZhY3RvcnkuZHJhd0Nvbm5lY3Rpb24oY29ubmVjdGlvblByZXZpZXdHZngsIGNvbm5lY3Rpb24pO1xufTtcblxuLyoqXG4gKiBEcmF3IHNpbXBsZSBjb25uZWN0aW9uIGJldHdlZW4gc291cmNlIGFuZCB0YXJnZXQgb3IgcHJvdmlkZWQgcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gY29ubmVjdGlvblByZXZpZXdHZnggY29udGFpbmVyIGZvciB0aGUgY29ubmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGhpbnRzXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gW2hpbnRzLnNvdXJjZV0gc291cmNlIGVsZW1lbnRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBbaGludHMudGFyZ2V0XSB0YXJnZXQgZWxlbWVudFxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25TdGFydF0gcmVxdWlyZWQgaWYgc291cmNlIGlzIG5vdCBwcm92aWRlZFxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25FbmRdIHJlcXVpcmVkIGlmIHRhcmdldCBpcyBub3QgcHJvdmlkZWRcbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmRyYXdOb29wUHJldmlldyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBoaW50cykge1xuICB2YXIgc291cmNlID0gaGludHMuc291cmNlLFxuICAgICAgdGFyZ2V0ID0gaGludHMudGFyZ2V0LFxuICAgICAgc3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQgfHwgZ2V0TWlkKHNvdXJjZSksXG4gICAgICBlbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kIHx8IGdldE1pZCh0YXJnZXQpO1xuXG4gIHZhciB3YXlwb2ludHMgPSB0aGlzLmNyb3BXYXlwb2ludHMoc3RhcnQsIGVuZCwgc291cmNlLCB0YXJnZXQpO1xuXG4gIHZhciBjb25uZWN0aW9uID0gdGhpcy5jcmVhdGVOb29wQ29ubmVjdGlvbih3YXlwb2ludHNbMF0sIHdheXBvaW50c1sxXSk7XG5cbiAgc3ZnQXBwZW5kKGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBjb25uZWN0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGNyb3BwZWQgd2F5cG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBlbmRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5jcm9wV2F5cG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc291cmNlLCB0YXJnZXQpIHtcbiAgdmFyIGdyYXBoaWNzRmFjdG9yeSA9IHRoaXMuX2dyYXBoaWNzRmFjdG9yeSxcbiAgICAgIHNvdXJjZVBhdGggPSBzb3VyY2UgJiYgZ3JhcGhpY3NGYWN0b3J5LmdldFNoYXBlUGF0aChzb3VyY2UpLFxuICAgICAgdGFyZ2V0UGF0aCA9IHRhcmdldCAmJiBncmFwaGljc0ZhY3RvcnkuZ2V0U2hhcGVQYXRoKHRhcmdldCksXG4gICAgICBjb25uZWN0aW9uUGF0aCA9IGdyYXBoaWNzRmFjdG9yeS5nZXRDb25uZWN0aW9uUGF0aCh7IHdheXBvaW50czogWyBzdGFydCwgZW5kIF0gfSk7XG5cbiAgc3RhcnQgPSAoc291cmNlICYmIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKHNvdXJjZVBhdGgsIGNvbm5lY3Rpb25QYXRoLCB0cnVlKSkgfHwgc3RhcnQ7XG4gIGVuZCA9ICh0YXJnZXQgJiYgZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb24odGFyZ2V0UGF0aCwgY29ubmVjdGlvblBhdGgsIGZhbHNlKSkgfHwgZW5kO1xuXG4gIHJldHVybiBbIHN0YXJ0LCBlbmQgXTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGNvbm5lY3Rpb24gcHJldmlldyBjb250YWluZXIgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2NvbnRleHQuY29ubmVjdGlvblByZXZpZXdHZnhdIHByZXZpZXcgY29udGFpbmVyXG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5jbGVhblVwID0gZnVuY3Rpb24oY29udGV4dCkge1xuICBpZiAoY29udGV4dCAmJiBjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4KSB7XG4gICAgc3ZnUmVtb3ZlKGNvbnRleHQuY29ubmVjdGlvblByZXZpZXdHZngpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBjb25uZWN0aW9uIHRoYXQgY29ubmVjdHMgc291cmNlIGFuZCB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gY2FuQ29ubmVjdFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuY29ubmVjdGlvbn1cbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmdldENvbm5lY3Rpb24gPSBmdW5jdGlvbihjYW5Db25uZWN0KSB7XG4gIHZhciBhdHRycyA9IGVuc3VyZUNvbm5lY3Rpb25BdHRycyhjYW5Db25uZWN0KTtcblxuICByZXR1cm4gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbihhdHRycyk7XG59O1xuXG5cbi8qKlxuICogQWRkIGFuZCByZXR1cm4gcHJldmlldyBncmFwaGljcy5cbiAqXG4gKiBAcmV0dXJucyB7U1ZHRWxlbWVudH1cbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb25QcmV2aWV3R2Z4ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBnZnggPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdBdHRyKGdmeCwge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICB9KTtcblxuICBzdmdDbGFzc2VzKGdmeCkuYWRkKE1BUktFUl9DT05ORUNUSU9OX1BSRVZJRVcpO1xuXG4gIHN2Z0FwcGVuZCh0aGlzLl9jYW52YXMuZ2V0RGVmYXVsdExheWVyKCksIGdmeCk7XG5cbiAgcmV0dXJuIGdmeDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gc2ltcGxlIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtQb2ludH0gc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IGVuZFxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5Db25uZWN0aW9uUHJldmlldy5wcm90b3R5cGUuY3JlYXRlTm9vcENvbm5lY3Rpb24gPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHZhciBjb25uZWN0aW9uID0gc3ZnQ3JlYXRlKCdwb2x5bGluZScpO1xuXG4gIHN2Z0F0dHIoY29ubmVjdGlvbiwge1xuICAgICdzdHJva2UnOiAnIzMzMycsXG4gICAgJ3N0cm9rZURhc2hhcnJheSc6IFsgMSBdLFxuICAgICdzdHJva2VXaWR0aCc6IDIsXG4gICAgJ3BvaW50ZXItZXZlbnRzJzogJ25vbmUnXG4gIH0pO1xuXG4gIHN2Z0F0dHIoY29ubmVjdGlvbiwgeyAncG9pbnRzJzogWyBzdGFydC54LCBzdGFydC55LCBlbmQueCwgZW5kLnkgXSB9KTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybnMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGNhY2hlZCByZXR1cm4gdmFsdWVzIHJlZmVyZW5jZWQgYnkgc3RyaW5naWZpZWQgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY2FjaGVSZXR1cm5WYWx1ZXMoZm4pIHtcbiAgdmFyIHJldHVyblZhbHVlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gY2FjaGVkIHJldHVybiB2YWx1ZSByZWZlcmVuY2VkIGJ5IHN0cmluZ2lmaWVkIGZpcnN0IGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbihmaXJzdEFyZ3VtZW50KSB7XG4gICAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KGZpcnN0QXJndW1lbnQpO1xuXG4gICAgdmFyIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWVzW2tleV07XG5cbiAgICBpZiAoIXJldHVyblZhbHVlKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlc1trZXldID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH07XG59XG5cbi8qKlxuICogRW5zdXJlIGNvbm5lY3Rpb24gYXR0cmlidXRlcyBpcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gY2FuQ29ubmVjdFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUNvbm5lY3Rpb25BdHRycyhjYW5Db25uZWN0KSB7XG4gIGlmIChpc09iamVjdChjYW5Db25uZWN0KSkge1xuICAgIHJldHVybiBjYW5Db25uZWN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwiaW1wb3J0IENvbm5lY3Rpb25QcmV2aWV3IGZyb20gJy4vQ29ubmVjdGlvblByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdjb25uZWN0aW9uUHJldmlldycgXSxcbiAgY29ubmVjdGlvblByZXZpZXc6IFsgJ3R5cGUnLCBDb25uZWN0aW9uUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBpc0Z1bmN0aW9uLFxuICBpc0FycmF5LFxuICBmb3JFYWNoLFxuICBpc0RlZmluZWRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgZG9taWZ5IGFzIGRvbWlmeVxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIGVudHJ5U2VsZWN0b3IgPSAnLmVudHJ5JztcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG5cbi8qKlxuICogQSBjb250ZXh0IHBhZCB0aGF0IGRpc3BsYXlzIGVsZW1lbnQgc3BlY2lmaWMsIGNvbnRleHR1YWwgYWN0aW9ucyBuZXh0XG4gKiB0byBhIGRpYWdyYW0gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBbY29uZmlnLnNjYWxlPXsgbWluOiAxLjAsIG1heDogMS41IH1dXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZS5taW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZS5tYXhdXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtPdmVybGF5c30gb3ZlcmxheXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29udGV4dFBhZChjb25maWcsIGV2ZW50QnVzLCBvdmVybGF5cykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX292ZXJsYXlzID0gb3ZlcmxheXM7XG5cbiAgdmFyIHNjYWxlID0gaXNEZWZpbmVkKGNvbmZpZyAmJiBjb25maWcuc2NhbGUpID8gY29uZmlnLnNjYWxlIDoge1xuICAgIG1pbjogMSxcbiAgICBtYXg6IDEuNVxuICB9O1xuXG4gIHRoaXMuX292ZXJsYXlzQ29uZmlnID0ge1xuICAgIHBvc2l0aW9uOiB7XG4gICAgICByaWdodDogLTksXG4gICAgICB0b3A6IC02XG4gICAgfSxcbiAgICBzY2FsZTogc2NhbGVcbiAgfTtcblxuICB0aGlzLl9jdXJyZW50ID0gbnVsbDtcblxuICB0aGlzLl9pbml0KCk7XG59XG5cbkNvbnRleHRQYWQuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5jb250ZXh0UGFkJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ292ZXJsYXlzJ1xuXTtcblxuXG4vKipcbiAqIFJlZ2lzdGVycyBldmVudHMgbmVlZGVkIGZvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHNcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ3NlbGVjdGlvbi5jaGFuZ2VkJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIHNlbGVjdGlvbiA9IGUubmV3U2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNlbGYub3BlbihzZWxlY3Rpb25bMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmNsb3NlKCk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudHMuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBldmVudC5lbGVtZW50cztcblxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChzZWxmLmlzT3BlbihlKSkge1xuICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgY3VycmVudCA9IHNlbGYuX2N1cnJlbnQ7XG5cbiAgICAvLyBmb3JjZSByZW9wZW4gaWYgZWxlbWVudCBmb3Igd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBvcGVuZWQgY2hhbmdlZFxuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgc2VsZi5vcGVuKGVsZW1lbnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwcm92aWRlciB3aXRoIHRoZSBjb250ZXh0IHBhZFxuICpcbiAqIEBwYXJhbSAge251bWJlcn0gW3ByaW9yaXR5PTEwMDBdXG4gKiBAcGFyYW0gIHtDb250ZXh0UGFkUHJvdmlkZXJ9IHByb3ZpZGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNvbnRleHRQYWRQcm92aWRlciA9IHtcbiAgKiAgIGdldENvbnRleHRQYWRFbnRyaWVzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICogICAgIHJldHVybiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICogICAgICAgcmV0dXJuIHtcbiAgKiAgICAgICAgIC4uLmVudHJpZXMsXG4gICogICAgICAgICAnZW50cnktMSc6IHtcbiAgKiAgICAgICAgICAgbGFiZWw6ICdNeSBFbnRyeScsXG4gICogICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKSB7IGFsZXJ0KFwiSSBoYXZlIGJlZW4gY2xpY2tlZCFcIik7IH1cbiAgKiAgICAgICAgIH1cbiAgKiAgICAgICB9O1xuICAqICAgICB9XG4gICogICB9XG4gICogfTtcbiAgKlxuICogY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKDgwMCwgY29udGV4dFBhZFByb3ZpZGVyKTtcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKHByaW9yaXR5LCBwcm92aWRlcikge1xuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgcHJvdmlkZXIgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbignY29udGV4dFBhZC5nZXRQcm92aWRlcnMnLCBwcmlvcml0eSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbnRleHQgcGFkIGVudHJpZXMgZm9yIGEgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7ZGpzLmVsZW1lbnQuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PENvbnRleHRQYWRFbnRyeURlc2NyaXB0b3I+fSBsaXN0IG9mIGVudHJpZXNcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuZ2V0RW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHByb3ZpZGVycyA9IHRoaXMuX2dldFByb3ZpZGVycygpO1xuXG4gIHZhciBlbnRyaWVzID0ge307XG5cbiAgLy8gbG9vcCB0aHJvdWdoIGFsbCBwcm92aWRlcnMgYW5kIHRoZWlyIGVudHJpZXMuXG4gIC8vIGdyb3VwIGVudHJpZXMgYnkgaWQgc28gdGhhdCBvdmVycmlkaW5nIGFuIGVudHJ5IGlzIHBvc3NpYmxlXG4gIGZvckVhY2gocHJvdmlkZXJzLCBmdW5jdGlvbihwcm92aWRlcikge1xuICAgIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0Q29udGV4dFBhZEVudHJpZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXNPclVwZGF0ZXIoZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgICAgIGVudHJpZXNbaWRdID0gZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcblxuXG4vKipcbiAqIFRyaWdnZXIgYW4gYWN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgb3BlbmVkIGNvbnRleHQgcGFkXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHBhcmFtICB7Ym9vbGVhbn0gW2F1dG9BY3RpdmF0ZT1mYWxzZV1cbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgZXZlbnQsIGF1dG9BY3RpdmF0ZSkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY3VycmVudC5lbGVtZW50LFxuICAgICAgZW50cmllcyA9IHRoaXMuX2N1cnJlbnQuZW50cmllcyxcbiAgICAgIGVudHJ5LFxuICAgICAgaGFuZGxlcixcbiAgICAgIG9yaWdpbmFsRXZlbnQsXG4gICAgICBidXR0b24gPSBldmVudC5kZWxlZ2F0ZVRhcmdldCB8fCBldmVudC50YXJnZXQ7XG5cbiAgaWYgKCFidXR0b24pIHtcbiAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVudHJ5ID0gZW50cmllc1tkb21BdHRyKGJ1dHRvbiwgJ2RhdGEtYWN0aW9uJyldO1xuICBoYW5kbGVyID0gZW50cnkuYWN0aW9uO1xuXG4gIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuXG4gIC8vIHNpbXBsZSBhY3Rpb24gKHZpYSBjYWxsYmFjayBmdW5jdGlvbilcbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm4gaGFuZGxlcihvcmlnaW5hbEV2ZW50LCBlbGVtZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFuZGxlclthY3Rpb25dKSB7XG4gICAgICByZXR1cm4gaGFuZGxlclthY3Rpb25dKG9yaWdpbmFsRXZlbnQsIGVsZW1lbnQsIGF1dG9BY3RpdmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2lsZW5jZSBvdGhlciBhY3Rpb25zXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG5cbi8qKlxuICogT3BlbiB0aGUgY29udGV4dCBwYWQgZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtib29sZWFufSBmb3JjZSBpZiB0cnVlLCBmb3JjZSByZW9wZW5pbmcgdGhlIGNvbnRleHQgcGFkXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihlbGVtZW50LCBmb3JjZSkge1xuICBpZiAoIWZvcmNlICYmIHRoaXMuaXNPcGVuKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5jbG9zZSgpO1xuICB0aGlzLl91cGRhdGVBbmRPcGVuKGVsZW1lbnQpO1xufTtcblxuQ29udGV4dFBhZC5wcm90b3R5cGUuX2dldFByb3ZpZGVycyA9IGZ1bmN0aW9uKGlkKSB7XG5cbiAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRCdXMuY3JlYXRlRXZlbnQoe1xuICAgIHR5cGU6ICdjb250ZXh0UGFkLmdldFByb3ZpZGVycycsXG4gICAgcHJvdmlkZXJzOiBbXVxuICB9KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKGV2ZW50KTtcblxuICByZXR1cm4gZXZlbnQucHJvdmlkZXJzO1xufTtcblxuQ29udGV4dFBhZC5wcm90b3R5cGUuX3VwZGF0ZUFuZE9wZW4gPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLmdldEVudHJpZXMoZWxlbWVudCksXG4gICAgICBwYWQgPSB0aGlzLmdldFBhZChlbGVtZW50KSxcbiAgICAgIGh0bWwgPSBwYWQuaHRtbDtcblxuICBmb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgIHZhciBncm91cGluZyA9IGVudHJ5Lmdyb3VwIHx8ICdkZWZhdWx0JyxcbiAgICAgICAgY29udHJvbCA9IGRvbWlmeShlbnRyeS5odG1sIHx8ICc8ZGl2IGNsYXNzPVwiZW50cnlcIiBkcmFnZ2FibGU9XCJ0cnVlXCI+PC9kaXY+JyksXG4gICAgICAgIGNvbnRhaW5lcjtcblxuICAgIGRvbUF0dHIoY29udHJvbCwgJ2RhdGEtYWN0aW9uJywgaWQpO1xuXG4gICAgY29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWdyb3VwPScgKyBncm91cGluZyArICddJywgaHRtbCk7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImdyb3VwXCIgZGF0YS1ncm91cD1cIicgKyBncm91cGluZyArICdcIj48L2Rpdj4nKTtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG5cbiAgICBpZiAoZW50cnkuY2xhc3NOYW1lKSB7XG4gICAgICBhZGRDbGFzc2VzKGNvbnRyb2wsIGVudHJ5LmNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LnRpdGxlKSB7XG4gICAgICBkb21BdHRyKGNvbnRyb2wsICd0aXRsZScsIGVudHJ5LnRpdGxlKTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICAgIGNvbnRyb2wuYXBwZW5kQ2hpbGQoZG9taWZ5KCc8aW1nIHNyYz1cIicgKyBlbnRyeS5pbWFnZVVybCArICdcIj4nKSk7XG4gICAgfVxuICB9KTtcblxuICBkb21DbGFzc2VzKGh0bWwpLmFkZCgnb3BlbicpO1xuXG4gIHRoaXMuX2N1cnJlbnQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBwYWQ6IHBhZCxcbiAgICBlbnRyaWVzOiBlbnRyaWVzXG4gIH07XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5vcGVuJywgeyBjdXJyZW50OiB0aGlzLl9jdXJyZW50IH0pO1xufTtcblxuXG5Db250ZXh0UGFkLnByb3RvdHlwZS5nZXRQYWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQucGFkO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBvdmVybGF5cyA9IHRoaXMuX292ZXJsYXlzO1xuXG4gIHZhciBodG1sID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZGpzLWNvbnRleHQtcGFkXCI+PC9kaXY+Jyk7XG5cbiAgdmFyIG92ZXJsYXlzQ29uZmlnID0gYXNzaWduKHtcbiAgICBodG1sOiBodG1sXG4gIH0sIHRoaXMuX292ZXJsYXlzQ29uZmlnKTtcblxuICBkb21EZWxlZ2F0ZS5iaW5kKGh0bWwsIGVudHJ5U2VsZWN0b3IsICdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi50cmlnZ2VyKCdjbGljaycsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChodG1sLCBlbnRyeVNlbGVjdG9yLCAnZHJhZ3N0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50KTtcbiAgfSk7XG5cbiAgLy8gc3RvcCBwcm9wYWdhdGlvbiBvZiBtb3VzZSBldmVudHNcbiAgZG9tRXZlbnQuYmluZChodG1sLCAnbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgdGhpcy5fb3ZlcmxheUlkID0gb3ZlcmxheXMuYWRkKGVsZW1lbnQsICdjb250ZXh0LXBhZCcsIG92ZXJsYXlzQ29uZmlnKTtcblxuICB2YXIgcGFkID0gb3ZlcmxheXMuZ2V0KHRoaXMuX292ZXJsYXlJZCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5jcmVhdGUnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIHBhZDogcGFkIH0pO1xuXG4gIHJldHVybiBwYWQ7XG59O1xuXG5cbi8qKlxuICogQ2xvc2UgdGhlIGNvbnRleHQgcGFkXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX292ZXJsYXlzLnJlbW92ZSh0aGlzLl9vdmVybGF5SWQpO1xuXG4gIHRoaXMuX292ZXJsYXlJZCA9IG51bGw7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5jbG9zZScsIHsgY3VycmVudDogdGhpcy5fY3VycmVudCB9KTtcblxuICB0aGlzLl9jdXJyZW50ID0gbnVsbDtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgcGFkIGlzIG9wZW4uIElmIGVsZW1lbnQgaXMgZ2l2ZW4sIHdpbGwgY2hlY2tcbiAqIGlmIHBhZCBpcyBvcGVuZWQgd2l0aCBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISF0aGlzLl9jdXJyZW50ICYmICghZWxlbWVudCA/IHRydWUgOiB0aGlzLl9jdXJyZW50LmVsZW1lbnQgPT09IGVsZW1lbnQpO1xufTtcblxuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcykge1xuXG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3NlcyhlbGVtZW50KTtcblxuICB2YXIgYWN0dWFsQ2xhc3NOYW1lcyA9IGlzQXJyYXkoY2xhc3NOYW1lcykgPyBjbGFzc05hbWVzIDogY2xhc3NOYW1lcy5zcGxpdCgvXFxzKy9nKTtcbiAgYWN0dWFsQ2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykge1xuICAgIGNsYXNzZXMuYWRkKGNscyk7XG4gIH0pO1xufSIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IE92ZXJsYXlzTW9kdWxlIGZyb20gJy4uL292ZXJsYXlzJztcblxuaW1wb3J0IENvbnRleHRQYWQgZnJvbSAnLi9Db250ZXh0UGFkJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgT3ZlcmxheXNNb2R1bGVcbiAgXSxcbiAgY29udGV4dFBhZDogWyAndHlwZScsIENvbnRleHRQYWQgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbmQsXG4gIGZvckVhY2gsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBtYXAsXG4gIG1hdGNoUGF0dGVybixcbiAgb21pdCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0QkJveCxcbiAgZ2V0UGFyZW50c1xufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHsgZWFjaEVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUuY2FuQ29weUVsZW1lbnRzPiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gY29udGV4dC5lbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZWwuQmFzZT58Ym9vbGVhbn0gLSBSZXR1cm4gZWxlbWVudHMgdG8gYmUgY29waWVkIG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8Y29weVBhc3RlLmNvcHlFbGVtZW50PiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5kZXNjcmlwdG9yXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBjb250ZXh0LmVsZW1lbnRcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBjb250ZXh0LmVsZW1lbnRzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUuZWxlbWVudHNDb3BpZWQ+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LmVsZW1lbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC50cmVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUucGFzdGVFbGVtZW50PiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5jYWNoZSAtIEFscmVhZHkgY3JlYXRlZCBlbGVtZW50cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LmRlc2NyaXB0b3JcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gPGNvcHlQYXN0ZS5wYXN0ZUVsZW1lbnRzPiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5oaW50cyAtIEFkZCBoaW50cyBiZWZvcmUgcGFzdGluZy5cbiAqL1xuXG4vKipcbiAqIENvcHkgYW5kIHBhc3RlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7Q3JlYXRlfSBjcmVhdGVcbiAqIEBwYXJhbSB7Q2xpcGJvYXJkfSBjbGlwYm9hcmRcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7TW91c2V9IG1vdXNlXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb3B5UGFzdGUoXG4gICAgY2FudmFzLFxuICAgIGNyZWF0ZSxcbiAgICBjbGlwYm9hcmQsXG4gICAgZWxlbWVudEZhY3RvcnksXG4gICAgZXZlbnRCdXMsXG4gICAgbW9kZWxpbmcsXG4gICAgbW91c2UsXG4gICAgcnVsZXNcbikge1xuXG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fY3JlYXRlID0gY3JlYXRlO1xuICB0aGlzLl9jbGlwYm9hcmQgPSBjbGlwYm9hcmQ7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX21vdXNlID0gbW91c2U7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgLy8gZGVmYXVsdCBwcmlvcml0eSAocHJpb3JpdHkgPSAxKVxuICAgIGRlc2NyaXB0b3IucHJpb3JpdHkgPSAxO1xuXG4gICAgZGVzY3JpcHRvci5pZCA9IGVsZW1lbnQuaWQ7XG5cbiAgICB2YXIgcGFyZW50Q29waWVkID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGUgPT09IGVsZW1lbnQucGFyZW50O1xuICAgIH0pO1xuXG4gICAgLy8gZG8gTk9UIHJlZmVyZW5jZSBwYXJlbnQgaWYgcGFyZW50IHdhc24ndCBjb3BpZWRcbiAgICBpZiAocGFyZW50Q29waWVkKSB7XG4gICAgICBkZXNjcmlwdG9yLnBhcmVudCA9IGVsZW1lbnQucGFyZW50LmlkO1xuICAgIH1cblxuICAgIC8vIGF0dGFjaGVycyAocHJpb3JpdHkgPSAyKVxuICAgIGlmIChpc0F0dGFjaGVyKGVsZW1lbnQpKSB7XG4gICAgICBkZXNjcmlwdG9yLnByaW9yaXR5ID0gMjtcblxuICAgICAgZGVzY3JpcHRvci5ob3N0ID0gZWxlbWVudC5ob3N0LmlkO1xuICAgIH1cblxuICAgIC8vIGNvbm5lY3Rpb25zIChwcmlvcml0eSA9IDMpXG4gICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgZGVzY3JpcHRvci5wcmlvcml0eSA9IDM7XG5cbiAgICAgIGRlc2NyaXB0b3Iuc291cmNlID0gZWxlbWVudC5zb3VyY2UuaWQ7XG4gICAgICBkZXNjcmlwdG9yLnRhcmdldCA9IGVsZW1lbnQudGFyZ2V0LmlkO1xuXG4gICAgICBkZXNjcmlwdG9yLndheXBvaW50cyA9IGNvcHlXYXlwb2ludHMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gbGFiZWxzIChwcmlvcml0eSA9IDQpXG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIGRlc2NyaXB0b3IucHJpb3JpdHkgPSA0O1xuXG4gICAgICBkZXNjcmlwdG9yLmxhYmVsVGFyZ2V0ID0gZWxlbWVudC5sYWJlbFRhcmdldC5pZDtcbiAgICB9XG5cbiAgICBmb3JFYWNoKFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF0sIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgICBpZiAoaXNOdW1iZXIoZWxlbWVudFsgcHJvcGVydHkgXSkpIHtcbiAgICAgICAgZGVzY3JpcHRvclsgcHJvcGVydHkgXSA9IGVsZW1lbnRbIHByb3BlcnR5IF07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZXNjcmlwdG9yLmhpZGRlbiA9IGVsZW1lbnQuaGlkZGVuO1xuICAgIGRlc2NyaXB0b3IuY29sbGFwc2VkID0gZWxlbWVudC5jb2xsYXBzZWQ7XG5cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnRzJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBoaW50cyA9IGNvbnRleHQuaGludHM7XG5cbiAgICBhc3NpZ24oaGludHMsIHtcbiAgICAgIGNyZWF0ZUVsZW1lbnRzQmVoYXZpb3I6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5Db3B5UGFzdGUuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdjcmVhdGUnLFxuICAnY2xpcGJvYXJkJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ21vdXNlJyxcbiAgJ3J1bGVzJ1xuXTtcblxuXG4vKipcbiAqIENvcHkgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIGFsbG93ZWQsXG4gICAgICB0cmVlO1xuXG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzID8gWyBlbGVtZW50cyBdIDogW107XG4gIH1cblxuICBhbGxvd2VkID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29weVBhc3RlLmNhbkNvcHlFbGVtZW50cycsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgdHJlZSA9IHt9O1xuICB9IGVsc2Uge1xuICAgIHRyZWUgPSB0aGlzLmNyZWF0ZVRyZWUoaXNBcnJheShhbGxvd2VkKSA/IGFsbG93ZWQgOiBlbGVtZW50cyk7XG4gIH1cblxuICAvLyB3ZSBzZXQgYW4gZW1wdHkgdHJlZSwgc2VsZWN0aW9uIG9mIGVsZW1lbnRzXG4gIC8vIHRvIGNvcHkgd2FzIGVtcHR5LlxuICB0aGlzLl9jbGlwYm9hcmQuc2V0KHRyZWUpO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5lbGVtZW50c0NvcGllZCcsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgdHJlZTogdHJlZVxuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn07XG5cbi8qKlxuICogUGFzdGUgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHBhcmFtIHtkanMubW9kZWwuYmFzZX0gW2NvbnRleHQuZWxlbWVudF0gLSBQYXJlbnQuXG4gKiBAcGFyYW0ge1BvaW50fSBbY29udGV4dC5wb2ludF0gLSBQb3NpdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dC5oaW50c10gLSBIaW50cy5cbiAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5wYXN0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHRyZWUgPSB0aGlzLl9jbGlwYm9hcmQuZ2V0KCk7XG5cbiAgaWYgKHRoaXMuX2NsaXBib2FyZC5pc0VtcHR5KCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGludHMgPSBjb250ZXh0ICYmIGNvbnRleHQuaGludHMgfHwge307XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29weVBhc3RlLnBhc3RlRWxlbWVudHMnLCB7XG4gICAgaGludHM6IGhpbnRzXG4gIH0pO1xuXG4gIHZhciBlbGVtZW50cyA9IHRoaXMuX2NyZWF0ZUVsZW1lbnRzKHRyZWUpO1xuXG4gIC8vIHBhc3RlIGRpcmVjdGx5XG4gIGlmIChjb250ZXh0ICYmIGNvbnRleHQuZWxlbWVudCAmJiBjb250ZXh0LnBvaW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bhc3RlKGVsZW1lbnRzLCBjb250ZXh0LmVsZW1lbnQsIGNvbnRleHQucG9pbnQsIGhpbnRzKTtcbiAgfVxuXG4gIHRoaXMuX2NyZWF0ZS5zdGFydCh0aGlzLl9tb3VzZS5nZXRMYXN0TW92ZUV2ZW50KCksIGVsZW1lbnRzLCB7XG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQYXN0ZSBlbGVtZW50cyBkaXJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLmJhc2V9IHRhcmdldFxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuX3Bhc3RlID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCwgcG9zaXRpb24sIGhpbnRzKSB7XG5cbiAgLy8gbWFrZSBzdXJlIGVhY2ggZWxlbWVudCBoYXMgeCBhbmQgeVxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKCFpc051bWJlcihlbGVtZW50LngpKSB7XG4gICAgICBlbGVtZW50LnggPSAwO1xuICAgIH1cblxuICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC55KSkge1xuICAgICAgZWxlbWVudC55ID0gMDtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBiYm94ID0gZ2V0QkJveChlbGVtZW50cyk7XG5cbiAgLy8gY2VudGVyIGVsZW1lbnRzIGFyb3VuZCBjdXJzb3JcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQud2F5cG9pbnRzID0gbWFwKGVsZW1lbnQud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHdheXBvaW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMixcbiAgICAgICAgICB5OiB3YXlwb2ludC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3NpZ24oZWxlbWVudCwge1xuICAgICAgeDogZWxlbWVudC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgLSBiYm94LnkgLSBiYm94LmhlaWdodCAvIDJcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXMuX21vZGVsaW5nLmNyZWF0ZUVsZW1lbnRzKGVsZW1lbnRzLCBwb3NpdGlvbiwgdGFyZ2V0LCBhc3NpZ24oe30sIGhpbnRzKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBlbGVtZW50cyBmcm9tIHRyZWUuXG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnRzID0gZnVuY3Rpb24odHJlZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIGNhY2hlID0ge307XG5cbiAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgZm9yRWFjaCh0cmVlLCBmdW5jdGlvbihicmFuY2gsIGRlcHRoKSB7XG5cbiAgICBkZXB0aCA9IHBhcnNlSW50KGRlcHRoLCAxMCk7XG5cbiAgICAvLyBzb3J0IGJ5IHByaW9yaXR5XG4gICAgYnJhbmNoID0gc29ydEJ5KGJyYW5jaCwgJ3ByaW9yaXR5Jyk7XG5cbiAgICBmb3JFYWNoKGJyYW5jaCwgZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gICAgICAvLyByZW1vdmUgcHJpb3JpdHlcbiAgICAgIHZhciBhdHRycyA9IGFzc2lnbih7fSwgb21pdChkZXNjcmlwdG9yLCBbICdwcmlvcml0eScgXSkpO1xuXG4gICAgICBpZiAoY2FjaGVbIGRlc2NyaXB0b3IucGFyZW50IF0pIHtcbiAgICAgICAgYXR0cnMucGFyZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IucGFyZW50IF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgYXR0cnMucGFyZW50O1xuICAgICAgfVxuXG4gICAgICBldmVudEJ1cy5maXJlKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50Jywge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIGRlc2NyaXB0b3I6IGF0dHJzXG4gICAgICB9KTtcblxuICAgICAgdmFyIGVsZW1lbnQ7XG5cbiAgICAgIGlmIChpc0Nvbm5lY3Rpb24oYXR0cnMpKSB7XG4gICAgICAgIGF0dHJzLnNvdXJjZSA9IGNhY2hlWyBkZXNjcmlwdG9yLnNvdXJjZSBdO1xuICAgICAgICBhdHRycy50YXJnZXQgPSBjYWNoZVsgZGVzY3JpcHRvci50YXJnZXQgXTtcblxuICAgICAgICBlbGVtZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IuaWQgXSA9IHNlbGYuY3JlYXRlQ29ubmVjdGlvbihhdHRycyk7XG5cbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xhYmVsKGF0dHJzKSkge1xuICAgICAgICBhdHRycy5sYWJlbFRhcmdldCA9IGNhY2hlWyBhdHRycy5sYWJlbFRhcmdldCBdO1xuXG4gICAgICAgIGVsZW1lbnQgPSBjYWNoZVsgZGVzY3JpcHRvci5pZCBdID0gc2VsZi5jcmVhdGVMYWJlbChhdHRycyk7XG5cbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycy5ob3N0KSB7XG4gICAgICAgIGF0dHJzLmhvc3QgPSBjYWNoZVsgYXR0cnMuaG9zdCBdO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IuaWQgXSA9IHNlbGYuY3JlYXRlU2hhcGUoYXR0cnMpO1xuXG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn07XG5cbkNvcHlQYXN0ZS5wcm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBjb25uZWN0aW9uID0gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbihvbWl0KGF0dHJzLCBbICdpZCcgXSkpO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVMYWJlbCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBsYWJlbCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZUxhYmVsKG9taXQoYXR0cnMsIFsgJ2lkJyBdKSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufTtcblxuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBzaGFwZSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKG9taXQoYXR0cnMsIFsgJ2lkJyBdKSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuLyoqXG4gKiBDaGVjayB3ZXRoZXIgZWxlbWVudCBoYXMgcmVsYXRpb25zIHRvIG90aGVyIGVsZW1lbnRzIGUuZy4gYXR0YWNoZXJzLCBsYWJlbHMgYW5kIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Db3B5UGFzdGUucHJvdG90eXBlLmhhc1JlbGF0aW9ucyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBsYWJlbFRhcmdldCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIHRhcmdldDtcblxuICBpZiAoaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgc291cmNlID0gZmluZChlbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQuc291cmNlLmlkIH0pKTtcbiAgICB0YXJnZXQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC50YXJnZXQuaWQgfSkpO1xuXG4gICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgbGFiZWxUYXJnZXQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5sYWJlbFRhcmdldC5pZCB9KSk7XG5cbiAgICBpZiAoIWxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgZnJvbSBlbGVtZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdHJlZToge1xuICAqICAwOiBbXG4gICogICAgeyBpZDogJ1NoYXBlXzEnLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgeyBpZDogJ1NoYXBlXzInLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgeyBpZDogJ0Nvbm5lY3Rpb25fMScsIHNvdXJjZTogJ1NoYXBlXzEnLCB0YXJnZXQ6ICdTaGFwZV8yJywgcHJpb3JpdHk6IDMsIC4uLiB9LFxuICAqICAgIC4uLlxuICAqICBdLFxuICAqICAxOiBbXG4gICogICAgeyBpZDogJ1NoYXBlXzMnLCBwYXJlbnQ6ICdTaGFwZTEnLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgLi4uXG4gICogIF1cbiAgKiB9O1xuICAqXG4gICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLmJhc2U+fSBlbGVtZW50c1xuICAqXG4gICogQHJldHVybiB7T2JqZWN0fVxuICAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVUcmVlID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXMsXG4gICAgICBzZWxmID0gdGhpcztcblxuICB2YXIgdHJlZSA9IHt9LFxuICAgICAgZWxlbWVudHNEYXRhID0gW107XG5cbiAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnRzKTtcblxuICBmdW5jdGlvbiBjYW5Db3B5KGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gICAgcmV0dXJuIHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnQuY29weScsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVsZW1lbnREYXRhKGVsZW1lbnQsIGRlcHRoKSB7XG5cbiAgICAvLyAoMSkgY2hlY2sgd2V0aGVyIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZFxuICAgIHZhciBmb3VuZEVsZW1lbnREYXRhID0gZmluZChlbGVtZW50c0RhdGEsIGZ1bmN0aW9uKGVsZW1lbnRzRGF0YSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGVsZW1lbnRzRGF0YS5lbGVtZW50O1xuICAgIH0pO1xuXG4gICAgLy8gKDIpIGFkZCBlbGVtZW50IGlmIG5vdCBhbHJlYWR5IGFkZGVkXG4gICAgaWYgKCFmb3VuZEVsZW1lbnREYXRhKSB7XG4gICAgICBlbGVtZW50c0RhdGEucHVzaCh7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIGRlcHRoOiBkZXB0aFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAoMykgdXBkYXRlIGRlcHRoXG4gICAgaWYgKGZvdW5kRWxlbWVudERhdGEuZGVwdGggPCBkZXB0aCkge1xuICAgICAgZWxlbWVudHNEYXRhID0gcmVtb3ZlRWxlbWVudERhdGEoZm91bmRFbGVtZW50RGF0YSwgZWxlbWVudHNEYXRhKTtcblxuICAgICAgZWxlbWVudHNEYXRhLnB1c2goe1xuICAgICAgICBlbGVtZW50OiBmb3VuZEVsZW1lbnREYXRhLmVsZW1lbnQsXG4gICAgICAgIGRlcHRoOiBkZXB0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudERhdGEoZWxlbWVudERhdGEsIGVsZW1lbnRzRGF0YSkge1xuICAgIHZhciBpbmRleCA9IGVsZW1lbnRzRGF0YS5pbmRleE9mKGVsZW1lbnREYXRhKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGVsZW1lbnRzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c0RhdGE7XG4gIH1cblxuICAvLyAoMSkgYWRkIGVsZW1lbnRzXG4gIGVhY2hFbGVtZW50KHBhcmVudHMsIGZ1bmN0aW9uKGVsZW1lbnQsIF9pbmRleCwgZGVwdGgpIHtcblxuICAgIC8vIGRvIE5PVCBhZGQgZXh0ZXJuYWwgbGFiZWxzIGRpcmVjdGx5XG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbHdheXMgY29weSBleHRlcm5hbCBsYWJlbHNcbiAgICBmb3JFYWNoKGVsZW1lbnQubGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgYWRkRWxlbWVudERhdGEobGFiZWwsIGRlcHRoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlbGF0ZWRFbGVtZW50cyhlbGVtZW50cykge1xuICAgICAgZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoICYmIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgICAvLyBhZGQgZXh0ZXJuYWwgbGFiZWxzXG4gICAgICAgIGZvckVhY2goZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgICAgYWRkRWxlbWVudERhdGEobGFiZWwsIGRlcHRoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWRkRWxlbWVudERhdGEoZWxlbWVudCwgZGVwdGgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yRWFjaChbIGVsZW1lbnQuYXR0YWNoZXJzLCBlbGVtZW50LmluY29taW5nLCBlbGVtZW50Lm91dGdvaW5nIF0sIGFkZFJlbGF0ZWRFbGVtZW50cyk7XG5cbiAgICBhZGRFbGVtZW50RGF0YShlbGVtZW50LCBkZXB0aCk7XG5cbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgfSk7XG5cbiAgZWxlbWVudHMgPSBtYXAoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIHJldHVybiBlbGVtZW50RGF0YS5lbGVtZW50O1xuICB9KTtcblxuICAvLyAoMikgY29weSBlbGVtZW50c1xuICBlbGVtZW50c0RhdGEgPSBtYXAoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIGVsZW1lbnREYXRhLmRlc2NyaXB0b3IgPSB7fTtcblxuICAgIHNlbGYuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIHtcbiAgICAgIGRlc2NyaXB0b3I6IGVsZW1lbnREYXRhLmRlc2NyaXB0b3IsXG4gICAgICBlbGVtZW50OiBlbGVtZW50RGF0YS5lbGVtZW50LFxuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWxlbWVudERhdGE7XG4gIH0pO1xuXG4gIC8vICgzKSBzb3J0IGVsZW1lbnRzIGJ5IHByaW9yaXR5XG4gIGVsZW1lbnRzRGF0YSA9IHNvcnRCeShlbGVtZW50c0RhdGEsIGZ1bmN0aW9uKGVsZW1lbnREYXRhKSB7XG4gICAgcmV0dXJuIGVsZW1lbnREYXRhLmRlc2NyaXB0b3IucHJpb3JpdHk7XG4gIH0pO1xuXG4gIGVsZW1lbnRzID0gbWFwKGVsZW1lbnRzRGF0YSwgZnVuY3Rpb24oZWxlbWVudERhdGEpIHtcbiAgICByZXR1cm4gZWxlbWVudERhdGEuZWxlbWVudDtcbiAgfSk7XG5cbiAgLy8gKDQpIGNyZWF0ZSB0cmVlXG4gIGZvckVhY2goZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIHZhciBkZXB0aCA9IGVsZW1lbnREYXRhLmRlcHRoO1xuXG4gICAgaWYgKCFzZWxmLmhhc1JlbGF0aW9ucyhlbGVtZW50RGF0YS5lbGVtZW50LCBlbGVtZW50cykpIHtcbiAgICAgIHJlbW92ZUVsZW1lbnQoZWxlbWVudERhdGEuZWxlbWVudCwgZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjYW5Db3B5KGVsZW1lbnREYXRhLmVsZW1lbnQsIGVsZW1lbnRzKSkge1xuICAgICAgcmVtb3ZlRWxlbWVudChlbGVtZW50RGF0YS5lbGVtZW50LCBlbGVtZW50cyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRyZWVbZGVwdGhdKSB7XG4gICAgICB0cmVlW2RlcHRoXSA9IFtdO1xuICAgIH1cblxuICAgIHRyZWVbZGVwdGhdLnB1c2goZWxlbWVudERhdGEuZGVzY3JpcHRvcik7XG4gIH0pO1xuXG4gIHJldHVybiB0cmVlO1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzQXR0YWNoZXIoZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50Lmhvc3Q7XG59XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xufVxuXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29weVdheXBvaW50cyhlbGVtZW50KSB7XG4gIHJldHVybiBtYXAoZWxlbWVudC53YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XG5cbiAgICB3YXlwb2ludCA9IGNvcHlXYXlwb2ludCh3YXlwb2ludCk7XG5cbiAgICBpZiAod2F5cG9pbnQub3JpZ2luYWwpIHtcbiAgICAgIHdheXBvaW50Lm9yaWdpbmFsID0gY29weVdheXBvaW50KHdheXBvaW50Lm9yaWdpbmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2F5cG9pbnQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb3B5V2F5cG9pbnQod2F5cG9pbnQpIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgd2F5cG9pbnQpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBpbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50cztcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xufVxuIiwiaW1wb3J0IENsaXBib2FyZE1vZHVsZSBmcm9tICcuLi9jbGlwYm9hcmQnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICcuLi9jcmVhdGUnO1xuaW1wb3J0IE1vdXNlTW9kdWxlIGZyb20gJy4uL21vdXNlJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBDb3B5UGFzdGUgZnJvbSAnLi9Db3B5UGFzdGUnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDbGlwYm9hcmRNb2R1bGUsXG4gICAgQ3JlYXRlTW9kdWxlLFxuICAgIE1vdXNlTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdjb3B5UGFzdGUnIF0sXG4gIGNvcHlQYXN0ZTogWyAndHlwZScsIENvcHlQYXN0ZSBdXG59O1xuIiwidmFyIE1BUktFUl9PSyA9ICdkcm9wLW9rJyxcbiAgICBNQVJLRVJfTk9UX09LID0gJ2Ryb3Atbm90LW9rJyxcbiAgICBNQVJLRVJfQVRUQUNIID0gJ2F0dGFjaC1vaycsXG4gICAgTUFSS0VSX05FV19QQVJFTlQgPSAnbmV3LXBhcmVudCc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgbWFwXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgZ2V0QkJveCB9IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG52YXIgUFJFRklYID0gJ2NyZWF0ZSc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcblxuXG4vKipcbiAqIENyZWF0ZSBuZXcgZWxlbWVudHMgdGhyb3VnaCBkcmFnIGFuZCBkcm9wLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZShcbiAgICBjYW52YXMsXG4gICAgZHJhZ2dpbmcsXG4gICAgZXZlbnRCdXMsXG4gICAgbW9kZWxpbmcsXG4gICAgcnVsZXNcbikge1xuXG4gIC8vIHJ1bGVzIC8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQ2hlY2sgd2V0aGVyIGVsZW1lbnRzIGNhbiBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtzb3VyY2VdXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufG51bGx8T2JqZWN0fVxuICAgKi9cbiAgZnVuY3Rpb24gY2FuQ3JlYXRlKGVsZW1lbnRzLCB0YXJnZXQsIHBvc2l0aW9uLCBzb3VyY2UsIGhpbnRzKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgY2hpbGQgZWxlbWVudHMgYW5kIGV4dGVybmFsIGxhYmVsc1xuICAgIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgbGFiZWxUYXJnZXQgPSBlbGVtZW50LmxhYmVsVGFyZ2V0O1xuXG4gICAgICByZXR1cm4gIWVsZW1lbnQucGFyZW50ICYmICEoaXNMYWJlbChlbGVtZW50KSAmJiBlbGVtZW50cy5pbmRleE9mKGxhYmVsVGFyZ2V0KSAhPT0gLTEpO1xuICAgIH0pO1xuXG4gICAgdmFyIHNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICFpc0Nvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICB2YXIgYXR0YWNoID0gZmFsc2UsXG4gICAgICAgIGNvbm5lY3QgPSBmYWxzZSxcbiAgICAgICAgY3JlYXRlID0gZmFsc2U7XG5cbiAgICAvLyAoMSkgYXR0YWNoaW5nIHNpbmdsZSBzaGFwZXNcbiAgICBpZiAoaXNTaW5nbGVTaGFwZShlbGVtZW50cykpIHtcbiAgICAgIGF0dGFjaCA9IHJ1bGVzLmFsbG93ZWQoJ3NoYXBlLmF0dGFjaCcsIHtcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBzaGFwZTogc2hhcGUsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWF0dGFjaCkge1xuXG4gICAgICAvLyAoMikgY3JlYXRpbmcgZWxlbWVudHNcbiAgICAgIGlmIChpc1NpbmdsZVNoYXBlKGVsZW1lbnRzKSkge1xuICAgICAgICBjcmVhdGUgPSBydWxlcy5hbGxvd2VkKCdzaGFwZS5jcmVhdGUnLCB7XG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIHNoYXBlOiBzaGFwZSxcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWF0ZSA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmNyZWF0ZScsIHtcbiAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgdmFyIGNvbm5lY3Rpb25UYXJnZXQgPSBoaW50cy5jb25uZWN0aW9uVGFyZ2V0O1xuXG4gICAgLy8gKDMpIGFwcGVuZGluZyBzaW5nbGUgc2hhcGVzXG4gICAgaWYgKGNyZWF0ZSB8fCBhdHRhY2gpIHtcbiAgICAgIGlmIChzaGFwZSAmJiBzb3VyY2UpIHtcbiAgICAgICAgY29ubmVjdCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24uY3JlYXRlJywge1xuICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvblRhcmdldCA9PT0gc291cmNlID8gc2hhcGUgOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiBjb25uZWN0aW9uVGFyZ2V0ID09PSBzb3VyY2UgPyBzb3VyY2UgOiBzaGFwZSxcbiAgICAgICAgICBoaW50czoge1xuICAgICAgICAgICAgdGFyZ2V0UGFyZW50OiB0YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXRBdHRhY2g6IGF0dGFjaFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGF0dGFjaDogYXR0YWNoLFxuICAgICAgICBjb25uZWN0OiBjb25uZWN0XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGlnbm9yZSB3ZXRoZXIgb3Igbm90IGVsZW1lbnRzIGNhbiBiZSBjcmVhdGVkXG4gICAgaWYgKGNyZWF0ZSA9PT0gbnVsbCB8fCBhdHRhY2ggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE1hcmtlcihlbGVtZW50LCBtYXJrZXIpIHtcbiAgICBbIE1BUktFUl9BVFRBQ0gsIE1BUktFUl9PSywgTUFSS0VSX05PVF9PSywgTUFSS0VSX05FV19QQVJFTlQgXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcblxuICAgICAgaWYgKG0gPT09IG1hcmtlcikge1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIG0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV2ZW50IGhhbmRsaW5nIC8vLy8vLy8vLy9cblxuICBldmVudEJ1cy5vbihbICdjcmVhdGUubW92ZScsICdjcmVhdGUuaG92ZXInIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoIWhvdmVyKSB7XG4gICAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gbnVsbDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVuc3VyZUNvbnN0cmFpbnRzKGV2ZW50KTtcblxuICAgIHZhciBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcblxuICAgIHZhciBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlID0gaG92ZXIgJiYgY2FuQ3JlYXRlKGVsZW1lbnRzLCBob3ZlciwgcG9zaXRpb24sIHNvdXJjZSwgaGludHMpO1xuXG4gICAgaWYgKGhvdmVyICYmIGNhbkV4ZWN1dGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gaG92ZXI7XG5cbiAgICAgIGlmIChjYW5FeGVjdXRlICYmIGNhbkV4ZWN1dGUuYXR0YWNoKSB7XG4gICAgICAgIHNldE1hcmtlcihob3ZlciwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRNYXJrZXIoaG92ZXIsIGNhbkV4ZWN1dGUgPyBNQVJLRVJfTkVXX1BBUkVOVCA6IE1BUktFUl9OT1RfT0spO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY3JlYXRlLmVuZCcsICdjcmVhdGUub3V0JywgJ2NyZWF0ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBob3ZlciA9IGV2ZW50LmhvdmVyO1xuXG4gICAgaWYgKGhvdmVyKSB7XG4gICAgICBzZXRNYXJrZXIoaG92ZXIsIG51bGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgYXR0YWNoID0gY2FuRXhlY3V0ZSAmJiBjYW5FeGVjdXRlLmF0dGFjaCxcbiAgICAgICAgY29ubmVjdCA9IGNhbkV4ZWN1dGUgJiYgY2FuRXhlY3V0ZS5jb25uZWN0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gZmFsc2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGVuc3VyZUNvbnN0cmFpbnRzKGV2ZW50KTtcblxuICAgIHZhciBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcblxuICAgIGlmIChjb25uZWN0KSB7XG4gICAgICBzaGFwZSA9IG1vZGVsaW5nLmFwcGVuZFNoYXBlKHNvdXJjZSwgc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIHtcbiAgICAgICAgYXR0YWNoOiBhdHRhY2gsXG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3QgPT09IHRydWUgPyB7fSA6IGNvbm5lY3QsXG4gICAgICAgIGNvbm5lY3Rpb25UYXJnZXQ6IGhpbnRzLmNvbm5lY3Rpb25UYXJnZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50cyA9IG1vZGVsaW5nLmNyZWF0ZUVsZW1lbnRzKGVsZW1lbnRzLCBwb3NpdGlvbiwgdGFyZ2V0LCBhc3NpZ24oe30sIGhpbnRzLCB7XG4gICAgICAgIGF0dGFjaDogYXR0YWNoXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBzaGFwZVxuICAgICAgc2hhcGUgPSBmaW5kKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGVsZW1lbnRzIGFuZCBzaGFwZVxuICAgIGFzc2lnbihjb250ZXh0LCB7XG4gICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICBzaGFwZTogc2hhcGVcbiAgICB9KTtcblxuICAgIGFzc2lnbihldmVudCwge1xuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICB2YXIgY29udGV4dCA9IGRyYWdnaW5nLmNvbnRleHQoKTtcblxuICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQucHJlZml4ID09PSBQUkVGSVgpIHtcbiAgICAgIGRyYWdnaW5nLmNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNhbmNlbCBvbiA8ZWxlbWVudHMuY2hhbmdlZD4gdGhhdCBpcyBub3QgcmVzdWx0IG9mIDxkcmFnLmVuZD5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRCdXMub24oJ2VsZW1lbnRzLmNoYW5nZWQnLCBjYW5jZWwpO1xuXG4gICAgZXZlbnRCdXMub25jZShbICdjcmVhdGUuY2FuY2VsJywgJ2NyZWF0ZS5lbmQnIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKCkge1xuICAgICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50cy5jaGFuZ2VkJywgY2FuY2VsKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQVBJIC8vLy8vLy8vLy9cblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnRzLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpc0FycmF5KGVsZW1lbnRzKSkge1xuICAgICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICFpc0Nvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXBlKSB7XG5cbiAgICAgIC8vIGF0IGxlYXN0IG9uZSBzaGFwZSBpcyByZXF1aXJlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQgPSBhc3NpZ24oe1xuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgaGludHM6IHt9LFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSwgY29udGV4dCB8fCB7fSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgZWFjaCBlbGVtZW50IGhhcyB4IGFuZCB5XG4gICAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKCFpc051bWJlcihlbGVtZW50LngpKSB7XG4gICAgICAgIGVsZW1lbnQueCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC55KSkge1xuICAgICAgICBlbGVtZW50LnkgPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGJib3ggPSBnZXRCQm94KGVsZW1lbnRzKTtcblxuICAgIC8vIGNlbnRlciBlbGVtZW50cyBhcm91bmQgY3Vyc29yXG4gICAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LndheXBvaW50cyA9IG1hcChlbGVtZW50LndheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogd2F5cG9pbnQueCAtIGJib3gueCAtIGJib3gud2lkdGggLyAyLFxuICAgICAgICAgICAgeTogd2F5cG9pbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMlxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24oZWxlbWVudCwge1xuICAgICAgICB4OiBlbGVtZW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMixcbiAgICAgICAgeTogZWxlbWVudC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsIFBSRUZJWCwge1xuICAgICAgY3Vyc29yOiAnZ3JhYmJpbmcnLFxuICAgICAgYXV0b0FjdGl2YXRlOiB0cnVlLFxuICAgICAgZGF0YToge1xuICAgICAgICBzaGFwZTogc2hhcGUsXG4gICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5DcmVhdGUuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdydWxlcydcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVDb25zdHJhaW50cyhldmVudCkge1xuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICBjcmVhdGVDb25zdHJhaW50cyA9IGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHM7XG5cbiAgaWYgKCFjcmVhdGVDb25zdHJhaW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy5sZWZ0KSB7XG4gICAgZXZlbnQueCA9IE1hdGgubWF4KGV2ZW50LngsIGNyZWF0ZUNvbnN0cmFpbnRzLmxlZnQpO1xuICB9XG5cbiAgaWYgKGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0KSB7XG4gICAgZXZlbnQueCA9IE1hdGgubWluKGV2ZW50LngsIGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0KTtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy50b3ApIHtcbiAgICBldmVudC55ID0gTWF0aC5tYXgoZXZlbnQueSwgY3JlYXRlQ29uc3RyYWludHMudG9wKTtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy5ib3R0b20pIHtcbiAgICBldmVudC55ID0gTWF0aC5taW4oZXZlbnQueSwgY3JlYXRlQ29uc3RyYWludHMuYm90dG9tKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gaXNTaW5nbGVTaGFwZShlbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID09PSAxICYmICFpc0Nvbm5lY3Rpb24oZWxlbWVudHNbMF0pO1xufVxuXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cbiIsImltcG9ydCB7XHJcbiAgdHJhbnNsYXRlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcclxuXHJcbmltcG9ydCB7IGdldFZpc3VhbCB9IGZyb20gJy4uLy4uL3V0aWwvR3JhcGhpY3NVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcclxuICBhdHRyIGFzIHN2Z0F0dHIsXHJcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcclxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXHJcbn0gZnJvbSAndGlueS1zdmcnO1xyXG5cclxudmFyIExPV19QUklPUklUWSA9IDc1MDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQcmV2aWV3KFxyXG4gICAgY2FudmFzLFxyXG4gICAgZXZlbnRCdXMsXHJcbiAgICBncmFwaGljc0ZhY3RvcnksXHJcbiAgICBwcmV2aWV3U3VwcG9ydCxcclxuICAgIHN0eWxlc1xyXG4pIHtcclxuICBmdW5jdGlvbiBjcmVhdGVEcmFnR3JvdXAoZWxlbWVudHMpIHtcclxuICAgIHZhciBkcmFnR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcclxuXHJcbiAgICBzdmdBdHRyKGRyYWdHcm91cCwgc3R5bGVzLmNscygnZGpzLWRyYWctZ3JvdXAnLCBbICduby1ldmVudHMnIF0pKTtcclxuXHJcbiAgICB2YXIgY2hpbGRyZW5HZnggPSBzdmdDcmVhdGUoJ2cnKTtcclxuXHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZSBncmFwaGljc1xyXG4gICAgICB2YXIgZ2Z4O1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuaGlkZGVuKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcclxuICAgICAgICBnZnggPSBncmFwaGljc0ZhY3RvcnkuX2NyZWF0ZUNvbnRhaW5lcignY29ubmVjdGlvbicsIGNoaWxkcmVuR2Z4KTtcclxuXHJcbiAgICAgICAgZ3JhcGhpY3NGYWN0b3J5LmRyYXdDb25uZWN0aW9uKGdldFZpc3VhbChnZngpLCBlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnZnggPSBncmFwaGljc0ZhY3RvcnkuX2NyZWF0ZUNvbnRhaW5lcignc2hhcGUnLCBjaGlsZHJlbkdmeCk7XHJcblxyXG4gICAgICAgIGdyYXBoaWNzRmFjdG9yeS5kcmF3U2hhcGUoZ2V0VmlzdWFsKGdmeCksIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICB0cmFuc2xhdGUoZ2Z4LCBlbGVtZW50LngsIGVsZW1lbnQueSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBwcmV2aWV3XHJcbiAgICAgIHByZXZpZXdTdXBwb3J0LmFkZERyYWdnZXIoZWxlbWVudCwgZHJhZ0dyb3VwLCBnZngpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRyYWdHcm91cDtcclxuICB9XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcixcclxuICAgICAgICBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXHJcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXA7XHJcblxyXG4gICAgLy8gbGF6aWx5IGNyZWF0ZSBwcmV2aWV3c1xyXG4gICAgaWYgKCFkcmFnR3JvdXApIHtcclxuICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXAgPSBjcmVhdGVEcmFnR3JvdXAoZWxlbWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkZWZhdWx0TGF5ZXI7XHJcblxyXG4gICAgaWYgKGhvdmVyKSB7XHJcbiAgICAgIGlmICghZHJhZ0dyb3VwLnBhcmVudE5vZGUpIHtcclxuICAgICAgICBkZWZhdWx0TGF5ZXIgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCk7XHJcblxyXG4gICAgICAgIHN2Z0FwcGVuZChkZWZhdWx0TGF5ZXIsIGRyYWdHcm91cCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyYW5zbGF0ZShkcmFnR3JvdXAsIGV2ZW50LngsIGV2ZW50LnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3ZnUmVtb3ZlKGRyYWdHcm91cCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXA7XHJcblxyXG4gICAgaWYgKGRyYWdHcm91cCkge1xyXG4gICAgICBzdmdSZW1vdmUoZHJhZ0dyb3VwKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuQ3JlYXRlUHJldmlldy4kaW5qZWN0ID0gW1xyXG4gICdjYW52YXMnLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyYXBoaWNzRmFjdG9yeScsXHJcbiAgJ3ByZXZpZXdTdXBwb3J0JyxcclxuICAnc3R5bGVzJ1xyXG5dO1xyXG4iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuaW1wb3J0IFByZXZpZXdTdXBwb3J0TW9kdWxlIGZyb20gJy4uL3ByZXZpZXctc3VwcG9ydCc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuXG5pbXBvcnQgQ3JlYXRlIGZyb20gJy4vQ3JlYXRlJztcbmltcG9ydCBDcmVhdGVQcmV2aWV3IGZyb20gJy4vQ3JlYXRlUHJldmlldyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFByZXZpZXdTdXBwb3J0TW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogW1xuICAgICdjcmVhdGUnLFxuICAgICdjcmVhdGVQcmV2aWV3J1xuICBdLFxuICBjcmVhdGU6IFsgJ3R5cGUnLCBDcmVhdGUgXSxcbiAgY3JlYXRlUHJldmlldzogWyAndHlwZScsIENyZWF0ZVByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIHNvcnRCeSxcbiAgZm9yRWFjaCxcbiAgZmlsdGVyXG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIEFYSVNfRElNRU5TSU9OUyA9IHtcbiAgaG9yaXpvbnRhbDogWyAneCcsICd3aWR0aCcgXSxcbiAgdmVydGljYWw6IFsgJ3knLCAnaGVpZ2h0JyBdXG59O1xuXG52YXIgVEhSRVNIT0xEID0gNTtcblxuXG4vKipcbiAqIEdyb3VwcyBhbmQgZmlsdGVycyBlbGVtZW50cyBhbmQgdGhlbiB0cmlnZ2VyIGV2ZW4gZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXN0cmlidXRlRWxlbWVudHMobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcblxuICB0aGlzLl9maWx0ZXJzID0gW107XG5cbiAgLy8gcmVnaXN0ZXIgZmlsdGVyIGZvciBmaWx0ZXJpbmcgYmlnIGVsZW1lbnRzXG4gIHRoaXMucmVnaXN0ZXJGaWx0ZXIoZnVuY3Rpb24oZWxlbWVudHMsIGF4aXMsIGRpbWVuc2lvbikge1xuICAgIHZhciBlbGVtZW50c1NpemUgPSAwLFxuICAgICAgICBudW1PZlNoYXBlcyA9IDAsXG4gICAgICAgIGF2Z0RpbWVuc2lvbjtcblxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmIChlbGVtZW50LndheXBvaW50cyB8fCBlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudHNTaXplICs9IGVsZW1lbnRbZGltZW5zaW9uXTtcblxuICAgICAgbnVtT2ZTaGFwZXMgKz0gMTtcbiAgICB9KTtcblxuICAgIGF2Z0RpbWVuc2lvbiA9IE1hdGgucm91bmQoZWxlbWVudHNTaXplIC8gbnVtT2ZTaGFwZXMpO1xuXG4gICAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRbZGltZW5zaW9uXSA8IChhdmdEaW1lbnNpb24gKyA1MCk7XG4gICAgfSk7XG4gIH0pO1xuXG59XG5cbkRpc3RyaWJ1dGVFbGVtZW50cy4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgZmlsdGVyIGZ1bmN0aW9ucyB0aGF0IGFsbG93IGV4dGVybmFsIHBhcnRpZXMgdG8gZmlsdGVyXG4gKiBvdXQgY2VydGFpbiBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZmlsdGVyRm5cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5yZWdpc3RlckZpbHRlciA9IGZ1bmN0aW9uKGZpbHRlckZuKSB7XG4gIGlmICh0eXBlb2YgZmlsdGVyRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBmaWx0ZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXJGbik7XG59O1xuXG4vKipcbiAqIERpc3RyaWJ1dGVzIHRoZSBlbGVtZW50cyB3aXRoIGEgZ2l2ZW4gb3JpZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gZWxlbWVudHMgICAgW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7c3RyaW5nfSBvcmllbnRhdGlvbiBbZGVzY3JpcHRpb25dXG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcmllbnRhdGlvbikge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgZ3JvdXBzLFxuICAgICAgZGlzdHJpYnV0YWJsZUVsZW1lbnRzO1xuXG4gIGlmIChlbGVtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pO1xuXG4gIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IHRoaXMuX2ZpbHRlckVsZW1lbnRzKGVsZW1lbnRzKTtcblxuICBncm91cHMgPSB0aGlzLl9jcmVhdGVHcm91cHMoZGlzdHJpYnV0YWJsZUVsZW1lbnRzKTtcblxuICAvLyBub3RoaW5nIHRvIGRpc3RyaWJ1dGVcbiAgaWYgKGdyb3Vwcy5sZW5ndGggPD0gMikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG1vZGVsaW5nLmRpc3RyaWJ1dGVFbGVtZW50cyhncm91cHMsIHRoaXMuX2F4aXMsIHRoaXMuX2RpbWVuc2lvbik7XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG5cbi8qKlxuICogRmlsdGVycyB0aGUgZWxlbWVudHMgd2l0aCBwcm92aWRlZCBmaWx0ZXJzIGJ5IGV4dGVybmFsIHBhcnRpZXNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheVtFbGVtZW50c119IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXlbRWxlbWVudHNdfVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9maWx0ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBmaWx0ZXJzID0gdGhpcy5fZmlsdGVycyxcbiAgICAgIGF4aXMgPSB0aGlzLl9heGlzLFxuICAgICAgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uLFxuICAgICAgZGlzdHJpYnV0YWJsZUVsZW1lbnRzID0gW10uY29uY2F0KGVsZW1lbnRzKTtcblxuICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9XG5cbiAgZm9yRWFjaChmaWx0ZXJzLCBmdW5jdGlvbihmaWx0ZXJGbikge1xuICAgIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IGZpbHRlckZuKGRpc3RyaWJ1dGFibGVFbGVtZW50cywgYXhpcywgZGltZW5zaW9uKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRpc3RyaWJ1dGFibGVFbGVtZW50cztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgcmFuZ2UgKG1pbiwgbWF4KSBncm91cHMuIEFsc28gdHJpZXMgdG8gZ3JvdXAgZWxlbWVudHNcbiAqIHRvZ2V0aGVyIHRoYXQgc2hhcmUgdGhlIHNhbWUgcmFuZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIFx0dmFyIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IFtcbiAqIFx0XHR7XG4gKiBcdFx0XHRyYW5nZToge1xuICogXHRcdFx0XHRtaW46IDEwMCxcbiAqIFx0XHRcdFx0bWF4OiAyMDBcbiAqIFx0XHRcdH0sXG4gKiBcdFx0XHRlbGVtZW50czogWyB7IGlkOiAnc2hhcGUxJywgLi4gfV1cbiAqIFx0XHR9XG4gKiBcdF1cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheVtPYmplY3RzXX1cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5fY3JlYXRlR3JvdXBzID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIHJhbmdlR3JvdXBzID0gW10sXG4gICAgICBzZWxmID0gdGhpcyxcbiAgICAgIGF4aXMgPSB0aGlzLl9heGlzLFxuICAgICAgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uO1xuXG4gIGlmICghYXhpcykge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBoYXZlIGEgZGVmaW5lZCBcImF4aXNcIiBhbmQgXCJkaW1lbnNpb25cIicpO1xuICB9XG5cbiAgLy8gc29ydCBieSAnbGVmdC0+cmlnaHQnIG9yICd0b3AtPmJvdHRvbSdcbiAgdmFyIHNvcnRlZEVsZW1lbnRzID0gc29ydEJ5KGVsZW1lbnRzLCBheGlzKTtcblxuICBmb3JFYWNoKHNvcnRlZEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50LCBpZHgpIHtcbiAgICB2YXIgZWxlbWVudFJhbmdlID0gc2VsZi5fZmluZFJhbmdlKGVsZW1lbnQsIGF4aXMsIGRpbWVuc2lvbiksXG4gICAgICAgIHJhbmdlO1xuXG4gICAgdmFyIHByZXZpb3VzID0gcmFuZ2VHcm91cHNbcmFuZ2VHcm91cHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocHJldmlvdXMgJiYgc2VsZi5faGFzSW50ZXJzZWN0aW9uKHByZXZpb3VzLnJhbmdlLCBlbGVtZW50UmFuZ2UpKSB7XG4gICAgICByYW5nZUdyb3Vwc1tyYW5nZUdyb3Vwcy5sZW5ndGggLSAxXS5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IHsgcmFuZ2U6IGVsZW1lbnRSYW5nZSwgZWxlbWVudHM6IFsgZWxlbWVudCBdIH07XG5cbiAgICAgIHJhbmdlR3JvdXBzLnB1c2gocmFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJhbmdlR3JvdXBzO1xufTtcblxuXG4vKipcbiAqIE1hcHMgYSBkaXJlY3Rpb24gdG8gdGhlIGFjY29yZGluZyBheGlzIGFuZCBkaW1lbnNpb25cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGRpcmVjdGlvbiAnaG9yaXpvbnRhbCcgb3IgJ3ZlcnRpY2FsJ1xuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uKGRpcmVjdGlvbikge1xuICB2YXIgb3JpZW50YXRpb24gPSBBWElTX0RJTUVOU0lPTlNbZGlyZWN0aW9uXTtcblxuICB0aGlzLl9heGlzID0gb3JpZW50YXRpb25bMF07XG4gIHRoaXMuX2RpbWVuc2lvbiA9IG9yaWVudGF0aW9uWzFdO1xufTtcblxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgdHdvIHJhbmdlcyBpbnRlcmNlcHQgZWFjaCBvdGhlclxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gcmFuZ2VBIHttaW4sIG1heH1cbiAqIEBwYXJhbSAge09iamVjdH0gcmFuZ2VCIHttaW4sIG1heH1cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9oYXNJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihyYW5nZUEsIHJhbmdlQikge1xuICByZXR1cm4gTWF0aC5tYXgocmFuZ2VBLm1pbiwgcmFuZ2VBLm1heCkgPj0gTWF0aC5taW4ocmFuZ2VCLm1pbiwgcmFuZ2VCLm1heCkgJiZcbiAgICAgICAgIE1hdGgubWluKHJhbmdlQS5taW4sIHJhbmdlQS5tYXgpIDw9IE1hdGgubWF4KHJhbmdlQi5taW4sIHJhbmdlQi5tYXgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBmb3IgYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1t0eXBlXX0gZWxlbWVudCAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gYXhpcyAgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gZGltZW5zaW9uIFtkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUuX2ZpbmRSYW5nZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGF4aXMgPSBlbGVtZW50W3RoaXMuX2F4aXNdLFxuICAgICAgZGltZW5zaW9uID0gZWxlbWVudFt0aGlzLl9kaW1lbnNpb25dO1xuXG4gIHJldHVybiB7XG4gICAgbWluOiBheGlzICsgVEhSRVNIT0xELFxuICAgIG1heDogYXhpcyArIGRpbWVuc2lvbiAtIFRIUkVTSE9MRFxuICB9O1xufTtcbiIsImltcG9ydCBEaXN0cmlidXRlRWxlbWVudHMgZnJvbSAnLi9EaXN0cmlidXRlRWxlbWVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdkaXN0cmlidXRlRWxlbWVudHMnIF0sXG4gIGRpc3RyaWJ1dGVFbGVtZW50czogWyAndHlwZScsIERpc3RyaWJ1dGVFbGVtZW50cyBdXG59O1xuIiwiLyogZ2xvYmFsIFRvdWNoRXZlbnQgKi9cblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZ2luYWwsXG4gIHRvUG9pbnQsXG4gIHN0b3BQcm9wYWdhdGlvblxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxuaW1wb3J0IHtcbiAgc2V0IGFzIGN1cnNvclNldCxcbiAgdW5zZXQgYXMgY3Vyc29yVW5zZXRcbn0gZnJvbSAnLi4vLi4vdXRpbC9DdXJzb3InO1xuXG5pbXBvcnQge1xuICBpbnN0YWxsIGFzIGluc3RhbGxDbGlja1RyYXBcbn0gZnJvbSAnLi4vLi4vdXRpbC9DbGlja1RyYXAnO1xuXG5pbXBvcnQge1xuICBkZWx0YSBhcyBkZWx0YVBvc1xufSBmcm9tICcuLi8uLi91dGlsL1Bvc2l0aW9uVXRpbCc7XG5cbnZhciBEUkFHX0FDVElWRV9DTFMgPSAnZGpzLWRyYWctYWN0aXZlJztcblxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5mdW5jdGlvbiBpc1RvdWNoRXZlbnQoZXZlbnQpIHtcblxuICAvLyBjaGVjayBmb3IgVG91Y2hFdmVudCBiZWluZyBhdmFpbGFibGUgZmlyc3RcbiAgLy8gKGkuZS4gbm90IGF2YWlsYWJsZSBvbiBkZXNrdG9wIEZpcmVmb3gpXG4gIHJldHVybiB0eXBlb2YgVG91Y2hFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50O1xufVxuXG5mdW5jdGlvbiBnZXRMZW5ndGgocG9pbnQpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwb2ludC54LCAyKSArIE1hdGgucG93KHBvaW50LnksIDIpKTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0aGF0IGZpcmVzIGNhbnZhcyBsb2NhbGl6ZWQgZHJhZyBldmVudHMgYW5kIHJlYWxpemVzXG4gKiB0aGUgZ2VuZXJhbCBcImRyYWctYW5kLWRyb3BcIiBsb29rIGFuZCBmZWVsLlxuICpcbiAqIENhbGxpbmcge0BsaW5rIERyYWdnaW5nI2FjdGl2YXRlfSBhY3RpdmF0ZXMgZHJhZ2dpbmcgb24gYSBjYW52YXMuXG4gKlxuICogSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgICogZW1pdHMgbGlmZSBjeWNsZSBldmVudHMsIG5hbWVzcGFjZWQgd2l0aCBhIHByZWZpeCBhc3NpZ25lZFxuICogICAgIGR1cmluZyBkcmFnZ2luZyBhY3RpdmF0aW9uXG4gKiAgICogc2V0cyBhbmQgcmVzdG9yZXMgdGhlIGN1cnNvclxuICogICAqIHNldHMgYW5kIHJlc3RvcmVzIHRoZSBzZWxlY3Rpb24gaWYgZWxlbWVudHMgc3RpbGwgZXhpc3RcbiAqICAgKiBlbnN1cmVzIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBkcmFnIG9wZXJhdGlvbiBhY3RpdmUgYXQgYSB0aW1lXG4gKlxuICogRHJhZ2dpbmcgbWF5IGJlIGNhbmNlbGVkIG1hbnVhbGx5IGJ5IGNhbGxpbmcge0BsaW5rIERyYWdnaW5nI2NhbmNlbH1cbiAqIG9yIGJ5IHByZXNzaW5nIEVTQy5cbiAqXG4gKlxuICogIyMgTGlmZS1jeWNsZSBldmVudHNcbiAqXG4gKiBEcmFnZ2luZyBjYW4gYmUgaW4gdGhyZWUgZGlmZmVyZW50IHN0YXRlcywgb2ZmLCBpbml0aWFsaXplZFxuICogYW5kIGFjdGl2ZS5cbiAqXG4gKiAoMSkgb2ZmOiBubyBkcmFnZ2luZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbiAqICgyKSBpbml0aWFsaXplZDogYSBuZXcgZHJhZyBvcGVyYXRpb24gZ290IGluaXRpYWxpemVkIGJ1dCBub3QgeWV0XG4gKiAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKGkuZS4gYmVjYXVzZSBvZiBubyBpbml0aWFsIG1vdmUpXG4gKiAoMykgc3RhcnRlZDogZHJhZ2dpbmcgaXMgaW4gcHJvZ3Jlc3NcbiAqXG4gKiBFdmVudHVhbGx5IGRyYWdnaW5nIHdpbGwgYmUgb2ZmIGFnYWluIGFmdGVyIGEgZHJhZyBvcGVyYXRpb24gaGFzXG4gKiBiZWVuIGVuZGVkIG9yIGNhbmNlbGVkIHZpYSB1c2VyIGNsaWNrIG9yIEVTQyBrZXkgcHJlc3MuXG4gKlxuICogVG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgYmV0d2VlbiB0aGVzZSBzdGF0ZXMgZHJhZ2dpbmcgZW1pdHMgZ2VuZXJpY1xuICogbGlmZS1jeWNsZSBldmVudHMgd2l0aCB0aGUgYGRyYWcuYCBwcmVmaXggX2FuZF8gZXZlbnRzIG5hbWVzcGFjZWRcbiAqIHRvIGEgcHJlZml4IGNob29zZW4gYnkgYSB1c2VyIGR1cmluZyBkcmFnIGluaXRpYWxpemF0aW9uLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBlbWl0dGVkIChhcHByb3ByaWF0ZWx5IHByZWZpeGVkKSB2aWFcbiAqIHRoZSB7QGxpbmsgRXZlbnRCdXN9LlxuICpcbiAqICogYGluaXRgXG4gKiAqIGBzdGFydGBcbiAqICogYG1vdmVgXG4gKiAqIGBlbmRgXG4gKiAqIGBlbmRlZGAgKGRyYWdnaW5nIGFscmVhZHkgaW4gb2ZmIHN0YXRlKVxuICogKiBgY2FuY2VsYCAob25seSBpZiBwcmV2aW91c2x5IHN0YXJ0ZWQpXG4gKiAqIGBjYW5jZWxlZGAgKGRyYWdnaW5nIGFscmVhZHkgaW4gb2ZmIHN0YXRlLCBvbmx5IGlmIHByZXZpb3VzbHkgc3RhcnRlZClcbiAqICogYGNsZWFudXBgXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gTXlEcmFnQ29tcG9uZW50KGV2ZW50QnVzLCBkcmFnZ2luZykge1xuICpcbiAqICAgZXZlbnRCdXMub24oJ215ZHJhZy5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coJ3llcywgd2Ugc3RhcnQgZHJhZ2dpbmcnKTtcbiAqICAgfSk7XG4gKlxuICogICBldmVudEJ1cy5vbignbXlkcmFnLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdjYW52YXMgbG9jYWwgY29vcmRpbmF0ZXMnLCBldmVudC54LCBldmVudC55LCBldmVudC5keCwgZXZlbnQuZHkpO1xuICpcbiAqICAgICAvLyBsb2NhbCBkcmFnIGRhdGEgaXMgcGFzc2VkIHdpdGggdGhlIGV2ZW50XG4gKiAgICAgZXZlbnQuY29udGV4dC5mb287IC8vIFwiQkFSXCJcbiAqXG4gKiAgICAgLy8gdGhlIG9yaWdpbmFsIG1vdXNlIGV2ZW50LCB0b29cbiAqICAgICBldmVudC5vcmlnaW5hbEV2ZW50OyAvLyBNb3VzZUV2ZW50KC4uLilcbiAqICAgfSk7XG4gKlxuICogICBldmVudEJ1cy5vbignZWxlbWVudC5jbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgZHJhZ2dpbmcuaW5pdChldmVudCwgJ215ZHJhZycsIHtcbiAqICAgICAgIGN1cnNvcjogJ2dyYWJiaW5nJyxcbiAqICAgICAgIGRhdGE6IHtcbiAqICAgICAgICAgY29udGV4dDoge1xuICogICAgICAgICAgIGZvbzogXCJCQVJcIlxuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH0pO1xuICogfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmFnZ2luZyhldmVudEJ1cywgY2FudmFzLCBzZWxlY3Rpb24sIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICB0aHJlc2hvbGQ6IDUsXG4gICAgdHJhcENsaWNrOiB0cnVlXG4gIH07XG5cbiAgLy8gdGhlIGN1cnJlbnRseSBhY3RpdmUgZHJhZyBvcGVyYXRpb25cbiAgLy8gZHJhZ2dpbmcgaXMgYWN0aXZlIGFzIHNvb24gYXMgdGhpcyBjb250ZXh0IGV4aXN0cy5cbiAgLy9cbiAgLy8gaXQgaXMgdmlzdWFsbHkgX2FjdGl2ZV8gb25seSB3aGVuIGEgY29udGV4dC5hY3RpdmUgZmxhZyBpcyBzZXQgdG8gdHJ1ZS5cbiAgdmFyIGNvbnRleHQ7XG5cbiAgLyogY29udmVydCBhIGdsb2JhbCBldmVudCBpbnRvIGxvY2FsIGNvb3JkaW5hdGVzICovXG4gIGZ1bmN0aW9uIHRvTG9jYWxQb2ludChnbG9iYWxQb3NpdGlvbikge1xuXG4gICAgdmFyIHZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuXG4gICAgdmFyIGNsaWVudFJlY3QgPSBjYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiB2aWV3Ym94LnggKyAoZ2xvYmFsUG9zaXRpb24ueCAtIGNsaWVudFJlY3QubGVmdCkgLyB2aWV3Ym94LnNjYWxlLFxuICAgICAgeTogdmlld2JveC55ICsgKGdsb2JhbFBvc2l0aW9uLnkgLSBjbGllbnRSZWN0LnRvcCkgLyB2aWV3Ym94LnNjYWxlXG4gICAgfTtcbiAgfVxuXG4gIC8vIGhlbHBlcnNcblxuICBmdW5jdGlvbiBmaXJlKHR5cGUsIGRyYWdDb250ZXh0KSB7XG4gICAgZHJhZ0NvbnRleHQgPSBkcmFnQ29udGV4dCB8fCBjb250ZXh0O1xuXG4gICAgdmFyIGV2ZW50ID0gZXZlbnRCdXMuY3JlYXRlRXZlbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBkcmFnQ29udGV4dC5wYXlsb2FkLFxuICAgICAgICBkcmFnQ29udGV4dC5kYXRhLFxuICAgICAgICB7IGlzVG91Y2g6IGRyYWdDb250ZXh0LmlzVG91Y2ggfVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBkZWZhdWx0IGludGVncmF0aW9uXG4gICAgaWYgKGV2ZW50QnVzLmZpcmUoJ2RyYWcuJyArIHR5cGUsIGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRCdXMuZmlyZShkcmFnQ29udGV4dC5wcmVmaXggKyAnLicgKyB0eXBlLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKSB7XG4gICAgdmFyIGV4aXN0aW5nU2VsZWN0aW9uID0gcHJldmlvdXNTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpO1xuICAgIH0pO1xuXG4gICAgZXhpc3RpbmdTZWxlY3Rpb24ubGVuZ3RoICYmIHNlbGVjdGlvbi5zZWxlY3QoZXhpc3RpbmdTZWxlY3Rpb24pO1xuICB9XG5cbiAgLy8gZXZlbnQgbGlzdGVuZXJzXG5cbiAgZnVuY3Rpb24gbW92ZShldmVudCwgYWN0aXZhdGUpIHtcbiAgICB2YXIgcGF5bG9hZCA9IGNvbnRleHQucGF5bG9hZCxcbiAgICAgICAgZGlzcGxhY2VtZW50ID0gY29udGV4dC5kaXNwbGFjZW1lbnQ7XG5cbiAgICB2YXIgZ2xvYmFsU3RhcnQgPSBjb250ZXh0Lmdsb2JhbFN0YXJ0LFxuICAgICAgICBnbG9iYWxDdXJyZW50ID0gdG9Qb2ludChldmVudCksXG4gICAgICAgIGdsb2JhbERlbHRhID0gZGVsdGFQb3MoZ2xvYmFsQ3VycmVudCwgZ2xvYmFsU3RhcnQpO1xuXG4gICAgdmFyIGxvY2FsU3RhcnQgPSBjb250ZXh0LmxvY2FsU3RhcnQsXG4gICAgICAgIGxvY2FsQ3VycmVudCA9IHRvTG9jYWxQb2ludChnbG9iYWxDdXJyZW50KSxcbiAgICAgICAgbG9jYWxEZWx0YSA9IGRlbHRhUG9zKGxvY2FsQ3VycmVudCwgbG9jYWxTdGFydCk7XG5cblxuICAgIC8vIGFjdGl2YXRlIGNvbnRleHQgZXhwbGljaXRseSBvciBvbmNlIHRocmVzaG9sZCBpcyByZWFjaGVkXG4gICAgaWYgKCFjb250ZXh0LmFjdGl2ZSAmJiAoYWN0aXZhdGUgfHwgZ2V0TGVuZ3RoKGdsb2JhbERlbHRhKSA+IGNvbnRleHQudGhyZXNob2xkKSkge1xuXG4gICAgICAvLyBmaXJlIHN0YXJ0IGV2ZW50IHdpdGggb3JpZ2luYWxcbiAgICAgIC8vIHN0YXJ0aW5nIGNvb3JkaW5hdGVzXG5cbiAgICAgIGFzc2lnbihwYXlsb2FkLCB7XG4gICAgICAgIHg6IHJvdW5kKGxvY2FsU3RhcnQueCArIGRpc3BsYWNlbWVudC54KSxcbiAgICAgICAgeTogcm91bmQobG9jYWxTdGFydC55ICsgZGlzcGxhY2VtZW50LnkpLFxuICAgICAgICBkeDogMCxcbiAgICAgICAgZHk6IDBcbiAgICAgIH0sIHsgb3JpZ2luYWxFdmVudDogZXZlbnQgfSk7XG5cbiAgICAgIGlmIChmYWxzZSA9PT0gZmlyZSgnc3RhcnQnKSkge1xuICAgICAgICByZXR1cm4gY2FuY2VsKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgLy8gdW5zZXQgc2VsZWN0aW9uIGFuZCByZW1lbWJlciBvbGQgc2VsZWN0aW9uXG4gICAgICAvLyB0aGUgcHJldmlvdXMgKG9sZCkgc2VsZWN0aW9uIHdpbGwgYWx3YXlzIHBhc3NlZFxuICAgICAgLy8gd2l0aCB0aGUgZXZlbnQgdmlhIHRoZSBldmVudC5wcmV2aW91c1NlbGVjdGlvbiBwcm9wZXJ0eVxuICAgICAgaWYgKCFjb250ZXh0LmtlZXBTZWxlY3Rpb24pIHtcbiAgICAgICAgcGF5bG9hZC5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5nZXQoKTtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdChudWxsKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWxsb3cgY3VzdG9tIGN1cnNvclxuICAgICAgaWYgKGNvbnRleHQuY3Vyc29yKSB7XG4gICAgICAgIGN1cnNvclNldChjb250ZXh0LmN1cnNvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIGluZGljYXRlIGRyYWdnaW5nIHZpYSBtYXJrZXIgb24gcm9vdCBlbGVtZW50XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGNhbnZhcy5nZXRSb290RWxlbWVudCgpLCBEUkFHX0FDVElWRV9DTFMpO1xuICAgIH1cblxuICAgIHN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICBpZiAoY29udGV4dC5hY3RpdmUpIHtcblxuICAgICAgLy8gdXBkYXRlIHBheWxvYWQgd2l0aCBhY3R1YWwgY29vcmRpbmF0ZXNcbiAgICAgIGFzc2lnbihwYXlsb2FkLCB7XG4gICAgICAgIHg6IHJvdW5kKGxvY2FsQ3VycmVudC54ICsgZGlzcGxhY2VtZW50LngpLFxuICAgICAgICB5OiByb3VuZChsb2NhbEN1cnJlbnQueSArIGRpc3BsYWNlbWVudC55KSxcbiAgICAgICAgZHg6IHJvdW5kKGxvY2FsRGVsdGEueCksXG4gICAgICAgIGR5OiByb3VuZChsb2NhbERlbHRhLnkpXG4gICAgICB9LCB7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xuXG4gICAgICAvLyBlbWl0IG1vdmUgZXZlbnRcbiAgICAgIGZpcmUoJ21vdmUnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0LFxuICAgICAgICByZXR1cm5WYWx1ZSA9IHRydWU7XG5cbiAgICBpZiAoY29udGV4dC5hY3RpdmUpIHtcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGNvbnRleHQucGF5bG9hZC5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy8gc3VwcHJlc3Mgb3JpZ2luYWwgZXZlbnQgKGNsaWNrLCAuLi4pXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UganVzdCBlbmRlZCBhIGRyYWcgb3BlcmF0aW9uXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBtYXkgc3RvcCByZXN0b3JpbmcgdGhlXG4gICAgICAvLyBvcmlnaW5hbCBzdGF0ZSAoc2VsZWN0aW9ucywgLi4uKSBieSBwcmV2ZW50aW5nIHRoZVxuICAgICAgLy8gZW5kIGV2ZW50cyBkZWZhdWx0IGFjdGlvblxuICAgICAgcmV0dXJuVmFsdWUgPSBmaXJlKCdlbmQnKTtcbiAgICB9XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBmaXJlKCdyZWplY3RlZCcpO1xuICAgIH1cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNsZWFudXAocmV0dXJuVmFsdWUgIT09IHRydWUpO1xuXG4gICAgLy8gbGFzdCBldmVudCB0byBiZSBmaXJlZCB3aGVuIGFsbCBkcmFnIG9wZXJhdGlvbnMgYXJlIGRvbmVcbiAgICAvLyBhdCB0aGlzIHBvaW50IGluIHRpbWUgbm8gZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgYW55bW9yZVxuICAgIGZpcmUoJ2VuZGVkJywgcHJldmlvdXNDb250ZXh0KTtcbiAgfVxuXG5cbiAgLy8gY2FuY2VsIGFjdGl2ZSBkcmFnIG9wZXJhdGlvbiBpZiB0aGUgdXNlciBwcmVzc2VzXG4gIC8vIHRoZSBFU0Mga2V5IG9uIHRoZSBrZXlib2FyZFxuXG4gIGZ1bmN0aW9uIGNoZWNrQ2FuY2VsKGV2ZW50KSB7XG5cbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IDI3KSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgIGNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gcHJldmVudCBnaG9zdCBjbGljayB0aGF0IG1pZ2h0IG9jY3VyIGFmdGVyIGEgZmluaXNoZWRcbiAgLy8gZHJhZyBhbmQgZHJvcCBzZXNzaW9uXG5cbiAgZnVuY3Rpb24gdHJhcENsaWNrQW5kRW5kKGV2ZW50KSB7XG5cbiAgICB2YXIgdW50cmFwO1xuXG4gICAgLy8gdHJhcCB0aGUgY2xpY2sgaW4gY2FzZSB3ZSBhcmUgcGFydCBvZiBhbiBhY3RpdmVcbiAgICAvLyBkcmFnIG9wZXJhdGlvbi4gVGhpcyB3aWxsIGVmZmVjdGl2ZWx5IHByZXZlbnRcbiAgICAvLyB0aGUgZ2hvc3QgY2xpY2sgdGhhdCBjYW5ub3QgYmUgY2FuY2VsZWQgb3RoZXJ3aXNlLlxuICAgIGlmIChjb250ZXh0LmFjdGl2ZSkge1xuXG4gICAgICB1bnRyYXAgPSBpbnN0YWxsQ2xpY2tUcmFwKGV2ZW50QnVzKTtcblxuICAgICAgLy8gcmVtb3ZlIHRyYXAgYWZ0ZXIgbWluaW1hbCBkZWxheVxuICAgICAgc2V0VGltZW91dCh1bnRyYXAsIDQwMCk7XG5cbiAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24gKGNsaWNrKVxuICAgICAgcHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgIH1cblxuICAgIGVuZChldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFwVG91Y2goZXZlbnQpIHtcbiAgICBtb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSB0aGUgZHJhZyBldmVudHMgaG92ZXIgKGRqcy5tb2RlbC5CYXNlKSBhbmQgaG92ZXJHZnggKFNuYXA8U1ZHRWxlbWVudD4pXG4gIC8vIHByb3BlcnRpZXMgZHVyaW5nIGhvdmVyIGFuZCBvdXQgYW5kIGZpcmUge3ByZWZpeH0uaG92ZXIgYW5kIHtwcmVmaXh9Lm91dCBwcm9wZXJ0aWVzXG4gIC8vIHJlc3BlY3RpdmVseVxuXG4gIGZ1bmN0aW9uIGhvdmVyKGV2ZW50KSB7XG4gICAgdmFyIHBheWxvYWQgPSBjb250ZXh0LnBheWxvYWQ7XG5cbiAgICBwYXlsb2FkLmhvdmVyR2Z4ID0gZXZlbnQuZ2Z4O1xuICAgIHBheWxvYWQuaG92ZXIgPSBldmVudC5lbGVtZW50O1xuXG4gICAgZmlyZSgnaG92ZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG91dChldmVudCkge1xuICAgIGZpcmUoJ291dCcpO1xuXG4gICAgdmFyIHBheWxvYWQgPSBjb250ZXh0LnBheWxvYWQ7XG5cbiAgICBwYXlsb2FkLmhvdmVyR2Z4ID0gbnVsbDtcbiAgICBwYXlsb2FkLmhvdmVyID0gbnVsbDtcbiAgfVxuXG5cbiAgLy8gbGlmZS1jeWNsZSBtZXRob2RzXG5cbiAgZnVuY3Rpb24gY2FuY2VsKHJlc3RvcmUpIHtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0O1xuXG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhc0FjdGl2ZSA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgaWYgKHdhc0FjdGl2ZSkge1xuICAgICAgZmlyZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY2xlYW51cChyZXN0b3JlKTtcblxuICAgIGlmICh3YXNBY3RpdmUpIHtcblxuICAgICAgLy8gbGFzdCBldmVudCB0byBiZSBmaXJlZCB3aGVuIGFsbCBkcmFnIG9wZXJhdGlvbnMgYXJlIGRvbmVcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQgaW4gdGltZSBubyBkcmFnIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBhbnltb3JlXG4gICAgICBmaXJlKCdjYW5jZWxlZCcsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cChyZXN0b3JlKSB7XG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCxcbiAgICAgICAgZW5kRHJhZztcblxuICAgIGZpcmUoJ2NsZWFudXAnKTtcblxuICAgIC8vIHJlc2V0IGN1cnNvclxuICAgIGN1cnNvclVuc2V0KCk7XG5cbiAgICBpZiAoY29udGV4dC50cmFwQ2xpY2spIHtcbiAgICAgIGVuZERyYWcgPSB0cmFwQ2xpY2tBbmRFbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERyYWcgPSBlbmQ7XG4gICAgfVxuXG4gICAgLy8gcmVzZXQgZG9tIGxpc3RlbmVyc1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNlbW92ZScsIG1vdmUpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnZHJhZ3N0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2Vkb3duJywgZW5kRHJhZywgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2V1cCcsIGVuZERyYWcsIHRydWUpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAna2V5dXAnLCBjaGVja0NhbmNlbCk7XG5cbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICd0b3VjaHN0YXJ0JywgdHJhcFRvdWNoLCB0cnVlKTtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIGNhbmNlbCwgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2htb3ZlJywgbW92ZSwgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2hlbmQnLCBlbmQsIHRydWUpO1xuXG4gICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50LmhvdmVyJywgaG92ZXIpO1xuICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5vdXQnLCBvdXQpO1xuXG4gICAgLy8gcmVtb3ZlIGRyYWcgbWFya2VyIG9uIHJvb3QgZWxlbWVudFxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY2FudmFzLmdldFJvb3RFbGVtZW50KCksIERSQUdfQUNUSVZFX0NMUyk7XG5cbiAgICAvLyByZXN0b3JlIHNlbGVjdGlvbiwgdW5sZXNzIGl0IGhhcyBjaGFuZ2VkXG4gICAgdmFyIHByZXZpb3VzU2VsZWN0aW9uID0gY29udGV4dC5wYXlsb2FkLnByZXZpb3VzU2VsZWN0aW9uO1xuXG4gICAgaWYgKHJlc3RvcmUgIT09IGZhbHNlICYmIHByZXZpb3VzU2VsZWN0aW9uICYmICFzZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKSB7XG4gICAgICByZXN0b3JlU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBkcmFnIG9wZXJhdGlvbi5cbiAgICpcbiAgICogSWYgYGxvY2FsUG9zaXRpb25gIGlzIGdpdmVuLCBkcmFnIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWRcbiAgICogcmVsYXRpdmUgdG8gaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudHxUb3VjaEV2ZW50fSBbZXZlbnRdXG4gICAqIEBwYXJhbSB7UG9pbnR9IFtsb2NhbFBvc2l0aW9uXSBhY3R1YWwgZGlhZ3JhbSBsb2NhbCBwb3NpdGlvbiB0aGlzIGRyYWcgb3BlcmF0aW9uIHNob3VsZCBzdGFydCBhdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICovXG4gIGZ1bmN0aW9uIGluaXQoZXZlbnQsIHJlbGF0aXZlVG8sIHByZWZpeCwgb3B0aW9ucykge1xuXG4gICAgLy8gb25seSBvbmUgZHJhZyBvcGVyYXRpb24gbWF5IGJlIGFjdGl2ZSwgYXQgYSB0aW1lXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGNhbmNlbChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWxhdGl2ZVRvID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IHByZWZpeDtcbiAgICAgIHByZWZpeCA9IHJlbGF0aXZlVG87XG4gICAgICByZWxhdGl2ZVRvID0gbnVsbDtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICB2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YSB8fCB7fSxcbiAgICAgICAgb3JpZ2luYWxFdmVudCxcbiAgICAgICAgZ2xvYmFsU3RhcnQsXG4gICAgICAgIGxvY2FsU3RhcnQsXG4gICAgICAgIGVuZERyYWcsXG4gICAgICAgIGlzVG91Y2g7XG5cbiAgICBpZiAob3B0aW9ucy50cmFwQ2xpY2spIHtcbiAgICAgIGVuZERyYWcgPSB0cmFwQ2xpY2tBbmRFbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERyYWcgPSBlbmQ7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBvcmlnaW5hbEV2ZW50ID0gZ2V0T3JpZ2luYWwoZXZlbnQpIHx8IGV2ZW50O1xuICAgICAgZ2xvYmFsU3RhcnQgPSB0b1BvaW50KGV2ZW50KTtcblxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KTtcblxuICAgICAgLy8gcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgZHJhZ2dpbmcgYmVoYXZpb3JcbiAgICAgIGlmIChvcmlnaW5hbEV2ZW50LnR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0KG9yaWdpbmFsRXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbEV2ZW50ID0gbnVsbDtcbiAgICAgIGdsb2JhbFN0YXJ0ID0geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuXG4gICAgbG9jYWxTdGFydCA9IHRvTG9jYWxQb2ludChnbG9iYWxTdGFydCk7XG5cbiAgICBpZiAoIXJlbGF0aXZlVG8pIHtcbiAgICAgIHJlbGF0aXZlVG8gPSBsb2NhbFN0YXJ0O1xuICAgIH1cblxuICAgIGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQob3JpZ2luYWxFdmVudCk7XG5cbiAgICBjb250ZXh0ID0gYXNzaWduKHtcbiAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgZ2xvYmFsU3RhcnQ6IGdsb2JhbFN0YXJ0LFxuICAgICAgZGlzcGxhY2VtZW50OiBkZWx0YVBvcyhyZWxhdGl2ZVRvLCBsb2NhbFN0YXJ0KSxcbiAgICAgIGxvY2FsU3RhcnQ6IGxvY2FsU3RhcnQsXG4gICAgICBpc1RvdWNoOiBpc1RvdWNoXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICAvLyBza2lwIGRvbSByZWdpc3RyYXRpb24gaWYgdHJpZ2dlclxuICAgIC8vIGlzIHNldCB0byBtYW51YWwgKGR1cmluZyB0ZXN0aW5nKVxuICAgIGlmICghb3B0aW9ucy5tYW51YWwpIHtcblxuICAgICAgLy8gYWRkIGRvbSBsaXN0ZW5lcnNcblxuICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ3RvdWNoc3RhcnQnLCB0cmFwVG91Y2gsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBjYW5jZWwsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAndG91Y2htb3ZlJywgbW92ZSwgdHJ1ZSk7XG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICd0b3VjaGVuZCcsIGVuZCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIGFzc3VtZSB3ZSB1c2UgdGhlIG1vdXNlIHRvIGludGVyYWN0IHBlciBkZWZhdWx0XG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBtb3ZlKTtcblxuICAgICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBkcmFnIGFuZCB0ZXh0IHNlbGVjdGlvbiBiZWhhdmlvclxuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnZHJhZ3N0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnc2VsZWN0c3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XG5cbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNlZG93bicsIGVuZERyYWcsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2V1cCcsIGVuZERyYWcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAna2V5dXAnLCBjaGVja0NhbmNlbCk7XG5cbiAgICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgaG92ZXIpO1xuICAgICAgZXZlbnRCdXMub24oJ2VsZW1lbnQub3V0Jywgb3V0KTtcbiAgICB9XG5cbiAgICBmaXJlKCdpbml0Jyk7XG5cbiAgICBpZiAob3B0aW9ucy5hdXRvQWN0aXZhdGUpIHtcbiAgICAgIG1vdmUoZXZlbnQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNhbmNlbCBvbiBkaWFncmFtIGRlc3RydWN0aW9uXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCBjYW5jZWwpO1xuXG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5pbml0ID0gaW5pdDtcbiAgdGhpcy5tb3ZlID0gbW92ZTtcbiAgdGhpcy5ob3ZlciA9IGhvdmVyO1xuICB0aGlzLm91dCA9IG91dDtcbiAgdGhpcy5lbmQgPSBlbmQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBjYW5jZWw7XG5cbiAgLy8gZm9yIGludHJvc3BlY3Rpb25cblxuICB0aGlzLmNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfTtcblxuICB0aGlzLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgYXNzaWduKGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgfTtcbn1cblxuRHJhZ2dpbmcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdzZWxlY3Rpb24nLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcbiIsImltcG9ydCB7XG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xuXG5cbi8qKlxuICogQnJvd3NlcnMgbWF5IHN3YWxsb3cgY2VydGFpbiBldmVudHMgKGhvdmVyLCBvdXQgLi4uKSBpZiB1c2VycyBhcmUgdG9cbiAqIGZhc3Qgd2l0aCB0aGUgbW91c2UuXG4gKlxuICogQHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc0NDg0Njgvd2h5LWNhbnQtaS1yZWxpYWJseS1jYXB0dXJlLWEtbW91c2VvdXQtZXZlbnRcbiAqXG4gKiBUaGUgZml4IGltcGxlbWVudGVkIGluIHRoaXMgY29tcG9uZW50IGVuc3VyZSB0aGF0IHdlXG4gKlxuICogMSkgaGF2ZSBhIGhvdmVyIHN0YXRlIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkcmFnLm1vdmUgZXZlbnRcbiAqIDIpIGhhdmUgYW4gb3V0IGV2ZW50IHdoZW4gZHJhZ2dpbmcgbGVhdmVzIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtEcmFnZ2luZ30gZHJhZ2dpbmdcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG92ZXJGaXgoZXZlbnRCdXMsIGRyYWdnaW5nLCBlbGVtZW50UmVnaXN0cnkpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB3ZSBhcmUgZ29kIGRhbW4gaG92ZXJpbmchXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGRyYWdnaW5nIGV2ZW50XG4gICAqL1xuICBmdW5jdGlvbiBlbnN1cmVIb3ZlcihldmVudCkge1xuXG4gICAgaWYgKGV2ZW50LmhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGdmeCA9IHNlbGYuX2ZpbmRUYXJnZXRHZngob3JpZ2luYWxFdmVudCk7XG5cbiAgICB2YXIgZWxlbWVudCA9IGdmeCAmJiBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG5cbiAgICBpZiAoZ2Z4ICYmIGVsZW1lbnQpIHtcblxuICAgICAgLy8gMSkgY2FuY2VsIGN1cnJlbnQgbW91c2Vtb3ZlXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gMikgZW1pdCBmYWtlIGhvdmVyIGZvciBuZXcgdGFyZ2V0XG4gICAgICBkcmFnZ2luZy5ob3Zlcih7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuXG4gICAgICAvLyAzKSByZS10cmlnZ2VyIG1vdmUgZXZlbnRcbiAgICAgIGRyYWdnaW5nLm1vdmUob3JpZ2luYWxFdmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIHdhaXQgZm9yIGEgc3BlY2lmaWMgc2VxdWVuY2Ugb2YgZXZlbnRzIGJlZm9yZVxuICAgKiBlbWl0dGluZyBhIGZha2UgZHJhZy5ob3ZlciBldmVudC5cbiAgICpcbiAgICogRXZlbnQgU2VxdWVuY2U6XG4gICAqXG4gICAqIGRyYWcuc3RhcnRcbiAgICogZHJhZy5tb3ZlID4+IGVuc3VyZSB3ZSBhcmUgaG92ZXJpbmdcbiAgICovXG4gIGV2ZW50QnVzLm9uKCdkcmFnLnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIGV2ZW50QnVzLm9uY2UoJ2RyYWcubW92ZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgIGVuc3VyZUhvdmVyKGV2ZW50KTtcblxuICAgIH0pO1xuXG4gIH0pO1xuXG5cbiAgLyoqXG4gICAqIFdlIG1ha2Ugc3VyZSB0aGF0IGRyYWcub3V0IGlzIGFsd2F5cyBmaXJlZCwgZXZlbiBpZiB0aGVcbiAgICogYnJvd3NlciBzd2FsbG93cyBhbiBlbGVtZW50Lm91dCBldmVudC5cbiAgICpcbiAgICogRXZlbnQgc2VxdWVuY2U6XG4gICAqXG4gICAqIGRyYWcuaG92ZXJcbiAgICogKGVsZW1lbnQub3V0ID4+IHNvbWV0aW1lcyBzd2FsbG93ZWQpXG4gICAqIGVsZW1lbnQuaG92ZXIgPj4gZW5zdXJlIHdlIGZpcmVkIGRyYWcub3V0XG4gICAqL1xuICBldmVudEJ1cy5vbignZHJhZy5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgaG92ZXIsIGhvdmVyR2Z4O1xuXG4gICAgZnVuY3Rpb24gc2V0RHJhZ0hvdmVyKGV2ZW50KSB7XG4gICAgICBob3ZlciA9IGV2ZW50LmhvdmVyO1xuICAgICAgaG92ZXJHZnggPSBldmVudC5ob3ZlckdmeDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnNldEhvdmVyKCkge1xuICAgICAgaG92ZXIgPSBudWxsO1xuICAgICAgaG92ZXJHZnggPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuc3VyZU91dCgpIHtcblxuICAgICAgaWYgKCFob3Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gaG92ZXIsXG4gICAgICAgICAgZ2Z4ID0gaG92ZXJHZng7XG5cbiAgICAgIGhvdmVyID0gbnVsbDtcbiAgICAgIGhvdmVyR2Z4ID0gbnVsbDtcblxuICAgICAgLy8gZW1pdCBzeW50aGV0aWMgb3V0IGV2ZW50XG4gICAgICBkcmFnZ2luZy5vdXQoe1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBnZng6IGdmeFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub24oJ2RyYWcuaG92ZXInLCBzZXREcmFnSG92ZXIpO1xuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm91dCcsIHVuc2V0SG92ZXIpO1xuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgSElHSF9QUklPUklUWSwgZW5zdXJlT3V0KTtcblxuICAgIGV2ZW50QnVzLm9uY2UoJ2RyYWcuY2xlYW51cCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZXZlbnRCdXMub2ZmKCdkcmFnLmhvdmVyJywgc2V0RHJhZ0hvdmVyKTtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5vdXQnLCB1bnNldEhvdmVyKTtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5ob3ZlcicsIGVuc3VyZU91dCk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgdGhpcy5fZmluZFRhcmdldEdmeCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQ7XG5cbiAgICBpZiAoIShldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KTtcblxuICAgIC8vIGRhbW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgb3VjaCFcbiAgICB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuXG4gICAgcmV0dXJuIGdldEdmeCh0YXJnZXQpO1xuICB9O1xuXG59XG5cbkhvdmVyRml4LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdkcmFnZ2luZycsXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEdmeCh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvbUNsb3Nlc3QodGFyZ2V0LCAnc3ZnLCAuZGpzLWVsZW1lbnQnLCB0cnVlKTtcbn0iLCJpbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJy4uL3NlbGVjdGlvbic7XG5cbmltcG9ydCBEcmFnZ2luZyBmcm9tICcuL0RyYWdnaW5nJztcbmltcG9ydCBIb3ZlckZpeCBmcm9tICcuL0hvdmVyRml4JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdob3ZlckZpeCdcbiAgXSxcbiAgX19kZXBlbmRzX186IFtcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgZHJhZ2dpbmc6IFsgJ3R5cGUnLCBEcmFnZ2luZyBdLFxuICBob3ZlckZpeDogWyAndHlwZScsIEhvdmVyRml4IF1cbn07IiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBOT1RfUkVHSVNURVJFRF9FUlJPUiA9ICdpcyBub3QgYSByZWdpc3RlcmVkIGFjdGlvbicsXG4gICAgSVNfUkVHSVNURVJFRF9FUlJPUiA9ICdpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnO1xuXG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIG1vZGVsaW5nIGFjdGlvbnMgYnkgZGVjb3VwbGluZ1xuICogdGhlIG9uZSB3aG8gcmVxdWVzdHMgdGhlIGFjdGlvbiB0byBiZSB0cmlnZ2VyZWQgYW5kIHRoZSB0cmlnZ2VyIGl0c2VsZi5cbiAqXG4gKiBJdCdzIHBvc3NpYmxlIHRvIGFkZCBuZXcgYWN0aW9ucyBieSByZWdpc3RlcmluZyB0aGVtIHdpdGggwrRyZWdpc3RlckFjdGlvbsK0XG4gKiBhbmQgbGlrZXdpc2UgdW5yZWdpc3RlciBleGlzdGluZyBvbmVzIHdpdGggwrR1bnJlZ2lzdGVyQWN0aW9uwrQuXG4gKlxuICpcbiAqICMjIExpZmUtQ3ljbGUgYW5kIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGUgZWRpdG9yIGFjdGlvbnMgd2lsbCB3YWl0IGZvciBkaWFncmFtIGluaXRpYWxpemF0aW9uIGJlZm9yZVxuICogcmVnaXN0ZXJpbmcgZGVmYXVsdCBhY3Rpb25zIF9hbmRfIGZpcmluZyBhbiBgZWRpdG9yQWN0aW9ucy5pbml0YCBldmVudC5cbiAqXG4gKiBJbnRlcmVzdGVkIHBhcnRpZXMgbWF5IGxpc3RlbiB0byB0aGUgYGVkaXRvckFjdGlvbnMuaW5pdGAgZXZlbnQgd2l0aFxuICogbG93IHByaW9yaXR5IHRvIGNoZWNrLCB3aGljaCBhY3Rpb25zIGdvdCByZWdpc3RlcmVkLiBPdGhlciBjb21wb25lbnRzXG4gKiBtYXkgdXNlIHRoZSBldmVudCB0byByZWdpc3RlciB0aGVpciBvd24gYWN0aW9ucyB2aWEgYHJlZ2lzdGVyQWN0aW9uYC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWRpdG9yQWN0aW9ucyhldmVudEJ1cywgaW5qZWN0b3IpIHtcblxuICAvLyBpbml0aWFsaXplIGFjdGlvbnNcbiAgdGhpcy5fYWN0aW9ucyA9IHt9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICAvLyBhbGwgZGlhZ3JhbSBtb2R1bGVzIGdvdCBsb2FkZWQ7IGNoZWNrIHdoaWNoIG9uZXNcbiAgICAvLyBhcmUgYXZhaWxhYmxlIGFuZCByZWdpc3RlciB0aGUgcmVzcGVjdGl2ZSBkZWZhdWx0IGFjdGlvbnNcbiAgICBzZWxmLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zKGluamVjdG9yKTtcblxuICAgIC8vIGFzayBpbnRlcmVzdGVkIHBhcnRpZXMgdG8gcmVnaXN0ZXIgYXZhaWxhYmxlIGVkaXRvclxuICAgIC8vIGFjdGlvbnMgb24gZGlhZ3JhbSBpbml0aWFsaXphdGlvblxuICAgIGV2ZW50QnVzLmZpcmUoJ2VkaXRvckFjdGlvbnMuaW5pdCcsIHtcbiAgICAgIGVkaXRvckFjdGlvbnM6IHNlbGZcbiAgICB9KTtcbiAgfSk7XG5cbn1cblxuRWRpdG9yQWN0aW9ucy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGRlZmF1bHQgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJEZWZhdWx0QWN0aW9ucyA9IGZ1bmN0aW9uKGluamVjdG9yKSB7XG5cbiAgLy8gKDEpIHJldHJpZXZlIG9wdGlvbmFsIGNvbXBvbmVudHMgdG8gaW50ZWdyYXRlIHdpdGhcblxuICB2YXIgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snLCBmYWxzZSk7XG4gIHZhciBtb2RlbGluZyA9IGluamVjdG9yLmdldCgnbW9kZWxpbmcnLCBmYWxzZSk7XG4gIHZhciBzZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ3NlbGVjdGlvbicsIGZhbHNlKTtcbiAgdmFyIHpvb21TY3JvbGwgPSBpbmplY3Rvci5nZXQoJ3pvb21TY3JvbGwnLCBmYWxzZSk7XG4gIHZhciBjb3B5UGFzdGUgPSBpbmplY3Rvci5nZXQoJ2NvcHlQYXN0ZScsIGZhbHNlKTtcbiAgdmFyIGNhbnZhcyA9IGluamVjdG9yLmdldCgnY2FudmFzJywgZmFsc2UpO1xuICB2YXIgcnVsZXMgPSBpbmplY3Rvci5nZXQoJ3J1bGVzJywgZmFsc2UpO1xuICB2YXIga2V5Ym9hcmRNb3ZlID0gaW5qZWN0b3IuZ2V0KCdrZXlib2FyZE1vdmUnLCBmYWxzZSk7XG4gIHZhciBrZXlib2FyZE1vdmVTZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ2tleWJvYXJkTW92ZVNlbGVjdGlvbicsIGZhbHNlKTtcblxuICAvLyAoMikgY2hlY2sgY29tcG9uZW50cyBhbmQgcmVnaXN0ZXIgYWN0aW9uc1xuXG4gIGlmIChjb21tYW5kU3RhY2spIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCd1bmRvJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb21tYW5kU3RhY2sudW5kbygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcigncmVkbycsIGZ1bmN0aW9uKCkge1xuICAgICAgY29tbWFuZFN0YWNrLnJlZG8oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb3B5UGFzdGUgJiYgc2VsZWN0aW9uKSB7XG4gICAgdGhpcy5yZWdpc3RlcignY29weScsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGNvcHlQYXN0ZS5jb3B5KHNlbGVjdGVkRWxlbWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNvcHlQYXN0ZSkge1xuICAgIHRoaXMucmVnaXN0ZXIoJ3Bhc3RlJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb3B5UGFzdGUucGFzdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh6b29tU2Nyb2xsKSB7XG4gICAgdGhpcy5yZWdpc3Rlcignc3RlcFpvb20nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICB6b29tU2Nyb2xsLnN0ZXBab29tKG9wdHMudmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNhbnZhcykge1xuICAgIHRoaXMucmVnaXN0ZXIoJ3pvb20nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICBjYW52YXMuem9vbShvcHRzLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChtb2RlbGluZyAmJiBzZWxlY3Rpb24gJiYgcnVsZXMpIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCdyZW1vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGlmICghc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmRlbGV0ZScsIHsgZWxlbWVudHM6IHNlbGVjdGVkRWxlbWVudHMgfSksXG4gICAgICAgICAgcmVtb3ZhYmxlRWxlbWVudHM7XG5cbiAgICAgIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5KGFsbG93ZWQpKSB7XG4gICAgICAgIHJlbW92YWJsZUVsZW1lbnRzID0gYWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZW1vdmFibGVFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW1vdmFibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMocmVtb3ZhYmxlRWxlbWVudHMuc2xpY2UoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoa2V5Ym9hcmRNb3ZlKSB7XG4gICAgdGhpcy5yZWdpc3RlcignbW92ZUNhbnZhcycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIGtleWJvYXJkTW92ZS5tb3ZlQ2FudmFzKG9wdHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGtleWJvYXJkTW92ZVNlbGVjdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXIoJ21vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICBrZXlib2FyZE1vdmVTZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihvcHRzLmRpcmVjdGlvbiwgb3B0cy5hY2NlbGVyYXRlZCk7XG4gICAgfSk7XG4gIH1cblxufTtcblxuXG4vKipcbiAqIFRyaWdnZXJzIGEgcmVnaXN0ZXJlZCBhY3Rpb25cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRzXG4gKlxuICogQHJldHVybiB7VW5rbm93bn0gUmV0dXJucyB3aGF0IHRoZSByZWdpc3RlcmVkIGxpc3RlbmVyIHJldHVybnNcbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgb3B0cykge1xuICBpZiAoIXRoaXMuX2FjdGlvbnNbYWN0aW9uXSkge1xuICAgIHRocm93IGVycm9yKGFjdGlvbiwgTk9UX1JFR0lTVEVSRURfRVJST1IpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2FjdGlvbnNbYWN0aW9uXShvcHRzKTtcbn07XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjb2xsZWN0aW9ucyBvZiBhY3Rpb25zLlxuICogVGhlIGtleSBvZiB0aGUgb2JqZWN0IHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogwrTCtMK0XG4gKiB2YXIgYWN0aW9ucyA9IHtcbiAqICAgc3BhY2VUb29sOiBmdW5jdGlvbigpIHtcbiAqICAgICBzcGFjZVRvb2wuYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAqICAgfSxcbiAqICAgbGFzc29Ub29sOiBmdW5jdGlvbigpIHtcbiAqICAgICBsYXNzb1Rvb2wuYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAqICAgfVxuICogXTtcbiAqXG4gKiBlZGl0b3JBY3Rpb25zLnJlZ2lzdGVyKGFjdGlvbnMpO1xuICpcbiAqIGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKCdzcGFjZVRvb2wnKTsgLy8gdHJ1ZVxuICogwrTCtMK0XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBhY3Rpb25zXG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oYWN0aW9ucywgbGlzdGVuZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVnaXN0ZXJBY3Rpb24oYWN0aW9ucywgbGlzdGVuZXIpO1xuICB9XG5cbiAgZm9yRWFjaChhY3Rpb25zLCBmdW5jdGlvbihsaXN0ZW5lciwgYWN0aW9uKSB7XG4gICAgc2VsZi5fcmVnaXN0ZXJBY3Rpb24oYWN0aW9uLCBsaXN0ZW5lcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciB0byBhbiBhY3Rpb24ga2V5XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24sIGxpc3RlbmVyKSB7XG4gIGlmICh0aGlzLmlzUmVnaXN0ZXJlZChhY3Rpb24pKSB7XG4gICAgdGhyb3cgZXJyb3IoYWN0aW9uLCBJU19SRUdJU1RFUkVEX0VSUk9SKTtcbiAgfVxuXG4gIHRoaXMuX2FjdGlvbnNbYWN0aW9uXSA9IGxpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGFuIGV4aXN0aW5nIGFjdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUudW5yZWdpc3RlciA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICBpZiAoIXRoaXMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICB0aHJvdyBlcnJvcihhY3Rpb24sIE5PVF9SRUdJU1RFUkVEX0VSUk9SKTtcbiAgfVxuXG4gIHRoaXMuX2FjdGlvbnNbYWN0aW9uXSA9IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLmdldEFjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2FjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2V0aGVyIHRoZSBnaXZlbiBhY3Rpb24gaXMgcmVnaXN0ZXJlZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5pc1JlZ2lzdGVyZWQgPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuICEhdGhpcy5fYWN0aW9uc1thY3Rpb25dO1xufTtcblxuXG5mdW5jdGlvbiBlcnJvcihhY3Rpb24sIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihhY3Rpb24gKyAnICcgKyBtZXNzYWdlKTtcbn1cbiIsImltcG9ydCBFZGl0b3JBY3Rpb25zIGZyb20gJy4vRWRpdG9yQWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2VkaXRvckFjdGlvbnMnIF0sXG4gIGVkaXRvckFjdGlvbnM6IFsgJ3R5cGUnLCBFZGl0b3JBY3Rpb25zIF1cbn07XG4iLCJ2YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0Nvbm5lY3R9IGNvbm5lY3RcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7VG9vbE1hbmFnZXJ9IHRvb2xNYW5hZ2VyXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHbG9iYWxDb25uZWN0KFxuICAgIGV2ZW50QnVzLCBkcmFnZ2luZywgY29ubmVjdCxcbiAgICBjYW52YXMsIHRvb2xNYW5hZ2VyLCBydWxlcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuXG4gIHRvb2xNYW5hZ2VyLnJlZ2lzdGVyVG9vbCgnZ2xvYmFsLWNvbm5lY3QnLCB7XG4gICAgdG9vbDogJ2dsb2JhbC1jb25uZWN0JyxcbiAgICBkcmFnZ2luZzogJ2dsb2JhbC1jb25uZWN0LmRyYWcnXG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdnbG9iYWwtY29ubmVjdC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzdGFydFRhcmdldCA9IGV2ZW50LmhvdmVyO1xuXG4gICAgdmFyIGNhblN0YXJ0Q29ubmVjdCA9IGNvbnRleHQuY2FuU3RhcnRDb25uZWN0ID0gc2VsZi5jYW5TdGFydENvbm5lY3Qoc3RhcnRUYXJnZXQpO1xuXG4gICAgLy8gc2ltcGx5IGlnbm9yZSBob3ZlclxuICAgIGlmIChjYW5TdGFydENvbm5lY3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnN0YXJ0VGFyZ2V0ID0gc3RhcnRUYXJnZXQ7XG5cbiAgICBjYW52YXMuYWRkTWFya2VyKHN0YXJ0VGFyZ2V0LCBjYW5TdGFydENvbm5lY3QgPyBNQVJLRVJfT0sgOiBNQVJLRVJfTk9UX09LKTtcbiAgfSk7XG5cblxuICBldmVudEJ1cy5vbihbICdnbG9iYWwtY29ubmVjdC5vdXQnLCAnZ2xvYmFsLWNvbm5lY3QuY2xlYW51cCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgc3RhcnRUYXJnZXQgPSBldmVudC5jb250ZXh0LnN0YXJ0VGFyZ2V0LFxuICAgICAgICBjYW5TdGFydENvbm5lY3QgPSBldmVudC5jb250ZXh0LmNhblN0YXJ0Q29ubmVjdDtcblxuICAgIGlmIChzdGFydFRhcmdldCkge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihzdGFydFRhcmdldCwgY2FuU3RhcnRDb25uZWN0ID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgfVxuICB9KTtcblxuXG4gIGV2ZW50QnVzLm9uKFsgJ2dsb2JhbC1jb25uZWN0LmVuZGVkJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc3RhcnRUYXJnZXQgPSBjb250ZXh0LnN0YXJ0VGFyZ2V0LFxuICAgICAgICBzdGFydFBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICB9O1xuXG4gICAgdmFyIGNhblN0YXJ0Q29ubmVjdCA9IHNlbGYuY2FuU3RhcnRDb25uZWN0KHN0YXJ0VGFyZ2V0KTtcblxuICAgIGlmICghY2FuU3RhcnRDb25uZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub25jZSgnZWxlbWVudC5vdXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGV2ZW50QnVzLm9uY2UoWyAnY29ubmVjdC5lbmRlZCcsICdjb25uZWN0LmNhbmNlbGVkJyBdLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnRCdXMuZmlyZSgnZ2xvYmFsLWNvbm5lY3QuZHJhZy5lbmRlZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbm5lY3Quc3RhcnQobnVsbCwgc3RhcnRUYXJnZXQsIHN0YXJ0UG9zaXRpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuR2xvYmFsQ29ubmVjdC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZHJhZ2dpbmcnLFxuICAnY29ubmVjdCcsXG4gICdjYW52YXMnLFxuICAndG9vbE1hbmFnZXInLFxuICAncnVsZXMnXG5dO1xuXG4vKipcbiAqIEluaXRpYXRlcyB0b29sIGFjdGl2aXR5LlxuICovXG5HbG9iYWxDb25uZWN0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdnbG9iYWwtY29ubmVjdCcsIHtcbiAgICB0cmFwQ2xpY2s6IGZhbHNlLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbkdsb2JhbENvbm5lY3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59O1xuXG5HbG9iYWxDb25uZWN0LnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29udGV4dCA9IHRoaXMuX2RyYWdnaW5nLmNvbnRleHQoKTtcblxuICByZXR1cm4gY29udGV4dCAmJiAvXmdsb2JhbC1jb25uZWN0Ly50ZXN0KGNvbnRleHQucHJlZml4KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgc291cmNlIHNoYXBlIGNhbiBpbml0aWF0ZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1NoYXBlfSBzdGFydFRhcmdldFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuR2xvYmFsQ29ubmVjdC5wcm90b3R5cGUuY2FuU3RhcnRDb25uZWN0ID0gZnVuY3Rpb24oc3RhcnRUYXJnZXQpIHtcbiAgcmV0dXJuIHRoaXMuX3J1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24uc3RhcnQnLCB7IHNvdXJjZTogc3RhcnRUYXJnZXQgfSk7XG59O1xuIiwiaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnLi4vY29ubmVjdCc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuXG5pbXBvcnQgR2xvYmFsQ29ubmVjdCBmcm9tICcuL0dsb2JhbENvbm5lY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29ubmVjdE1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBEcmFnZ2luZ01vZHVsZSxcbiAgICBUb29sTWFuYWdlck1vZHVsZVxuICBdLFxuICBnbG9iYWxDb25uZWN0OiBbICd0eXBlJywgR2xvYmFsQ29ubmVjdCBdXG59O1xuIiwiaW1wb3J0IHtcclxuICBzZXRTbmFwcGVkLFxyXG4gIGlzU25hcHBlZFxyXG59IGZyb20gJy4uL3NuYXBwaW5nL1NuYXBVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQ21kIH0gZnJvbSAnLi4va2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNzaWduLFxyXG4gIGlzTnVtYmVyXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTUEFDSU5HLFxyXG4gIHF1YW50aXplXHJcbn0gZnJvbSAnLi9HcmlkVXRpbCc7XHJcblxyXG52YXIgTE9XRVJfUFJJT1JJVFkgPSAxMjAwO1xyXG52YXIgTE9XX1BSSU9SSVRZID0gODAwO1xyXG5cclxuLyoqXHJcbiAqIEJhc2ljIGdyaWQgc25hcHBpbmcgdGhhdCBjb3ZlcnMgY29ubmVjdGluZywgY3JlYXRpbmcsIG1vdmluZywgcmVzaXppbmcgc2hhcGVzLCBtb3ZpbmcgYmVuZHBvaW50c1xyXG4gKiBhbmQgY29ubmVjdGlvbiBzZWdtZW50cy5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyaWRTbmFwcGluZyhlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBjb25maWcpIHtcclxuXHJcbiAgdmFyIGFjdGl2ZSA9ICFjb25maWcgfHwgY29uZmlnLmFjdGl2ZSAhPT0gZmFsc2U7XHJcblxyXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLnNldEFjdGl2ZShhY3RpdmUpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLm1vdmUnLFxyXG4gICAgJ2NyZWF0ZS5lbmQnLFxyXG4gICAgJ2JlbmRwb2ludC5tb3ZlLm1vdmUnLFxyXG4gICAgJ2JlbmRwb2ludC5tb3ZlLmVuZCcsXHJcbiAgICAnY29ubmVjdC5tb3ZlJyxcclxuICAgICdjb25uZWN0LmVuZCcsXHJcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5tb3ZlJyxcclxuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmVuZCcsXHJcbiAgICAncmVzaXplLm1vdmUnLFxyXG4gICAgJ3Jlc2l6ZS5lbmQnLFxyXG4gICAgJ3NoYXBlLm1vdmUubW92ZScsXHJcbiAgICAnc2hhcGUubW92ZS5lbmQnXHJcbiAgXSwgTE9XRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XHJcblxyXG4gICAgaWYgKCFzZWxmLmFjdGl2ZSB8fCAob3JpZ2luYWxFdmVudCAmJiBpc0NtZChvcmlnaW5hbEV2ZW50KSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0O1xyXG5cclxuICAgIGlmICghZ3JpZFNuYXBwaW5nQ29udGV4dCkge1xyXG4gICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0ID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgWyAneCcsICd5JyBdLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgICB2YXIgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgLy8gYWxsb3cgc25hcHBpbmcgd2l0aCBvZmZzZXRcclxuICAgICAgdmFyIHNuYXBPZmZzZXQgPSBnZXRTbmFwT2Zmc2V0KGV2ZW50LCBheGlzLCBlbGVtZW50UmVnaXN0cnkpO1xyXG5cclxuICAgICAgaWYgKHNuYXBPZmZzZXQpIHtcclxuICAgICAgICBvcHRpb25zLm9mZnNldCA9IHNuYXBPZmZzZXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFsbG93IHNuYXBwaW5nIHdpdGggbWluIGFuZCBtYXhcclxuICAgICAgdmFyIHNuYXBDb25zdHJhaW50cyA9IGdldFNuYXBDb25zdHJhaW50cyhldmVudCwgYXhpcyk7XHJcblxyXG4gICAgICBpZiAoc25hcENvbnN0cmFpbnRzKSB7XHJcbiAgICAgICAgYXNzaWduKG9wdGlvbnMsIHNuYXBDb25zdHJhaW50cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTbmFwcGVkKGV2ZW50LCBheGlzKSkge1xyXG4gICAgICAgIHNlbGYuc25hcEV2ZW50KGV2ZW50LCBheGlzLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTbmFwIGFuIGV2ZW50cyB4IG9yIHkgd2l0aCBvcHRpb25hbCBtaW4sIG1heCBhbmQgb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm9mZnNldF1cclxuICovXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc25hcEV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsIGF4aXMsIG9wdGlvbnMpIHtcclxuICB2YXIgc25hcHBlZFZhbHVlID0gdGhpcy5zbmFwVmFsdWUoZXZlbnRbIGF4aXMgXSwgb3B0aW9ucyk7XHJcblxyXG4gIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHNuYXBwZWRWYWx1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRXhwb3NlIGdyaWQgc3BhY2luZyBmb3IgdGhpcmQgcGFydGllcyAoaS5lLiBleHRlbnNpb25zKS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBzcGFjaW5nIG9mIGdyaWQgZG90c1xyXG4gKi9cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS5nZXRHcmlkU3BhY2luZyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBTUEFDSU5HO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNuYXAgdmFsdWUgd2l0aCBvcHRpb25hbCBtaW4sIG1heCBhbmQgb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm9mZnNldF1cclxuICovXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc25hcFZhbHVlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcclxuICB2YXIgb2Zmc2V0ID0gMDtcclxuXHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vZmZzZXQpIHtcclxuICAgIG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgdmFsdWUgKz0gb2Zmc2V0O1xyXG5cclxuICB2YWx1ZSA9IHF1YW50aXplKHZhbHVlLCBTUEFDSU5HKTtcclxuXHJcbiAgdmFyIG1pbiwgbWF4O1xyXG5cclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1pbikge1xyXG4gICAgbWluID0gb3B0aW9ucy5taW47XHJcblxyXG4gICAgaWYgKGlzTnVtYmVyKG1pbikpIHtcclxuICAgICAgbWluID0gcXVhbnRpemUobWluICsgb2Zmc2V0LCBTUEFDSU5HLCAnY2VpbCcpO1xyXG5cclxuICAgICAgdmFsdWUgPSBNYXRoLm1heCh2YWx1ZSwgbWluKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMubWF4KSB7XHJcbiAgICBtYXggPSBvcHRpb25zLm1heDtcclxuXHJcbiAgICBpZiAoaXNOdW1iZXIobWF4KSkge1xyXG4gICAgICBtYXggPSBxdWFudGl6ZShtYXggKyBvZmZzZXQsIFNQQUNJTkcsICdmbG9vcicpO1xyXG5cclxuICAgICAgdmFsdWUgPSBNYXRoLm1pbih2YWx1ZSwgbWF4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbHVlIC09IG9mZnNldDtcclxuXHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB0aGlzLmFjdGl2ZTtcclxufTtcclxuXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc2V0QWN0aXZlID0gZnVuY3Rpb24oYWN0aXZlKSB7XHJcbiAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XHJcblxyXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2dyaWRTbmFwcGluZy50b2dnbGUnLCB7IGFjdGl2ZTogYWN0aXZlIH0pO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS50b2dnbGVBY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICB0aGlzLnNldEFjdGl2ZSghdGhpcy5hY3RpdmUpO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLiRpbmplY3QgPSBbXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnY29uZmlnLmdyaWRTbmFwcGluZydcclxuXTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIEdldCBtaW5pbXVtIGFuZCBtYXhpbXVtIHNuYXAgY29uc3RyYWludHMuXHJcbiAqIENvbnN0cmFpbnRzIGFyZSBjYWNoZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnQuY29udGV4dFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnxPYmplY3R9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTbmFwQ29uc3RyYWludHMoZXZlbnQsIGF4aXMpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIGNyZWF0ZUNvbnN0cmFpbnRzID0gY29udGV4dC5jcmVhdGVDb25zdHJhaW50cyxcclxuICAgICAgcmVzaXplQ29uc3RyYWludHMgPSBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzIHx8IHt9LFxyXG4gICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0LFxyXG4gICAgICBzbmFwQ29uc3RyYWludHMgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBDb25zdHJhaW50cztcclxuXHJcbiAgLy8gY2FjaGUgc25hcCBjb25zdHJhaW50c1xyXG4gIGlmIChzbmFwQ29uc3RyYWludHMgJiYgc25hcENvbnN0cmFpbnRzWyBheGlzIF0pIHtcclxuICAgIHJldHVybiBzbmFwQ29uc3RyYWludHNbIGF4aXMgXTtcclxuICB9XHJcblxyXG4gIGlmICghc25hcENvbnN0cmFpbnRzKSB7XHJcbiAgICBzbmFwQ29uc3RyYWludHMgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBDb25zdHJhaW50cyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgaWYgKCFzbmFwQ29uc3RyYWludHNbIGF4aXMgXSkge1xyXG4gICAgc25hcENvbnN0cmFpbnRzWyBheGlzIF0gPSB7fTtcclxuICB9XHJcblxyXG4gIHZhciBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbjtcclxuXHJcbiAgLy8gY3JlYXRlXHJcbiAgaWYgKGNyZWF0ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGF4aXMpKSB7XHJcbiAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1pbiA9IGNyZWF0ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1heCA9IGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc25hcENvbnN0cmFpbnRzLnkubWluID0gY3JlYXRlQ29uc3RyYWludHMudG9wO1xyXG4gICAgICBzbmFwQ29uc3RyYWludHMueS5tYXggPSBjcmVhdGVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyByZXNpemVcclxuICB2YXIgbWluUmVzaXplQ29uc3RyYWludHMgPSByZXNpemVDb25zdHJhaW50cy5taW4sXHJcbiAgICAgIG1heFJlc2l6ZUNvbnN0cmFpbnRzID0gcmVzaXplQ29uc3RyYWludHMubWF4O1xyXG5cclxuICBpZiAobWluUmVzaXplQ29uc3RyYWludHMpIHtcclxuICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuXHJcbiAgICAgIGlmIChpc1dlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1heCA9IG1pblJlc2l6ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLngubWluID0gbWluUmVzaXplQ29uc3RyYWludHMucmlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKGlzTm9ydGgoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy55Lm1heCA9IG1pblJlc2l6ZUNvbnN0cmFpbnRzLnRvcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5taW4gPSBtaW5SZXNpemVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAobWF4UmVzaXplQ29uc3RyYWludHMpIHtcclxuICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuXHJcbiAgICAgIGlmIChpc1dlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1pbiA9IG1heFJlc2l6ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLngubWF4ID0gbWF4UmVzaXplQ29uc3RyYWludHMucmlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKGlzTm9ydGgoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy55Lm1pbiA9IG1heFJlc2l6ZUNvbnN0cmFpbnRzLnRvcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5tYXggPSBtYXhSZXNpemVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc25hcENvbnN0cmFpbnRzWyBheGlzIF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgc25hcCBvZmZzZXQuXHJcbiAqIE9mZnNldCBpcyBjYWNoZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xyXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTbmFwT2Zmc2V0KGV2ZW50LCBheGlzLCBlbGVtZW50UmVnaXN0cnkpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNoYXBlID0gZXZlbnQuc2hhcGUsXHJcbiAgICAgIGdyaWRTbmFwcGluZ0NvbnRleHQgPSBjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQsXHJcbiAgICAgIHNuYXBMb2NhdGlvbiA9IGdyaWRTbmFwcGluZ0NvbnRleHQuc25hcExvY2F0aW9uLFxyXG4gICAgICBzbmFwT2Zmc2V0ID0gZ3JpZFNuYXBwaW5nQ29udGV4dC5zbmFwT2Zmc2V0O1xyXG5cclxuICAvLyBjYWNoZSBzbmFwIG9mZnNldFxyXG4gIGlmIChzbmFwT2Zmc2V0ICYmIGlzTnVtYmVyKHNuYXBPZmZzZXRbIGF4aXMgXSkpIHtcclxuICAgIHJldHVybiBzbmFwT2Zmc2V0WyBheGlzIF07XHJcbiAgfVxyXG5cclxuICBpZiAoIXNuYXBPZmZzZXQpIHtcclxuICAgIHNuYXBPZmZzZXQgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBPZmZzZXQgPSB7fTtcclxuICB9XHJcblxyXG4gIGlmICghaXNOdW1iZXIoc25hcE9mZnNldFsgYXhpcyBdKSkge1xyXG4gICAgc25hcE9mZnNldFsgYXhpcyBdID0gMDtcclxuICB9XHJcblxyXG4gIGlmICghc2hhcGUpIHtcclxuICAgIHJldHVybiBzbmFwT2Zmc2V0WyBheGlzIF07XHJcbiAgfVxyXG5cclxuICBpZiAoIWVsZW1lbnRSZWdpc3RyeS5nZXQoc2hhcGUuaWQpKSB7XHJcblxyXG4gICAgaWYgKGlzSG9yaXpvbnRhbChheGlzKSkge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gKz0gc2hhcGVbIGF4aXMgXSArIHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSArPSBzaGFwZVsgYXhpcyBdICsgc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICghc25hcExvY2F0aW9uKSB7XHJcbiAgICByZXR1cm4gc25hcE9mZnNldFsgYXhpcyBdO1xyXG4gIH1cclxuXHJcbiAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG4gICAgaWYgKC9sZWZ0Ly50ZXN0KHNuYXBMb2NhdGlvbikpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdIC09IHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH0gZWxzZSBpZiAoL3JpZ2h0Ly50ZXN0KHNuYXBMb2NhdGlvbikpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdICs9IHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKC90b3AvLnRlc3Qoc25hcExvY2F0aW9uKSkge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gLT0gc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgIH0gZWxzZSBpZiAoL2JvdHRvbS8udGVzdChzbmFwTG9jYXRpb24pKSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSArPSBzaGFwZS5oZWlnaHQgLyAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNuYXBPZmZzZXRbIGF4aXMgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNIb3Jpem9udGFsKGF4aXMpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vcnRoKGRpcmVjdGlvbikge1xyXG4gIHJldHVybiBkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXZXN0KGRpcmVjdGlvbikge1xyXG4gIHJldHVybiBkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMTtcclxufSIsImV4cG9ydCB2YXIgU1BBQ0lORyA9IDEwO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVhbnRpemUodmFsdWUsIHF1YW50dW0sIGZuKSB7XG4gIGlmICghZm4pIHtcbiAgICBmbiA9ICdyb3VuZCc7XG4gIH1cblxuICByZXR1cm4gTWF0aFsgZm4gXSh2YWx1ZSAvIHF1YW50dW0pICogcXVhbnR1bTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICcuLi8uLi8uLi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBpc1N0cmluZ1xyXG59IGZyb20gJ21pbi1kYXNoJztcclxuXHJcblxyXG4vKipcclxuICogSW50ZWdyYXRlcyByZXNpemluZyB3aXRoIGdyaWQgc25hcHBpbmcuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICB0aGlzLl9ncmlkU25hcHBpbmcgPSBncmlkU25hcHBpbmc7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5yZXNpemUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcclxuICAgICAgICBhdXRvUmVzaXplID0gaGludHMuYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICBpZiAoIWF1dG9SZXNpemUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHM7XHJcblxyXG4gICAgaWYgKGlzU3RyaW5nKGF1dG9SZXNpemUpKSB7XHJcbiAgICAgIGNvbnRleHQubmV3Qm91bmRzID0gc2VsZi5zbmFwQ29tcGxleChuZXdCb3VuZHMsIGF1dG9SZXNpemUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dC5uZXdCb3VuZHMgPSBzZWxmLnNuYXBTaW1wbGUoc2hhcGUsIG5ld0JvdW5kcyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcblJlc2l6ZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJyxcclxuICAnbW9kZWxpbmcnXHJcbl07XHJcblxyXG5pbmhlcml0cyhSZXNpemVCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIHdpZHRoIGFuZCBoZWlnaHQgaW4gcmVsYXRpb24gdG8gY2VudGVyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gc2hhcGVcclxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm91bmRzfSBTbmFwcGVkIGJvdW5kcy5cclxuICovXHJcblJlc2l6ZUJlaGF2aW9yLnByb3RvdHlwZS5zbmFwU2ltcGxlID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcykge1xyXG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmc7XHJcblxyXG4gIG5ld0JvdW5kcy53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLndpZHRoLCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy53aWR0aFxyXG4gIH0pO1xyXG5cclxuICBuZXdCb3VuZHMuaGVpZ2h0ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMuaGVpZ2h0LCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy5oZWlnaHRcclxuICB9KTtcclxuXHJcbiAgbmV3Qm91bmRzLnggPSBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC8gMikgLSAobmV3Qm91bmRzLndpZHRoIC8gMik7XHJcbiAgbmV3Qm91bmRzLnkgPSBzaGFwZS55ICsgKHNoYXBlLmhlaWdodCAvIDIpIC0gKG5ld0JvdW5kcy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgYWNjb3JkaW5nIHRvIGdpdmVuIGRpcmVjdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcclxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbnMgLSBEaXJlY3Rpb25zIGFzIHtufHd8c3xlfS5cclxuICpcclxuICogQHJldHVybnMge0JvdW5kc30gU25hcHBlZCBib3VuZHMuXHJcbiAqL1xyXG5SZXNpemVCZWhhdmlvci5wcm90b3R5cGUuc25hcENvbXBsZXggPSBmdW5jdGlvbihuZXdCb3VuZHMsIGRpcmVjdGlvbnMpIHtcclxuICBpZiAoL3d8ZS8udGVzdChkaXJlY3Rpb25zKSkge1xyXG4gICAgbmV3Qm91bmRzID0gdGhpcy5zbmFwSG9yaXpvbnRhbGx5KG5ld0JvdW5kcywgZGlyZWN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBpZiAoL258cy8udGVzdChkaXJlY3Rpb25zKSkge1xyXG4gICAgbmV3Qm91bmRzID0gdGhpcy5zbmFwVmVydGljYWxseShuZXdCb3VuZHMsIGRpcmVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIGluIG9uZSBvciBib3RoIGRpcmVjdGlvbnMgaG9yaXpvbnRhbGx5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb25zIC0gRGlyZWN0aW9ucyBhcyB7bnx3fHN8ZX0uXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtCb3VuZHN9IFNuYXBwZWQgYm91bmRzLlxyXG4gKi9cclxuUmVzaXplQmVoYXZpb3IucHJvdG90eXBlLnNuYXBIb3Jpem9udGFsbHkgPSBmdW5jdGlvbihuZXdCb3VuZHMsIGRpcmVjdGlvbnMpIHtcclxuICB2YXIgZ3JpZFNuYXBwaW5nID0gdGhpcy5fZ3JpZFNuYXBwaW5nLFxyXG4gICAgICB3ZXN0ID0gL3cvLnRlc3QoZGlyZWN0aW9ucyksXHJcbiAgICAgIGVhc3QgPSAvZS8udGVzdChkaXJlY3Rpb25zKTtcclxuXHJcbiAgdmFyIHNuYXBwZWROZXdCb3VuZHMgPSB7fTtcclxuXHJcbiAgc25hcHBlZE5ld0JvdW5kcy53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLndpZHRoLCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy53aWR0aFxyXG4gIH0pO1xyXG5cclxuICBpZiAoZWFzdCkge1xyXG5cclxuICAgIC8vIGhhbmRsZSA8d2U+XHJcbiAgICBpZiAod2VzdCkge1xyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLnggPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy54LCB7XHJcbiAgICAgICAgbWF4OiBuZXdCb3VuZHMueFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNuYXBwZWROZXdCb3VuZHMud2lkdGggKz0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMueCAtIHNuYXBwZWROZXdCb3VuZHMueCwge1xyXG4gICAgICAgIG1pbjogbmV3Qm91bmRzLnggLSBzbmFwcGVkTmV3Qm91bmRzLnhcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFuZGxlIDxlPlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG5ld0JvdW5kcy54ID0gbmV3Qm91bmRzLnggKyBuZXdCb3VuZHMud2lkdGggLSBzbmFwcGVkTmV3Qm91bmRzLndpZHRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXNzaWduIHNuYXBwZWQgeCBhbmQgd2lkdGhcclxuICBhc3NpZ24obmV3Qm91bmRzLCBzbmFwcGVkTmV3Qm91bmRzKTtcclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIGluIG9uZSBvciBib3RoIGRpcmVjdGlvbnMgdmVydGljYWxseS5cclxuICpcclxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9ucyAtIERpcmVjdGlvbnMgYXMge258d3xzfGV9LlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm91bmRzfSBTbmFwcGVkIGJvdW5kcy5cclxuICovXHJcblJlc2l6ZUJlaGF2aW9yLnByb3RvdHlwZS5zbmFwVmVydGljYWxseSA9IGZ1bmN0aW9uKG5ld0JvdW5kcywgZGlyZWN0aW9ucykge1xyXG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmcsXHJcbiAgICAgIG5vcnRoID0gL24vLnRlc3QoZGlyZWN0aW9ucyksXHJcbiAgICAgIHNvdXRoID0gL3MvLnRlc3QoZGlyZWN0aW9ucyk7XHJcblxyXG4gIHZhciBzbmFwcGVkTmV3Qm91bmRzID0ge307XHJcblxyXG4gIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMuaGVpZ2h0LCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy5oZWlnaHRcclxuICB9KTtcclxuXHJcbiAgaWYgKG5vcnRoKSB7XHJcblxyXG4gICAgLy8gaGFuZGxlIDxucz5cclxuICAgIGlmIChzb3V0aCkge1xyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLnkgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy55LCB7XHJcbiAgICAgICAgbWF4OiBuZXdCb3VuZHMueVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0ICs9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLnkgLSBzbmFwcGVkTmV3Qm91bmRzLnksIHtcclxuICAgICAgICBtaW46IG5ld0JvdW5kcy55IC0gc25hcHBlZE5ld0JvdW5kcy55XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhhbmRsZSA8bj5cclxuICAgIGVsc2Uge1xyXG4gICAgICBuZXdCb3VuZHMueSA9IG5ld0JvdW5kcy55ICsgbmV3Qm91bmRzLmhlaWdodCAtIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXNzaWduIHNuYXBwZWQgeSBhbmQgaGVpZ2h0XHJcbiAgYXNzaWduKG5ld0JvdW5kcywgc25hcHBlZE5ld0JvdW5kcyk7XHJcblxyXG4gIHJldHVybiBuZXdCb3VuZHM7XHJcbn07IiwidmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuLyoqXHJcbiAqIEludGVncmF0ZXMgc3BhY2UgdG9vbCB3aXRoIGdyaWQgc25hcHBpbmcuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2xCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ3NwYWNlVG9vbC5tb3ZlJyxcclxuICAgICdzcGFjZVRvb2wuZW5kJ1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxpemVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYXhpcyA9IGNvbnRleHQuYXhpcztcclxuXHJcbiAgICB2YXIgc25hcHBlZDtcclxuXHJcbiAgICBpZiAoYXhpcyA9PT0gJ3gnKSB7XHJcblxyXG4gICAgICAvLyBzbmFwIGRlbHRhIHggdG8gbXVsdGlwbGUgb2YgMTBcclxuICAgICAgc25hcHBlZCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoZXZlbnQuZHgpO1xyXG5cclxuICAgICAgZXZlbnQueCA9IGV2ZW50LnggKyBzbmFwcGVkIC0gZXZlbnQuZHg7XHJcbiAgICAgIGV2ZW50LmR4ID0gc25hcHBlZDtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBzbmFwIGRlbHRhIHkgdG8gbXVsdGlwbGUgb2YgMTBcclxuICAgICAgc25hcHBlZCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoZXZlbnQuZHkpO1xyXG5cclxuICAgICAgZXZlbnQueSA9IGV2ZW50LnkgKyBzbmFwcGVkIC0gZXZlbnQuZHk7XHJcbiAgICAgIGV2ZW50LmR5ID0gc25hcHBlZDtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuU3BhY2VUb29sQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdncmlkU25hcHBpbmcnXHJcbl07IiwiaW1wb3J0IFJlc2l6ZUJlaGF2aW9yIGZyb20gJy4vUmVzaXplQmVoYXZpb3InO1xyXG5pbXBvcnQgU3BhY2VUb29sQmVoYXZpb3IgZnJvbSAnLi9TcGFjZVRvb2xCZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19pbml0X186IFtcclxuICAgICdncmlkU25hcHBpbmdSZXNpemVCZWhhdmlvcicsXHJcbiAgICAnZ3JpZFNuYXBwaW5nU3BhY2VUb29sQmVoYXZpb3InXHJcbiAgXSxcclxuICBncmlkU25hcHBpbmdSZXNpemVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nU3BhY2VUb29sQmVoYXZpb3I6IFsgJ3R5cGUnLCBTcGFjZVRvb2xCZWhhdmlvciBdXHJcbn07IiwiaW1wb3J0IEdyaWRTbmFwcGluZyBmcm9tICcuL0dyaWRTbmFwcGluZyc7XHJcblxyXG5pbXBvcnQgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgZnJvbSAnLi9iZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19kZXBlbmRzX186IFsgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgXSxcclxuICBfX2luaXRfXzogWyAnZ3JpZFNuYXBwaW5nJyBdLFxyXG4gIGdyaWRTbmFwcGluZzogWyAndHlwZScsIEdyaWRTbmFwcGluZyBdXHJcbn07IiwiaW1wb3J0IHsgaGFzUHJpbWFyeU1vZGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7IGlzS2V5IH0gZnJvbSAnLi4vLi4vZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xudmFyIEhBTkRfQ1VSU09SID0gJ2dyYWInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhhbmRUb29sKGV2ZW50QnVzLCBjYW52YXMsIGRyYWdnaW5nLCBpbmplY3RvciwgdG9vbE1hbmFnZXIpIHtcbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcblxuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBrZXlib2FyZCA9IGluamVjdG9yLmdldCgna2V5Ym9hcmQnLCBmYWxzZSk7XG5cbiAgdG9vbE1hbmFnZXIucmVnaXN0ZXJUb29sKCdoYW5kJywge1xuICAgIHRvb2w6ICdoYW5kJyxcbiAgICBkcmFnZ2luZzogJ2hhbmQubW92ZSdcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1vdmUoZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIGtleWJvYXJkICYmIGtleWJvYXJkLmFkZExpc3RlbmVyKEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoIWlzU3BhY2UoZS5rZXlFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWN0aXZhdGVNb3ZlKGV2ZW50KSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTW92ZShldmVudCk7XG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBhY3RpdmF0ZU1vdmUpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBhY3RpdmF0ZU1vdmUpO1xuXG4gICAgZnVuY3Rpb24gZGVhY3RpdmF0ZU1vdmUoZSkge1xuICAgICAgaWYgKCFpc1NwYWNlKGUua2V5RXZlbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGFjdGl2YXRlTW92ZSk7XG5cbiAgICAgIGtleWJvYXJkLnJlbW92ZUxpc3RlbmVyKGRlYWN0aXZhdGVNb3ZlLCAna2V5Ym9hcmQua2V5dXAnKTtcblxuICAgICAgZHJhZ2dpbmcuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoSElHSF9QUklPUklUWSwgZGVhY3RpdmF0ZU1vdmUsICdrZXlib2FyZC5rZXl1cCcpO1xuICB9LCAna2V5Ym9hcmQua2V5ZG93bicpO1xuXG4gIGV2ZW50QnVzLm9uKCdoYW5kLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuXG4gICAgLy8gb25seSByZWFjdGl2ZSBvbiBkaWFncmFtIGNsaWNrXG4gICAgLy8gb24gc29tZSBvY2Nhc2lvbnMsIGV2ZW50LmhvdmVyIGlzIG5vdCBzZXQgYW5kIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhbiBzdmdcbiAgICBpZiAoIWV2ZW50LmhvdmVyICYmICEodGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudEJ1cy5vbmNlKCdoYW5kLmVuZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTW92ZShldmVudC5vcmlnaW5hbEV2ZW50LCB7IHJlYWN0aXZhdGU6IHRydWUgfSk7XG4gICAgfSwgdGhpcyk7XG5cbiAgfSwgdGhpcyk7XG5cblxuICBldmVudEJ1cy5vbignaGFuZC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzY2FsZSA9IGNhbnZhcy52aWV3Ym94KCkuc2NhbGU7XG5cbiAgICBjYW52YXMuc2Nyb2xsKHtcbiAgICAgIGR4OiBldmVudC5keCAqIHNjYWxlLFxuICAgICAgZHk6IGV2ZW50LmR5ICogc2NhbGVcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2hhbmQubW92ZS5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcmVhY3RpdmF0ZSA9IGNvbnRleHQucmVhY3RpdmF0ZTtcblxuICAgIC8vIERvbid0IHJlYWN0aXZhdGUgaWYgdGhlIHVzZXIgaXMgdXNpbmcgdGhlIGtleWJvYXJkIGtleWJpbmRpbmdcbiAgICBpZiAoIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCkgJiYgcmVhY3RpdmF0ZSkge1xuXG4gICAgICBldmVudEJ1cy5vbmNlKCdoYW5kLm1vdmUuZW5kZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICB0aGlzLmFjdGl2YXRlSGFuZChldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCB0aGlzKTtcblxufVxuXG5IYW5kVG9vbC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ2luamVjdG9yJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuXG5IYW5kVG9vbC5wcm90b3R5cGUuYWN0aXZhdGVNb3ZlID0gZnVuY3Rpb24oZXZlbnQsIGF1dG9BY3RpdmF0ZSwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIGF1dG9BY3RpdmF0ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb250ZXh0ID0gYXV0b0FjdGl2YXRlO1xuICAgIGF1dG9BY3RpdmF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2hhbmQubW92ZScsIHtcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IEhBTkRfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQgfHwge31cbiAgICB9XG4gIH0pO1xufTtcblxuSGFuZFRvb2wucHJvdG90eXBlLmFjdGl2YXRlSGFuZCA9IGZ1bmN0aW9uKGV2ZW50LCBhdXRvQWN0aXZhdGUsIHJlYWN0aXZhdGUpIHtcbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2hhbmQnLCB7XG4gICAgdHJhcENsaWNrOiBmYWxzZSxcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IEhBTkRfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgcmVhY3RpdmF0ZTogcmVhY3RpdmF0ZVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5IYW5kVG9vbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICB0aGlzLl9kcmFnZ2luZy5jYW5jZWwoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFjdGl2YXRlSGFuZCgpO1xuICB9XG59O1xuXG5IYW5kVG9vbC5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzLl9kcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gL14oaGFuZHxoYW5kXFwubW92ZSkkLy50ZXN0KGNvbnRleHQucHJlZml4KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NwYWNlKGtleUV2ZW50KSB7XG4gIHJldHVybiBpc0tleSgnICcsIGtleUV2ZW50KTtcbn0iLCJpbXBvcnQgVG9vbE1hbmFnZXJNb2R1bGUgZnJvbSAnLi4vdG9vbC1tYW5hZ2VyJztcblxuaW1wb3J0IEhhbmRUb29sIGZyb20gJy4vSGFuZFRvb2wnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgVG9vbE1hbmFnZXJNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2hhbmRUb29sJyBdLFxuICBoYW5kVG9vbDogWyAndHlwZScsIEhhbmRUb29sIF1cbn07XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQgeyBpc1ByaW1hcnlCdXR0b24gfSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGluZSxcbiAgdXBkYXRlTGluZVxufSBmcm9tICcuLi8uLi91dGlsL1JlbmRlclV0aWwnO1xuXG5mdW5jdGlvbiBhbGxvd0FsbChlKSB7IHJldHVybiB0cnVlOyB9XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IHByb3ZpZGVzIGludGVyYWN0aW9uIGV2ZW50cyBmb3IgZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBJdCBlbWl0cyB0aGUgZm9sbG93aW5nIGV2ZW50czpcbiAqXG4gKiAgICogZWxlbWVudC5jbGlja1xuICogICAqIGVsZW1lbnQuY29udGV4dG1lbnVcbiAqICAgKiBlbGVtZW50LmRibGNsaWNrXG4gKiAgICogZWxlbWVudC5ob3ZlclxuICogICAqIGVsZW1lbnQubW91c2Vkb3duXG4gKiAgICogZWxlbWVudC5tb3VzZW1vdmVcbiAqICAgKiBlbGVtZW50Lm1vdXNldXBcbiAqICAgKiBlbGVtZW50Lm91dFxuICpcbiAqIEVhY2ggZXZlbnQgaXMgYSB0dXBsZSB7IGVsZW1lbnQsIGdmeCwgb3JpZ2luYWxFdmVudCB9LlxuICpcbiAqIENhbmNlbGluZyB0aGUgZXZlbnQgdmlhIEV2ZW50I3ByZXZlbnREZWZhdWx0KClcbiAqIHByZXZlbnRzIHRoZSBvcmlnaW5hbCBET00gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEludGVyYWN0aW9uRXZlbnRzKGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIHN0eWxlcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogRmlyZSBhbiBpbnRlcmFjdGlvbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgbG9jYWwgZXZlbnQgbmFtZSwgZS5nLiBlbGVtZW50LmNsaWNrLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50fSBldmVudCBuYXRpdmUgZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW2VsZW1lbnRdIHRoZSBkaWFncmFtIGVsZW1lbnQgdG8gZW1pdCB0aGUgZXZlbnQgb247XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byB0aGUgZXZlbnQgdGFyZ2V0XG4gICAqL1xuICBmdW5jdGlvbiBmaXJlKHR5cGUsIGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICBpZiAoaXNJZ25vcmVkKHR5cGUsIGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQsIGdmeCwgcmV0dXJuVmFsdWU7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0IHx8IGV2ZW50LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBnZnggPSB0YXJnZXQ7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoIWdmeCB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVyblZhbHVlID0gZXZlbnRCdXMuZmlyZSh0eXBlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgZ2Z4OiBnZngsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pO1xuXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8obmlra3UpOiBkb2N1bWVudCB0aGlzXG4gIHZhciBoYW5kbGVycyA9IHt9O1xuXG4gIGZ1bmN0aW9uIG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50TmFtZSkge1xuICAgIHJldHVybiBoYW5kbGVyc1tsb2NhbEV2ZW50TmFtZV07XG4gIH1cblxuICBmdW5jdGlvbiBpc0lnbm9yZWQobG9jYWxFdmVudE5hbWUsIGV2ZW50KSB7XG5cbiAgICB2YXIgZmlsdGVyID0gaWdub3JlZEZpbHRlcnNbbG9jYWxFdmVudE5hbWVdIHx8IGlzUHJpbWFyeUJ1dHRvbjtcblxuICAgIC8vIG9ubHkgcmVhY3Qgb24gbGVmdCBtb3VzZSBidXR0b24gaW50ZXJhY3Rpb25zXG4gICAgLy8gZXhjZXB0IGZvciBpbnRlcmFjdGlvbiBldmVudHMgdGhhdCBhcmUgZW5hYmxlZFxuICAgIC8vIGZvciBzZWN1bmRhcnkgbW91c2UgYnV0dG9uXG4gICAgcmV0dXJuICFmaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgdmFyIGJpbmRpbmdzID0ge1xuICAgIGNsaWNrOiAnZWxlbWVudC5jbGljaycsXG4gICAgY29udGV4dG1lbnU6ICdlbGVtZW50LmNvbnRleHRtZW51JyxcbiAgICBkYmxjbGljazogJ2VsZW1lbnQuZGJsY2xpY2snLFxuICAgIG1vdXNlZG93bjogJ2VsZW1lbnQubW91c2Vkb3duJyxcbiAgICBtb3VzZW1vdmU6ICdlbGVtZW50Lm1vdXNlbW92ZScsXG4gICAgbW91c2VvdmVyOiAnZWxlbWVudC5ob3ZlcicsXG4gICAgbW91c2VvdXQ6ICdlbGVtZW50Lm91dCcsXG4gICAgbW91c2V1cDogJ2VsZW1lbnQubW91c2V1cCcsXG4gIH07XG5cbiAgdmFyIGlnbm9yZWRGaWx0ZXJzID0ge1xuICAgICdlbGVtZW50LmNvbnRleHRtZW51JzogYWxsb3dBbGxcbiAgfTtcblxuXG4gIC8vIG1hbnVhbCBldmVudCB0cmlnZ2VyIC8vLy8vLy8vLy9cblxuICAvKipcbiAgICogVHJpZ2dlciBhbiBpbnRlcmFjdGlvbiBldmVudCAoYmFzZWQgb24gYSBuYXRpdmUgZG9tIGV2ZW50KVxuICAgKiBvbiB0aGUgdGFyZ2V0IHNoYXBlIG9yIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgdGhlIG5hbWUgb2YgdGhlIHRyaWdnZXJlZCBET00gZXZlbnRcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSB0YXJnZXRFbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiB0cmlnZ2VyTW91c2VFdmVudChldmVudE5hbWUsIGV2ZW50LCB0YXJnZXRFbGVtZW50KSB7XG5cbiAgICAvLyBpLmUuIGVsZW1lbnQubW91c2Vkb3duLi4uXG4gICAgdmFyIGxvY2FsRXZlbnROYW1lID0gYmluZGluZ3NbZXZlbnROYW1lXTtcblxuICAgIGlmICghbG9jYWxFdmVudE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5tYXBwZWQgRE9NIGV2ZW50IG5hbWUgPCcgKyBldmVudE5hbWUgKyAnPicpO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJlKGxvY2FsRXZlbnROYW1lLCBldmVudCwgdGFyZ2V0RWxlbWVudCk7XG4gIH1cblxuXG4gIHZhciBFTEVNRU5UX1NFTEVDVE9SID0gJ3N2ZywgLmRqcy1lbGVtZW50JztcblxuICAvLyBldmVudCBoYW5kbGluZyAvLy8vLy8vXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudChub2RlLCBldmVudCwgbG9jYWxFdmVudCwgaWdub3JlZEZpbHRlcikge1xuXG4gICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1tsb2NhbEV2ZW50XSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBmaXJlKGxvY2FsRXZlbnQsIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgaWYgKGlnbm9yZWRGaWx0ZXIpIHtcbiAgICAgIGlnbm9yZWRGaWx0ZXJzW2xvY2FsRXZlbnRdID0gaWdub3JlZEZpbHRlcjtcbiAgICB9XG5cbiAgICBoYW5kbGVyLiRkZWxlZ2F0ZSA9IGRvbURlbGVnYXRlLmJpbmQobm9kZSwgRUxFTUVOVF9TRUxFQ1RPUiwgZXZlbnQsIGhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5yZWdpc3RlckV2ZW50KG5vZGUsIGV2ZW50LCBsb2NhbEV2ZW50KSB7XG5cbiAgICB2YXIgaGFuZGxlciA9IG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50KTtcblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRvbURlbGVnYXRlLnVuYmluZChub2RlLCBldmVudCwgaGFuZGxlci4kZGVsZWdhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoc3ZnKSB7XG4gICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyRXZlbnRzKHN2Zykge1xuICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICB1bnJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY2FudmFzLmRlc3Ryb3knLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVucmVnaXN0ZXJFdmVudHMoZXZlbnQuc3ZnKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5pbml0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZWdpc3RlckV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcblxuXG4gIC8vIGhpdCBib3ggdXBkYXRpbmcgLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLmFkZGVkJywgJ2Nvbm5lY3Rpb24uYWRkZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICAvLyBVcGRhdGUgZGpzLWhpdCBvbiBjaGFuZ2UuXG4gIC8vIEEgbG93IHByaW9ydGl0eSBpcyBuZWNlc3NhcnksIGJlY2F1c2UgZGpzLWhpdCBvZiBsYWJlbHMgaGFzIHRvIGJlIHVwZGF0ZWRcbiAgLy8gYWZ0ZXIgdGhlIGxhYmVsIGJvdW5kcyBoYXZlIGJlZW4gdXBkYXRlZCBpbiB0aGUgcmVuZGVyZXIuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnc2hhcGUuY2hhbmdlZCcsXG4gICAgJ2Nvbm5lY3Rpb24uY2hhbmdlZCdcbiAgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlSGl0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi51cGRhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG5cbiAgLy8gaGl0IHN0eWxlcyAvLy8vLy8vLy8vLy9cblxuICB2YXIgU1RST0tFX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtc3Ryb2tlJyk7XG5cbiAgdmFyIENMSUNLX1NUUk9LRV9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LWNsaWNrLXN0cm9rZScpO1xuXG4gIHZhciBBTExfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1hbGwnKTtcblxuICB2YXIgSElUX1RZUEVTID0ge1xuICAgICdhbGwnOiBBTExfSElUX1NUWUxFLFxuICAgICdjbGljay1zdHJva2UnOiBDTElDS19TVFJPS0VfSElUX1NUWUxFLFxuICAgICdzdHJva2UnOiBTVFJPS0VfSElUX1NUWUxFXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlSGl0U3R5bGUoY2xhc3NOYW1lcywgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAxNVxuICAgIH0sIGF0dHJzIHx8IHt9KTtcblxuICAgIHJldHVybiBzdHlsZXMuY2xzKGNsYXNzTmFtZXMsIFsgJ25vLWZpbGwnLCAnbm8tYm9yZGVyJyBdLCBhdHRycyk7XG4gIH1cblxuXG4gIC8vIHN0eWxlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gYXBwbHlTdHlsZShoaXQsIHR5cGUpIHtcblxuICAgIHZhciBhdHRycyA9IEhJVF9UWVBFU1t0eXBlXTtcblxuICAgIGlmICghYXR0cnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBoaXQgdHlwZSA8JyArIHR5cGUgKyAnPicpO1xuICAgIH1cblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kSGl0KGdmeCwgaGl0KSB7XG4gICAgc3ZnQXBwZW5kKGdmeCwgaGl0KTtcbiAgfVxuXG5cbiAgLy8gQVBJXG5cbiAgLyoqXG4gICAqIFJlbW92ZSBoaW50cyBvbiB0aGUgZ2l2ZW4gZ3JhcGhpY3MuXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqL1xuICB0aGlzLnJlbW92ZUhpdHMgPSBmdW5jdGlvbihnZngpIHtcbiAgICB2YXIgaGl0cyA9IGRvbVF1ZXJ5QWxsKCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBmb3JFYWNoKGhpdHMsIHN2Z1JlbW92ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBkZWZhdWx0IGhpdCBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gY3JlYXRlZCBoaXRcbiAgICovXG4gIHRoaXMuY3JlYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICAgIHZhciB3YXlwb2ludHMgPSBlbGVtZW50LndheXBvaW50cyxcbiAgICAgICAgaXNGcmFtZSA9IGVsZW1lbnQuaXNGcmFtZSxcbiAgICAgICAgYm94VHlwZTtcblxuICAgIGlmICh3YXlwb2ludHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdChnZngsIHdheXBvaW50cyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgYm94VHlwZSA9IGlzRnJhbWUgPyAnc3Ryb2tlJyA6ICdhbGwnO1xuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVCb3hIaXQoZ2Z4LCBib3hUeXBlLCB7XG4gICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBoaXRzIGZvciB0aGUgZ2l2ZW4gd2F5cG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gICAqL1xuICB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdCA9IGZ1bmN0aW9uKGdmeCwgd2F5cG9pbnRzKSB7XG5cbiAgICB2YXIgaGl0ID0gY3JlYXRlTGluZSh3YXlwb2ludHMpO1xuXG4gICAgYXBwbHlTdHlsZShoaXQsICdzdHJva2UnKTtcblxuICAgIGFwcGVuZEhpdChnZngsIGhpdCk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgaGl0cyBmb3IgYSBib3guXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoaXRUeXBlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICAgKi9cbiAgdGhpcy5jcmVhdGVCb3hIaXQgPSBmdW5jdGlvbihnZngsIHR5cGUsIGF0dHJzKSB7XG5cbiAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sIGF0dHJzKTtcblxuICAgIHZhciBoaXQgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcblxuICAgIGFwcGx5U3R5bGUoaGl0LCB0eXBlKTtcblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICBhcHBlbmRIaXQoZ2Z4LCBoaXQpO1xuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIGRlZmF1bHQgaGl0IG9mIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gdXBkYXRlZCBoaXRcbiAgICovXG4gIHRoaXMudXBkYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gICAgdmFyIGhpdCA9IGRvbVF1ZXJ5KCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBpZiAoIWhpdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgdXBkYXRlTGluZShoaXQsIGVsZW1lbnQud2F5cG9pbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQXR0cihoaXQsIHtcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgdGhpcy5maXJlID0gZmlyZTtcblxuICB0aGlzLnRyaWdnZXJNb3VzZUV2ZW50ID0gdHJpZ2dlck1vdXNlRXZlbnQ7XG5cbiAgdGhpcy5tb3VzZUhhbmRsZXIgPSBtb3VzZUhhbmRsZXI7XG5cbiAgdGhpcy5yZWdpc3RlckV2ZW50ID0gcmVnaXN0ZXJFdmVudDtcbiAgdGhpcy51bnJlZ2lzdGVyRXZlbnQgPSB1bnJlZ2lzdGVyRXZlbnQ7XG59XG5cblxuSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdzdHlsZXMnXG5dO1xuXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBob3ZlcmVkIG92ZXIgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmhvdmVyXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBsZWZ0IGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5vdXRcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGNsaWNrZWQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmNsaWNrXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBkb3VibGUgY2xpY2tlZCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuZGJsY2xpY2tcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGdvbmUgZG93biBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNlZG93blxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZ29uZSB1cCBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNldXBcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgY29udGV4dCBtZW51IGFjdGlvbiBpcyB0cmlnZ2VyZWRcbiAqIHZpYSBtb3VzZSBvciB0b3VjaCBjb250cm9scy5cbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5jb250ZXh0bWVudVxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovIiwiaW1wb3J0IEludGVyYWN0aW9uRXZlbnRzIGZyb20gJy4vSW50ZXJhY3Rpb25FdmVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdpbnRlcmFjdGlvbkV2ZW50cycgXSxcbiAgaW50ZXJhY3Rpb25FdmVudHM6IFsgJ3R5cGUnLCBJbnRlcmFjdGlvbkV2ZW50cyBdXG59OyIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICBtb3ZlU3BlZWQ6IDEsXG4gIG1vdmVTcGVlZEFjY2VsZXJhdGVkOiAxMFxufTtcblxudmFyIEhJR0hFUl9QUklPUklUWSA9IDE1MDA7XG5cbnZhciBMRUZUID0gJ2xlZnQnO1xudmFyIFVQID0gJ3VwJztcbnZhciBSSUdIVCA9ICdyaWdodCc7XG52YXIgRE9XTiA9ICdkb3duJztcblxudmFyIEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIEFycm93TGVmdDogTEVGVCxcbiAgTGVmdDogTEVGVCxcbiAgQXJyb3dVcDogVVAsXG4gIFVwOiBVUCxcbiAgQXJyb3dSaWdodDogUklHSFQsXG4gIFJpZ2h0OiBSSUdIVCxcbiAgQXJyb3dEb3duOiBET1dOLFxuICBEb3duOiBET1dOXG59O1xuXG52YXIgRElSRUNUSU9OU19ERUxUQSA9IHtcbiAgbGVmdDogZnVuY3Rpb24oc3BlZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogLXNwZWVkLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0sXG4gIHVwOiBmdW5jdGlvbihzcGVlZCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogLXNwZWVkXG4gICAgfTtcbiAgfSxcbiAgcmlnaHQ6IGZ1bmN0aW9uKHNwZWVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHNwZWVkLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0sXG4gIGRvd246IGZ1bmN0aW9uKHNwZWVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiBzcGVlZFxuICAgIH07XG4gIH1cbn07XG5cblxuLyoqXG4gKiBFbmFibGVzIHRvIG1vdmUgc2VsZWN0aW9uIHdpdGgga2V5Ym9hcmQgYXJyb3dzLlxuICogVXNlIHdpdGggU2hpZnQgZm9yIG1vZGlmaWVkIHNwZWVkIChkZWZhdWx0PTEsIHdpdGggU2hpZnQ9MTApLlxuICogUHJlc3NlZCBDbWQvQ3RybCB0dXJucyB0aGUgZmVhdHVyZSBvZmYuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkPTFdXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5tb3ZlU3BlZWRBY2NlbGVyYXRlZD0xMF1cbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBLZXlib2FyZE1vdmVTZWxlY3Rpb24oXG4gICAgY29uZmlnLFxuICAgIGtleWJvYXJkLFxuICAgIG1vZGVsaW5nLFxuICAgIHJ1bGVzLFxuICAgIHNlbGVjdGlvblxuKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NvbmZpZyA9IGFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcsIGNvbmZpZyB8fCB7fSk7XG5cbiAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGtleUV2ZW50ID0gZXZlbnQua2V5RXZlbnQ7XG5cbiAgICB2YXIgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltrZXlFdmVudC5rZXldO1xuXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNDbWQoa2V5RXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjY2VsZXJhdGVkID0ga2V5Ym9hcmQuaXNTaGlmdChrZXlFdmVudCk7XG5cbiAgICBzZWxmLm1vdmVTZWxlY3Rpb24oZGlyZWN0aW9uLCBhY2NlbGVyYXRlZCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cblxuICAvKipcbiAgICogTW92ZSBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLFxuICAgKiBvcHRpb25hbGx5IHNwZWNpZnlpbmcgYWNjZWxlcmF0ZWQgbW92ZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWNjZWxlcmF0ZWQ9ZmFsc2VdXG4gICAqL1xuICB0aGlzLm1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihkaXJlY3Rpb24sIGFjY2VsZXJhdGVkKSB7XG5cbiAgICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGlvbi5nZXQoKTtcblxuICAgIGlmICghc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3BlZWQgPSB0aGlzLl9jb25maWdbXG4gICAgICBhY2NlbGVyYXRlZCA/XG4gICAgICAgICdtb3ZlU3BlZWRBY2NlbGVyYXRlZCcgOlxuICAgICAgICAnbW92ZVNwZWVkJ1xuICAgIF07XG5cbiAgICB2YXIgZGVsdGEgPSBESVJFQ1RJT05TX0RFTFRBW2RpcmVjdGlvbl0oc3BlZWQpO1xuXG4gICAgdmFyIGNhbk1vdmUgPSBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5tb3ZlJywge1xuICAgICAgc2hhcGVzOiBzZWxlY3RlZEVsZW1lbnRzXG4gICAgfSk7XG5cbiAgICBpZiAoY2FuTW92ZSkge1xuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHNlbGVjdGVkRWxlbWVudHMsIGRlbHRhKTtcbiAgICB9XG4gIH07XG5cbn1cblxuS2V5Ym9hcmRNb3ZlU2VsZWN0aW9uLiRpbmplY3QgPSBbXG4gICdjb25maWcua2V5Ym9hcmRNb3ZlU2VsZWN0aW9uJyxcbiAgJ2tleWJvYXJkJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ3NlbGVjdGlvbidcbl07IiwiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4uL2tleWJvYXJkJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcblxuaW1wb3J0IEtleWJvYXJkTW92ZVNlbGVjdGlvbiBmcm9tICcuL0tleWJvYXJkTW92ZVNlbGVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBLZXlib2FyZE1vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAna2V5Ym9hcmRNb3ZlU2VsZWN0aW9uJ1xuICBdLFxuICBrZXlib2FyZE1vdmVTZWxlY3Rpb246IFsgJ3R5cGUnLCBLZXlib2FyZE1vdmVTZWxlY3Rpb24gXVxufTtcbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgbWF0Y2hlcyBhcyBkb21NYXRjaGVzXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBoYXNNb2RpZmllcixcbiAgaXNDbWQsXG4gIGlzS2V5LFxuICBpc1NoaWZ0XG59IGZyb20gJy4vS2V5Ym9hcmRVdGlsJztcblxudmFyIEtFWURPV05fRVZFTlQgPSAna2V5Ym9hcmQua2V5ZG93bicsXG4gICAgS0VZVVBfRVZFTlQgPSAna2V5Ym9hcmQua2V5dXAnO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIGtleWJvYXJkIGFic3RyYWN0aW9uIHRoYXQgbWF5IGJlIGFjdGl2YXRlZCBhbmRcbiAqIGRlYWN0aXZhdGVkIGJ5IHVzZXJzIGF0IHdpbGwsIGNvbnN1bWluZyBrZXkgZXZlbnRzXG4gKiBhbmQgdHJpZ2dlcmluZyBkaWFncmFtIGFjdGlvbnMuXG4gKlxuICogRm9yIGtleXMgcHJlc3NlZCBkb3duLCBrZXlib2FyZCBmaXJlcyBga2V5Ym9hcmQua2V5ZG93bmAgZXZlbnQuXG4gKiBUaGUgZXZlbnQgY29udGV4dCBjb250YWlucyBvbmUgZmllbGQgd2hpY2ggaXMgYEtleWJvYXJkRXZlbnRgIGV2ZW50LlxuICpcbiAqIFRoZSBpbXBsZW1lbnRhdGlvbiBmaXJlcyB0aGUgZm9sbG93aW5nIGtleSBldmVudHMgdGhhdCBhbGxvd1xuICogb3RoZXIgY29tcG9uZW50cyB0byBob29rIGludG8ga2V5IGhhbmRsaW5nOlxuICpcbiAqICAtIGtleWJvYXJkLmJpbmRcbiAqICAtIGtleWJvYXJkLnVuYmluZFxuICogIC0ga2V5Ym9hcmQuaW5pdFxuICogIC0ga2V5Ym9hcmQuZGVzdHJveVxuICpcbiAqIEFsbCBldmVudHMgY29udGFpbiBvbmUgZmllbGQgd2hpY2ggaXMgbm9kZS5cbiAqXG4gKiBBIGRlZmF1bHQgYmluZGluZyBmb3IgdGhlIGtleWJvYXJkIG1heSBiZSBzcGVjaWZpZWQgdmlhIHRoZVxuICogYGtleWJvYXJkLmJpbmRUb2AgY29uZmlndXJhdGlvbiBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtDb25maWd9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmQoY29uZmlnLCBldmVudEJ1cykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5fY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuXG4gIHRoaXMuX2tleWRvd25IYW5kbGVyID0gdGhpcy5fa2V5ZG93bkhhbmRsZXIuYmluZCh0aGlzKTtcbiAgdGhpcy5fa2V5dXBIYW5kbGVyID0gdGhpcy5fa2V5dXBIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgLy8gcHJvcGVybHkgY2xlYW4gZG9tIHJlZ2lzdHJhdGlvbnNcbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2ZpcmUoJ2Rlc3Ryb3knKTtcblxuICAgIHNlbGYudW5iaW5kKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9maXJlKCdpbml0Jyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdhdHRhY2gnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5iaW5kVG8pIHtcbiAgICAgIHNlbGYuYmluZChjb25maWcuYmluZFRvKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkZXRhY2gnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnVuYmluZCgpO1xuICB9KTtcbn1cblxuS2V5Ym9hcmQuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5rZXlib2FyZCcsXG4gICdldmVudEJ1cydcbl07XG5cbktleWJvYXJkLnByb3RvdHlwZS5fa2V5ZG93bkhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9rZXlIYW5kbGVyKGV2ZW50LCBLRVlET1dOX0VWRU5UKTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS5fa2V5dXBIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fa2V5SGFuZGxlcihldmVudCwgS0VZVVBfRVZFTlQpO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLl9rZXlIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQsIHR5cGUpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCxcbiAgICAgIGV2ZW50QnVzUmVzdWx0O1xuXG4gIGlmIChpc0lucHV0KHRhcmdldCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBrZXlFdmVudDogZXZlbnRcbiAgfTtcblxuICBldmVudEJ1c1Jlc3VsdCA9IHRoaXMuX2V2ZW50QnVzLmZpcmUodHlwZSB8fCBLRVlET1dOX0VWRU5ULCBjb250ZXh0KTtcblxuICBpZiAoZXZlbnRCdXNSZXN1bHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKG5vZGUpIHtcblxuICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUga2V5Ym9hcmQgaXMgb25seSBib3VuZCBvbmNlIHRvIHRoZSBET01cbiAgdGhpcy51bmJpbmQoKTtcblxuICB0aGlzLl9ub2RlID0gbm9kZTtcblxuICAvLyBiaW5kIGtleSBldmVudHNcbiAgZG9tRXZlbnQuYmluZChub2RlLCAna2V5ZG93bicsIHRoaXMuX2tleWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgZG9tRXZlbnQuYmluZChub2RlLCAna2V5dXAnLCB0aGlzLl9rZXl1cEhhbmRsZXIsIHRydWUpO1xuXG4gIHRoaXMuX2ZpcmUoJ2JpbmQnKTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS5nZXRCaW5kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9ub2RlO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMuX25vZGU7XG5cbiAgaWYgKG5vZGUpIHtcbiAgICB0aGlzLl9maXJlKCd1bmJpbmQnKTtcblxuICAgIC8vIHVuYmluZCBrZXkgZXZlbnRzXG4gICAgZG9tRXZlbnQudW5iaW5kKG5vZGUsICdrZXlkb3duJywgdGhpcy5fa2V5ZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIGRvbUV2ZW50LnVuYmluZChub2RlLCAna2V5dXAnLCB0aGlzLl9rZXl1cEhhbmRsZXIsIHRydWUpO1xuICB9XG5cbiAgdGhpcy5fbm9kZSA9IG51bGw7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdrZXlib2FyZC4nICsgZXZlbnQsIHsgbm9kZTogdGhpcy5fbm9kZSB9KTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZnVuY3Rpb24gdGhhdCBpcyBub3RpZmllZCB3aXRoIGBLZXlib2FyZEV2ZW50YCB3aGVuZXZlclxuICogdGhlIGtleWJvYXJkIGlzIGJvdW5kIGFuZCB0aGUgdXNlciBwcmVzc2VzIGEga2V5LiBJZiBubyBwcmlvcml0eSBpc1xuICogcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDEwMDAgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKi9cbktleWJvYXJkLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHByaW9yaXR5LCBsaXN0ZW5lciwgdHlwZSkge1xuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0eXBlID0gbGlzdGVuZXI7XG4gICAgbGlzdGVuZXIgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbih0eXBlIHx8IEtFWURPV05fRVZFTlQsIHByaW9yaXR5LCBsaXN0ZW5lcik7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lciwgdHlwZSkge1xuICB0aGlzLl9ldmVudEJ1cy5vZmYodHlwZSB8fCBLRVlET1dOX0VWRU5ULCBsaXN0ZW5lcik7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuaGFzTW9kaWZpZXIgPSBoYXNNb2RpZmllcjtcbktleWJvYXJkLnByb3RvdHlwZS5pc0NtZCA9IGlzQ21kO1xuS2V5Ym9hcmQucHJvdG90eXBlLmlzU2hpZnQgPSBpc1NoaWZ0O1xuS2V5Ym9hcmQucHJvdG90eXBlLmlzS2V5ID0gaXNLZXk7XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy9cblxuZnVuY3Rpb24gaXNJbnB1dCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCAmJiAoZG9tTWF0Y2hlcyh0YXJnZXQsICdpbnB1dCwgdGV4dGFyZWEnKSB8fCB0YXJnZXQuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuIiwiaW1wb3J0IHtcbiAgaXNDbWQsXG4gIGlzS2V5LFxuICBpc1NoaWZ0XG59IGZyb20gJy4vS2V5Ym9hcmRVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuZXhwb3J0IHZhciBLRVlDT0RFX0MgPSA2NztcbmV4cG9ydCB2YXIgS0VZQ09ERV9WID0gODY7XG5leHBvcnQgdmFyIEtFWUNPREVfWSA9IDg5O1xuZXhwb3J0IHZhciBLRVlDT0RFX1ogPSA5MDtcblxuZXhwb3J0IHZhciBLRVlTX0NPUFkgPSBbJ2MnLCAnQycsIEtFWUNPREVfQyBdO1xuZXhwb3J0IHZhciBLRVlTX1BBU1RFID0gWyAndicsICdWJywgS0VZQ09ERV9WIF07XG5leHBvcnQgdmFyIEtFWVNfUkVETyA9IFsgJ3knLCAnWScsIEtFWUNPREVfWSBdO1xuZXhwb3J0IHZhciBLRVlTX1VORE8gPSBbICd6JywgJ1onLCBLRVlDT0RFX1ogXTtcblxuXG4vKipcbiAqIEFkZHMgZGVmYXVsdCBrZXlib2FyZCBiaW5kaW5ncy5cbiAqXG4gKiBUaGlzIGRvZXMgbm90IHB1bGwgaW4gYW55IGZlYXR1cmVzIHdpbGwgYmluZCBvbmx5IGFjdGlvbnMgdGhhdFxuICogaGF2ZSBwcmV2aW91c2x5IGJlZW4gcmVnaXN0ZXJlZCBhZ2FpbnN0IHRoZSBlZGl0b3JBY3Rpb25zIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmRCaW5kaW5ncyhldmVudEJ1cywga2V5Ym9hcmQpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2VkaXRvckFjdGlvbnMuaW5pdCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlZGl0b3JBY3Rpb25zID0gZXZlbnQuZWRpdG9yQWN0aW9ucztcblxuICAgIHNlbGYucmVnaXN0ZXJCaW5kaW5ncyhrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG4gIH0pO1xufVxuXG5LZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdrZXlib2FyZCdcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5LZXlib2FyZEJpbmRpbmdzLnByb3RvdHlwZS5yZWdpc3RlckJpbmRpbmdzID0gZnVuY3Rpb24oa2V5Ym9hcmQsIGVkaXRvckFjdGlvbnMpIHtcblxuICAvKipcbiAgICogQWRkIGtleWJvYXJkIGJpbmRpbmcgaWYgcmVzcGVjdGl2ZSBlZGl0b3IgYWN0aW9uXG4gICAqIGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGF0IGltcGxlbWVudHMgdGhlIGtleSBiaW5kaW5nXG4gICAqL1xuICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihhY3Rpb24sIGZuKSB7XG5cbiAgICBpZiAoZWRpdG9yQWN0aW9ucy5pc1JlZ2lzdGVyZWQoYWN0aW9uKSkge1xuICAgICAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoZm4pO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gdW5kb1xuICAvLyAoQ1RSTHxDTUQpICsgWlxuICBhZGRMaXN0ZW5lcigndW5kbycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNDbWQoZXZlbnQpICYmICFpc1NoaWZ0KGV2ZW50KSAmJiBpc0tleShLRVlTX1VORE8sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCd1bmRvJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVkb1xuICAvLyBDVFJMICsgWVxuICAvLyBDTUQgKyBTSElGVCArIFpcbiAgYWRkTGlzdGVuZXIoJ3JlZG8nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzQ21kKGV2ZW50KSAmJiAoaXNLZXkoS0VZU19SRURPLCBldmVudCkgfHwgKGlzS2V5KEtFWVNfVU5ETywgZXZlbnQpICYmIGlzU2hpZnQoZXZlbnQpKSkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncmVkbycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvcHlcbiAgLy8gQ1RSTC9DTUQgKyBDXG4gIGFkZExpc3RlbmVyKCdjb3B5JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0NtZChldmVudCkgJiYgaXNLZXkoS0VZU19DT1BZLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignY29weScpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHBhc3RlXG4gIC8vIENUUkwvQ01EICsgVlxuICBhZGRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzQ21kKGV2ZW50KSAmJiBpc0tleShLRVlTX1BBU1RFLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncGFzdGUnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIGluIG9uZSBzdGVwXG4gIC8vIENUUkwvQ01EICsgK1xuICBhZGRMaXN0ZW5lcignc3RlcFpvb20nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJysnLCAnQWRkJyBdLCBldmVudCkgJiYgaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3N0ZXBab29tJywgeyB2YWx1ZTogMSB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIG91dCBvbmUgc3RlcFxuICAvLyBDVFJMICsgLVxuICBhZGRMaXN0ZW5lcignc3RlcFpvb20nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJy0nLCAnU3VidHJhY3QnIF0sIGV2ZW50KSAmJiBpc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignc3RlcFpvb20nLCB7IHZhbHVlOiAtMSB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIHRvIHRoZSBkZWZhdWx0IGxldmVsXG4gIC8vIENUUkwgKyAwXG4gIGFkZExpc3RlbmVyKCd6b29tJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleSgnMCcsIGV2ZW50KSAmJiBpc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignem9vbScsIHsgdmFsdWU6IDEgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZGVsZXRlIHNlbGVjdGVkIGVsZW1lbnRcbiAgLy8gREVMXG4gIGFkZExpc3RlbmVyKCdyZW1vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJ0RlbGV0ZScsICdEZWwnIF0sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdyZW1vdmVTZWxlY3Rpb24nKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn07IiwiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgZXZlbnQgd2FzIHRyaWdnZXJlZCB3aXRoIGFueSBtb2RpZmllclxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaGFzTW9kaWZpZXIoZXZlbnQpIHtcclxuICByZXR1cm4gKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ21kKGV2ZW50KSB7XHJcblxyXG4gIC8vIGVuc3VyZSB3ZSBkb24ndCByZWFjdCB0byBBbHRHclxyXG4gIC8vIChtYXBwZWQgdG8gQ1RSTCArIEFMVClcclxuICBpZiAoZXZlbnQuYWx0S2V5KSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIGtleSBwcmVzc2VkIGlzIG9uZSBvZiBwcm92aWRlZCBrZXlzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBrZXlzXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0tleShrZXlzLCBldmVudCkge1xyXG4gIGtleXMgPSBpc0FycmF5KGtleXMpID8ga2V5cyA6IFsga2V5cyBdO1xyXG5cclxuICByZXR1cm4ga2V5cy5pbmRleE9mKGV2ZW50LmtleSkgIT09IC0xIHx8IGtleXMuaW5kZXhPZihldmVudC5rZXlDb2RlKSAhPT0gLTE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNTaGlmdChldmVudCkge1xyXG4gIHJldHVybiBldmVudC5zaGlmdEtleTtcclxufSIsImltcG9ydCBLZXlib2FyZCBmcm9tICcuL0tleWJvYXJkJztcbmltcG9ydCBLZXlib2FyZEJpbmRpbmdzIGZyb20gJy4vS2V5Ym9hcmRCaW5kaW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2tleWJvYXJkJywgJ2tleWJvYXJkQmluZGluZ3MnIF0sXG4gIGtleWJvYXJkOiBbICd0eXBlJywgS2V5Ym9hcmQgXSxcbiAga2V5Ym9hcmRCaW5kaW5nczogWyAndHlwZScsIEtleWJvYXJkQmluZGluZ3MgXVxufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAyNTAsXG4gICAgSElHSF9QUklPUklUWSA9IDE0MDA7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICBpbmRleE9mIGFzIGNvbGxlY3Rpb25JZHhcbn0gZnJvbSAnLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnLi4vLi4vY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgbWFrZXMgc3VyZSBsYWJlbHMgYXJlIHByb3Blcmx5IG1vdmVkIHdpdGhcbiAqIHRoZWlyIGxhYmVsIHRhcmdldHMuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsU3VwcG9ydChpbmplY3RvciwgZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBtb3ZlUHJldmlldyA9IGluamVjdG9yLmdldCgnbW92ZVByZXZpZXcnLCBmYWxzZSk7XG5cbiAgLy8gcmVtb3ZlIGxhYmVscyBmcm9tIHRoZSBjb2xsZWN0aW9uIHRoYXQgYXJlIGJlaW5nXG4gIC8vIG1vdmVkIHdpdGggb3RoZXIgZWxlbWVudHMgYW55d2F5XG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcztcblxuICAgIGNvbnRleHQuc2hhcGVzID0gcmVtb3ZlTGFiZWxzKHNoYXBlcyk7XG4gICAgY29udGV4dC52YWxpZGF0ZWRTaGFwZXMgPSByZW1vdmVMYWJlbHModmFsaWRhdGVkU2hhcGVzKTtcbiAgfSk7XG5cbiAgLy8gYWRkIGxhYmVscyB0byB2aXN1YWwncyBncm91cFxuICBtb3ZlUHJldmlldyAmJiBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzO1xuXG4gICAgdmFyIGxhYmVscyA9IFtdO1xuXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgZm9yRWFjaChlbGVtZW50LmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcblxuICAgICAgICBpZiAoIWxhYmVsLmhpZGRlbiAmJiBjb250ZXh0LnNoYXBlcy5pbmRleE9mKGxhYmVsKSA9PT0gLTEpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaChsYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgICAgIGxhYmVscy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZvckVhY2gobGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgbW92ZVByZXZpZXcubWFrZURyYWdnYWJsZShjb250ZXh0LCBsYWJlbCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgLy8gYWRkIGFsbCBsYWJlbHMgdG8gbW92ZSBjbG9zdXJlXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGNsb3N1cmUgPSBjb250ZXh0LmNsb3N1cmUsXG4gICAgICAgIGVuY2xvc2VkRWxlbWVudHMgPSBjbG9zdXJlLmVuY2xvc2VkRWxlbWVudHM7XG5cbiAgICB2YXIgZW5jbG9zZWRMYWJlbHMgPSBbXTtcblxuICAgIC8vIGZpbmQgbGFiZWxzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mXG4gICAgLy8gbW92ZSBjbG9zdXJlIHlldCBhbmQgYWRkIHRoZW1cbiAgICBmb3JFYWNoKGVuY2xvc2VkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGZvckVhY2goZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG5cbiAgICAgICAgaWYgKCFlbmNsb3NlZEVsZW1lbnRzW2xhYmVsLmlkXSkge1xuICAgICAgICAgIGVuY2xvc2VkTGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNsb3N1cmUuYWRkQWxsKGVuY2xvc2VkTGFiZWxzKTtcbiAgfSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoW1xuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZSdcbiAgXSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmNvbm5lY3Rpb24gfHwgY29udGV4dC5zaGFwZTtcblxuICAgIHNhdmVDbGVhcihlbGVtZW50LmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGxhYmVsLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cblxuICB0aGlzLmV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGxhYmVsVGFyZ2V0ID0gc2hhcGUubGFiZWxUYXJnZXQ7XG5cbiAgICAvLyB1bnNldCBsYWJlbFRhcmdldFxuICAgIGlmIChsYWJlbFRhcmdldCkge1xuICAgICAgY29udGV4dC5sYWJlbFRhcmdldEluZGV4ID0gY29sbGVjdGlvbklkeChsYWJlbFRhcmdldC5sYWJlbHMsIHNoYXBlKTtcbiAgICAgIGNvbnRleHQubGFiZWxUYXJnZXQgPSBsYWJlbFRhcmdldDtcblxuICAgICAgc2hhcGUubGFiZWxUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgdGhpcy5yZXZlcnQoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGxhYmVsVGFyZ2V0ID0gY29udGV4dC5sYWJlbFRhcmdldCxcbiAgICAgICAgbGFiZWxUYXJnZXRJbmRleCA9IGNvbnRleHQubGFiZWxUYXJnZXRJbmRleDtcblxuICAgIC8vIHJlc3RvcmUgbGFiZWxUYXJnZXRcbiAgICBpZiAobGFiZWxUYXJnZXQpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFiZWxUYXJnZXQubGFiZWxzLCBzaGFwZSwgbGFiZWxUYXJnZXRJbmRleCk7XG5cbiAgICAgIHNoYXBlLmxhYmVsVGFyZ2V0ID0gbGFiZWxUYXJnZXQ7XG4gICAgfVxuICB9KTtcblxufVxuXG5pbmhlcml0cyhMYWJlbFN1cHBvcnQsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkxhYmVsU3VwcG9ydC4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8qKlxuICogUmV0dXJuIGEgZmlsdGVyZWQgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGRvIG5vdFxuICogY29udGFpbiBhdHRhY2hlZCBlbGVtZW50cyB3aXRoIGhvc3RzIGJlaW5nIHBhcnRcbiAqIG9mIHRoZSBzZWxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZmlsdGVyZWRcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTGFiZWxzKGVsZW1lbnRzKSB7XG5cbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgLy8gZmlsdGVyIG91dCBsYWJlbHMgdGhhdCBhcmUgbW92ZSB0b2dldGhlclxuICAgIC8vIHdpdGggdGhlaXIgbGFiZWwgdGFyZ2V0c1xuICAgIHJldHVybiBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQubGFiZWxUYXJnZXQpID09PSAtMTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgTGFiZWxTdXBwb3J0IGZyb20gJy4vTGFiZWxTdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnbGFiZWxTdXBwb3J0J10sXG4gIGxhYmVsU3VwcG9ydDogWyAndHlwZScsIExhYmVsU3VwcG9ydCBdXG59O1xuIiwiaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBnZXRFbmNsb3NlZEVsZW1lbnRzIH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7IGhhc1NlY29uZGFyeU1vZGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbnZhciBMQVNTT19UT09MX0NVUlNPUiA9ICdjcm9zc2hhaXInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhc3NvVG9vbChcbiAgICBldmVudEJ1cywgY2FudmFzLCBkcmFnZ2luZyxcbiAgICBlbGVtZW50UmVnaXN0cnksIHNlbGVjdGlvbiwgdG9vbE1hbmFnZXIpIHtcblxuICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGxhc3NvIHZpc3VhbHMgaW1wbGVtZW50YXRpb25cblxuICAvKipcbiAgKiBBIGhlbHBlciB0aGF0IHJlYWxpemVzIHRoZSBzZWxlY3Rpb24gYm94IHZpc3VhbFxuICAqL1xuICB2YXIgdmlzdWFscyA9IHtcblxuICAgIGNyZWF0ZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIGNvbnRhaW5lciA9IGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSxcbiAgICAgICAgICBmcmFtZTtcblxuICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG4gICAgICBzdmdBdHRyKGZyYW1lLCB7XG4gICAgICAgIGNsYXNzOiAnZGpzLWxhc3NvLW92ZXJsYXknLFxuICAgICAgICB3aWR0aDogIDEsXG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMFxuICAgICAgfSk7XG5cbiAgICAgIHN2Z0FwcGVuZChjb250YWluZXIsIGZyYW1lKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlOiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgICB2YXIgZnJhbWUgPSBjb250ZXh0LmZyYW1lLFxuICAgICAgICAgIGJib3ggPSBjb250ZXh0LmJib3g7XG5cbiAgICAgIHN2Z0F0dHIoZnJhbWUsIHtcbiAgICAgICAgeDogYmJveC54LFxuICAgICAgICB5OiBiYm94LnksXG4gICAgICAgIHdpZHRoOiBiYm94LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJib3guaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICAgIGlmIChjb250ZXh0LmZyYW1lKSB7XG4gICAgICAgIHN2Z1JlbW92ZShjb250ZXh0LmZyYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdG9vbE1hbmFnZXIucmVnaXN0ZXJUb29sKCdsYXNzbycsIHtcbiAgICB0b29sOiAnbGFzc28uc2VsZWN0aW9uJyxcbiAgICBkcmFnZ2luZzogJ2xhc3NvJ1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28uc2VsZWN0aW9uLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuXG4gICAgLy8gb25seSByZWFjdGl2ZSBvbiBkaWFncmFtIGNsaWNrXG4gICAgLy8gb24gc29tZSBvY2Nhc2lvbnMsIGV2ZW50LmhvdmVyIGlzIG5vdCBzZXQgYW5kIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhbiBzdmdcbiAgICBpZiAoIWV2ZW50LmhvdmVyICYmICEodGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudEJ1cy5vbmNlKCdsYXNzby5zZWxlY3Rpb24uZW5kZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuYWN0aXZhdGVMYXNzbyhldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gbGFzc28gaW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb25cblxuICBldmVudEJ1cy5vbignbGFzc28uZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBiYm94ID0gdG9CQm94KGV2ZW50KTtcblxuICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSk7XG5cbiAgICBzZWxmLnNlbGVjdChlbGVtZW50cywgYmJveCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdsYXNzby5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmJib3ggPSB0b0JCb3goZXZlbnQpO1xuICAgIHZpc3VhbHMuY3JlYXRlKGNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28ubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmJib3ggPSB0b0JCb3goZXZlbnQpO1xuICAgIHZpc3VhbHMudXBkYXRlKGNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28uY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2aXN1YWxzLnJlbW92ZShjb250ZXh0KTtcbiAgfSk7XG5cblxuICAvLyBldmVudCBpbnRlZ3JhdGlvblxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlZG93bicsIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBpZiAoaGFzU2Vjb25kYXJ5TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTGFzc28oZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIC8vIHdlJ3ZlIGhhbmRsZWQgdGhlIGV2ZW50XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5MYXNzb1Rvb2wuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuXG5MYXNzb1Rvb2wucHJvdG90eXBlLmFjdGl2YXRlTGFzc28gPSBmdW5jdGlvbihldmVudCwgYXV0b0FjdGl2YXRlKSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2xhc3NvJywge1xuICAgIGF1dG9BY3RpdmF0ZTogYXV0b0FjdGl2YXRlLFxuICAgIGN1cnNvcjogTEFTU09fVE9PTF9DVVJTT1IsXG4gICAgZGF0YToge1xuICAgICAgY29udGV4dDoge31cbiAgICB9XG4gIH0pO1xufTtcblxuTGFzc29Ub29sLnByb3RvdHlwZS5hY3RpdmF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2xhc3NvLnNlbGVjdGlvbicsIHtcbiAgICB0cmFwQ2xpY2s6IGZhbHNlLFxuICAgIGN1cnNvcjogTEFTU09fVE9PTF9DVVJTT1IsXG4gICAgZGF0YToge1xuICAgICAgY29udGV4dDoge31cbiAgICB9XG4gIH0pO1xufTtcblxuTGFzc29Ub29sLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbihlbGVtZW50cywgYmJveCkge1xuICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IGdldEVuY2xvc2VkRWxlbWVudHMoZWxlbWVudHMsIGJib3gpO1xuXG4gIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3QodmFsdWVzKHNlbGVjdGVkRWxlbWVudHMpKTtcbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICB0aGlzLl9kcmFnZ2luZy5jYW5jZWwoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0aW9uKCk7XG4gIH1cbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzLl9kcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgcmV0dXJuIGNvbnRleHQgJiYgL15sYXNzby8udGVzdChjb250ZXh0LnByZWZpeCk7XG59O1xuXG5cblxuZnVuY3Rpb24gdG9CQm94KGV2ZW50KSB7XG5cbiAgdmFyIHN0YXJ0ID0ge1xuXG4gICAgeDogZXZlbnQueCAtIGV2ZW50LmR4LFxuICAgIHk6IGV2ZW50LnkgLSBldmVudC5keVxuICB9O1xuXG4gIHZhciBlbmQgPSB7XG4gICAgeDogZXZlbnQueCxcbiAgICB5OiBldmVudC55XG4gIH07XG5cbiAgdmFyIGJib3g7XG5cbiAgaWYgKChzdGFydC54IDw9IGVuZC54ICYmIHN0YXJ0LnkgPCBlbmQueSkgfHxcbiAgICAgIChzdGFydC54IDwgZW5kLnggJiYgc3RhcnQueSA8PSBlbmQueSkpIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBzdGFydC54LFxuICAgICAgeTogc3RhcnQueSxcbiAgICAgIHdpZHRoOiAgZW5kLnggLSBzdGFydC54LFxuICAgICAgaGVpZ2h0OiBlbmQueSAtIHN0YXJ0LnlcbiAgICB9O1xuICB9IGVsc2UgaWYgKChzdGFydC54ID49IGVuZC54ICYmIHN0YXJ0LnkgPCBlbmQueSkgfHxcbiAgICAgICAgICAgICAoc3RhcnQueCA+IGVuZC54ICYmIHN0YXJ0LnkgPD0gZW5kLnkpKSB7XG5cbiAgICBiYm94ID0ge1xuICAgICAgeDogZW5kLngsXG4gICAgICB5OiBzdGFydC55LFxuICAgICAgd2lkdGg6ICBzdGFydC54IC0gZW5kLngsXG4gICAgICBoZWlnaHQ6IGVuZC55IC0gc3RhcnQueVxuICAgIH07XG4gIH0gZWxzZSBpZiAoKHN0YXJ0LnggPD0gZW5kLnggJiYgc3RhcnQueSA+IGVuZC55KSB8fFxuICAgICAgICAgICAgIChzdGFydC54IDwgZW5kLnggJiYgc3RhcnQueSA+PSBlbmQueSkpIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBzdGFydC54LFxuICAgICAgeTogZW5kLnksXG4gICAgICB3aWR0aDogIGVuZC54IC0gc3RhcnQueCxcbiAgICAgIGhlaWdodDogc3RhcnQueSAtIGVuZC55XG4gICAgfTtcbiAgfSBlbHNlIGlmICgoc3RhcnQueCA+PSBlbmQueCAmJiBzdGFydC55ID4gZW5kLnkpIHx8XG4gICAgICAgICAgICAgKHN0YXJ0LnggPiBlbmQueCAmJiBzdGFydC55ID49IGVuZC55KSkge1xuXG4gICAgYmJveCA9IHtcbiAgICAgIHg6IGVuZC54LFxuICAgICAgeTogZW5kLnksXG4gICAgICB3aWR0aDogIHN0YXJ0LnggLSBlbmQueCxcbiAgICAgIGhlaWdodDogc3RhcnQueSAtIGVuZC55XG4gICAgfTtcbiAgfSBlbHNlIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBlbmQueCxcbiAgICAgIHk6IGVuZC55LFxuICAgICAgd2lkdGg6ICAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gYmJveDtcbn1cbiIsImltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuXG5pbXBvcnQgTGFzc29Ub29sIGZyb20gJy4vTGFzc29Ub29sJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFRvb2xNYW5hZ2VyTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdsYXNzb1Rvb2wnIF0sXG4gIGxhc3NvVG9vbDogWyAndHlwZScsIExhc3NvVG9vbCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgQmFzZVxufSBmcm9tICcuLi8uLi9tb2RlbCc7XG5cbmltcG9ydCBBbGlnbkVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9BbGlnbkVsZW1lbnRzSGFuZGxlcic7XG5pbXBvcnQgQXBwZW5kU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL0FwcGVuZFNoYXBlSGFuZGxlcic7XG5pbXBvcnQgQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IENyZWF0ZUVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IENyZWF0ZUxhYmVsSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVMYWJlbEhhbmRsZXInO1xuaW1wb3J0IENyZWF0ZVNoYXBlSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVTaGFwZUhhbmRsZXInO1xuaW1wb3J0IERlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL0RlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBEZWxldGVFbGVtZW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvRGVsZXRlRWxlbWVudHNIYW5kbGVyJztcbmltcG9ydCBEZWxldGVTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvRGVsZXRlU2hhcGVIYW5kbGVyJztcbmltcG9ydCBEaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyIGZyb20gJy4vY21kL0Rpc3RyaWJ1dGVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IExheW91dENvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL0xheW91dENvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBNb3ZlQ29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvTW92ZUNvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBNb3ZlRWxlbWVudHNIYW5kbGVyIGZyb20gJy4vY21kL01vdmVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IE1vdmVTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvTW92ZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IFJlcGxhY2VTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvUmVwbGFjZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgUmVzaXplU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL1Jlc2l6ZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgU3BhY2VUb29sSGFuZGxlciBmcm9tICcuL2NtZC9TcGFjZVRvb2xIYW5kbGVyJztcbmltcG9ydCBUb2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlciBmcm9tICcuL2NtZC9Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlcic7XG5pbXBvcnQgVXBkYXRlQXR0YWNobWVudEhhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlQXR0YWNobWVudEhhbmRsZXInO1xuaW1wb3J0IFVwZGF0ZVdheXBvaW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlV2F5cG9pbnRzSGFuZGxlcic7XG5cblxuLyoqXG4gKiBUaGUgYmFzaWMgbW9kZWxpbmcgZW50cnkgcG9pbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsaW5nKGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgY29tbWFuZFN0YWNrKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIGZ1bmN0aW9uKCkge1xuXG4gICAgLy8gcmVnaXN0ZXIgbW9kZWxpbmcgaGFuZGxlcnNcbiAgICBzZWxmLnJlZ2lzdGVySGFuZGxlcnMoY29tbWFuZFN0YWNrKTtcbiAgfSk7XG59XG5cbk1vZGVsaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdlbGVtZW50RmFjdG9yeScsICdjb21tYW5kU3RhY2snIF07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmdldEhhbmRsZXJzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgJ3NoYXBlLmFwcGVuZCc6IEFwcGVuZFNoYXBlSGFuZGxlcixcbiAgICAnc2hhcGUuY3JlYXRlJzogQ3JlYXRlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5kZWxldGUnOiBEZWxldGVTaGFwZUhhbmRsZXIsXG4gICAgJ3NoYXBlLm1vdmUnOiBNb3ZlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5yZXNpemUnOiBSZXNpemVTaGFwZUhhbmRsZXIsXG4gICAgJ3NoYXBlLnJlcGxhY2UnOiBSZXBsYWNlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS50b2dnbGVDb2xsYXBzZSc6IFRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyLFxuXG4gICAgJ3NwYWNlVG9vbCc6IFNwYWNlVG9vbEhhbmRsZXIsXG5cbiAgICAnbGFiZWwuY3JlYXRlJzogQ3JlYXRlTGFiZWxIYW5kbGVyLFxuXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJzogQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJzogRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZSc6IE1vdmVDb25uZWN0aW9uSGFuZGxlcixcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnOiBMYXlvdXRDb25uZWN0aW9uSGFuZGxlcixcblxuICAgICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cyc6IFVwZGF0ZVdheXBvaW50c0hhbmRsZXIsXG5cbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnOiBSZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlcixcblxuICAgICdlbGVtZW50cy5jcmVhdGUnOiBDcmVhdGVFbGVtZW50c0hhbmRsZXIsXG4gICAgJ2VsZW1lbnRzLm1vdmUnOiBNb3ZlRWxlbWVudHNIYW5kbGVyLFxuICAgICdlbGVtZW50cy5kZWxldGUnOiBEZWxldGVFbGVtZW50c0hhbmRsZXIsXG5cbiAgICAnZWxlbWVudHMuZGlzdHJpYnV0ZSc6IERpc3RyaWJ1dGVFbGVtZW50c0hhbmRsZXIsXG4gICAgJ2VsZW1lbnRzLmFsaWduJzogQWxpZ25FbGVtZW50c0hhbmRsZXIsXG5cbiAgICAnZWxlbWVudC51cGRhdGVBdHRhY2htZW50JzogVXBkYXRlQXR0YWNobWVudEhhbmRsZXJcbiAgfTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgaGFuZGxlcnMgd2l0aCB0aGUgY29tbWFuZCBzdGFja1xuICpcbiAqIEBwYXJhbSB7Q29tbWFuZFN0YWNrfSBjb21tYW5kU3RhY2tcbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnJlZ2lzdGVySGFuZGxlcnMgPSBmdW5jdGlvbihjb21tYW5kU3RhY2spIHtcbiAgZm9yRWFjaCh0aGlzLmdldEhhbmRsZXJzKCksIGZ1bmN0aW9uKGhhbmRsZXIsIGlkKSB7XG4gICAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcihpZCwgaGFuZGxlcik7XG4gIH0pO1xufTtcblxuXG4vLyBtb2RlbGluZyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuTW9kZWxpbmcucHJvdG90eXBlLm1vdmVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdQYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIG5ld1BhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gbmV3UGFyZW50SW5kZXg7XG4gICAgbmV3UGFyZW50SW5kZXggPSBudWxsO1xuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIGRlbHRhOiAgZGVsdGEsXG4gICAgbmV3UGFyZW50OiBuZXdQYXJlbnQsXG4gICAgbmV3UGFyZW50SW5kZXg6IG5ld1BhcmVudEluZGV4LFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS5tb3ZlJywgY29udGV4dCk7XG59O1xuXG5cbi8qKlxuICogVXBkYXRlIHRoZSBhdHRhY2htZW50IG9mIHRoZSBnaXZlbiBzaGFwZS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlLkJhc2V9IHNoYXBlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbbmV3SG9zdF1cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZUF0dGFjaG1lbnQgPSBmdW5jdGlvbihzaGFwZSwgbmV3SG9zdCkge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgbmV3SG9zdDogbmV3SG9zdFxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnLCBjb250ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBNb3ZlIGEgbnVtYmVyIG9mIHNoYXBlcyB0byBhIG5ldyB0YXJnZXQsIGVpdGhlciBzZXR0aW5nIGl0IGFzXG4gKiB0aGUgbmV3IHBhcmVudCBvciBhdHRhY2hpbmcgaXQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZS5CYXNlPn0gc2hhcGVzXG4gKiBAcGFyYW0ge1BvaW50fSBkZWx0YVxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW3RhcmdldF1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5hdHRhY2g9ZmFsc2VdXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5tb3ZlRWxlbWVudHMgPSBmdW5jdGlvbihzaGFwZXMsIGRlbHRhLCB0YXJnZXQsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICB2YXIgYXR0YWNoID0gaGludHMuYXR0YWNoO1xuXG4gIHZhciBuZXdQYXJlbnQgPSB0YXJnZXQsXG4gICAgICBuZXdIb3N0O1xuXG4gIGlmIChhdHRhY2ggPT09IHRydWUpIHtcbiAgICBuZXdIb3N0ID0gdGFyZ2V0O1xuICAgIG5ld1BhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gIH0gZWxzZVxuXG4gIGlmIChhdHRhY2ggPT09IGZhbHNlKSB7XG4gICAgbmV3SG9zdCA9IG51bGw7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZXM6IHNoYXBlcyxcbiAgICBkZWx0YTogZGVsdGEsXG4gICAgbmV3UGFyZW50OiBuZXdQYXJlbnQsXG4gICAgbmV3SG9zdDogbmV3SG9zdCxcbiAgICBoaW50czogaGludHNcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudHMubW92ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUubW92ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdQYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIG5ld1BhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gbmV3UGFyZW50SW5kZXg7XG4gICAgbmV3UGFyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIGRlbHRhOiBkZWx0YSxcbiAgICBuZXdQYXJlbnQ6IG5ld1BhcmVudCxcbiAgICBuZXdQYXJlbnRJbmRleDogbmV3UGFyZW50SW5kZXgsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ubW92ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUubGF5b3V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ubGF5b3V0JywgY29udGV4dCk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gc291cmNlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSB0YXJnZXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyZW50SW5kZXhdXG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvblxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gcGFyZW50XG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gdGhlIGNyZWF0ZWQgY29ubmVjdGlvbi5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyZW50SW5kZXgsIGNvbm5lY3Rpb24sIHBhcmVudCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gcGFyZW50O1xuICAgIHBhcmVudCA9IGNvbm5lY3Rpb247XG4gICAgY29ubmVjdGlvbiA9IHBhcmVudEluZGV4O1xuICAgIHBhcmVudEluZGV4ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29ubmVjdGlvbiA9IHRoaXMuX2NyZWF0ZSgnY29ubmVjdGlvbicsIGNvbm5lY3Rpb24pO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHBhcmVudEluZGV4OiBwYXJlbnRJbmRleCxcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIGhpbnRzOiBoaW50c1xuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LmNvbm5lY3Rpb247XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgc2hhcGUgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZXxPYmplY3R9IHNoYXBlXG4gKiBAcGFyYW0ge1BvaW50fSBwb3NpdGlvblxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8ZGpzLm1vZGVsLlJvb3R9IHRhcmdldFxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF0gcG9zaXRpb24gaW4gcGFyZW50cyBjaGlsZHJlbiBsaXN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICogQHBhcmFtIHtib29sZWFufSBbaGludHMuYXR0YWNoXSB3aGV0aGVyIHRvIGF0dGFjaCB0byB0YXJnZXQgb3IgYmVjb21lIGEgY2hpbGRcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBjcmVhdGVkIHNoYXBlXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBwb3NpdGlvbiwgdGFyZ2V0LCBwYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIGhpbnRzID0gcGFyZW50SW5kZXg7XG4gICAgcGFyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICBoaW50cyA9IGhpbnRzIHx8IHt9O1xuXG4gIHZhciBhdHRhY2ggPSBoaW50cy5hdHRhY2gsXG4gICAgICBwYXJlbnQsXG4gICAgICBob3N0O1xuXG4gIHNoYXBlID0gdGhpcy5fY3JlYXRlKCdzaGFwZScsIHNoYXBlKTtcblxuICBpZiAoYXR0YWNoKSB7XG4gICAgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDtcbiAgICBob3N0ID0gdGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIHBhcmVudCA9IHRhcmdldDtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcGFyZW50SW5kZXg6IHBhcmVudEluZGV4LFxuICAgIGhvc3Q6IGhvc3QsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuY3JlYXRlRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cywgcG9zaXRpb24sIHBhcmVudCwgcGFyZW50SW5kZXgsIGhpbnRzKSB7XG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyZW50SW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgaGludHMgPSBwYXJlbnRJbmRleDtcbiAgICBwYXJlbnRJbmRleCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBwYXJlbnRJbmRleDogcGFyZW50SW5kZXgsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LmVsZW1lbnRzO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuY3JlYXRlTGFiZWwgPSBmdW5jdGlvbihsYWJlbFRhcmdldCwgcG9zaXRpb24sIGxhYmVsLCBwYXJlbnQpIHtcblxuICBsYWJlbCA9IHRoaXMuX2NyZWF0ZSgnbGFiZWwnLCBsYWJlbCk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbGFiZWxUYXJnZXQ6IGxhYmVsVGFyZ2V0LFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBwYXJlbnQ6IHBhcmVudCB8fCBsYWJlbFRhcmdldC5wYXJlbnQsXG4gICAgc2hhcGU6IGxhYmVsXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhYmVsLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG4vKipcbiAqIEFwcGVuZCBzaGFwZSB0byBnaXZlbiBzb3VyY2UsIGRyYXdpbmcgYSBjb25uZWN0aW9uXG4gKiBiZXR3ZWVuIHNvdXJjZSBhbmQgdGhlIG5ld2x5IGNyZWF0ZWQgc2hhcGUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8T2JqZWN0fSBzaGFwZVxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5hdHRhY2hdXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5Db25uZWN0aW9ufE9iamVjdH0gW2hpbnRzLmNvbm5lY3Rpb25dXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbaGludHMuY29ubmVjdGlvblBhcmVudF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBuZXdseSBjcmVhdGVkIHNoYXBlXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5hcHBlbmRTaGFwZSA9IGZ1bmN0aW9uKHNvdXJjZSwgc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICBzaGFwZSA9IHRoaXMuX2NyZWF0ZSgnc2hhcGUnLCBzaGFwZSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBjb25uZWN0aW9uOiBoaW50cy5jb25uZWN0aW9uLFxuICAgIGNvbm5lY3Rpb25QYXJlbnQ6IGhpbnRzLmNvbm5lY3Rpb25QYXJlbnQsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLmFwcGVuZCcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVtb3ZlRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudHMuZGVsZXRlJywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5kaXN0cmlidXRlRWxlbWVudHMgPSBmdW5jdGlvbihncm91cHMsIGF4aXMsIGRpbWVuc2lvbikge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBncm91cHM6IGdyb3VwcyxcbiAgICBheGlzOiBheGlzLFxuICAgIGRpbWVuc2lvbjogZGltZW5zaW9uXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLmRpc3RyaWJ1dGUnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZW1vdmVDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBjb250ZXh0KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZXBsYWNlU2hhcGUgPSBmdW5jdGlvbihvbGRTaGFwZSwgbmV3U2hhcGUsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIG9sZFNoYXBlOiBvbGRTaGFwZSxcbiAgICBuZXdEYXRhOiBuZXdTaGFwZSxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUucmVwbGFjZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0Lm5ld1NoYXBlO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmFsaWduRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cywgYWxpZ25tZW50KSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBhbGlnbm1lbnQ6IGFsaWdubWVudFxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50cy5hbGlnbicsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlc2l6ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcywgbWluQm91bmRzLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgbmV3Qm91bmRzOiBuZXdCb3VuZHMsXG4gICAgbWluQm91bmRzOiBtaW5Cb3VuZHMsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZVNwYWNlID0gZnVuY3Rpb24obW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgZGVsdGE6IGRlbHRhLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIG1vdmluZ1NoYXBlczogbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzOiByZXNpemluZ1NoYXBlcyxcbiAgICBzdGFydDogc3RhcnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc3BhY2VUb29sJywgY29udGV4dCk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgbmV3V2F5cG9pbnRzLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIG5ld1dheXBvaW50czogbmV3V2F5cG9pbnRzLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlY29ubmVjdCA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIHNvdXJjZSwgdGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgbmV3U291cmNlOiBzb3VyY2UsXG4gICAgbmV3VGFyZ2V0OiB0YXJnZXQsXG4gICAgZG9ja2luZ09yUG9pbnRzOiBkb2NraW5nT3JQb2ludHMsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgY29udGV4dCk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVjb25uZWN0U3RhcnQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGRvY2tpbmdPclBvaW50cywgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB0aGlzLnJlY29ubmVjdChjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGNvbm5lY3Rpb24udGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGFzc2lnbihoaW50cywge1xuICAgIGRvY2tpbmc6ICdzb3VyY2UnXG4gIH0pKTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZWNvbm5lY3RFbmQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdUYXJnZXQsIGRvY2tpbmdPclBvaW50cywgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB0aGlzLnJlY29ubmVjdChjb25uZWN0aW9uLCBjb25uZWN0aW9uLnNvdXJjZSwgbmV3VGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGFzc2lnbihoaW50cywge1xuICAgIGRvY2tpbmc6ICd0YXJnZXQnXG4gIH0pKTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIGF0dHJzLCBoaW50cykge1xuICByZXR1cm4gdGhpcy5jcmVhdGVDb25uZWN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBhdHRycyB8fCB7fSwgc291cmNlLnBhcmVudCwgaGludHMpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbih0eXBlLCBhdHRycykge1xuICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBCYXNlKSB7XG4gICAgcmV0dXJuIGF0dHJzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGUodHlwZSwgYXR0cnMpO1xuICB9XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudG9nZ2xlQ29sbGFwc2UgPSBmdW5jdGlvbihzaGFwZSwgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS50b2dnbGVDb2xsYXBzZScsIGNvbnRleHQpO1xufTtcbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgYWxpZ24gZWxlbWVudHMgaW4gYSBjZXJ0YWluIHdheS5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFsaWduRWxlbWVudHMobW9kZWxpbmcsIGNhbnZhcykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkFsaWduRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJywgJ2NhbnZhcycgXTtcblxuXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgYWxpZ25tZW50ID0gY29udGV4dC5hbGlnbm1lbnQ7XG5cblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIGRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgaWYgKGFsaWdubWVudC5sZWZ0KSB7XG4gICAgICBkZWx0YS54ID0gYWxpZ25tZW50LmxlZnQgLSBlbGVtZW50Lng7XG5cbiAgICB9IGVsc2UgaWYgKGFsaWdubWVudC5yaWdodCkge1xuICAgICAgZGVsdGEueCA9IChhbGlnbm1lbnQucmlnaHQgLSBlbGVtZW50LndpZHRoKSAtIGVsZW1lbnQueDtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50LmNlbnRlcikge1xuICAgICAgZGVsdGEueCA9IChhbGlnbm1lbnQuY2VudGVyIC0gTWF0aC5yb3VuZChlbGVtZW50LndpZHRoIC8gMikpIC0gZWxlbWVudC54O1xuXG4gICAgfSBlbHNlIGlmIChhbGlnbm1lbnQudG9wKSB7XG4gICAgICBkZWx0YS55ID0gYWxpZ25tZW50LnRvcCAtIGVsZW1lbnQueTtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50LmJvdHRvbSkge1xuICAgICAgZGVsdGEueSA9IChhbGlnbm1lbnQuYm90dG9tIC0gZWxlbWVudC5oZWlnaHQpIC0gZWxlbWVudC55O1xuXG4gICAgfSBlbHNlIGlmIChhbGlnbm1lbnQubWlkZGxlKSB7XG4gICAgICBkZWx0YS55ID0gKGFsaWdubWVudC5taWRkbGUgLSBNYXRoLnJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMikpIC0gZWxlbWVudC55O1xuICAgIH1cblxuICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSwgZGVsdGEsIGVsZW1lbnQucGFyZW50KTtcbiAgfSk7XG59O1xuXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxufTtcbiIsImltcG9ydCB7IHNvbWUgfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgYXBwZW5kaW5nIG9mIHNoYXBlc1xuICogdG8gYSBzb3VyY2Ugc2hhcGUuXG4gKlxuICogQHBhcmFtIHtjYW52YXN9IENhbnZhc1xuICogQHBhcmFtIHtlbGVtZW50RmFjdG9yeX0gRWxlbWVudEZhY3RvcnlcbiAqIEBwYXJhbSB7bW9kZWxpbmd9IE1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcGVuZFNoYXBlSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5BcHBlbmRTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNoYXBlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQuc2hhcGUgdGhlIG5ldyBzaGFwZVxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcn0gY29udGV4dC5zb3VyY2UgdGhlIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQucGFyZW50IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5BcHBlbmRTaGFwZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gIGlmICghc291cmNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2UgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCB8fCBzb3VyY2UucGFyZW50LFxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gIHNoYXBlID0gY29udGV4dC5zaGFwZSA9XG4gICAgdGhpcy5fbW9kZWxpbmcuY3JlYXRlU2hhcGUoXG4gICAgICBzaGFwZSxcbiAgICAgIGNvbnRleHQucG9zaXRpb24sXG4gICAgICB0YXJnZXQsIHsgYXR0YWNoOiBoaW50cy5hdHRhY2ggfSk7XG5cbiAgY29udGV4dC5zaGFwZSA9IHNoYXBlO1xufTtcblxuQXBwZW5kU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICBpZiAoIWV4aXN0c0Nvbm5lY3Rpb24oY29udGV4dC5zb3VyY2UsIGNvbnRleHQuc2hhcGUpKSB7XG5cbiAgICAvLyBjcmVhdGUgY29ubmVjdGlvblxuICAgIGlmIChoaW50cy5jb25uZWN0aW9uVGFyZ2V0ID09PSBjb250ZXh0LnNvdXJjZSkge1xuICAgICAgdGhpcy5fbW9kZWxpbmcuY29ubmVjdChjb250ZXh0LnNoYXBlLCBjb250ZXh0LnNvdXJjZSwgY29udGV4dC5jb25uZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZWxpbmcuY29ubmVjdChjb250ZXh0LnNvdXJjZSwgY29udGV4dC5zaGFwZSwgY29udGV4dC5jb25uZWN0aW9uKTtcbiAgICB9XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gZXhpc3RzQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gc29tZShzb3VyY2Uub3V0Z29pbmcsIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gYy50YXJnZXQgPT09IHRhcmdldDtcbiAgfSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIoY2FudmFzLCBsYXlvdXRlcikge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2xheW91dGVyID0gbGF5b3V0ZXI7XG59XG5cbkNyZWF0ZUNvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdjYW52YXMnLCAnbGF5b3V0ZXInIF07XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIEFwcGVuZHMgYSBzaGFwZSB0byBhIHRhcmdldCBzaGFwZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5lbGVtZW50LkJhc2V9IGNvbnRleHQuc291cmNlIHRoZSBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge2Rqcy5lbGVtZW50LkJhc2V9IGNvbnRleHQudGFyZ2V0IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleCxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcblxuICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2UgYW5kIHRhcmdldCByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFwYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCByZXF1aXJlZCcpO1xuICB9XG5cbiAgY29ubmVjdGlvbi5zb3VyY2UgPSBzb3VyY2U7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gdGFyZ2V0O1xuXG4gIGlmICghY29ubmVjdGlvbi53YXlwb2ludHMpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2xheW91dGVyLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgaGludHMpO1xuICB9XG5cbiAgLy8gYWRkIGNvbm5lY3Rpb25cbiAgdGhpcy5fY2FudmFzLmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbiwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICB0aGlzLl9jYW52YXMucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICBjb25uZWN0aW9uLnNvdXJjZSA9IG51bGw7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gbnVsbDtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07IiwiaW1wb3J0IHtcclxuICBhc3NpZ24sXHJcbiAgZm9yRWFjaCxcclxuICBpc051bWJlcixcclxuICBtYXAsXHJcbiAgcGljayxcclxuICB2YWx1ZXNcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJCb3gsXHJcbiAgZ2V0UGFyZW50c1xyXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvRWxlbWVudHMnO1xyXG5cclxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZUVsZW1lbnRzSGFuZGxlcihtb2RlbGluZykge1xyXG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XHJcbn1cclxuXHJcbkNyZWF0ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gW1xyXG4gICdtb2RlbGluZydcclxuXTtcclxuXHJcbkNyZWF0ZUVsZW1lbnRzSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxyXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcclxuICAgICAgcGFyZW50SW5kZXggPSBjb250ZXh0LnBhcmVudEluZGV4LFxyXG4gICAgICBwb3NpdGlvbiA9IGNvbnRleHQucG9zaXRpb24sXHJcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcclxuXHJcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XHJcblxyXG4gIC8vIG1ha2Ugc3VyZSBlYWNoIGVsZW1lbnQgaGFzIHggYW5kIHlcclxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueCkpIHtcclxuICAgICAgZWxlbWVudC54ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueSkpIHtcclxuICAgICAgZWxlbWVudC55ID0gMDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGJib3ggPSBnZXRCQm94KGVsZW1lbnRzKTtcclxuXHJcbiAgLy8gY2VudGVyIGVsZW1lbnRzIGFyb3VuZCBwb3NpdGlvblxyXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcclxuICAgICAgZWxlbWVudC53YXlwb2ludHMgPSBtYXAoZWxlbWVudC53YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHg6IHJvdW5kKHdheXBvaW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMiArIHBvc2l0aW9uLngpLFxyXG4gICAgICAgICAgeTogcm91bmQod2F5cG9pbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMiArIHBvc2l0aW9uLnkpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduKGVsZW1lbnQsIHtcclxuICAgICAgeDogcm91bmQoZWxlbWVudC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIgKyBwb3NpdGlvbi54KSxcclxuICAgICAgeTogcm91bmQoZWxlbWVudC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyICsgcG9zaXRpb24ueSlcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICB2YXIgcGFyZW50cyA9IGdldFBhcmVudHMoZWxlbWVudHMpO1xyXG5cclxuICB2YXIgY2FjaGUgPSB7fTtcclxuXHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xyXG4gICAgICBjYWNoZVsgZWxlbWVudC5pZCBdID0gaXNOdW1iZXIocGFyZW50SW5kZXgpID9cclxuICAgICAgICBtb2RlbGluZy5jcmVhdGVDb25uZWN0aW9uKFxyXG4gICAgICAgICAgY2FjaGVbIGVsZW1lbnQuc291cmNlLmlkIF0sXHJcbiAgICAgICAgICBjYWNoZVsgZWxlbWVudC50YXJnZXQuaWQgXSxcclxuICAgICAgICAgIHBhcmVudEluZGV4LFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGVsZW1lbnQucGFyZW50IHx8IHBhcmVudCxcclxuICAgICAgICAgIGhpbnRzXHJcbiAgICAgICAgKSA6XHJcbiAgICAgICAgbW9kZWxpbmcuY3JlYXRlQ29ubmVjdGlvbihcclxuICAgICAgICAgIGNhY2hlWyBlbGVtZW50LnNvdXJjZS5pZCBdLFxyXG4gICAgICAgICAgY2FjaGVbIGVsZW1lbnQudGFyZ2V0LmlkIF0sXHJcbiAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgZWxlbWVudC5wYXJlbnQgfHwgcGFyZW50LFxyXG4gICAgICAgICAgaGludHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjcmVhdGVTaGFwZUhpbnRzID0gYXNzaWduKHt9LCBoaW50cyk7XHJcblxyXG4gICAgaWYgKHBhcmVudHMuaW5kZXhPZihlbGVtZW50KSA9PT0gLTEpIHtcclxuICAgICAgY3JlYXRlU2hhcGVIaW50cy5hdXRvUmVzaXplID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY2FjaGVbIGVsZW1lbnQuaWQgXSA9IGlzTnVtYmVyKHBhcmVudEluZGV4KSA/XHJcbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgcGljayhlbGVtZW50LCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdKSxcclxuICAgICAgICBlbGVtZW50LnBhcmVudCB8fCBwYXJlbnQsXHJcbiAgICAgICAgcGFyZW50SW5kZXgsXHJcbiAgICAgICAgY3JlYXRlU2hhcGVIaW50c1xyXG4gICAgICApIDpcclxuICAgICAgbW9kZWxpbmcuY3JlYXRlU2hhcGUoXHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICBwaWNrKGVsZW1lbnQsIFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF0pLFxyXG4gICAgICAgIGVsZW1lbnQucGFyZW50IHx8IHBhcmVudCxcclxuICAgICAgICBjcmVhdGVTaGFwZUhpbnRzXHJcbiAgICAgICk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnRleHQuZWxlbWVudHMgPSB2YWx1ZXMoY2FjaGUpO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xyXG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENyZWF0ZVNoYXBlSGFuZGxlciBmcm9tICcuL0NyZWF0ZVNoYXBlSGFuZGxlcic7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBhdHRhY2hlcyBhIGxhYmVsIHRvIGEgZ2l2ZW4gdGFyZ2V0IHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlTGFiZWxIYW5kbGVyKGNhbnZhcykge1xuICBDcmVhdGVTaGFwZUhhbmRsZXIuY2FsbCh0aGlzLCBjYW52YXMpO1xufVxuXG5pbmhlcml0cyhDcmVhdGVMYWJlbEhhbmRsZXIsIENyZWF0ZVNoYXBlSGFuZGxlcik7XG5cbkNyZWF0ZUxhYmVsSGFuZGxlci4kaW5qZWN0ID0gWyAnY2FudmFzJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIG9yaWdpbmFsRXhlY3V0ZSA9IENyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgbGFiZWwgdG8gYSB0YXJnZXQgc2hhcGUuXG4gKlxuICogQG1ldGhvZCBDcmVhdGVMYWJlbEhhbmRsZXIjZXhlY3V0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnREZXNjcmlwdG9yfSBjb250ZXh0LnRhcmdldCB0aGUgZWxlbWVudCB0aGUgbGFiZWwgaXMgYXR0YWNoZWQgdG9cbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQucGFyZW50IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5DcmVhdGVMYWJlbEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGxhYmVsID0gY29udGV4dC5zaGFwZTtcblxuICBlbnN1cmVWYWxpZERpbWVuc2lvbnMobGFiZWwpO1xuXG4gIGxhYmVsLmxhYmVsVGFyZ2V0ID0gY29udGV4dC5sYWJlbFRhcmdldDtcblxuICByZXR1cm4gb3JpZ2luYWxFeGVjdXRlLmNhbGwodGhpcywgY29udGV4dCk7XG59O1xuXG52YXIgb3JpZ2luYWxSZXZlcnQgPSBDcmVhdGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydDtcblxuLyoqXG4gKiBVbmRvIGFwcGVuZCBieSByZW1vdmluZyB0aGUgc2hhcGVcbiAqL1xuQ3JlYXRlTGFiZWxIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIGNvbnRleHQuc2hhcGUubGFiZWxUYXJnZXQgPSBudWxsO1xuXG4gIHJldHVybiBvcmlnaW5hbFJldmVydC5jYWxsKHRoaXMsIGNvbnRleHQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlVmFsaWREaW1lbnNpb25zKGxhYmVsKSB7XG5cbiAgLy8gbWFrZSBzdXJlIGEgbGFiZWwgaGFzIHZhbGlkIHsgd2lkdGgsIGhlaWdodCB9IGRpbWVuc2lvbnNcbiAgWyAnd2lkdGgnLCAnaGVpZ2h0JyBdLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgIGlmICh0eXBlb2YgbGFiZWxbcHJvcF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsYWJlbFtwcm9wXSA9IDA7XG4gICAgfVxuICB9KTtcbn0iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgYWRkaXRpb24gb2Ygc2hhcGVzLlxuICpcbiAqIEBwYXJhbSB7Y2FudmFzfSBDYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlU2hhcGVIYW5kbGVyKGNhbnZhcykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkNyZWF0ZVNoYXBlSGFuZGxlci4kaW5qZWN0ID0gWyAnY2FudmFzJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBBcHBlbmRzIGEgc2hhcGUgdG8gYSB0YXJnZXQgc2hhcGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5wYXJlbnQgdGhlIHBhcmVudCBvYmplY3RcbiAqIEBwYXJhbSB7UG9pbnR9IGNvbnRleHQucG9zaXRpb24gcG9zaXRpb24gb2YgdGhlIG5ldyBlbGVtZW50XG4gKi9cbkNyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgcG9zaXRpb25PckJvdW5kcyA9IGNvbnRleHQucG9zaXRpb24sXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleDtcblxuICBpZiAoIXBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIXBvc2l0aW9uT3JCb3VuZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Bvc2l0aW9uIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyAoMSkgYWRkIGF0IGV2ZW50IGNlbnRlciBwb3NpdGlvbiBfb3JfIGF0IGdpdmVuIGJvdW5kc1xuICBpZiAocG9zaXRpb25PckJvdW5kcy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzaWduKHNoYXBlLCBwb3NpdGlvbk9yQm91bmRzKTtcbiAgfSBlbHNlIHtcbiAgICBhc3NpZ24oc2hhcGUsIHtcbiAgICAgIHg6IHBvc2l0aW9uT3JCb3VuZHMueCAtIHJvdW5kKHNoYXBlLndpZHRoIC8gMiksXG4gICAgICB5OiBwb3NpdGlvbk9yQm91bmRzLnkgLSByb3VuZChzaGFwZS5oZWlnaHQgLyAyKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDIpIGFkZCB0byBjYW52YXNcbiAgdGhpcy5fY2FudmFzLmFkZFNoYXBlKHNoYXBlLCBwYXJlbnQsIHBhcmVudEluZGV4KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5cbi8qKlxuICogVW5kbyBhcHBlbmQgYnkgcmVtb3ZpbmcgdGhlIHNoYXBlXG4gKi9cbkNyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgLy8gKDMpIHJlbW92ZSBmb3JtIGNhbnZhc1xuICB0aGlzLl9jYW52YXMucmVtb3ZlU2hhcGUoc2hhcGUpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07IiwiaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIGluZGV4T2YgYXMgY29sbGVjdGlvbklkeFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBkZWxldGlvbiBvZiBDb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIoY2FudmFzLCBtb2RlbGluZykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbkRlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbkRlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgcGFyZW50ID0gY29ubmVjdGlvbi5wYXJlbnQ7XG5cbiAgY29udGV4dC5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgLy8gcmVtZW1iZXIgY29udGFpbm1lbnRcbiAgY29udGV4dC5wYXJlbnRJbmRleCA9IGNvbGxlY3Rpb25JZHgocGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uKTtcblxuICBjb250ZXh0LnNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlO1xuICBjb250ZXh0LnRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0O1xuXG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gIGNvbm5lY3Rpb24uc291cmNlID0gbnVsbDtcbiAgY29ubmVjdGlvbi50YXJnZXQgPSBudWxsO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuLyoqXG4gKiBDb21tYW5kIHJldmVydCBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgcGFyZW50SW5kZXggPSBjb250ZXh0LnBhcmVudEluZGV4O1xuXG4gIGNvbm5lY3Rpb24uc291cmNlID0gY29udGV4dC5zb3VyY2U7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgLy8gcmVzdG9yZSBjb250YWlubWVudFxuICBjb2xsZWN0aW9uQWRkKHBhcmVudC5jaGlsZHJlbiwgY29ubmVjdGlvbiwgcGFyZW50SW5kZXgpO1xuXG4gIHRoaXMuX2NhbnZhcy5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHBhcmVudCk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVFbGVtZW50c0hhbmRsZXIobW9kZWxpbmcsIGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cbkRlbGV0ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gW1xuICAnbW9kZWxpbmcnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG5EZWxldGVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIC8vIGVsZW1lbnQgbWF5IGhhdmUgYmVlbiByZW1vdmVkIHdpdGggcHJldmlvdXNcbiAgICAvLyByZW1vdmUgb3BlcmF0aW9ucyBhbHJlYWR5IChlLmcuIGluIGNhc2Ugb2YgbmVzdGluZylcbiAgICBpZiAoIWVsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59OyIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICBpbmRleE9mIGFzIGNvbGxlY3Rpb25JZHhcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgZGVsZXRpb24gb2Ygc2hhcGVzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlU2hhcGVIYW5kbGVyKGNhbnZhcywgbW9kZWxpbmcpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5EZWxldGVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ2NhbnZhcycsICdtb2RlbGluZycgXTtcblxuXG4vKipcbiAqIC0gUmVtb3ZlIGNvbm5lY3Rpb25zXG4gKiAtIFJlbW92ZSBhbGwgZGlyZWN0IGNoaWxkcmVuXG4gKi9cbkRlbGV0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gIC8vIHJlbW92ZSBjb25uZWN0aW9uc1xuICBzYXZlQ2xlYXIoc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcblxuICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25uZWN0aW9uIGlzbid0IHJlbW92ZWQgdHdpY2VcbiAgICAvLyBGb3IgZXhhbXBsZSBpZiBhIGNvbnRhaW5lciBpcyByZW1vdmVkXG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgc2F2ZUNsZWFyKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGNoaWxkIHNoYXBlcyBhbmQgY29ubmVjdGlvbnNcbiAgc2F2ZUNsZWFyKHNoYXBlLmNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgIGlmIChpc0Nvbm5lY3Rpb24oY2hpbGQpKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKGNoaWxkLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUoY2hpbGQsIHsgbmVzdGVkOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBzaGFwZSBhbmQgcmVtZW1iZXIgdGhlIHBhcmVudFxuICovXG5EZWxldGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IHNoYXBlLnBhcmVudDtcblxuICBjb250ZXh0Lm9sZFBhcmVudCA9IG9sZFBhcmVudDtcblxuICAvLyByZW1vdmUgY29udGFpbm1lbnRcbiAgY29udGV4dC5vbGRQYXJlbnRJbmRleCA9IGNvbGxlY3Rpb25JZHgob2xkUGFyZW50LmNoaWxkcmVuLCBzaGFwZSk7XG5cbiAgLy8gcmVtb3ZlIHNoYXBlXG4gIGNhbnZhcy5yZW1vdmVTaGFwZShzaGFwZSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuXG4vKipcbiAqIENvbW1hbmQgcmV2ZXJ0IGltcGxlbWVudGF0aW9uXG4gKi9cbkRlbGV0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgb2xkUGFyZW50SW5kZXggPSBjb250ZXh0Lm9sZFBhcmVudEluZGV4O1xuXG4gIC8vIHJlc3RvcmUgY29udGFpbm1lbnRcbiAgY29sbGVjdGlvbkFkZChvbGRQYXJlbnQuY2hpbGRyZW4sIHNoYXBlLCBvbGRQYXJlbnRJbmRleCk7XG5cbiAgY2FudmFzLmFkZFNoYXBlKHNoYXBlLCBvbGRQYXJlbnQpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBkaXN0cmlidXRlcyBlbGVtZW50cyBldmVubHkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpc3RyaWJ1dGVFbGVtZW50cyhtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5EaXN0cmlidXRlRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG52YXIgT0ZGX0FYSVMgPSB7XG4gIHg6ICd5JyxcbiAgeTogJ3gnXG59O1xuXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBncm91cHMgPSBjb250ZXh0Lmdyb3VwcyxcbiAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXMsXG4gICAgICBkaW1lbnNpb24gPSBjb250ZXh0LmRpbWVuc2lvbjtcblxuICBmdW5jdGlvbiB1cGRhdGVSYW5nZShncm91cCwgZWxlbWVudCkge1xuICAgIGdyb3VwLnJhbmdlLm1pbiA9IE1hdGgubWluKGVsZW1lbnRbYXhpc10sIGdyb3VwLnJhbmdlLm1pbik7XG4gICAgZ3JvdXAucmFuZ2UubWF4ID0gTWF0aC5tYXgoZWxlbWVudFtheGlzXSArIGVsZW1lbnRbZGltZW5zaW9uXSwgZ3JvdXAucmFuZ2UubWF4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl0gLyAyO1xuICB9XG5cbiAgZnVuY3Rpb24gbGFzdElkeChhcnIpIHtcbiAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZURpZmYocmFuZ2UpIHtcbiAgICByZXR1cm4gcmFuZ2UubWF4IC0gcmFuZ2UubWluO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudGVyRWxlbWVudChyZWZDZW50ZXIsIGVsZW1lbnQpIHtcbiAgICB2YXIgZGVsdGEgPSB7IHk6IDAgfTtcblxuICAgIGRlbHRhW2F4aXNdID0gcmVmQ2VudGVyIC0gY2VudGVyKGVsZW1lbnQpO1xuXG4gICAgaWYgKGRlbHRhW2F4aXNdKSB7XG5cbiAgICAgIGRlbHRhW09GRl9BWElTW2F4aXNdXSA9IDA7XG5cbiAgICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSwgZGVsdGEsIGVsZW1lbnQucGFyZW50KTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmlyc3RHcm91cCA9IGdyb3Vwc1swXSxcbiAgICAgIGxhc3RHcm91cElkeCA9IGxhc3RJZHgoZ3JvdXBzKSxcbiAgICAgIGxhc3RHcm91cCA9IGdyb3Vwc1sgbGFzdEdyb3VwSWR4IF07XG5cbiAgdmFyIG1hcmdpbixcbiAgICAgIHNwYWNlSW5CZXR3ZWVuLFxuICAgICAgZ3JvdXBzU2l6ZSA9IDA7IC8vIHRoZSBzaXplIG9mIGVhY2ggcmFuZ2VcblxuICBmb3JFYWNoKGdyb3VwcywgZnVuY3Rpb24oZ3JvdXAsIGlkeCkge1xuICAgIHZhciBzb3J0ZWRFbGVtZW50cyxcbiAgICAgICAgcmVmRWxlbSxcbiAgICAgICAgcmVmQ2VudGVyO1xuXG4gICAgaWYgKGdyb3VwLmVsZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGlmIChpZHggJiYgaWR4ICE9PSBncm91cHMubGVuZ3RoIC0gMSkge1xuICAgICAgICB1cGRhdGVSYW5nZShncm91cCwgZ3JvdXAuZWxlbWVudHNbMF0pO1xuXG4gICAgICAgIGdyb3Vwc1NpemUgKz0gcmFuZ2VEaWZmKGdyb3VwLnJhbmdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzb3J0ZWRFbGVtZW50cyA9IHNvcnRCeShncm91cC5lbGVtZW50cywgYXhpcyk7XG5cbiAgICByZWZFbGVtID0gc29ydGVkRWxlbWVudHNbMF07XG5cbiAgICBpZiAoaWR4ID09PSBsYXN0R3JvdXBJZHgpIHtcbiAgICAgIHJlZkVsZW0gPSBzb3J0ZWRFbGVtZW50c1tsYXN0SWR4KHNvcnRlZEVsZW1lbnRzKV07XG4gICAgfVxuXG4gICAgcmVmQ2VudGVyID0gY2VudGVyKHJlZkVsZW0pO1xuXG4gICAgLy8gd2FubmEgdXBkYXRlIHRoZSByYW5nZXMgYWZ0ZXIgdGhlIHNoYXBlcyBoYXZlIGJlZW4gY2VudGVyZWRcbiAgICBncm91cC5yYW5nZSA9IG51bGw7XG5cbiAgICBmb3JFYWNoKHNvcnRlZEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGNlbnRlckVsZW1lbnQocmVmQ2VudGVyLCBlbGVtZW50KTtcblxuICAgICAgaWYgKGdyb3VwLnJhbmdlID09PSBudWxsKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlID0ge1xuICAgICAgICAgIG1pbjogZWxlbWVudFtheGlzXSxcbiAgICAgICAgICBtYXg6IGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBncm91cCdzIHJhbmdlIGFmdGVyIGNlbnRlcmluZyB0aGUgcmFuZ2UgZWxlbWVudHNcbiAgICAgIHVwZGF0ZVJhbmdlKGdyb3VwLCBlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGlmIChpZHggJiYgaWR4ICE9PSBncm91cHMubGVuZ3RoIC0gMSkge1xuICAgICAgZ3JvdXBzU2l6ZSArPSByYW5nZURpZmYoZ3JvdXAucmFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgc3BhY2VJbkJldHdlZW4gPSBNYXRoLmFicyhsYXN0R3JvdXAucmFuZ2UubWluIC0gZmlyc3RHcm91cC5yYW5nZS5tYXgpO1xuXG4gIG1hcmdpbiA9IE1hdGgucm91bmQoKHNwYWNlSW5CZXR3ZWVuIC0gZ3JvdXBzU2l6ZSkgLyAoZ3JvdXBzLmxlbmd0aCAtIDEpKTtcblxuICBpZiAobWFyZ2luIDwgZ3JvdXBzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JFYWNoKGdyb3VwcywgZnVuY3Rpb24oZ3JvdXAsIGdyb3VwSWR4KSB7XG4gICAgdmFyIGRlbHRhID0ge30sXG4gICAgICAgIHByZXZHcm91cDtcblxuICAgIGlmIChncm91cCA9PT0gZmlyc3RHcm91cCB8fCBncm91cCA9PT0gbGFzdEdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldkdyb3VwID0gZ3JvdXBzW2dyb3VwSWR4IC0gMV07XG5cbiAgICBncm91cC5yYW5nZS5tYXggPSAwO1xuXG4gICAgZm9yRWFjaChncm91cC5lbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaWR4KSB7XG4gICAgICBkZWx0YVtPRkZfQVhJU1theGlzXV0gPSAwO1xuICAgICAgZGVsdGFbYXhpc10gPSAocHJldkdyb3VwLnJhbmdlLm1heCAtIGVsZW1lbnRbYXhpc10pICsgbWFyZ2luO1xuXG4gICAgICBpZiAoZ3JvdXAucmFuZ2UubWluICE9PSBlbGVtZW50W2F4aXNdKSB7XG4gICAgICAgIGRlbHRhW2F4aXNdICs9IGVsZW1lbnRbYXhpc10gLSBncm91cC5yYW5nZS5taW47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWx0YVtheGlzXSkge1xuICAgICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoWyBlbGVtZW50IF0sIGRlbHRhLCBlbGVtZW50LnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGdyb3VwLnJhbmdlLm1heCA9IE1hdGgubWF4KGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl0sIGlkeCA/IGdyb3VwLnJhbmdlLm1heCA6IDApO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbn07XG4iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgbW92aW5nIG9mIHNoYXBlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5b3V0Q29ubmVjdGlvbkhhbmRsZXIobGF5b3V0ZXIsIGNhbnZhcykge1xuICB0aGlzLl9sYXlvdXRlciA9IGxheW91dGVyO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdsYXlvdXRlcicsICdjYW52YXMnIF07XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gIHZhciBvbGRXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICBhc3NpZ24oY29udGV4dCwge1xuICAgIG9sZFdheXBvaW50czogb2xkV2F5cG9pbnRzXG4gIH0pO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gdGhpcy5fbGF5b3V0ZXIubGF5b3V0Q29ubmVjdGlvbihjb25uZWN0aW9uLCBjb250ZXh0LmhpbnRzKTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBtb3Zpbmcgb2YgY29ubmVjdGlvbnMuXG4gKlxuICogVGhlIGhhbmRsZXIgZGlmZmVycyBmcm9tIHRoZSBsYXlvdXQgY29ubmVjdGlvbiBoYW5kbGVyIGluIGEgc2Vuc2VcbiAqIHRoYXQgaXQgcHJlc2VydmVzIHRoZSBjb25uZWN0aW9uIGxheW91dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUNvbm5lY3Rpb25IYW5kbGVyKCkgeyB9XG5cblxuTW92ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gIHZhciBuZXdQYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBjb25uZWN0aW9uLnBhcmVudCxcbiAgICAgIG5ld1BhcmVudEluZGV4ID0gY29udGV4dC5uZXdQYXJlbnRJbmRleCxcbiAgICAgIG9sZFBhcmVudCA9IGNvbm5lY3Rpb24ucGFyZW50O1xuXG4gIC8vIHNhdmUgb2xkIHBhcmVudCBpbiBjb250ZXh0XG4gIGNvbnRleHQub2xkUGFyZW50ID0gb2xkUGFyZW50O1xuICBjb250ZXh0Lm9sZFBhcmVudEluZGV4ID0gY29sbGVjdGlvblJlbW92ZShvbGRQYXJlbnQuY2hpbGRyZW4sIGNvbm5lY3Rpb24pO1xuXG4gIC8vIGFkZCB0byBuZXcgcGFyZW50IGF0IHBvc2l0aW9uXG4gIGNvbGxlY3Rpb25BZGQobmV3UGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uLCBuZXdQYXJlbnRJbmRleCk7XG5cbiAgLy8gdXBkYXRlIHBhcmVudFxuICBjb25uZWN0aW9uLnBhcmVudCA9IG5ld1BhcmVudDtcblxuICAvLyB1cGRhdGUgd2F5cG9pbnQgcG9zaXRpb25zXG4gIGZvckVhY2goY29ubmVjdGlvbi53YXlwb2ludHMsIGZ1bmN0aW9uKHApIHtcbiAgICBwLnggKz0gZGVsdGEueDtcbiAgICBwLnkgKz0gZGVsdGEueTtcblxuICAgIGlmIChwLm9yaWdpbmFsKSB7XG4gICAgICBwLm9yaWdpbmFsLnggKz0gZGVsdGEueDtcbiAgICAgIHAub3JpZ2luYWwueSArPSBkZWx0YS55O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5Nb3ZlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1BhcmVudCA9IGNvbm5lY3Rpb24ucGFyZW50LFxuICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQsXG4gICAgICBvbGRQYXJlbnRJbmRleCA9IGNvbnRleHQub2xkUGFyZW50SW5kZXgsXG4gICAgICBkZWx0YSA9IGNvbnRleHQuZGVsdGE7XG5cbiAgLy8gcmVtb3ZlIGZyb20gbmV3UGFyZW50XG4gIGNvbGxlY3Rpb25SZW1vdmUobmV3UGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uKTtcblxuICAvLyByZXN0b3JlIHByZXZpb3VzIGxvY2F0aW9uIGluIG9sZCBwYXJlbnRcbiAgY29sbGVjdGlvbkFkZChvbGRQYXJlbnQuY2hpbGRyZW4sIGNvbm5lY3Rpb24sIG9sZFBhcmVudEluZGV4KTtcblxuICAvLyByZXN0b3JlIHBhcmVudFxuICBjb25uZWN0aW9uLnBhcmVudCA9IG9sZFBhcmVudDtcblxuICAvLyByZXZlcnQgdG8gb2xkIHdheXBvaW50IHBvc2l0aW9uc1xuICBmb3JFYWNoKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCBmdW5jdGlvbihwKSB7XG4gICAgcC54IC09IGRlbHRhLng7XG4gICAgcC55IC09IGRlbHRhLnk7XG5cbiAgICBpZiAocC5vcmlnaW5hbCkge1xuICAgICAgcC5vcmlnaW5hbC54IC09IGRlbHRhLng7XG4gICAgICBwLm9yaWdpbmFsLnkgLT0gZGVsdGEueTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTsiLCJpbXBvcnQgTW92ZUhlbHBlciBmcm9tICcuL2hlbHBlci9Nb3ZlSGVscGVyJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBtb3Zpbmcgb2Ygc2hhcGVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlRWxlbWVudHNIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX2hlbHBlciA9IG5ldyBNb3ZlSGVscGVyKG1vZGVsaW5nKTtcbn1cblxuTW92ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cbk1vdmVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIGNvbnRleHQuY2xvc3VyZSA9IHRoaXMuX2hlbHBlci5nZXRDbG9zdXJlKGNvbnRleHQuc2hhcGVzKTtcbn07XG5cbk1vdmVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICBwcmltYXJ5U2hhcGU7XG5cbiAgaWYgKGhpbnRzICYmIGhpbnRzLnByaW1hcnlTaGFwZSkge1xuICAgIHByaW1hcnlTaGFwZSA9IGhpbnRzLnByaW1hcnlTaGFwZTtcbiAgICBoaW50cy5vbGRQYXJlbnQgPSBwcmltYXJ5U2hhcGUucGFyZW50O1xuICB9XG5cbiAgdGhpcy5faGVscGVyLm1vdmVDbG9zdXJlKFxuICAgIGNvbnRleHQuY2xvc3VyZSxcbiAgICBjb250ZXh0LmRlbHRhLFxuICAgIGNvbnRleHQubmV3UGFyZW50LFxuICAgIGNvbnRleHQubmV3SG9zdCxcbiAgICBwcmltYXJ5U2hhcGVcbiAgKTtcbn07IiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBwaWNrXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IE1vdmVIZWxwZXIgZnJvbSAnLi9oZWxwZXIvTW92ZUhlbHBlcic7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgZ2V0TW92ZWRTb3VyY2VBbmNob3IsXG4gIGdldE1vdmVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vaGVscGVyL0FuY2hvcnNIZWxwZXInO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIG1vdmluZyBvZiBzaGFwZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVTaGFwZUhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcblxuICB0aGlzLl9oZWxwZXIgPSBuZXcgTW92ZUhlbHBlcihtb2RlbGluZyk7XG59XG5cbk1vdmVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbk1vdmVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgIG5ld1BhcmVudCA9IGNvbnRleHQubmV3UGFyZW50IHx8IHNoYXBlLnBhcmVudCxcbiAgICAgIG5ld1BhcmVudEluZGV4ID0gY29udGV4dC5uZXdQYXJlbnRJbmRleCxcbiAgICAgIG9sZFBhcmVudCA9IHNoYXBlLnBhcmVudDtcblxuICBjb250ZXh0Lm9sZEJvdW5kcyA9IHBpY2soc2hhcGUsIFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnXSk7XG5cbiAgLy8gc2F2ZSBvbGQgcGFyZW50IGluIGNvbnRleHRcbiAgY29udGV4dC5vbGRQYXJlbnQgPSBvbGRQYXJlbnQ7XG4gIGNvbnRleHQub2xkUGFyZW50SW5kZXggPSBjb2xsZWN0aW9uUmVtb3ZlKG9sZFBhcmVudC5jaGlsZHJlbiwgc2hhcGUpO1xuXG4gIC8vIGFkZCB0byBuZXcgcGFyZW50IGF0IHBvc2l0aW9uXG4gIGNvbGxlY3Rpb25BZGQobmV3UGFyZW50LmNoaWxkcmVuLCBzaGFwZSwgbmV3UGFyZW50SW5kZXgpO1xuXG4gIC8vIHVwZGF0ZSBzaGFwZSBwYXJlbnQgKyBwb3NpdGlvblxuICBhc3NpZ24oc2hhcGUsIHtcbiAgICBwYXJlbnQ6IG5ld1BhcmVudCxcbiAgICB4OiBzaGFwZS54ICsgZGVsdGEueCxcbiAgICB5OiBzaGFwZS55ICsgZGVsdGEueVxuICB9KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzO1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIGlmIChoaW50cy5sYXlvdXQgIT09IGZhbHNlKSB7XG5cbiAgICBmb3JFYWNoKHNoYXBlLmluY29taW5nLCBmdW5jdGlvbihjKSB7XG4gICAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgICAgY29ubmVjdGlvbkVuZDogZ2V0TW92ZWRUYXJnZXRBbmNob3IoYywgc2hhcGUsIGRlbHRhKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjKSB7XG4gICAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXJ0OiBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjLCBzaGFwZSwgZGVsdGEpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoaW50cy5yZWN1cnNlICE9PSBmYWxzZSkge1xuICAgIHRoaXMubW92ZUNoaWxkcmVuKGNvbnRleHQpO1xuICB9XG59O1xuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgb2xkUGFyZW50SW5kZXggPSBjb250ZXh0Lm9sZFBhcmVudEluZGV4LFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gIC8vIHJlc3RvcmUgcHJldmlvdXMgbG9jYXRpb24gaW4gb2xkIHBhcmVudFxuICBjb2xsZWN0aW9uQWRkKG9sZFBhcmVudC5jaGlsZHJlbiwgc2hhcGUsIG9sZFBhcmVudEluZGV4KTtcblxuICAvLyByZXZlcnQgdG8gb2xkIHBvc2l0aW9uIGFuZCBwYXJlbnRcbiAgYXNzaWduKHNoYXBlLCB7XG4gICAgcGFyZW50OiBvbGRQYXJlbnQsXG4gICAgeDogc2hhcGUueCAtIGRlbHRhLngsXG4gICAgeTogc2hhcGUueSAtIGRlbHRhLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuTW92ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUubW92ZUNoaWxkcmVuID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgdGhpcy5faGVscGVyLm1vdmVSZWN1cnNpdmUoc2hhcGUuY2hpbGRyZW4sIGRlbHRhLCBudWxsKTtcbn07XG5cbk1vdmVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmdldE5ld1BhcmVudCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIGNvbnRleHQubmV3UGFyZW50IHx8IGNvbnRleHQuc2hhcGUucGFyZW50O1xufTtcbiIsImltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBSZWNvbm5lY3QgY29ubmVjdGlvbiBoYW5kbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgIG5ld1RhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0LFxuICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGRvY2tpbmdPclBvaW50cyA9IGNvbnRleHQuZG9ja2luZ09yUG9pbnRzO1xuXG4gIGlmICghbmV3U291cmNlICYmICFuZXdUYXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld1NvdXJjZSBvciBuZXdUYXJnZXQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGRvY2tpbmdPclBvaW50cykpIHtcbiAgICBjb250ZXh0Lm9sZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gZG9ja2luZ09yUG9pbnRzO1xuICB9XG5cbiAgaWYgKG5ld1NvdXJjZSkge1xuICAgIGNvbnRleHQub2xkU291cmNlID0gY29ubmVjdGlvbi5zb3VyY2U7XG4gICAgY29ubmVjdGlvbi5zb3VyY2UgPSBuZXdTb3VyY2U7XG4gIH1cblxuICBpZiAobmV3VGFyZ2V0KSB7XG4gICAgY29udGV4dC5vbGRUYXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldDtcbiAgICBjb25uZWN0aW9uLnRhcmdldCA9IG5ld1RhcmdldDtcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgbmV3VGFyZ2V0ID0gY29udGV4dC5uZXdUYXJnZXQsXG4gICAgICBkb2NraW5nT3JQb2ludHMgPSBjb250ZXh0LmRvY2tpbmdPclBvaW50cyxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICB2YXIgbGF5b3V0Q29ubmVjdGlvbkhpbnRzID0ge307XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25TdGFydCkge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQ7XG4gIH1cblxuICBpZiAoaGludHMuY29ubmVjdGlvbkVuZCkge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uRW5kID0gaGludHMuY29ubmVjdGlvbkVuZDtcbiAgfVxuXG4gIGlmIChoaW50cy5sYXlvdXRDb25uZWN0aW9uID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXdTb3VyY2UgJiYgKCFuZXdUYXJnZXQgfHwgaGludHMuZG9ja2luZyA9PT0gJ3NvdXJjZScpKSB7XG4gICAgbGF5b3V0Q29ubmVjdGlvbkhpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uU3RhcnRcbiAgICAgIHx8IGdldERvY2tpbmcoaXNBcnJheShkb2NraW5nT3JQb2ludHMpID8gZG9ja2luZ09yUG9pbnRzWyAwIF0gOiBkb2NraW5nT3JQb2ludHMpO1xuICB9XG5cbiAgaWYgKG5ld1RhcmdldCAmJiAoIW5ld1NvdXJjZSB8fCBoaW50cy5kb2NraW5nID09PSAndGFyZ2V0JykpIHtcbiAgICBsYXlvdXRDb25uZWN0aW9uSGludHMuY29ubmVjdGlvbkVuZCA9IGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uRW5kXG4gICAgICB8fCBnZXREb2NraW5nKGlzQXJyYXkoZG9ja2luZ09yUG9pbnRzKSA/IGRvY2tpbmdPclBvaW50c1sgZG9ja2luZ09yUG9pbnRzLmxlbmd0aCAtIDEgXSA6IGRvY2tpbmdPclBvaW50cyk7XG4gIH1cblxuICBpZiAoaGludHMubmV3V2F5cG9pbnRzKSB7XG4gICAgbGF5b3V0Q29ubmVjdGlvbkhpbnRzLndheXBvaW50cyA9IGhpbnRzLm5ld1dheXBvaW50cztcbiAgfVxuXG4gIHRoaXMuX21vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgbGF5b3V0Q29ubmVjdGlvbkhpbnRzKTtcbn07XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBvbGRTb3VyY2UgPSBjb250ZXh0Lm9sZFNvdXJjZSxcbiAgICAgIG9sZFRhcmdldCA9IGNvbnRleHQub2xkVGFyZ2V0LFxuICAgICAgb2xkV2F5cG9pbnRzID0gY29udGV4dC5vbGRXYXlwb2ludHMsXG4gICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gIGlmIChvbGRTb3VyY2UpIHtcbiAgICBjb25uZWN0aW9uLnNvdXJjZSA9IG9sZFNvdXJjZTtcbiAgfVxuXG4gIGlmIChvbGRUYXJnZXQpIHtcbiAgICBjb25uZWN0aW9uLnRhcmdldCA9IG9sZFRhcmdldDtcbiAgfVxuXG4gIGlmIChvbGRXYXlwb2ludHMpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IG9sZFdheXBvaW50cztcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREb2NraW5nKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn0iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRSZXNpemVkU291cmNlQW5jaG9yLFxuICBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vaGVscGVyL0FuY2hvcnNIZWxwZXInO1xuXG4vKipcbiAqIFJlcGxhY2Ugc2hhcGUgYnkgYWRkaW5nIG5ldyBzaGFwZSBhbmQgcmVtb3Zpbmcgb2xkIHNoYXBlLiBJbmNvbWluZyBhbmQgb3V0Z29pbmcgY29ubmVjdGlvbnMgd2lsbFxuICogYmUga2VwdCBpZiBwb3NzaWJsZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlU2hhcGVIYW5kbGVyKG1vZGVsaW5nLCBydWxlcykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xufVxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycsICdydWxlcycgXTtcblxuXG4vKipcbiAqIEFkZCBuZXcgc2hhcGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBjb250ZXh0Lm9sZFNoYXBlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5uZXdEYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dC5uZXdEYXRhLnR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb250ZXh0Lm5ld0RhdGEueFxuICogQHBhcmFtIHtudW1iZXJ9IGNvbnRleHQubmV3RGF0YS55XG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICovXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgcnVsZXMgPSB0aGlzLl9ydWxlcztcblxuICB2YXIgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgbmV3RGF0YSA9IGNvbnRleHQubmV3RGF0YSxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgIG5ld1NoYXBlO1xuXG4gIGZ1bmN0aW9uIGNhblJlY29ubmVjdChzb3VyY2UsIHRhcmdldCwgY29ubmVjdGlvbikge1xuICAgIHJldHVybiBydWxlcy5hbGxvd2VkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIHtcbiAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuICAvLyAoMSkgYWRkIG5ldyBzaGFwZSBhdCBnaXZlbiBwb3NpdGlvblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogbmV3RGF0YS54LFxuICAgIHk6IG5ld0RhdGEueVxuICB9O1xuXG4gIHZhciBvbGRCb3VuZHMgPSB7XG4gICAgeDogb2xkU2hhcGUueCxcbiAgICB5OiBvbGRTaGFwZS55LFxuICAgIHdpZHRoOiBvbGRTaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IG9sZFNoYXBlLmhlaWdodFxuICB9O1xuXG4gIG5ld1NoYXBlID0gY29udGV4dC5uZXdTaGFwZSA9XG4gICAgY29udGV4dC5uZXdTaGFwZSB8fFxuICAgIHNlbGYuY3JlYXRlU2hhcGUobmV3RGF0YSwgcG9zaXRpb24sIG9sZFNoYXBlLnBhcmVudCwgaGludHMpO1xuXG4gIC8vICgyKSB1cGRhdGUgaG9zdFxuICBpZiAob2xkU2hhcGUuaG9zdCkge1xuICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQobmV3U2hhcGUsIG9sZFNoYXBlLmhvc3QpO1xuICB9XG5cbiAgLy8gKDMpIGFkb3B0IGFsbCBjaGlsZHJlbiBmcm9tIG9sZCBzaGFwZVxuICB2YXIgY2hpbGRyZW47XG5cbiAgaWYgKGhpbnRzLm1vdmVDaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICBjaGlsZHJlbiA9IG9sZFNoYXBlLmNoaWxkcmVuLnNsaWNlKCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoY2hpbGRyZW4sIHsgeDogMCwgeTogMCB9LCBuZXdTaGFwZSwgaGludHMpO1xuICB9XG5cbiAgLy8gKDQpIHJlY29ubmVjdCBjb25uZWN0aW9ucyB0byBuZXcgc2hhcGUgaWYgcG9zc2libGVcbiAgdmFyIGluY29taW5nID0gb2xkU2hhcGUuaW5jb21pbmcuc2xpY2UoKSxcbiAgICAgIG91dGdvaW5nID0gb2xkU2hhcGUub3V0Z29pbmcuc2xpY2UoKTtcblxuICBmb3JFYWNoKGluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICBhbGxvd2VkID0gY2FuUmVjb25uZWN0KHNvdXJjZSwgbmV3U2hhcGUsIGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgIHNlbGYucmVjb25uZWN0RW5kKFxuICAgICAgICBjb25uZWN0aW9uLCBuZXdTaGFwZSxcbiAgICAgICAgZ2V0UmVzaXplZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCBuZXdTaGFwZSwgb2xkQm91bmRzKSxcbiAgICAgICAgaGludHNcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBmb3JFYWNoKG91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBhbGxvd2VkID0gY2FuUmVjb25uZWN0KG5ld1NoYXBlLCB0YXJnZXQsIGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgIHNlbGYucmVjb25uZWN0U3RhcnQoXG4gICAgICAgIGNvbm5lY3Rpb24sIG5ld1NoYXBlLFxuICAgICAgICBnZXRSZXNpemVkU291cmNlQW5jaG9yKGNvbm5lY3Rpb24sIG5ld1NoYXBlLCBvbGRCb3VuZHMpLFxuICAgICAgICBoaW50c1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBvbGQgc2hhcGUuXG4gKi9cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlO1xuXG4gIHRoaXMuX21vZGVsaW5nLnJlbW92ZVNoYXBlKG9sZFNoYXBlKTtcbn07XG5cblxuUmVwbGFjZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHt9O1xuXG5cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHt9O1xuXG5cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIGhpbnRzKSB7XG4gIHJldHVybiB0aGlzLl9tb2RlbGluZy5jcmVhdGVTaGFwZShzaGFwZSwgcG9zaXRpb24sIHRhcmdldCwgaGludHMpO1xufTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZWNvbm5lY3RTdGFydCA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1NvdXJjZSwgZG9ja2luZ1BvaW50LCBoaW50cykge1xuICB0aGlzLl9tb2RlbGluZy5yZWNvbm5lY3RTdGFydChjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGRvY2tpbmdQb2ludCwgaGludHMpO1xufTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZWNvbm5lY3RFbmQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdUYXJnZXQsIGRvY2tpbmdQb2ludCwgaGludHMpIHtcbiAgdGhpcy5fbW9kZWxpbmcucmVjb25uZWN0RW5kKGNvbm5lY3Rpb24sIG5ld1RhcmdldCwgZG9ja2luZ1BvaW50LCBoaW50cyk7XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0UmVzaXplZFNvdXJjZUFuY2hvcixcbiAgZ2V0UmVzaXplZFRhcmdldEFuY2hvclxufSBmcm9tICcuL2hlbHBlci9BbmNob3JzSGVscGVyJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSByZXNpemluZyBvZiBzaGFwZXMuXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplU2hhcGVIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblJlc2l6ZVNoYXBlSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cbi8qKlxuICoge1xuICogICBzaGFwZTogey4uLi59XG4gKiAgIG5ld0JvdW5kczoge1xuICogICAgIHdpZHRoOiAgMjAsXG4gKiAgICAgaGVpZ2h0OiA0MCxcbiAqICAgICB4OiAgICAgICA1LFxuICogICAgIHk6ICAgICAgMTBcbiAqICAgfVxuICpcbiAqIH1cbiAqL1xuUmVzaXplU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHMsXG4gICAgICBtaW5Cb3VuZHMgPSBjb250ZXh0Lm1pbkJvdW5kcztcblxuICBpZiAobmV3Qm91bmRzLnggPT09IHVuZGVmaW5lZCB8fCBuZXdCb3VuZHMueSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBuZXdCb3VuZHMud2lkdGggPT09IHVuZGVmaW5lZCB8fCBuZXdCb3VuZHMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld0JvdW5kcyBtdXN0IGhhdmUge3gsIHksIHdpZHRoLCBoZWlnaHR9IHByb3BlcnRpZXMnKTtcbiAgfVxuXG4gIGlmIChtaW5Cb3VuZHMgJiYgKG5ld0JvdW5kcy53aWR0aCA8IG1pbkJvdW5kcy53aWR0aFxuICAgIHx8IG5ld0JvdW5kcy5oZWlnaHQgPCBtaW5Cb3VuZHMuaGVpZ2h0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignd2lkdGggYW5kIGhlaWdodCBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pbmltdW0gaGVpZ2h0IGFuZCB3aWR0aCcpO1xuICB9IGVsc2UgaWYgKCFtaW5Cb3VuZHNcbiAgICAmJiBuZXdCb3VuZHMud2lkdGggPCAxMCB8fCBuZXdCb3VuZHMuaGVpZ2h0IDwgMTApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpZHRoIGFuZCBoZWlnaHQgY2Fubm90IGJlIGxlc3MgdGhhbiAxMHB4Jyk7XG4gIH1cblxuICAvLyBzYXZlIG9sZCBiYm94IGluIGNvbnRleHRcbiAgY29udGV4dC5vbGRCb3VuZHMgPSB7XG4gICAgd2lkdGg6ICBzaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodCxcbiAgICB4OiAgICAgIHNoYXBlLngsXG4gICAgeTogICAgICBzaGFwZS55XG4gIH07XG5cbiAgLy8gdXBkYXRlIHNoYXBlXG4gIGFzc2lnbihzaGFwZSwge1xuICAgIHdpZHRoOiAgbmV3Qm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogbmV3Qm91bmRzLmhlaWdodCxcbiAgICB4OiAgICAgIG5ld0JvdW5kcy54LFxuICAgIHk6ICAgICAgbmV3Qm91bmRzLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuUmVzaXplU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZEJvdW5kcyA9IGNvbnRleHQub2xkQm91bmRzLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gIGlmIChoaW50cy5sYXlvdXQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oYykge1xuICAgIG1vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oYywge1xuICAgICAgY29ubmVjdGlvbkVuZDogZ2V0UmVzaXplZFRhcmdldEFuY2hvcihjLCBzaGFwZSwgb2xkQm91bmRzKVxuICAgIH0pO1xuICB9KTtcblxuICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjKSB7XG4gICAgbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjLCB7XG4gICAgICBjb25uZWN0aW9uU3RhcnQ6IGdldFJlc2l6ZWRTb3VyY2VBbmNob3IoYywgc2hhcGUsIG9sZEJvdW5kcylcbiAgICB9KTtcbiAgfSk7XG5cbn07XG5cblJlc2l6ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRCb3VuZHMgPSBjb250ZXh0Lm9sZEJvdW5kcztcblxuICAvLyByZXN0b3JlIHByZXZpb3VzIGJib3hcbiAgYXNzaWduKHNoYXBlLCB7XG4gICAgd2lkdGg6ICBvbGRCb3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBvbGRCb3VuZHMuaGVpZ2h0LFxuICAgIHg6ICAgICAgb2xkQm91bmRzLngsXG4gICAgeTogICAgICBvbGRCb3VuZHMueVxuICB9KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRXYXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zLFxuICByZXNpemVCb3VuZHNcbn0gZnJvbSAnLi4vLi4vc3BhY2UtdG9vbC9TcGFjZVV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNb3ZlZFNvdXJjZUFuY2hvcixcbiAgZ2V0TW92ZWRUYXJnZXRBbmNob3IsXG4gIGdldFJlc2l6ZWRTb3VyY2VBbmNob3IsXG4gIGdldFJlc2l6ZWRUYXJnZXRBbmNob3Jcbn0gZnJvbSAnLi9oZWxwZXIvQW5jaG9yc0hlbHBlcic7XG5cblxuLyoqXG4gKiBBZGQgb3IgcmVtb3ZlIHNwYWNlIGJ5IG1vdmluZyBhbmQgcmVzaXppbmcgc2hhcGVzIGFuZCB1cGRhdGluZyBjb25uZWN0aW9uIHdheXBvaW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5TcGFjZVRvb2xIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgbW92aW5nU2hhcGVzID0gY29udGV4dC5tb3ZpbmdTaGFwZXMsXG4gICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXMsXG4gICAgICBzdGFydCA9IGNvbnRleHQuc3RhcnQsXG4gICAgICBvbGRCb3VuZHMgPSB7fTtcblxuICAvLyAoMSkgbW92ZSBzaGFwZXNcbiAgdGhpcy5tb3ZlU2hhcGVzKG1vdmluZ1NoYXBlcywgZGVsdGEpO1xuXG4gIC8vICgyYSkgc2F2ZSBvbGQgYm91bmRzIG9mIHJlc2l6ZWQgc2hhcGVzXG4gIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgb2xkQm91bmRzW3NoYXBlLmlkXSA9IGdldEJvdW5kcyhzaGFwZSk7XG4gIH0pO1xuXG4gIC8vICgyYikgcmVzaXplIHNoYXBlc1xuICB0aGlzLnJlc2l6ZVNoYXBlcyhyZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbik7XG5cbiAgLy8gKDMpIHVwZGF0ZSBjb25uZWN0aW9uIHdheXBvaW50c1xuICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMoXG4gICAgZ2V0V2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucyhtb3ZpbmdTaGFwZXMsIHJlc2l6aW5nU2hhcGVzKSxcbiAgICBkZWx0YSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3RhcnQsXG4gICAgbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzLFxuICAgIG9sZEJvdW5kc1xuICApO1xufTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKCkge307XG5TcGFjZVRvb2xIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbigpIHt9O1xuXG5TcGFjZVRvb2xIYW5kbGVyLnByb3RvdHlwZS5tb3ZlU2hhcGVzID0gZnVuY3Rpb24oc2hhcGVzLCBkZWx0YSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBzZWxmLl9tb2RlbGluZy5tb3ZlU2hhcGUoZWxlbWVudCwgZGVsdGEsIG51bGwsIHtcbiAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgbGF5b3V0OiBmYWxzZSxcbiAgICAgIHJlY3Vyc2U6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUucmVzaXplU2hhcGVzID0gZnVuY3Rpb24oc2hhcGVzLCBkZWx0YSwgZGlyZWN0aW9uKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICB2YXIgbmV3Qm91bmRzID0gcmVzaXplQm91bmRzKHNoYXBlLCBkaXJlY3Rpb24sIGRlbHRhKTtcblxuICAgIHNlbGYuX21vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMsIG51bGwsIHtcbiAgICAgIGF0dGFjaFN1cHBvcnQ6IGZhbHNlLFxuICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICBsYXlvdXQ6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgY29ubmVjdGlvbnMgd2F5cG9pbnRzIGFjY29yZGluZyB0byB0aGUgcnVsZXM6XG4gKiAgIDEuIEJvdGggc291cmNlIGFuZCB0YXJnZXQgYXJlIG1vdmVkL3Jlc2l6ZWQgPT4gbW92ZSB3YXlwb2ludHMgYnkgdGhlIGRlbHRhXG4gKiAgIDIuIE9ubHkgb25lIG9mIHNvdXJjZSBhbmQgdGFyZ2V0IGlzIG1vdmVkL3Jlc2l6ZWQgPT4gcmUtbGF5b3V0IGNvbm5lY3Rpb24gd2l0aCBtb3ZlZCBzdGFydC9lbmRcbiAqL1xuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyA9IGZ1bmN0aW9uKFxuICAgIGNvbm5lY3Rpb25zLFxuICAgIGRlbHRhLFxuICAgIGRpcmVjdGlvbixcbiAgICBzdGFydCxcbiAgICBtb3ZpbmdTaGFwZXMsXG4gICAgcmVzaXppbmdTaGFwZXMsXG4gICAgb2xkQm91bmRzXG4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYWZmZWN0ZWRTaGFwZXMgPSBtb3ZpbmdTaGFwZXMuY29uY2F0KHJlc2l6aW5nU2hhcGVzKTtcblxuICBmb3JFYWNoKGNvbm5lY3Rpb25zLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29weVdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgICAgYXhpcyA9IGdldEF4aXNGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbiksXG4gICAgICAgIGxheW91dEhpbnRzID0ge1xuICAgICAgICAgIGxhYmVsQmVoYXZpb3I6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICBpZiAoaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHNvdXJjZSkgJiYgaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHRhcmdldCkpIHtcblxuICAgICAgLy8gbW92ZSB3YXlwb2ludHNcbiAgICAgIHdheXBvaW50cyA9IG1hcCh3YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XG4gICAgICAgIGlmIChzaG91bGRNb3ZlV2F5cG9pbnQod2F5cG9pbnQsIHN0YXJ0LCBkaXJlY3Rpb24pKSB7XG5cbiAgICAgICAgICAvLyBtb3ZlIHdheXBvaW50XG4gICAgICAgICAgd2F5cG9pbnRbIGF4aXMgXSA9IHdheXBvaW50WyBheGlzIF0gKyBkZWx0YVsgYXhpcyBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdheXBvaW50Lm9yaWdpbmFsICYmIHNob3VsZE1vdmVXYXlwb2ludCh3YXlwb2ludC5vcmlnaW5hbCwgc3RhcnQsIGRpcmVjdGlvbikpIHtcblxuICAgICAgICAgIC8vIG1vdmUgd2F5cG9pbnQgb3JpZ2luYWxcbiAgICAgICAgICB3YXlwb2ludC5vcmlnaW5hbFsgYXhpcyBdID0gd2F5cG9pbnQub3JpZ2luYWxbIGF4aXMgXSArIGRlbHRhWyBheGlzIF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2F5cG9pbnQ7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fbW9kZWxpbmcudXBkYXRlV2F5cG9pbnRzKGNvbm5lY3Rpb24sIHdheXBvaW50cywge1xuICAgICAgICBsYWJlbEJlaGF2aW9yOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlcyhhZmZlY3RlZFNoYXBlcywgc291cmNlKSB8fCBpbmNsdWRlcyhhZmZlY3RlZFNoYXBlcywgdGFyZ2V0KSkge1xuXG4gICAgICAvLyByZS1sYXlvdXQgY29ubmVjdGlvbiB3aXRoIG1vdmVkIHN0YXJ0L2VuZFxuICAgICAgaWYgKGluY2x1ZGVzKG1vdmluZ1NoYXBlcywgc291cmNlKSkge1xuICAgICAgICBsYXlvdXRIaW50cy5jb25uZWN0aW9uU3RhcnQgPSBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjb25uZWN0aW9uLCBzb3VyY2UsIGRlbHRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMobW92aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG4gICAgICAgIGxheW91dEhpbnRzLmNvbm5lY3Rpb25FbmQgPSBnZXRNb3ZlZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCB0YXJnZXQsIGRlbHRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMocmVzaXppbmdTaGFwZXMsIHNvdXJjZSkpIHtcbiAgICAgICAgbGF5b3V0SGludHMuY29ubmVjdGlvblN0YXJ0ID0gZ2V0UmVzaXplZFNvdXJjZUFuY2hvcihcbiAgICAgICAgICBjb25uZWN0aW9uLCBzb3VyY2UsIG9sZEJvdW5kc1tzb3VyY2UuaWRdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG4gICAgICAgIGxheW91dEhpbnRzLmNvbm5lY3Rpb25FbmQgPSBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yKFxuICAgICAgICAgIGNvbm5lY3Rpb24sIHRhcmdldCwgb2xkQm91bmRzW3RhcmdldC5pZF1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2VsZi5fbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjb25uZWN0aW9uLCBsYXlvdXRIaW50cyk7XG4gICAgfVxuICB9KTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNvcHlXYXlwb2ludCh3YXlwb2ludCkge1xuICByZXR1cm4gYXNzaWduKHt9LCB3YXlwb2ludCk7XG59XG5cbmZ1bmN0aW9uIGNvcHlXYXlwb2ludHMoY29ubmVjdGlvbikge1xuICByZXR1cm4gbWFwKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuXG4gICAgd2F5cG9pbnQgPSBjb3B5V2F5cG9pbnQod2F5cG9pbnQpO1xuXG4gICAgaWYgKHdheXBvaW50Lm9yaWdpbmFsKSB7XG4gICAgICB3YXlwb2ludC5vcmlnaW5hbCA9IGNvcHlXYXlwb2ludCh3YXlwb2ludC5vcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdheXBvaW50O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QXhpc0Zyb21EaXJlY3Rpb24oZGlyZWN0aW9uKSB7XG4gIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gIGNhc2UgJ24nOlxuICAgIHJldHVybiAneSc7XG4gIGNhc2UgJ3cnOlxuICAgIHJldHVybiAneCc7XG4gIGNhc2UgJ3MnOlxuICAgIHJldHVybiAneSc7XG4gIGNhc2UgJ2UnOlxuICAgIHJldHVybiAneCc7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkTW92ZVdheXBvaW50KHdheXBvaW50LCBzdGFydCwgZGlyZWN0aW9uKSB7XG4gIHZhciByZWxldmFudEF4aXMgPSBnZXRBeGlzRnJvbURpcmVjdGlvbihkaXJlY3Rpb24pO1xuXG4gIGlmICgvZXxzLy50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRbIHJlbGV2YW50QXhpcyBdID4gc3RhcnQ7XG4gIH0gZWxzZSBpZiAoL258dy8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgcmV0dXJuIHdheXBvaW50WyByZWxldmFudEF4aXMgXSA8IHN0YXJ0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRzKHNoYXBlKSB7XG4gIHJldHVybiB7XG4gICAgeDogc2hhcGUueCxcbiAgICB5OiBzaGFwZS55LFxuICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0LFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aFxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCB0b2dnbGVzIHRoZSBjb2xsYXBzZWQgc3RhdGUgb2YgYW4gZWxlbWVudFxuICogYW5kIHRoZSB2aXNpYmlsaXR5IG9mIGFsbCBpdHMgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cblRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBjaGlsZHJlbiA9IHNoYXBlLmNoaWxkcmVuO1xuXG4gIC8vIHJlY3Vyc2l2ZWx5IHJlbWVtYmVyIHByZXZpb3VzIHZpc2liaWxpdHkgb2YgY2hpbGRyZW5cbiAgY29udGV4dC5vbGRDaGlsZHJlblZpc2liaWxpdHkgPSBnZXRFbGVtZW50c1Zpc2liaWxpdHlSZWN1cnNpdmUoY2hpbGRyZW4pO1xuXG4gIC8vIHRvZ2dsZSBzdGF0ZVxuICBzaGFwZS5jb2xsYXBzZWQgPSAhc2hhcGUuY29sbGFwc2VkO1xuXG4gIC8vIHJlY3Vyc2l2ZWx5IGhpZGUvc2hvdyBjaGlsZHJlblxuICB2YXIgcmVzdWx0ID0gc2V0SGlkZGVuUmVjdXJzaXZlKGNoaWxkcmVuLCBzaGFwZS5jb2xsYXBzZWQpO1xuXG4gIHJldHVybiBbc2hhcGVdLmNvbmNhdChyZXN1bHQpO1xufTtcblxuXG5Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRDaGlsZHJlblZpc2liaWxpdHkgPSBjb250ZXh0Lm9sZENoaWxkcmVuVmlzaWJpbGl0eTtcblxuICB2YXIgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbjtcblxuICAvLyByZWN1cnNpdmVseSBzZXQgb2xkIHZpc2FiaWxpdHkgb2YgY2hpbGRyZW5cbiAgdmFyIHJlc3VsdCA9IHJlc3RvcmVWaXNpYmlsaXR5UmVjdXJzaXZlKGNoaWxkcmVuLCBvbGRDaGlsZHJlblZpc2liaWxpdHkpO1xuXG4gIC8vIHJldG9nZ2xlIHN0YXRlXG4gIHNoYXBlLmNvbGxhcHNlZCA9ICFzaGFwZS5jb2xsYXBzZWQ7XG5cbiAgcmV0dXJuIFtzaGFwZV0uY29uY2F0KHJlc3VsdCk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiBhIG1hcCB7IGVsZW1lbnRJZCAtPiBoaWRkZW5TdGF0ZX0uXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudHNWaXNpYmlsaXR5UmVjdXJzaXZlKGVsZW1lbnRzKSB7XG5cbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXN1bHRbZWxlbWVudC5pZF0gPSBlbGVtZW50LmhpZGRlbjtcblxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICByZXN1bHQgPSBhc3NpZ24oe30sIHJlc3VsdCwgZ2V0RWxlbWVudHNWaXNpYmlsaXR5UmVjdXJzaXZlKGVsZW1lbnQuY2hpbGRyZW4pKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gc2V0SGlkZGVuUmVjdXJzaXZlKGVsZW1lbnRzLCBuZXdIaWRkZW4pIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgZWxlbWVudC5oaWRkZW4gPSBuZXdIaWRkZW47XG5cbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoc2V0SGlkZGVuUmVjdXJzaXZlKGVsZW1lbnQuY2hpbGRyZW4sIGVsZW1lbnQuY29sbGFwc2VkIHx8IG5ld0hpZGRlbikpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVzdG9yZVZpc2liaWxpdHlSZWN1cnNpdmUoZWxlbWVudHMsIGxhc3RTdGF0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50LmhpZGRlbiA9IGxhc3RTdGF0ZVtlbGVtZW50LmlkXTtcblxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyZXN0b3JlVmlzaWJpbGl0eVJlY3Vyc2l2ZShlbGVtZW50LmNoaWxkcmVuLCBsYXN0U3RhdGUpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIGF0dGFjaGluZy9kZXRhY2hpbmcgb2Ygc2hhcGVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVBdHRhY2htZW50SGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5VcGRhdGVBdHRhY2htZW50SGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblxuVXBkYXRlQXR0YWNobWVudEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0LFxuICAgICAgb2xkSG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgLy8gKDApIGRldGFjaCBmcm9tIG9sZCBob3N0XG4gIGNvbnRleHQub2xkSG9zdCA9IG9sZEhvc3Q7XG4gIGNvbnRleHQuYXR0YWNoZXJJZHggPSByZW1vdmVBdHRhY2hlcihvbGRIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDEpIGF0dGFjaCB0byBuZXcgaG9zdFxuICBhZGRBdHRhY2hlcihuZXdIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDIpIHVwZGF0ZSBob3N0XG4gIHNoYXBlLmhvc3QgPSBuZXdIb3N0O1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cblVwZGF0ZUF0dGFjaG1lbnRIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0LFxuICAgICAgb2xkSG9zdCA9IGNvbnRleHQub2xkSG9zdCxcbiAgICAgIGF0dGFjaGVySWR4ID0gY29udGV4dC5hdHRhY2hlcklkeDtcblxuICAvLyAoMikgdXBkYXRlIGhvc3RcbiAgc2hhcGUuaG9zdCA9IG9sZEhvc3Q7XG5cbiAgLy8gKDEpIGF0dGFjaCB0byBuZXcgaG9zdFxuICByZW1vdmVBdHRhY2hlcihuZXdIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDApIGRldGFjaCBmcm9tIG9sZCBob3N0XG4gIGFkZEF0dGFjaGVyKG9sZEhvc3QsIHNoYXBlLCBhdHRhY2hlcklkeCk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuXG5mdW5jdGlvbiByZW1vdmVBdHRhY2hlcihob3N0LCBhdHRhY2hlcikge1xuXG4gIC8vIHJlbW92ZSBhdHRhY2hlciBmcm9tIGhvc3RcbiAgcmV0dXJuIGNvbGxlY3Rpb25SZW1vdmUoaG9zdCAmJiBob3N0LmF0dGFjaGVycywgYXR0YWNoZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRhY2hlcihob3N0LCBhdHRhY2hlciwgaWR4KSB7XG5cbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGF0dGFjaGVycyA9IGhvc3QuYXR0YWNoZXJzO1xuXG4gIGlmICghYXR0YWNoZXJzKSB7XG4gICAgaG9zdC5hdHRhY2hlcnMgPSBhdHRhY2hlcnMgPSBbXTtcbiAgfVxuXG4gIGNvbGxlY3Rpb25BZGQoYXR0YWNoZXJzLCBhdHRhY2hlciwgaWR4KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZVdheXBvaW50c0hhbmRsZXIoKSB7IH1cblxuVXBkYXRlV2F5cG9pbnRzSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1dheXBvaW50cyA9IGNvbnRleHQubmV3V2F5cG9pbnRzO1xuXG4gIGNvbnRleHQub2xkV2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5VcGRhdGVXYXlwb2ludHNIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBvbGRXYXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuICBjb25uZWN0aW9uLndheXBvaW50cyA9IG9sZFdheXBvaW50cztcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07IiwiaW1wb3J0IHtcbiAgZ2V0TmV3QXR0YWNoUG9pbnRcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbC9BdHRhY2hVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnLi4vLi4vLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIG1hcFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2l6ZWRTb3VyY2VBbmNob3IoY29ubmVjdGlvbiwgc2hhcGUsIG9sZEJvdW5kcykge1xuXG4gIHZhciB3YXlwb2ludHMgPSBzYWZlR2V0V2F5cG9pbnRzKGNvbm5lY3Rpb24pLFxuICAgICAgd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzID0gZ2V0V2F5cG9pbnRzSW5zaWRlQm91bmRzKHdheXBvaW50cywgc2hhcGUpLFxuICAgICAgb2xkQW5jaG9yID0gd2F5cG9pbnRzWzBdO1xuXG4gIC8vIG5ldyBhbmNob3IgaXMgdGhlIGxhc3Qgd2F5cG9pbnQgZW5jbG9zZWQgYmUgcmVzaXplZCBzb3VyY2VcbiAgaWYgKHdheXBvaW50c0luc2lkZU5ld0JvdW5kcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzWyB3YXlwb2ludHNJbnNpZGVOZXdCb3VuZHMubGVuZ3RoIC0gMSBdO1xuICB9XG5cbiAgcmV0dXJuIGdldE5ld0F0dGFjaFBvaW50KG9sZEFuY2hvci5vcmlnaW5hbCB8fCBvbGRBbmNob3IsIG9sZEJvdW5kcywgc2hhcGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yKGNvbm5lY3Rpb24sIHNoYXBlLCBvbGRCb3VuZHMpIHtcblxuICB2YXIgd2F5cG9pbnRzID0gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgIHdheXBvaW50c0luc2lkZU5ld0JvdW5kcyA9IGdldFdheXBvaW50c0luc2lkZUJvdW5kcyh3YXlwb2ludHMsIHNoYXBlKSxcbiAgICAgIG9sZEFuY2hvciA9IHdheXBvaW50c1t3YXlwb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgLy8gbmV3IGFuY2hvciBpcyB0aGUgZmlyc3Qgd2F5cG9pbnQgZW5jbG9zZWQgYmUgcmVzaXplZCB0YXJnZXRcbiAgaWYgKHdheXBvaW50c0luc2lkZU5ld0JvdW5kcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzWyAwIF07XG4gIH1cblxuICByZXR1cm4gZ2V0TmV3QXR0YWNoUG9pbnQob2xkQW5jaG9yLm9yaWdpbmFsIHx8IG9sZEFuY2hvciwgb2xkQm91bmRzLCBzaGFwZSk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vdmVkU291cmNlQW5jaG9yKGNvbm5lY3Rpb24sIHNvdXJjZSwgbW92ZURlbHRhKSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IHNhZmVHZXRXYXlwb2ludHMoY29ubmVjdGlvbiksXG4gICAgICBvbGRCb3VuZHMgPSBzdWJ0cmFjdChzb3VyY2UsIG1vdmVEZWx0YSksXG4gICAgICBvbGRBbmNob3IgPSB3YXlwb2ludHNbIDAgXTtcblxuICByZXR1cm4gZ2V0TmV3QXR0YWNoUG9pbnQob2xkQW5jaG9yLm9yaWdpbmFsIHx8IG9sZEFuY2hvciwgb2xkQm91bmRzLCBzb3VyY2UpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb3ZlZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCB0YXJnZXQsIG1vdmVEZWx0YSkge1xuXG4gIHZhciB3YXlwb2ludHMgPSBzYWZlR2V0V2F5cG9pbnRzKGNvbm5lY3Rpb24pLFxuICAgICAgb2xkQm91bmRzID0gc3VidHJhY3QodGFyZ2V0LCBtb3ZlRGVsdGEpLFxuICAgICAgb2xkQW5jaG9yID0gd2F5cG9pbnRzWyB3YXlwb2ludHMubGVuZ3RoIC0gMSBdO1xuXG4gIHJldHVybiBnZXROZXdBdHRhY2hQb2ludChvbGRBbmNob3Iub3JpZ2luYWwgfHwgb2xkQW5jaG9yLCBvbGRCb3VuZHMsIHRhcmdldCk7XG59XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHN1YnRyYWN0KGJvdW5kcywgZGVsdGEpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBib3VuZHMueCAtIGRlbHRhLngsXG4gICAgeTogYm91bmRzLnkgLSBkZWx0YS55LFxuICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0XG4gIH07XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gd2F5cG9pbnRzIG9mIGdpdmVuIGNvbm5lY3Rpb247IHRocm93IGlmIG5vbiBleGlzdHMgKHNob3VsZCBub3QgaGFwcGVuISEpLlxuICpcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn1cbiAqL1xuZnVuY3Rpb24gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGlmICghd2F5cG9pbnRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29ubmVjdGlvbiMnICsgY29ubmVjdGlvbi5pZCArICc6IG5vIHdheXBvaW50cycpO1xuICB9XG5cbiAgcmV0dXJuIHdheXBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0V2F5cG9pbnRzSW5zaWRlQm91bmRzKHdheXBvaW50cywgYm91bmRzKSB7XG4gIHZhciBvcmlnaW5hbFdheXBvaW50cyA9IG1hcCh3YXlwb2ludHMsIGdldE9yaWdpbmFsKTtcblxuICByZXR1cm4gZmlsdGVyKG9yaWdpbmFsV2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuICAgIHJldHVybiBpc0luc2lkZUJvdW5kcyh3YXlwb2ludCwgYm91bmRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHBvaW50IGlzIGluc2lkZSBib3VuZHMsIGluY2wuIGVkZ2VzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0ge0JvdW5kc30gYm91bmRzXG4gKi9cbmZ1bmN0aW9uIGlzSW5zaWRlQm91bmRzKHBvaW50LCBib3VuZHMpIHtcbiAgcmV0dXJuIGdldE9yaWVudGF0aW9uKGJvdW5kcywgcG9pbnQsIDEpID09PSAnaW50ZXJzZWN0Jztcbn1cblxuZnVuY3Rpb24gZ2V0T3JpZ2luYWwocG9pbnQpIHtcbiAgcmV0dXJuIHBvaW50Lm9yaWdpbmFsIHx8IHBvaW50O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2xvc3VyZVxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL0VsZW1lbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlQ2xvc3VyZSgpIHtcblxuICB0aGlzLmFsbFNoYXBlcyA9IHt9O1xuICB0aGlzLmFsbENvbm5lY3Rpb25zID0ge307XG5cbiAgdGhpcy5lbmNsb3NlZEVsZW1lbnRzID0ge307XG4gIHRoaXMuZW5jbG9zZWRDb25uZWN0aW9ucyA9IHt9O1xuXG4gIHRoaXMudG9wTGV2ZWwgPSB7fTtcbn1cblxuXG5Nb3ZlQ2xvc3VyZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZWxlbWVudCwgaXNUb3BMZXZlbCkge1xuICByZXR1cm4gdGhpcy5hZGRBbGwoWyBlbGVtZW50IF0sIGlzVG9wTGV2ZWwpO1xufTtcblxuXG5Nb3ZlQ2xvc3VyZS5wcm90b3R5cGUuYWRkQWxsID0gZnVuY3Rpb24oZWxlbWVudHMsIGlzVG9wTGV2ZWwpIHtcblxuICB2YXIgbmV3Q2xvc3VyZSA9IGdldENsb3N1cmUoZWxlbWVudHMsICEhaXNUb3BMZXZlbCwgdGhpcyk7XG5cbiAgYXNzaWduKHRoaXMsIG5ld0Nsb3N1cmUpO1xuXG4gIHJldHVybiB0aGlzO1xufTsiLCJpbXBvcnQge1xuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0TW92ZWRTb3VyY2VBbmNob3IsXG4gIGdldE1vdmVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vQW5jaG9yc0hlbHBlcic7XG5cbmltcG9ydCBNb3ZlQ2xvc3VyZSBmcm9tICcuL01vdmVDbG9zdXJlJztcblxuXG4vKipcbiAqIEEgaGVscGVyIHRoYXQgaXMgYWJsZSB0byBjYXJyeSBvdXQgc2VyaWFsaXplZCBtb3ZlXG4gKiBvcGVyYXRpb25zIG9uIG11bHRpcGxlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVIZWxwZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuLyoqXG4gKiBNb3ZlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMgYW5kIGFsbCBjaGlsZHJlbiBieSB0aGUgZ2l2ZW4gZGVsdGEuXG4gKlxuICogVGhpcyBtb3ZlcyBhbGwgZW5jbG9zZWQgY29ubmVjdGlvbnMsIHRvbyBhbmQgbGF5b3V0cyBhbGwgYWZmZWN0ZWRcbiAqIGV4dGVybmFsIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSAge1BvaW50fSBkZWx0YVxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IG5ld1BhcmVudCBhcHBsaWVkIHRvIHRoZSBmaXJzdCBsZXZlbCBvZiBzaGFwZXNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGxpc3Qgb2YgdG91Y2hlZCBlbGVtZW50c1xuICovXG5Nb3ZlSGVscGVyLnByb3RvdHlwZS5tb3ZlUmVjdXJzaXZlID0gZnVuY3Rpb24oZWxlbWVudHMsIGRlbHRhLCBuZXdQYXJlbnQpIHtcbiAgaWYgKCFlbGVtZW50cykge1xuICAgIHJldHVybiBbXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQ2xvc3VyZSh0aGlzLmdldENsb3N1cmUoZWxlbWVudHMpLCBkZWx0YSwgbmV3UGFyZW50KTtcbiAgfVxufTtcblxuLyoqXG4gKiBNb3ZlIHRoZSBnaXZlbiBjbG9zdXJlIG9mIGVsbWVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY2xvc3VyZVxuICogQHBhcmFtIHtQb2ludH0gZGVsdGFcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtuZXdQYXJlbnRdXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbbmV3SG9zdF1cbiAqL1xuTW92ZUhlbHBlci5wcm90b3R5cGUubW92ZUNsb3N1cmUgPSBmdW5jdGlvbihjbG9zdXJlLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdIb3N0LCBwcmltYXJ5U2hhcGUpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIGFsbFNoYXBlcyA9IGNsb3N1cmUuYWxsU2hhcGVzLFxuICAgICAgYWxsQ29ubmVjdGlvbnMgPSBjbG9zdXJlLmFsbENvbm5lY3Rpb25zLFxuICAgICAgZW5jbG9zZWRDb25uZWN0aW9ucyA9IGNsb3N1cmUuZW5jbG9zZWRDb25uZWN0aW9ucyxcbiAgICAgIHRvcExldmVsID0gY2xvc3VyZS50b3BMZXZlbCxcbiAgICAgIGtlZXBQYXJlbnQgPSBmYWxzZTtcblxuICBpZiAocHJpbWFyeVNoYXBlICYmIHByaW1hcnlTaGFwZS5wYXJlbnQgPT09IG5ld1BhcmVudCkge1xuICAgIGtlZXBQYXJlbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gbW92ZSBhbGwgc2hhcGVzXG4gIGZvckVhY2goYWxsU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuXG4gICAgLy8gbW92ZSB0aGUgZWxlbWVudCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGRlbHRhXG4gICAgbW9kZWxpbmcubW92ZVNoYXBlKHNoYXBlLCBkZWx0YSwgdG9wTGV2ZWxbc2hhcGUuaWRdICYmICFrZWVwUGFyZW50ICYmIG5ld1BhcmVudCwge1xuICAgICAgcmVjdXJzZTogZmFsc2UsXG4gICAgICBsYXlvdXQ6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIG1vdmUgYWxsIGNoaWxkIGNvbm5lY3Rpb25zIC8gbGF5b3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zXG4gIGZvckVhY2goYWxsQ29ubmVjdGlvbnMsIGZ1bmN0aW9uKGMpIHtcblxuICAgIHZhciBzb3VyY2VNb3ZlZCA9ICEhYWxsU2hhcGVzW2Muc291cmNlLmlkXSxcbiAgICAgICAgdGFyZ2V0TW92ZWQgPSAhIWFsbFNoYXBlc1tjLnRhcmdldC5pZF07XG5cbiAgICBpZiAoZW5jbG9zZWRDb25uZWN0aW9uc1tjLmlkXSAmJiBzb3VyY2VNb3ZlZCAmJiB0YXJnZXRNb3ZlZCkge1xuICAgICAgbW9kZWxpbmcubW92ZUNvbm5lY3Rpb24oYywgZGVsdGEsIHRvcExldmVsW2MuaWRdICYmICFrZWVwUGFyZW50ICYmIG5ld1BhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oYywge1xuICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IHNvdXJjZU1vdmVkICYmIGdldE1vdmVkU291cmNlQW5jaG9yKGMsIGMuc291cmNlLCBkZWx0YSksXG4gICAgICAgIGNvbm5lY3Rpb25FbmQ6IHRhcmdldE1vdmVkICYmIGdldE1vdmVkVGFyZ2V0QW5jaG9yKGMsIGMudGFyZ2V0LCBkZWx0YSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNsb3N1cmUgZm9yIHRoZSBzZWxlY3RlZCBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEByZXR1cm4ge01vdmVDbG9zdXJlfSBjbG9zdXJlXG4gKi9cbk1vdmVIZWxwZXIucHJvdG90eXBlLmdldENsb3N1cmUgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICByZXR1cm4gbmV3IE1vdmVDbG9zdXJlKCkuYWRkQWxsKGVsZW1lbnRzLCB0cnVlKTtcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW91c2UoZXZlbnRCdXMpIHtcclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHRoaXMuX2xhc3RNb3ZlRXZlbnQgPSBudWxsO1xyXG5cclxuICBmdW5jdGlvbiBzZXRMYXN0TW92ZUV2ZW50KG1vdXNlbW92ZUV2ZW50KSB7XHJcbiAgICBzZWxmLl9sYXN0TW92ZUV2ZW50ID0gbW91c2Vtb3ZlRXZlbnQ7XHJcbiAgfVxyXG5cclxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc3ZnID0gc2VsZi5fc3ZnID0gY29udGV4dC5zdmc7XHJcblxyXG4gICAgc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHNldExhc3RNb3ZlRXZlbnQpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbignY2FudmFzLmRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgIHNlbGYuX2xhc3RNb3VzZUV2ZW50ID0gbnVsbDtcclxuXHJcbiAgICBzZWxmLl9zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc2V0TGFzdE1vdmVFdmVudCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbk1vdXNlLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcclxuXHJcbk1vdXNlLnByb3RvdHlwZS5nZXRMYXN0TW92ZUV2ZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIHRoaXMuX2xhc3RNb3ZlRXZlbnQgfHwgY3JlYXRlTW92ZUV2ZW50KDAsIDApO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW92ZUV2ZW50KHgsIHkpIHtcclxuICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xyXG5cclxuICB2YXIgc2NyZWVuWCA9IHgsXHJcbiAgICAgIHNjcmVlblkgPSB5LFxyXG4gICAgICBjbGllbnRYID0geCxcclxuICAgICAgY2xpZW50WSA9IHk7XHJcblxyXG4gIGlmIChldmVudC5pbml0TW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoXHJcbiAgICAgICdtb3VzZW1vdmUnLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB3aW5kb3csXHJcbiAgICAgIDAsXHJcbiAgICAgIHNjcmVlblgsXHJcbiAgICAgIHNjcmVlblksXHJcbiAgICAgIGNsaWVudFgsXHJcbiAgICAgIGNsaWVudFksXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICAwLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV2ZW50O1xyXG59IiwiaW1wb3J0IE1vdXNlIGZyb20gJy4vTW91c2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdtb3VzZScgXSxcbiAgbW91c2U6IFsgJ3R5cGUnLCBNb3VzZSBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaWx0ZXIsXG4gIGdyb3VwQnksXG4gIGlzT2JqZWN0XG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMCxcbiAgICBNRURJVU1fUFJJT1JJVFkgPSAxMjUwLFxuICAgIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xuXG5pbXBvcnQgeyBnZXRPcmlnaW5hbCBhcyBnZXRPcmlnaW5hbEV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbmZ1bmN0aW9uIG1pZChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC54ICsgcm91bmQoZWxlbWVudC53aWR0aCAvIDIpLFxuICAgIHk6IGVsZW1lbnQueSArIHJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMilcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IG1ha2VzIHNoYXBlcyBkcmFnZ2FibGUgLyBkcm9wcGFibGUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICogQHBhcmFtIHtSdWxlc30gcnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUV2ZW50cyhcbiAgICBldmVudEJ1cywgZHJhZ2dpbmcsIG1vZGVsaW5nLFxuICAgIHNlbGVjdGlvbiwgcnVsZXMpIHtcblxuICAvLyBydWxlc1xuXG4gIGZ1bmN0aW9uIGNhbk1vdmUoc2hhcGVzLCBkZWx0YSwgcG9zaXRpb24sIHRhcmdldCkge1xuXG4gICAgcmV0dXJuIHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLm1vdmUnLCB7XG4gICAgICBzaGFwZXM6IHNoYXBlcyxcbiAgICAgIGRlbHRhOiBkZWx0YSxcbiAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIG1vdmUgZXZlbnRzXG5cbiAgLy8gYXNzaWduIGEgaGlnaCBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXIgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50XG4gIC8vIG90aGVycyBtYXkgaG9vayB1cCBsYXRlciwgZS5nLiBhdCBkZWZhdWx0IHByaW9yaXR5IGFuZCBtb2RpZnlcbiAgLy8gdGhlIG1vdmUgZW52aXJvbm1lbnQuXG4gIC8vXG4gIC8vIFRoaXMgc2V0cyB1cCB0aGUgY29udGV4dCB3aXRoXG4gIC8vXG4gIC8vICogc2hhcGU6IHRoZSBwcmltYXJ5IHNoYXBlIGJlaW5nIG1vdmVkXG4gIC8vICogc2hhcGVzOiBhIGxpc3Qgb2Ygc2hhcGVzIHRvIGJlIG1vdmVkXG4gIC8vICogdmFsaWRhdGVkU2hhcGVzOiBhIGxpc3Qgb2Ygc2hhcGVzIHRoYXQgYXJlIGJlaW5nIGNoZWNrZWRcbiAgLy8gICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIHJ1bGVzIGJlZm9yZSBhbmQgZHVyaW5nIG1vdmVcbiAgLy9cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGV2ZW50LnNoYXBlLFxuICAgICAgICBzaGFwZXMgPSBzZWxlY3Rpb24uZ2V0KCkuc2xpY2UoKTtcblxuICAgIC8vIG1vdmUgb25seSBzaW5nbGUgc2hhcGUgaWYgdGhlIGRyYWdnZWQgZWxlbWVudFxuICAgIC8vIGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgIGlmIChzaGFwZXMuaW5kZXhPZihzaGFwZSkgPT09IC0xKSB7XG4gICAgICBzaGFwZXMgPSBbIHNoYXBlIF07XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHdlIHJlbW92ZSBuZXN0ZWQgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBhbmQgYWRkIGF0dGFjaGVycyBmb3IgYSBwcm9wZXIgZHJhZ2dlclxuICAgIHNoYXBlcyA9IHJlbW92ZU5lc3RlZChzaGFwZXMpO1xuXG4gICAgLy8gYXR0YWNoIHNoYXBlcyB0byBkcmFnIGNvbnRleHRcbiAgICBhc3NpZ24oY29udGV4dCwge1xuICAgICAgc2hhcGVzOiBzaGFwZXMsXG4gICAgICB2YWxpZGF0ZWRTaGFwZXM6IHNoYXBlcyxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0pO1xuICB9KTtcblxuXG4gIC8vIGFzc2lnbiBhIGhpZ2ggcHJpb3JpdHkgdG8gdGhpcyBoYW5kbGVyIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudFxuICAvLyBvdGhlcnMgbWF5IGhvb2sgdXAgbGF0ZXIsIGUuZy4gYXQgZGVmYXVsdCBwcmlvcml0eSBhbmQgbW9kaWZ5XG4gIC8vIHRoZSBtb3ZlIGVudmlyb25tZW50XG4gIC8vXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgTUVESVVNX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyxcbiAgICAgICAgY2FuRXhlY3V0ZTtcblxuICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5Nb3ZlKHZhbGlkYXRlZFNoYXBlcyk7XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBjYW4gbW92ZSB0aGUgZWxlbWVudHNcbiAgICBpZiAoIWNhbkV4ZWN1dGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFzc2lnbiBhIGxvdyBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXJcbiAgLy8gdG8gbGV0IG90aGVycyBtb2RpZnkgdGhlIG1vdmUgZXZlbnQgYmVmb3JlIHdlIHVwZGF0ZVxuICAvLyB0aGUgY29udGV4dFxuICAvL1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyxcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcixcbiAgICAgICAgZGVsdGEgPSB7IHg6IGV2ZW50LmR4LCB5OiBldmVudC5keSB9LFxuICAgICAgICBwb3NpdGlvbiA9IHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9LFxuICAgICAgICBjYW5FeGVjdXRlO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIGVsZW1lbnRzXG4gICAgY2FuRXhlY3V0ZSA9IGNhbk1vdmUodmFsaWRhdGVkU2hhcGVzLCBkZWx0YSwgcG9zaXRpb24sIGhvdmVyKTtcblxuICAgIGNvbnRleHQuZGVsdGEgPSBkZWx0YTtcbiAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5FeGVjdXRlO1xuXG4gICAgLy8gc2ltcGx5IGlnbm9yZSBtb3ZlIG92ZXJcbiAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gbnVsbCkge1xuICAgICAgY29udGV4dC50YXJnZXQgPSBudWxsO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dC50YXJnZXQgPSBob3ZlcjtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIHZhciBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGlzQXR0YWNoID0gY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzO1xuXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBkZWx0YXNcbiAgICAvLyAoaW1wb3J0YW50IHdoZW4gem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgIGRlbHRhLnggPSByb3VuZChkZWx0YS54KTtcbiAgICBkZWx0YS55ID0gcm91bmQoZGVsdGEueSk7XG5cbiAgICBpZiAoZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSB7XG5cbiAgICAgIC8vIGRpZG4ndCBtb3ZlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHNoYXBlcywgZGVsdGEsIGNvbnRleHQudGFyZ2V0LCB7XG4gICAgICBwcmltYXJ5U2hhcGU6IGNvbnRleHQuc2hhcGUsXG4gICAgICBhdHRhY2g6IGlzQXR0YWNoXG4gICAgfSk7XG4gIH0pO1xuXG5cbiAgLy8gbW92ZSBhY3RpdmF0aW9uXG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZ2V0T3JpZ2luYWxFdmVudChldmVudCk7XG5cbiAgICBpZiAoIW9yaWdpbmFsRXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzdXBwbHkgRE9NIG1vdXNlZG93biBldmVudCcpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydChvcmlnaW5hbEV2ZW50LCBldmVudC5lbGVtZW50KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG1vdmUuXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FjdGl2YXRlXVxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChldmVudCwgZWxlbWVudCwgYWN0aXZhdGUsIGNvbnRleHQpIHtcbiAgICBpZiAoaXNPYmplY3QoYWN0aXZhdGUpKSB7XG4gICAgICBjb250ZXh0ID0gYWN0aXZhdGU7XG4gICAgICBhY3RpdmF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBtb3ZlIGNvbm5lY3Rpb25zIG9yIHRoZSByb290IGVsZW1lbnRcbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMgfHwgIWVsZW1lbnQucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVBvaW50ID0gbWlkKGVsZW1lbnQpO1xuXG4gICAgZHJhZ2dpbmcuaW5pdChldmVudCwgcmVmZXJlbmNlUG9pbnQsICdzaGFwZS5tb3ZlJywge1xuICAgICAgY3Vyc29yOiAnZ3JhYmJpbmcnLFxuICAgICAgYXV0b0FjdGl2YXRlOiBhY3RpdmF0ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hhcGU6IGVsZW1lbnQsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQgfHwge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHdlJ3ZlIGhhbmRsZWQgdGhlIGV2ZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBBUElcblxuICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG59XG5cbk1vdmVFdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdydWxlcydcbl07XG5cblxuLyoqXG4gKiBSZXR1cm4gYSBmaWx0ZXJlZCBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbiAqIHRob3NlIG5lc3RlZCBpbnRvIG90aGVycy5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBmaWx0ZXJlZFxuICovXG5mdW5jdGlvbiByZW1vdmVOZXN0ZWQoZWxlbWVudHMpIHtcblxuICB2YXIgaWRzID0gZ3JvdXBCeShlbGVtZW50cywgJ2lkJyk7XG5cbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50KSkge1xuXG4gICAgICAvLyBwYXJlbnQgaW4gc2VsZWN0aW9uXG4gICAgICBpZiAoaWRzW2VsZW1lbnQuaWRdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1xuICBmbGF0dGVuLFxuICBmb3JFYWNoLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIGdyb3VwQnksXG4gIG1hcCxcbiAgbWF0Y2hQYXR0ZXJuLFxuICBzaXplXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgc2VsZkFuZEFsbENoaWxkcmVuXG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNDk5O1xuXG52YXIgTUFSS0VSX0RSQUdHSU5HID0gJ2Rqcy1kcmFnZ2luZycsXG4gICAgTUFSS0VSX09LID0gJ2Ryb3Atb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnZHJvcC1ub3Qtb2snLFxuICAgIE1BUktFUl9ORVdfUEFSRU5UID0gJ25ldy1wYXJlbnQnLFxuICAgIE1BUktFUl9BVFRBQ0ggPSAnYXR0YWNoLW9rJztcblxuXG4vKipcbiAqIFByb3ZpZGVzIHByZXZpZXdzIGZvciBtb3Zpbmcgc2hhcGVzIHdoZW4gbW92aW5nLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1N0eWxlc30gc3R5bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVQcmV2aWV3KFxuICAgIGV2ZW50QnVzLCBjYW52YXMsIHN0eWxlcywgcHJldmlld1N1cHBvcnQpIHtcblxuICBmdW5jdGlvbiBnZXRWaXN1YWxEcmFnU2hhcGVzKHNoYXBlcykge1xuICAgIHZhciBlbGVtZW50cyA9IGdldEFsbERyYWdnZWRFbGVtZW50cyhzaGFwZXMpO1xuXG4gICAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSByZW1vdmVFZGdlcyhlbGVtZW50cyk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsbERyYWdnZWRFbGVtZW50cyhzaGFwZXMpIHtcbiAgICB2YXIgYWxsU2hhcGVzID0gc2VsZkFuZEFsbENoaWxkcmVuKHNoYXBlcywgdHJ1ZSk7XG5cbiAgICB2YXIgYWxsQ29ubmVjdGlvbnMgPSBtYXAoYWxsU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcmV0dXJuIChzaGFwZS5pbmNvbWluZyB8fCBbXSkuY29uY2F0KHNoYXBlLm91dGdvaW5nIHx8IFtdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmbGF0dGVuKGFsbFNoYXBlcy5jb25jYXQoYWxsQ29ubmVjdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGRyb3AgbWFya2VyIG9uIGFuIGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBzZXRNYXJrZXIoZWxlbWVudCwgbWFya2VyKSB7XG5cbiAgICBbIE1BUktFUl9BVFRBQ0gsIE1BUktFUl9PSywgTUFSS0VSX05PVF9PSywgTUFSS0VSX05FV19QQVJFTlQgXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcblxuICAgICAgaWYgKG0gPT09IG1hcmtlcikge1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIG0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGVsZW1lbnQgZHJhZ2dhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkTWFya2VyXG4gICAqL1xuICBmdW5jdGlvbiBtYWtlRHJhZ2dhYmxlKGNvbnRleHQsIGVsZW1lbnQsIGFkZE1hcmtlcikge1xuXG4gICAgcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcihlbGVtZW50LCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICBpZiAoYWRkTWFya2VyKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuYWxsRHJhZ2dlZEVsZW1lbnRzKSB7XG4gICAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cyA9IFsgZWxlbWVudCBdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFzc2lnbiBhIGxvdyBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXJcbiAgLy8gdG8gbGV0IG90aGVycyBtb2RpZnkgdGhlIG1vdmUgY29udGV4dCBiZWZvcmVcbiAgLy8gd2UgZHJhdyB0aGluZ3NcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBkcmFnU2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGFsbERyYWdnZWRFbGVtZW50cyA9IGNvbnRleHQuYWxsRHJhZ2dlZEVsZW1lbnRzO1xuXG4gICAgdmFyIHZpc3VhbGx5RHJhZ2dlZFNoYXBlcyA9IGdldFZpc3VhbERyYWdTaGFwZXMoZHJhZ1NoYXBlcyk7XG5cbiAgICBpZiAoIWNvbnRleHQuZHJhZ0dyb3VwKSB7XG4gICAgICB2YXIgZHJhZ0dyb3VwID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgICAgIHN2Z0F0dHIoZHJhZ0dyb3VwLCBzdHlsZXMuY2xzKCdkanMtZHJhZy1ncm91cCcsIFsgJ25vLWV2ZW50cycgXSkpO1xuXG4gICAgICB2YXIgZGVmYXVsdExheWVyID0gY2FudmFzLmdldERlZmF1bHRMYXllcigpO1xuXG4gICAgICBzdmdBcHBlbmQoZGVmYXVsdExheWVyLCBkcmFnR3JvdXApO1xuXG4gICAgICBjb250ZXh0LmRyYWdHcm91cCA9IGRyYWdHcm91cDtcbiAgICB9XG5cbiAgICAvLyBhZGQgcHJldmlld3NcbiAgICB2aXN1YWxseURyYWdnZWRTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcihzaGFwZSwgY29udGV4dC5kcmFnR3JvdXApO1xuICAgIH0pO1xuXG4gICAgLy8gY2FjaGUgYWxsIGRyYWdnZWQgZWxlbWVudHMgLyBnZnhcbiAgICAvLyBzbyB0aGF0IHdlIGNhbiBxdWlja2x5IHVuZG8gdGhlaXIgc3RhdGUgY2hhbmdlcyBsYXRlclxuICAgIGlmICghYWxsRHJhZ2dlZEVsZW1lbnRzKSB7XG4gICAgICBhbGxEcmFnZ2VkRWxlbWVudHMgPSBnZXRBbGxEcmFnZ2VkRWxlbWVudHMoZHJhZ1NoYXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsbERyYWdnZWRFbGVtZW50cyA9IGZsYXR0ZW4oW1xuICAgICAgICBhbGxEcmFnZ2VkRWxlbWVudHMsXG4gICAgICAgIGdldEFsbERyYWdnZWRFbGVtZW50cyhkcmFnU2hhcGVzKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGRyYWdnaW5nIG1hcmtlclxuICAgIGZvckVhY2goYWxsRHJhZ2dlZEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGUsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cyA9IGFsbERyYWdnZWRFbGVtZW50cztcblxuICAgIC8vIGRldGVybWluZSwgaWYgYW55IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnRzIGhhdmUgZGlmZmVyZW50IHBhcmVudHNcbiAgICBjb250ZXh0LmRpZmZlcmVudFBhcmVudHMgPSBoYXZlRGlmZmVyZW50UGFyZW50cyhkcmFnU2hhcGVzKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgcGFyZW50ID0gY29udGV4dC5zaGFwZS5wYXJlbnQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGU7XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcpIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHQuY2FuRXhlY3V0ZSAmJiB0YXJnZXQgJiYgdGFyZ2V0LmlkICE9PSBwYXJlbnQuaWQpIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgTUFSS0VSX05FV19QQVJFTlQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgY29udGV4dC5jYW5FeGVjdXRlID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNsYXRlKGRyYWdHcm91cCwgZXZlbnQuZHgsIGV2ZW50LmR5KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUubW92ZS5vdXQnLCAnc2hhcGUubW92ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBzZXRNYXJrZXIodGFyZ2V0LCBudWxsKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5jbGVhbnVwJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsRHJhZ2dlZEVsZW1lbnRzID0gY29udGV4dC5hbGxEcmFnZ2VkRWxlbWVudHMsXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwO1xuXG5cbiAgICAvLyByZW1vdmUgZHJhZ2dpbmcgbWFya2VyXG4gICAgZm9yRWFjaChhbGxEcmFnZ2VkRWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoZSwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcblxuICAgIGlmIChkcmFnR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShkcmFnR3JvdXApO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBBUEkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGVsZW1lbnQgZHJhZ2dhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkTWFya2VyXG4gICAqL1xuICB0aGlzLm1ha2VEcmFnZ2FibGUgPSBtYWtlRHJhZ2dhYmxlO1xufVxuXG5Nb3ZlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ3N0eWxlcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogcmV0dXJucyBlbGVtZW50cyBtaW51cyBhbGwgY29ubmVjdGlvbnNcbiAqIHdoZXJlIHNvdXJjZSBvciB0YXJnZXQgaXMgbm90IGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUVkZ2VzKGVsZW1lbnRzKSB7XG5cbiAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmICghaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5zb3VyY2UuaWQgfSkpICYmXG4gICAgICAgIGZpbmQoZWxlbWVudHMsIG1hdGNoUGF0dGVybih7IGlkOiBlbGVtZW50LnRhcmdldC5pZCB9KSlcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gaGF2ZURpZmZlcmVudFBhcmVudHMoZWxlbWVudHMpIHtcbiAgcmV0dXJuIHNpemUoZ3JvdXBCeShlbGVtZW50cywgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5wYXJlbnQgJiYgZS5wYXJlbnQuaWQ7IH0pKSAhPT0gMTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBpcyBhIGNvbm5lY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuaW1wb3J0IE91dGxpbmVNb2R1bGUgZnJvbSAnLi4vb3V0bGluZSc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuXG5pbXBvcnQgTW92ZSBmcm9tICcuL01vdmUnO1xuaW1wb3J0IE1vdmVQcmV2aWV3IGZyb20gJy4vTW92ZVByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlLFxuICAgIE91dGxpbmVNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnbW92ZScsXG4gICAgJ21vdmVQcmV2aWV3J1xuICBdLFxuICBtb3ZlOiBbICd0eXBlJywgTW92ZSBdLFxuICBtb3ZlUHJldmlldzogWyAndHlwZScsIE1vdmVQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG4vKipcbiAqIEFuIGFic3RyYWN0IHByb3ZpZGVyIHRoYXQgYWxsb3dzIG1vZGVsZXJzIHRvIGltcGxlbWVudCBhIGN1c3RvbVxuICogb3JkZXJpbmcgb2YgZGlhZ3JhbSBlbGVtZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIEl0IG1ha2VzIHN1cmUgdGhhdCB0aGUgb3JkZXIgaXMgYWx3YXlzIHByZXNlcnZlZCBkdXJpbmcgZWxlbWVudFxuICogY3JlYXRpb24gYW5kIG1vdmUgb3BlcmF0aW9ucy5cbiAqXG4gKiBJbiBvcmRlciB0byB1c2UgdGhpcyBiZWhhdmlvciwgaW5oZXJpdCBmcm9tIGl0IGFuZCBvdmVycmlkZVxuICogdGhlIG1ldGhvZCB7QGxpbmsgT3JkZXJpbmdQcm92aWRlciNnZXRPcmRlcmluZ30uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbiBDdXN0b21PcmRlcmluZ1Byb3ZpZGVyKGV2ZW50QnVzKSB7XG4gKiAgIE9yZGVyaW5nUHJvdmlkZXIuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG4gKlxuICogICB0aGlzLmdldE9yZGVyaW5nID0gZnVuY3Rpb24oZWxlbWVudCwgbmV3UGFyZW50KSB7XG4gKiAgICAgLy8gYWx3YXlzIGluc2VydCBlbGVtZW50cyBhdCB0aGUgZnJvbnRcbiAqICAgICAvLyB3aGVuIG1vdmluZ1xuICogICAgIHJldHVybiB7XG4gKiAgICAgICBpbmRleDogMCxcbiAqICAgICAgIHBhcmVudDogbmV3UGFyZW50XG4gKiAgICAgfTtcbiAqICAgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE9yZGVyaW5nUHJvdmlkZXIoZXZlbnRCdXMpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKFsgJ3NoYXBlLmNyZWF0ZScsICdjb25uZWN0aW9uLmNyZWF0ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudDtcblxuICAgIHZhciBvcmRlcmluZyA9IHNlbGYuZ2V0T3JkZXJpbmcoZWxlbWVudCwgcGFyZW50KTtcblxuICAgIGlmIChvcmRlcmluZykge1xuXG4gICAgICBpZiAob3JkZXJpbmcucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5wYXJlbnQgPSBvcmRlcmluZy5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQucGFyZW50SW5kZXggPSBvcmRlcmluZy5pbmRleDtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucHJlRXhlY3V0ZShbICdzaGFwZS5tb3ZlJywgJ2Nvbm5lY3Rpb24ubW92ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBlbGVtZW50LnBhcmVudDtcblxuICAgIHZhciBvcmRlcmluZyA9IHNlbGYuZ2V0T3JkZXJpbmcoZWxlbWVudCwgcGFyZW50KTtcblxuICAgIGlmIChvcmRlcmluZykge1xuXG4gICAgICBpZiAob3JkZXJpbmcucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5uZXdQYXJlbnQgPSBvcmRlcmluZy5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubmV3UGFyZW50SW5kZXggPSBvcmRlcmluZy5pbmRleDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGN1c3RvbSBvcmRlcmluZyBvZiB0aGUgZWxlbWVudCwgYm90aCBpbiB0ZXJtc1xuICogb2YgcGFyZW50IGVsZW1lbnQgYW5kIGluZGV4IGluIHRoZSBuZXcgcGFyZW50LlxuICpcbiAqIEltcGxlbWVudG9ycyBvZiB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhbiBvYmplY3Qgd2l0aFxuICogYHBhcmVudGAgX2FuZF8gYGluZGV4YCBpbiBpdC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gbmV3UGFyZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBvcmRlcmluZyBkZXNjcmlwdG9yXG4gKi9cbk9yZGVyaW5nUHJvdmlkZXIucHJvdG90eXBlLmdldE9yZGVyaW5nID0gZnVuY3Rpb24oZWxlbWVudCwgbmV3UGFyZW50KSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuaW5oZXJpdHMoT3JkZXJpbmdQcm92aWRlciwgQ29tbWFuZEludGVyY2VwdG9yKTsiLCJpbXBvcnQgeyBnZXRCQm94IH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQGNsYXNzXG4gKlxuICogQSBwbHVnaW4gdGhhdCBhZGRzIGFuIG91dGxpbmUgdG8gc2hhcGVzIGFuZCBjb25uZWN0aW9ucyB0aGF0IG1heSBiZSBhY3RpdmF0ZWQgYW5kIHN0eWxlZFxuICogdmlhIENTUyBjbGFzc2VzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge1N0eWxlc30gc3R5bGVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE91dGxpbmUoZXZlbnRCdXMsIHN0eWxlcywgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgdGhpcy5vZmZzZXQgPSA2O1xuXG4gIHZhciBPVVRMSU5FX1NUWUxFID0gc3R5bGVzLmNscygnZGpzLW91dGxpbmUnLCBbICduby1maWxsJyBdKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gY3JlYXRlT3V0bGluZShnZngsIGJvdW5kcykge1xuICAgIHZhciBvdXRsaW5lID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgICBzdmdBdHRyKG91dGxpbmUsIGFzc2lnbih7XG4gICAgICB4OiAxMCxcbiAgICAgIHk6IDEwLFxuICAgICAgd2lkdGg6IDEwMCxcbiAgICAgIGhlaWdodDogMTAwXG4gICAgfSwgT1VUTElORV9TVFlMRSkpO1xuXG4gICAgc3ZnQXBwZW5kKGdmeCwgb3V0bGluZSk7XG5cbiAgICByZXR1cm4gb3V0bGluZTtcbiAgfVxuXG4gIC8vIEEgbG93IHByaW9ydGl0eSBpcyBuZWNlc3NhcnksIGJlY2F1c2Ugb3V0bGluZXMgb2YgbGFiZWxzIGhhdmUgdG8gYmUgdXBkYXRlZFxuICAvLyBhZnRlciB0aGUgbGFiZWwgYm91bmRzIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSByZW5kZXJlci5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAnc2hhcGUuY2hhbmdlZCcgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgdmFyIG91dGxpbmUgPSBkb21RdWVyeSgnLmRqcy1vdXRsaW5lJywgZ2Z4KTtcblxuICAgIGlmICghb3V0bGluZSkge1xuICAgICAgb3V0bGluZSA9IGNyZWF0ZU91dGxpbmUoZ2Z4LCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBzZWxmLnVwZGF0ZVNoYXBlT3V0bGluZShvdXRsaW5lLCBlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY29ubmVjdGlvbi5hZGRlZCcsICdjb25uZWN0aW9uLmNoYW5nZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICB2YXIgb3V0bGluZSA9IGRvbVF1ZXJ5KCcuZGpzLW91dGxpbmUnLCBnZngpO1xuXG4gICAgaWYgKCFvdXRsaW5lKSB7XG4gICAgICBvdXRsaW5lID0gY3JlYXRlT3V0bGluZShnZngsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlQ29ubmVjdGlvbk91dGxpbmUob3V0bGluZSwgZWxlbWVudCk7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb3V0bGluZSBvZiBhIHNoYXBlIHJlc3BlY3RpbmcgdGhlIGRpbWVuc2lvbiBvZiB0aGVcbiAqIGVsZW1lbnQgYW5kIGFuIG91dGxpbmUgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG91dGxpbmVcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbk91dGxpbmUucHJvdG90eXBlLnVwZGF0ZVNoYXBlT3V0bGluZSA9IGZ1bmN0aW9uKG91dGxpbmUsIGVsZW1lbnQpIHtcblxuICBzdmdBdHRyKG91dGxpbmUsIHtcbiAgICB4OiAtdGhpcy5vZmZzZXQsXG4gICAgeTogLXRoaXMub2Zmc2V0LFxuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoICsgdGhpcy5vZmZzZXQgKiAyLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgKyB0aGlzLm9mZnNldCAqIDJcbiAgfSk7XG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvdXRsaW5lIG9mIGEgY29ubmVjdGlvbiByZXNwZWN0aW5nIHRoZSBib3VuZGluZyBib3ggb2ZcbiAqIHRoZSBjb25uZWN0aW9uIGFuZCBhbiBvdXRsaW5lIG9mZnNldC5cbiAqXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBvdXRsaW5lXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICovXG5PdXRsaW5lLnByb3RvdHlwZS51cGRhdGVDb25uZWN0aW9uT3V0bGluZSA9IGZ1bmN0aW9uKG91dGxpbmUsIGNvbm5lY3Rpb24pIHtcblxuICB2YXIgYmJveCA9IGdldEJCb3goY29ubmVjdGlvbik7XG5cbiAgc3ZnQXR0cihvdXRsaW5lLCB7XG4gICAgeDogYmJveC54IC0gdGhpcy5vZmZzZXQsXG4gICAgeTogYmJveC55IC0gdGhpcy5vZmZzZXQsXG4gICAgd2lkdGg6IGJib3gud2lkdGggKyB0aGlzLm9mZnNldCAqIDIsXG4gICAgaGVpZ2h0OiBiYm94LmhlaWdodCArIHRoaXMub2Zmc2V0ICogMlxuICB9KTtcblxufTtcblxuXG5PdXRsaW5lLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ3N0eWxlcycsICdlbGVtZW50UmVnaXN0cnknXTsiLCJpbXBvcnQgT3V0bGluZSBmcm9tICcuL091dGxpbmUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdvdXRsaW5lJyBdLFxuICBvdXRsaW5lOiBbICd0eXBlJywgT3V0bGluZSBdXG59OyIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc09iamVjdCxcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBmaW5kLFxuICBmaWx0ZXIsXG4gIG1hdGNoUGF0dGVybixcbiAgaXNEZWZpbmVkXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZSxcbiAgY2xlYXIgYXMgZG9tQ2xlYXJcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGdldEJCb3hcbn0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCBJZHMgZnJvbSAnLi4vLi4vdXRpbC9JZEdlbmVyYXRvcic7XG5cbi8vIGRvY3VtZW50IHdpZGUgdW5pcXVlIG92ZXJsYXkgaWRzXG52YXIgaWRzID0gbmV3IElkcygnb3YnKTtcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IGFsbG93cyB1c2VycyB0byBhdHRhY2ggb3ZlcmxheXMgdG8gZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBUaGUgb3ZlcmxheSBzZXJ2aWNlIHdpbGwgdGFrZSBjYXJlIG9mIG92ZXJsYXkgcG9zaXRpb25pbmcgZHVyaW5nIHVwZGF0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBhZGQgYSBwaW5rIGJhZGdlIG9uIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2hhcGVcbiAqIG92ZXJsYXlzLmFkZChzb21lU2hhcGUsIHtcbiAqICAgcG9zaXRpb246IHtcbiAqICAgICB0b3A6IC01LFxuICogICAgIGxlZnQ6IC01XG4gKiAgIH0sXG4gKiAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IGZ1Y2hzaWE7IGNvbG9yOiB3aGl0ZTtcIj4wPC9kaXY+J1xuICogfSk7XG4gKlxuICogLy8gb3IgYWRkIHZpYSBzaGFwZSBpZFxuICpcbiAqIG92ZXJsYXlzLmFkZCgnc29tZS1lbGVtZW50LWlkJywge1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHRvcDogLTUsXG4gKiAgICAgbGVmdDogLTVcbiAqICAgfVxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqIC8vIG9yIGFkZCB3aXRoIG9wdGlvbmFsIHR5cGVcbiAqXG4gKiBvdmVybGF5cy5hZGQoc29tZVNoYXBlLCAnYmFkZ2UnLCB7XG4gKiAgIHBvc2l0aW9uOiB7XG4gKiAgICAgdG9wOiAtNSxcbiAqICAgICBsZWZ0OiAtNVxuICogICB9XG4gKiAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IGZ1Y2hzaWE7IGNvbG9yOiB3aGl0ZTtcIj4wPC9kaXY+J1xuICogfSk7XG4gKlxuICpcbiAqIC8vIHJlbW92ZSBhbiBvdmVybGF5XG4gKlxuICogdmFyIGlkID0gb3ZlcmxheXMuYWRkKC4uLik7XG4gKiBvdmVybGF5cy5yZW1vdmUoaWQpO1xuICpcbiAqXG4gKiBZb3UgbWF5IGNvbmZpZ3VyZSBvdmVybGF5IGRlZmF1bHRzIGR1cmluZyB0b29sIGJ5IHByb3ZpZGluZyBhIGBjb25maWdgIG1vZHVsZVxuICogd2l0aCBgb3ZlcmxheXMuZGVmYXVsdHNgIGFzIGFuIGVudHJ5OlxuICpcbiAqIHtcbiAqICAgb3ZlcmxheXM6IHtcbiAqICAgICBkZWZhdWx0czoge1xuICogICAgICAgc2hvdzoge1xuICogICAgICAgICBtaW5ab29tOiAwLjcsXG4gKiAgICAgICAgIG1heFpvb206IDUuMFxuICogICAgICAgfSxcbiAqICAgICAgIHNjYWxlOiB7XG4gKiAgICAgICAgIG1pbjogMVxuICogICAgICAgfVxuICogICAgIH1cbiAqIH1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBPdmVybGF5cyhjb25maWcsIGV2ZW50QnVzLCBjYW52YXMsIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIHRoaXMuX2lkcyA9IGlkcztcblxuICB0aGlzLl9vdmVybGF5RGVmYXVsdHMgPSBhc3NpZ24oe1xuXG4gICAgLy8gbm8gc2hvdyBjb25zdHJhaW50c1xuICAgIHNob3c6IG51bGwsXG5cbiAgICAvLyBhbHdheXMgc2NhbGVcbiAgICBzY2FsZTogdHJ1ZVxuICB9LCBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRzKTtcblxuICAvKipcbiAgICogTWFwcGluZyBvdmVybGF5SWQgLT4gb3ZlcmxheVxuICAgKi9cbiAgdGhpcy5fb3ZlcmxheXMgPSB7fTtcblxuICAvKipcbiAgICogTWFwcGluZyBlbGVtZW50SWQgLT4gb3ZlcmxheSBjb250YWluZXJcbiAgICovXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzID0gW107XG5cbiAgLy8gcm9vdCBodG1sIGVsZW1lbnQgZm9yIGFsbCBvdmVybGF5c1xuICB0aGlzLl9vdmVybGF5Um9vdCA9IGNyZWF0ZVJvb3QoY2FudmFzLmdldENvbnRhaW5lcigpKTtcblxuICB0aGlzLl9pbml0KCk7XG59XG5cblxuT3ZlcmxheXMuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5vdmVybGF5cycsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIG92ZXJsYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGlkIG9yIGEgbGlzdCBvZiBvdmVybGF5c1xuICogZm9yIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIHR5cGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyByZXR1cm4gdGhlIHNpbmdsZSBvdmVybGF5IHdpdGggdGhlIGdpdmVuIGlkXG4gKiBvdmVybGF5cy5nZXQoJ3NvbWUtaWQnKTtcbiAqXG4gKiAvLyByZXR1cm4gYWxsIG92ZXJsYXlzIGZvciB0aGUgc2hhcGVcbiAqIG92ZXJsYXlzLmdldCh7IGVsZW1lbnQ6IHNvbWVTaGFwZSB9KTtcbiAqXG4gKiAvLyByZXR1cm4gYWxsIG92ZXJsYXlzIG9uIHNoYXBlIHdpdGggdHlwZSAnYmFkZ2UnXG4gKiBvdmVybGF5cy5nZXQoeyBlbGVtZW50OiBzb21lU2hhcGUsIHR5cGU6ICdiYWRnZScgfSk7XG4gKlxuICogLy8gc2hhcGUgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzIGlkXG4gKiBvdmVybGF5cy5nZXQoeyBlbGVtZW50OiAnZWxlbWVudC1pZCcsIHR5cGU6ICdiYWRnZScgfSk7XG4gKlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoLmlkXVxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IFtzZWFyY2guZWxlbWVudF1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoLnR5cGVdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fEFycmF5PE9iamVjdD59IHRoZSBvdmVybGF5KHMpXG4gKi9cbk92ZXJsYXlzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihzZWFyY2gpIHtcblxuICBpZiAoaXNTdHJpbmcoc2VhcmNoKSkge1xuICAgIHNlYXJjaCA9IHsgaWQ6IHNlYXJjaCB9O1xuICB9XG5cbiAgaWYgKGlzU3RyaW5nKHNlYXJjaC5lbGVtZW50KSkge1xuICAgIHNlYXJjaC5lbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzZWFyY2guZWxlbWVudCk7XG4gIH1cblxuICBpZiAoc2VhcmNoLmVsZW1lbnQpIHtcbiAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fZ2V0T3ZlcmxheUNvbnRhaW5lcihzZWFyY2guZWxlbWVudCwgdHJ1ZSk7XG5cbiAgICAvLyByZXR1cm4gYSBsaXN0IG9mIG92ZXJsYXlzIHdoZW4gc2VhcmNoaW5nIGJ5IGVsZW1lbnQgKCt0eXBlKVxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIHJldHVybiBzZWFyY2gudHlwZSA/IGZpbHRlcihjb250YWluZXIub3ZlcmxheXMsIG1hdGNoUGF0dGVybih7IHR5cGU6IHNlYXJjaC50eXBlIH0pKSA6IGNvbnRhaW5lci5vdmVybGF5cy5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9IGVsc2VcbiAgaWYgKHNlYXJjaC50eXBlKSB7XG4gICAgcmV0dXJuIGZpbHRlcih0aGlzLl9vdmVybGF5cywgbWF0Y2hQYXR0ZXJuKHsgdHlwZTogc2VhcmNoLnR5cGUgfSkpO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gcmV0dXJuIHNpbmdsZSBlbGVtZW50IHdoZW4gc2VhcmNoaW5nIGJ5IGlkXG4gICAgcmV0dXJuIHNlYXJjaC5pZCA/IHRoaXMuX292ZXJsYXlzW3NlYXJjaC5pZF0gOiBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZHMgYSBIVE1MIG92ZXJsYXkgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xkanMubW9kZWwuQmFzZX0gICBlbGVtZW50ICAgYXR0YWNoIG92ZXJsYXkgdG8gdGhpcyBzaGFwZVxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW3R5cGVdICAgIG9wdGlvbmFsIHR5cGUgdG8gYXNzaWduIHRvIHRoZSBvdmVybGF5XG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBvdmVybGF5ICAgdGhlIG92ZXJsYXkgY29uZmlndXJhdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9ICAgICAgIG92ZXJsYXkuaHRtbCAgICAgICAgICAgICAgICAgaHRtbCBlbGVtZW50IHRvIHVzZSBhcyBhbiBvdmVybGF5XG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5zaG93XSAgICAgICAgICAgICAgIHNob3cgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkuc2hvdy5taW5ab29tXSAgICAgICBtaW5pbWFsIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgb3ZlcmxheVxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkuc2hvdy5tYXhab29tXSAgICAgICBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgb3ZlcmxheVxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgb3ZlcmxheS5wb3NpdGlvbiAgICAgICAgICAgICB3aGVyZSB0byBhdHRhY2ggdGhlIG92ZXJsYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnBvc2l0aW9uLmxlZnRdICAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGxlZnQgYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkucG9zaXRpb24udG9wXSAgICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggdG9wIGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnBvc2l0aW9uLmJvdHRvbV0gICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGJvdHRvbSBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5wb3NpdGlvbi5yaWdodF0gICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCByaWdodCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSAgICAgICAgICBbb3ZlcmxheS5zY2FsZT10cnVlXSAgICAgICAgIGZhbHNlIHRvIHByZXNlcnZlIHRoZSBzYW1lIHNpemUgcmVnYXJkbGVzcyBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFncmFtIHpvb21cbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNjYWxlLm1pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNjYWxlLm1heF1cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgICBpZCB0aGF0IG1heSBiZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgb3ZlcmxheSBmb3IgdXBkYXRlIG9yIHJlbW92YWxcbiAqL1xuT3ZlcmxheXMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIG92ZXJsYXkpIHtcblxuICBpZiAoaXNPYmplY3QodHlwZSkpIHtcbiAgICBvdmVybGF5ID0gdHlwZTtcbiAgICB0eXBlID0gbnVsbDtcbiAgfVxuXG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKCFvdmVybGF5LnBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IG92ZXJsYXkgcG9zaXRpb24nKTtcbiAgfVxuXG4gIGlmICghb3ZlcmxheS5odG1sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IG92ZXJsYXkgaHRtbCcpO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVsZW1lbnQgc3BlY2lmaWVkJyk7XG4gIH1cblxuICB2YXIgaWQgPSB0aGlzLl9pZHMubmV4dCgpO1xuXG4gIG92ZXJsYXkgPSBhc3NpZ24oe30sIHRoaXMuX292ZXJsYXlEZWZhdWx0cywgb3ZlcmxheSwge1xuICAgIGlkOiBpZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaHRtbDogb3ZlcmxheS5odG1sXG4gIH0pO1xuXG4gIHRoaXMuX2FkZE92ZXJsYXkob3ZlcmxheSk7XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBhbiBvdmVybGF5IHdpdGggdGhlIGdpdmVuIGlkIG9yIGFsbCBvdmVybGF5cyBtYXRjaGluZyB0aGUgZ2l2ZW4gZmlsdGVyLlxuICpcbiAqIEBzZWUgT3ZlcmxheXMjZ2V0IGZvciBmaWx0ZXIgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lkXVxuICogQHBhcmFtIHtPYmplY3R9IFtmaWx0ZXJdXG4gKi9cbk92ZXJsYXlzLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcblxuICB2YXIgb3ZlcmxheXMgPSB0aGlzLmdldChmaWx0ZXIpIHx8IFtdO1xuXG4gIGlmICghaXNBcnJheShvdmVybGF5cykpIHtcbiAgICBvdmVybGF5cyA9IFsgb3ZlcmxheXMgXTtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKG92ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihvdmVybGF5LmVsZW1lbnQsIHRydWUpO1xuXG4gICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgIGRvbVJlbW92ZShvdmVybGF5Lmh0bWwpO1xuICAgICAgZG9tUmVtb3ZlKG92ZXJsYXkuaHRtbENvbnRhaW5lcik7XG5cbiAgICAgIGRlbGV0ZSBvdmVybGF5Lmh0bWxDb250YWluZXI7XG4gICAgICBkZWxldGUgb3ZlcmxheS5lbGVtZW50O1xuXG4gICAgICBkZWxldGUgc2VsZi5fb3ZlcmxheXNbb3ZlcmxheS5pZF07XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgdmFyIGlkeCA9IGNvbnRhaW5lci5vdmVybGF5cy5pbmRleE9mKG92ZXJsYXkpO1xuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgY29udGFpbmVyLm92ZXJsYXlzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbn07XG5cblxuT3ZlcmxheXMucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbigpIHtcbiAgc2V0VmlzaWJsZSh0aGlzLl9vdmVybGF5Um9vdCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gIHNldFZpc2libGUodGhpcy5fb3ZlcmxheVJvb3QsIGZhbHNlKTtcbn07XG5cbk92ZXJsYXlzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9vdmVybGF5cyA9IHt9O1xuXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzID0gW107XG5cbiAgZG9tQ2xlYXIodGhpcy5fb3ZlcmxheVJvb3QpO1xufTtcblxuT3ZlcmxheXMucHJvdG90eXBlLl91cGRhdGVPdmVybGF5Q29udGFpbmVyID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gIHZhciBlbGVtZW50ID0gY29udGFpbmVyLmVsZW1lbnQsXG4gICAgICBodG1sID0gY29udGFpbmVyLmh0bWw7XG5cbiAgLy8gdXBkYXRlIGNvbnRhaW5lciBsZWZ0LHRvcCBhY2NvcmRpbmcgdG8gdGhlIGVsZW1lbnRzIHgseSBjb29yZGluYXRlc1xuICAvLyB0aGlzIGVuc3VyZXMgd2UgY2FuIGF0dGFjaCBjaGlsZCBlbGVtZW50cyByZWxhdGl2ZSB0byB0aGlzIGNvbnRhaW5lclxuXG4gIHZhciB4ID0gZWxlbWVudC54LFxuICAgICAgeSA9IGVsZW1lbnQueTtcblxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICB2YXIgYmJveCA9IGdldEJCb3goZWxlbWVudCk7XG4gICAgeCA9IGJib3gueDtcbiAgICB5ID0gYmJveC55O1xuICB9XG5cbiAgc2V0UG9zaXRpb24oaHRtbCwgeCwgeSk7XG5cbiAgZG9tQXR0cihjb250YWluZXIuaHRtbCwgJ2RhdGEtY29udGFpbmVyLWlkJywgZWxlbWVudC5pZCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheSA9IGZ1bmN0aW9uKG92ZXJsYXkpIHtcblxuICB2YXIgcG9zaXRpb24gPSBvdmVybGF5LnBvc2l0aW9uLFxuICAgICAgaHRtbENvbnRhaW5lciA9IG92ZXJsYXkuaHRtbENvbnRhaW5lcixcbiAgICAgIGVsZW1lbnQgPSBvdmVybGF5LmVsZW1lbnQ7XG5cbiAgLy8gdXBkYXRlIG92ZXJsYXkgaHRtbCByZWxhdGl2ZSB0byBzaGFwZSBiZWNhdXNlXG4gIC8vIGl0IGlzIGFscmVhZHkgcG9zaXRpb25lZCBvbiB0aGUgZWxlbWVudFxuXG4gIC8vIHVwZGF0ZSByZWxhdGl2ZVxuICB2YXIgbGVmdCA9IHBvc2l0aW9uLmxlZnQsXG4gICAgICB0b3AgPSBwb3NpdGlvbi50b3A7XG5cbiAgaWYgKHBvc2l0aW9uLnJpZ2h0ICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHZhciB3aWR0aDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgd2lkdGggPSBnZXRCQm94KGVsZW1lbnQpLndpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IGVsZW1lbnQud2lkdGg7XG4gICAgfVxuXG4gICAgbGVmdCA9IHBvc2l0aW9uLnJpZ2h0ICogLTEgKyB3aWR0aDtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbi5ib3R0b20gIT09IHVuZGVmaW5lZCkge1xuXG4gICAgdmFyIGhlaWdodDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgaGVpZ2h0ID0gZ2V0QkJveChlbGVtZW50KS5oZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgIH1cblxuICAgIHRvcCA9IHBvc2l0aW9uLmJvdHRvbSAqIC0xICsgaGVpZ2h0O1xuICB9XG5cbiAgc2V0UG9zaXRpb24oaHRtbENvbnRhaW5lciwgbGVmdCB8fCAwLCB0b3AgfHwgMCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fY3JlYXRlT3ZlcmxheUNvbnRhaW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGh0bWwgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJkanMtb3ZlcmxheXNcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiIC8+Jyk7XG5cbiAgdGhpcy5fb3ZlcmxheVJvb3QuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgdmFyIGNvbnRhaW5lciA9IHtcbiAgICBodG1sOiBodG1sLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgb3ZlcmxheXM6IFtdXG4gIH07XG5cbiAgdGhpcy5fdXBkYXRlT3ZlcmxheUNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzLnB1c2goY29udGFpbmVyKTtcblxuICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZVJvb3QgPSBmdW5jdGlvbih2aWV3Ym94KSB7XG4gIHZhciBzY2FsZSA9IHZpZXdib3guc2NhbGUgfHwgMTtcblxuICB2YXIgbWF0cml4ID0gJ21hdHJpeCgnICtcbiAgW1xuICAgIHNjYWxlLFxuICAgIDAsXG4gICAgMCxcbiAgICBzY2FsZSxcbiAgICAtMSAqIHZpZXdib3gueCAqIHNjYWxlLFxuICAgIC0xICogdmlld2JveC55ICogc2NhbGVcbiAgXS5qb2luKCcsJykgK1xuICAnKSc7XG5cbiAgc2V0VHJhbnNmb3JtKHRoaXMuX292ZXJsYXlSb290LCBtYXRyaXgpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX2dldE92ZXJsYXlDb250YWluZXIgPSBmdW5jdGlvbihlbGVtZW50LCByYXcpIHtcbiAgdmFyIGNvbnRhaW5lciA9IGZpbmQodGhpcy5fb3ZlcmxheUNvbnRhaW5lcnMsIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gYy5lbGVtZW50ID09PSBlbGVtZW50O1xuICB9KTtcblxuXG4gIGlmICghY29udGFpbmVyICYmICFyYXcpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3ZlcmxheUNvbnRhaW5lcihlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fYWRkT3ZlcmxheSA9IGZ1bmN0aW9uKG92ZXJsYXkpIHtcblxuICB2YXIgaWQgPSBvdmVybGF5LmlkLFxuICAgICAgZWxlbWVudCA9IG92ZXJsYXkuZWxlbWVudCxcbiAgICAgIGh0bWwgPSBvdmVybGF5Lmh0bWwsXG4gICAgICBodG1sQ29udGFpbmVyLFxuICAgICAgb3ZlcmxheUNvbnRhaW5lcjtcblxuICAvLyB1bndyYXAganF1ZXJ5IChmb3IgdGhvc2Ugd2hvIG5lZWQgaXQpXG4gIGlmIChodG1sLmdldCAmJiBodG1sLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBodG1sID0gaHRtbC5nZXQoMCk7XG4gIH1cblxuICAvLyBjcmVhdGUgcHJvcGVyIGh0bWwgZWxlbWVudHMgZnJvbVxuICAvLyBvdmVybGF5IEhUTUwgc3RyaW5nc1xuICBpZiAoaXNTdHJpbmcoaHRtbCkpIHtcbiAgICBodG1sID0gZG9taWZ5KGh0bWwpO1xuICB9XG5cbiAgb3ZlcmxheUNvbnRhaW5lciA9IHRoaXMuX2dldE92ZXJsYXlDb250YWluZXIoZWxlbWVudCk7XG5cbiAgaHRtbENvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImRqcy1vdmVybGF5XCIgZGF0YS1vdmVybGF5LWlkPVwiJyArIGlkICsgJ1wiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCI+Jyk7XG5cbiAgaHRtbENvbnRhaW5lci5hcHBlbmRDaGlsZChodG1sKTtcblxuICBpZiAob3ZlcmxheS50eXBlKSB7XG4gICAgZG9tQ2xhc3NlcyhodG1sQ29udGFpbmVyKS5hZGQoJ2Rqcy1vdmVybGF5LScgKyBvdmVybGF5LnR5cGUpO1xuICB9XG5cbiAgb3ZlcmxheS5odG1sQ29udGFpbmVyID0gaHRtbENvbnRhaW5lcjtcblxuICBvdmVybGF5Q29udGFpbmVyLm92ZXJsYXlzLnB1c2gob3ZlcmxheSk7XG4gIG92ZXJsYXlDb250YWluZXIuaHRtbC5hcHBlbmRDaGlsZChodG1sQ29udGFpbmVyKTtcblxuICB0aGlzLl9vdmVybGF5c1tpZF0gPSBvdmVybGF5O1xuXG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXkob3ZlcmxheSk7XG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXlWaXNpYmlsdHkob3ZlcmxheSwgdGhpcy5fY2FudmFzLnZpZXdib3goKSk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheVZpc2liaWx0eSA9IGZ1bmN0aW9uKG92ZXJsYXksIHZpZXdib3gpIHtcbiAgdmFyIHNob3cgPSBvdmVybGF5LnNob3csXG4gICAgICBtaW5ab29tID0gc2hvdyAmJiBzaG93Lm1pblpvb20sXG4gICAgICBtYXhab29tID0gc2hvdyAmJiBzaG93Lm1heFpvb20sXG4gICAgICBodG1sQ29udGFpbmVyID0gb3ZlcmxheS5odG1sQ29udGFpbmVyLFxuICAgICAgdmlzaWJsZSA9IHRydWU7XG5cbiAgaWYgKHNob3cpIHtcbiAgICBpZiAoXG4gICAgICAoaXNEZWZpbmVkKG1pblpvb20pICYmIG1pblpvb20gPiB2aWV3Ym94LnNjYWxlKSB8fFxuICAgICAgKGlzRGVmaW5lZChtYXhab29tKSAmJiBtYXhab29tIDwgdmlld2JveC5zY2FsZSlcbiAgICApIHtcbiAgICAgIHZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXRWaXNpYmxlKGh0bWxDb250YWluZXIsIHZpc2libGUpO1xuICB9XG5cbiAgdGhpcy5fdXBkYXRlT3ZlcmxheVNjYWxlKG92ZXJsYXksIHZpZXdib3gpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXlTY2FsZSA9IGZ1bmN0aW9uKG92ZXJsYXksIHZpZXdib3gpIHtcbiAgdmFyIHNob3VsZFNjYWxlID0gb3ZlcmxheS5zY2FsZSxcbiAgICAgIG1pblNjYWxlLFxuICAgICAgbWF4U2NhbGUsXG4gICAgICBodG1sQ29udGFpbmVyID0gb3ZlcmxheS5odG1sQ29udGFpbmVyO1xuXG4gIHZhciBzY2FsZSwgdHJhbnNmb3JtID0gJyc7XG5cbiAgaWYgKHNob3VsZFNjYWxlICE9PSB0cnVlKSB7XG5cbiAgICBpZiAoc2hvdWxkU2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICBtaW5TY2FsZSA9IDE7XG4gICAgICBtYXhTY2FsZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblNjYWxlID0gc2hvdWxkU2NhbGUubWluO1xuICAgICAgbWF4U2NhbGUgPSBzaG91bGRTY2FsZS5tYXg7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmaW5lZChtaW5TY2FsZSkgJiYgdmlld2JveC5zY2FsZSA8IG1pblNjYWxlKSB7XG4gICAgICBzY2FsZSA9ICgxIC8gdmlld2JveC5zY2FsZSB8fCAxKSAqIG1pblNjYWxlO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQobWF4U2NhbGUpICYmIHZpZXdib3guc2NhbGUgPiBtYXhTY2FsZSkge1xuICAgICAgc2NhbGUgPSAoMSAvIHZpZXdib3guc2NhbGUgfHwgMSkgKiBtYXhTY2FsZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNEZWZpbmVkKHNjYWxlKSkge1xuICAgIHRyYW5zZm9ybSA9ICdzY2FsZSgnICsgc2NhbGUgKyAnLCcgKyBzY2FsZSArICcpJztcbiAgfVxuXG4gIHNldFRyYW5zZm9ybShodG1sQ29udGFpbmVyLCB0cmFuc2Zvcm0pO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXlzVmlzaWJpbHR5ID0gZnVuY3Rpb24odmlld2JveCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHRoaXMuX292ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG4gICAgc2VsZi5fdXBkYXRlT3ZlcmxheVZpc2liaWx0eShvdmVybGF5LCB2aWV3Ym94KTtcbiAgfSk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuXG4gIC8vIHNjcm9sbC96b29tIGludGVncmF0aW9uXG5cbiAgZnVuY3Rpb24gdXBkYXRlVmlld2JveCh2aWV3Ym94KSB7XG4gICAgc2VsZi5fdXBkYXRlUm9vdCh2aWV3Ym94KTtcbiAgICBzZWxmLl91cGRhdGVPdmVybGF5c1Zpc2liaWx0eSh2aWV3Ym94KTtcblxuICAgIHNlbGYuc2hvdygpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5naW5nJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLmhpZGUoKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVwZGF0ZVZpZXdib3goZXZlbnQudmlld2JveCk7XG4gIH0pO1xuXG5cbiAgLy8gcmVtb3ZlIGludGVncmF0aW9uXG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUucmVtb3ZlJywgJ2Nvbm5lY3Rpb24ucmVtb3ZlJyBdLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG4gICAgdmFyIG92ZXJsYXlzID0gc2VsZi5nZXQoeyBlbGVtZW50OiBlbGVtZW50IH0pO1xuXG4gICAgZm9yRWFjaChvdmVybGF5cywgZnVuY3Rpb24obykge1xuICAgICAgc2VsZi5yZW1vdmUoby5pZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihlbGVtZW50KTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGRvbVJlbW92ZShjb250YWluZXIuaHRtbCk7XG4gICAgICB2YXIgaSA9IHNlbGYuX292ZXJsYXlDb250YWluZXJzLmluZGV4T2YoY29udGFpbmVyKTtcbiAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICBzZWxmLl9vdmVybGF5Q29udGFpbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuXG4gIC8vIG1vdmUgaW50ZWdyYXRpb25cblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jaGFuZ2VkJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihlbGVtZW50LCB0cnVlKTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGZvckVhY2goY29udGFpbmVyLm92ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG4gICAgICAgIHNlbGYuX3VwZGF0ZU92ZXJsYXkob3ZlcmxheSk7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fdXBkYXRlT3ZlcmxheUNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBtYXJrZXIgaW50ZWdyYXRpb24sIHNpbXBseSBhZGQgdGhlbSBvbiB0aGUgb3ZlcmxheXMgYXMgY2xhc3NlcywgdG9vLlxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1hcmtlci51cGRhdGUnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IHNlbGYuX2dldE92ZXJsYXlDb250YWluZXIoZS5lbGVtZW50LCB0cnVlKTtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBkb21DbGFzc2VzKGNvbnRhaW5lci5odG1sKVtlLmFkZCA/ICdhZGQnIDogJ3JlbW92ZSddKGUubWFya2VyKTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gY2xlYXIgb3ZlcmxheXMgd2l0aCBkaWFncmFtXG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uY2xlYXInLCB0aGlzLmNsZWFyLCB0aGlzKTtcbn07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3QocGFyZW50Tm9kZSkge1xuICB2YXIgcm9vdCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1vdmVybGF5LWNvbnRhaW5lclwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMDsgaGVpZ2h0OiAwO1wiIC8+J1xuICApO1xuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvb3QsIHBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aW9uKGVsLCB4LCB5KSB7XG4gIGFzc2lnbihlbC5zdHlsZSwgeyBsZWZ0OiB4ICsgJ3B4JywgdG9wOiB5ICsgJ3B4JyB9KTtcbn1cblxuZnVuY3Rpb24gc2V0VmlzaWJsZShlbCwgdmlzaWJsZSkge1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA9PT0gZmFsc2UgPyAnbm9uZScgOiAnJztcbn1cblxuZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsLCB0cmFuc2Zvcm0pIHtcblxuICBlbC5zdHlsZVsndHJhbnNmb3JtLW9yaWdpbiddID0gJ3RvcCBsZWZ0JztcblxuICBbICcnLCAnLW1zLScsICctd2Via2l0LScgXS5mb3JFYWNoKGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIGVsLnN0eWxlW3ByZWZpeCArICd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTtcbiAgfSk7XG59IiwiaW1wb3J0IE92ZXJsYXlzIGZyb20gJy4vT3ZlcmxheXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdvdmVybGF5cycgXSxcbiAgb3ZlcmxheXM6IFsgJ3R5cGUnLCBPdmVybGF5cyBdXG59OyIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIGNsZWFyIGFzIGRvbUNsZWFyLFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIG1hdGNoZXMgYXMgZG9tTWF0Y2hlcyxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIGV2ZW50IGFzIGRvbUV2ZW50XG59IGZyb20gJ21pbi1kb20nO1xuXG5cbnZhciBUT0dHTEVfU0VMRUNUT1IgPSAnLmRqcy1wYWxldHRlLXRvZ2dsZScsXG4gICAgRU5UUllfU0VMRUNUT1IgPSAnLmVudHJ5JyxcbiAgICBFTEVNRU5UX1NFTEVDVE9SID0gVE9HR0xFX1NFTEVDVE9SICsgJywgJyArIEVOVFJZX1NFTEVDVE9SO1xuXG52YXIgUEFMRVRURV9PUEVOX0NMUyA9ICdvcGVuJyxcbiAgICBQQUxFVFRFX1RXT19DT0xVTU5fQ0xTID0gJ3R3by1jb2x1bW4nO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIHBhbGV0dGUgY29udGFpbmluZyBtb2RlbGluZyBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFsZXR0ZShldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbigndG9vbC1tYW5hZ2VyLnVwZGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRvb2wgPSBldmVudC50b29sO1xuXG4gICAgc2VsZi51cGRhdGVUb29sSGlnaGxpZ2h0KHRvb2wpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaTE4bi5jaGFuZ2VkJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5fdXBkYXRlKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcblxuICAgIHNlbGYuX2RpYWdyYW1Jbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBzZWxmLl9yZWJ1aWxkKCk7XG4gIH0pO1xufVxuXG5QYWxldHRlLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhIHByb3ZpZGVyIHdpdGggdGhlIHBhbGV0dGVcbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtwcmlvcml0eT0xMDAwXVxuICogQHBhcmFtICB7UGFsZXR0ZVByb3ZpZGVyfSBwcm92aWRlclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwYWxldHRlUHJvdmlkZXIgPSB7XG4gKiAgIGdldFBhbGV0dGVFbnRyaWVzOiBmdW5jdGlvbigpIHtcbiAqICAgICByZXR1cm4gZnVuY3Rpb24oZW50cmllcykge1xuICogICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgLi4uZW50cmllcyxcbiAqICAgICAgICAgJ2VudHJ5LTEnOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICdNeSBFbnRyeScsXG4gKiAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsgYWxlcnQoXCJJIGhhdmUgYmVlbiBjbGlja2VkIVwiKTsgfVxuICogICAgICAgICB9XG4gKiAgICAgICB9O1xuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqXG4gKiBwYWxldHRlLnJlZ2lzdGVyUHJvdmlkZXIoODAwLCBwYWxldHRlUHJvdmlkZXIpO1xuICovXG5QYWxldHRlLnByb3RvdHlwZS5yZWdpc3RlclByb3ZpZGVyID0gZnVuY3Rpb24ocHJpb3JpdHksIHByb3ZpZGVyKSB7XG4gIGlmICghcHJvdmlkZXIpIHtcbiAgICBwcm92aWRlciA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLm9uKCdwYWxldHRlLmdldFByb3ZpZGVycycsIHByaW9yaXR5LCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnByb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcbiAgfSk7XG5cbiAgdGhpcy5fcmVidWlsZCgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhbGV0dGUgZW50cmllc1xuICpcbiAqIEByZXR1cm4ge09iamVjdDxzdHJpbmcsIFBhbGV0dGVFbnRyeURlc2NyaXB0b3I+fSBtYXAgb2YgZW50cmllc1xuICovXG5QYWxldHRlLnByb3RvdHlwZS5nZXRFbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoKTtcblxuICByZXR1cm4gcHJvdmlkZXJzLnJlZHVjZShhZGRQYWxldHRlRW50cmllcywge30pO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAoIXRoaXMuX2RpYWdyYW1Jbml0aWFsaXplZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoKTtcblxuICBpZiAoIXByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBwYXJlbnRDb250YWluZXIgPSB0aGlzLl9nZXRQYXJlbnRDb250YWluZXIoKTtcblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gZG9taWZ5KFBhbGV0dGUuSFRNTF9NQVJLVVApO1xuXG4gIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCBFTEVNRU5UX1NFTEVDVE9SLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgaWYgKGRvbU1hdGNoZXModGFyZ2V0LCBUT0dHTEVfU0VMRUNUT1IpKSB7XG4gICAgICByZXR1cm4gc2VsZi50b2dnbGUoKTtcbiAgICB9XG5cbiAgICBzZWxmLnRyaWdnZXIoJ2NsaWNrJywgZXZlbnQpO1xuICB9KTtcblxuICAvLyBwcmV2ZW50IGRyYWcgcHJvcGFnYXRpb25cbiAgZG9tRXZlbnQuYmluZChjb250YWluZXIsICdtb3VzZWRvd24nLCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9KTtcblxuICAvLyBwcmV2ZW50IGRyYWcgcHJvcGFnYXRpb25cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsIEVOVFJZX1NFTEVDVE9SLCAnZHJhZ3N0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5yZXNpemVkJywgdGhpcy5fbGF5b3V0Q2hhbmdlZCwgdGhpcyk7XG5cbiAgZXZlbnRCdXMuZmlyZSgncGFsZXR0ZS5jcmVhdGUnLCB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXJcbiAgfSk7XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS5fZ2V0UHJvdmlkZXJzID0gZnVuY3Rpb24oaWQpIHtcblxuICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudCh7XG4gICAgdHlwZTogJ3BhbGV0dGUuZ2V0UHJvdmlkZXJzJyxcbiAgICBwcm92aWRlcnM6IFtdXG4gIH0pO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoZXZlbnQpO1xuXG4gIHJldHVybiBldmVudC5wcm92aWRlcnM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBwYWxldHRlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gW3N0YXRlXSB7IG9wZW4sIHR3b0NvbHVtbiB9XG4gKi9cblBhbGV0dGUucHJvdG90eXBlLl90b2dnbGVTdGF0ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG5cbiAgc3RhdGUgPSBzdGF0ZSB8fCB7fTtcblxuICB2YXIgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50Q29udGFpbmVyKCksXG4gICAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIHR3b0NvbHVtbjtcblxuICB2YXIgY2xzID0gZG9tQ2xhc3Nlcyhjb250YWluZXIpO1xuXG4gIGlmICgndHdvQ29sdW1uJyBpbiBzdGF0ZSkge1xuICAgIHR3b0NvbHVtbiA9IHN0YXRlLnR3b0NvbHVtbjtcbiAgfSBlbHNlIHtcbiAgICB0d29Db2x1bW4gPSB0aGlzLl9uZWVkc0NvbGxhcHNlKHBhcmVudC5jbGllbnRIZWlnaHQsIHRoaXMuX2VudHJpZXMgfHwge30pO1xuICB9XG5cbiAgLy8gYWx3YXlzIHVwZGF0ZSB0d28gY29sdW1uXG4gIGNscy50b2dnbGUoUEFMRVRURV9UV09fQ09MVU1OX0NMUywgdHdvQ29sdW1uKTtcblxuICBpZiAoJ29wZW4nIGluIHN0YXRlKSB7XG4gICAgY2xzLnRvZ2dsZShQQUxFVFRFX09QRU5fQ0xTLCBzdGF0ZS5vcGVuKTtcbiAgfVxuXG4gIGV2ZW50QnVzLmZpcmUoJ3BhbGV0dGUuY2hhbmdlZCcsIHtcbiAgICB0d29Db2x1bW46IHR3b0NvbHVtbixcbiAgICBvcGVuOiB0aGlzLmlzT3BlbigpXG4gIH0pO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBlbnRyaWVzQ29udGFpbmVyID0gZG9tUXVlcnkoJy5kanMtcGFsZXR0ZS1lbnRyaWVzJywgdGhpcy5fY29udGFpbmVyKSxcbiAgICAgIGVudHJpZXMgPSB0aGlzLl9lbnRyaWVzID0gdGhpcy5nZXRFbnRyaWVzKCk7XG5cbiAgZG9tQ2xlYXIoZW50cmllc0NvbnRhaW5lcik7XG5cbiAgZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcblxuICAgIHZhciBncm91cGluZyA9IGVudHJ5Lmdyb3VwIHx8ICdkZWZhdWx0JztcblxuICAgIHZhciBjb250YWluZXIgPSBkb21RdWVyeSgnW2RhdGEtZ3JvdXA9JyArIGdyb3VwaW5nICsgJ10nLCBlbnRyaWVzQ29udGFpbmVyKTtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZ3JvdXBcIiBkYXRhLWdyb3VwPVwiJyArIGdyb3VwaW5nICsgJ1wiPjwvZGl2PicpO1xuICAgICAgZW50cmllc0NvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgIH1cblxuICAgIHZhciBodG1sID0gZW50cnkuaHRtbCB8fCAoXG4gICAgICBlbnRyeS5zZXBhcmF0b3IgP1xuICAgICAgICAnPGhyIGNsYXNzPVwic2VwYXJhdG9yXCIgLz4nIDpcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJlbnRyeVwiIGRyYWdnYWJsZT1cInRydWVcIj48L2Rpdj4nKTtcblxuXG4gICAgdmFyIGNvbnRyb2wgPSBkb21pZnkoaHRtbCk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuXG4gICAgaWYgKCFlbnRyeS5zZXBhcmF0b3IpIHtcbiAgICAgIGRvbUF0dHIoY29udHJvbCwgJ2RhdGEtYWN0aW9uJywgaWQpO1xuXG4gICAgICBpZiAoZW50cnkudGl0bGUpIHtcbiAgICAgICAgZG9tQXR0cihjb250cm9sLCAndGl0bGUnLCBlbnRyeS50aXRsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeS5jbGFzc05hbWUpIHtcbiAgICAgICAgYWRkQ2xhc3Nlcyhjb250cm9sLCBlbnRyeS5jbGFzc05hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICAgICAgY29udHJvbC5hcHBlbmRDaGlsZChkb21pZnkoJzxpbWcgc3JjPVwiJyArIGVudHJ5LmltYWdlVXJsICsgJ1wiPicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIG9wZW4gYWZ0ZXIgdXBkYXRlXG4gIHRoaXMub3BlbigpO1xufTtcblxuXG4vKipcbiAqIFRyaWdnZXIgYW4gYWN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgcGFsZXR0ZVxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gYWN0aW9uXG4gKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgZXZlbnQsIGF1dG9BY3RpdmF0ZSkge1xuICB2YXIgZW50cmllcyA9IHRoaXMuX2VudHJpZXMsXG4gICAgICBlbnRyeSxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBvcmlnaW5hbEV2ZW50LFxuICAgICAgYnV0dG9uID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gIGlmICghYnV0dG9uKSB7XG4gICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBlbnRyeSA9IGVudHJpZXNbZG9tQXR0cihidXR0b24sICdkYXRhLWFjdGlvbicpXTtcblxuICAvLyB3aGVuIHVzZXIgY2xpY2tzIG9uIHRoZSBwYWxldHRlIGFuZCBub3Qgb24gYW4gYWN0aW9uXG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBoYW5kbGVyID0gZW50cnkuYWN0aW9uO1xuXG4gIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuXG4gIC8vIHNpbXBsZSBhY3Rpb24gKHZpYSBjYWxsYmFjayBmdW5jdGlvbilcbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2snKSB7XG4gICAgICBoYW5kbGVyKG9yaWdpbmFsRXZlbnQsIGF1dG9BY3RpdmF0ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChoYW5kbGVyW2FjdGlvbl0pIHtcbiAgICAgIGhhbmRsZXJbYWN0aW9uXShvcmlnaW5hbEV2ZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNpbGVuY2Ugb3RoZXIgYWN0aW9uc1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX2xheW91dENoYW5nZWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdG9nZ2xlU3RhdGUoe30pO1xufTtcblxuLyoqXG4gKiBEbyB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRvIHR3byBjb2x1bW5zP1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhdmFpbGFibGVIZWlnaHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRyaWVzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuX25lZWRzQ29sbGFwc2UgPSBmdW5jdGlvbihhdmFpbGFibGVIZWlnaHQsIGVudHJpZXMpIHtcblxuICAvLyB0b3AgbWFyZ2luICsgYm90dG9tIHRvZ2dsZSArIGJvdHRvbSBtYXJnaW5cbiAgLy8gaW1wbGVtZW50b3JzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleVxuICAvLyBjaGFuZ2UgdGhlIHBhbGV0dGUgc3R5bGVzXG4gIHZhciBtYXJnaW4gPSAyMCArIDEwICsgMjA7XG5cbiAgdmFyIGVudHJpZXNIZWlnaHQgPSBPYmplY3Qua2V5cyhlbnRyaWVzKS5sZW5ndGggKiA0NjtcblxuICByZXR1cm4gYXZhaWxhYmxlSGVpZ2h0IDwgZW50cmllc0hlaWdodCArIG1hcmdpbjtcbn07XG5cbi8qKlxuICogQ2xvc2UgdGhlIHBhbGV0dGVcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcblxuICB0aGlzLl90b2dnbGVTdGF0ZSh7XG4gICAgb3BlbjogZmFsc2UsXG4gICAgdHdvQ29sdW1uOiBmYWxzZVxuICB9KTtcbn07XG5cblxuLyoqXG4gKiBPcGVuIHRoZSBwYWxldHRlXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdG9nZ2xlU3RhdGUoeyBvcGVuOiB0cnVlIH0pO1xufTtcblxuXG5QYWxldHRlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbihvcGVuKSB7XG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMub3BlbigpO1xuICB9XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS5pc0FjdGl2ZVRvb2wgPSBmdW5jdGlvbih0b29sKSB7XG4gIHJldHVybiB0b29sICYmIHRoaXMuX2FjdGl2ZVRvb2wgPT09IHRvb2w7XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS51cGRhdGVUb29sSGlnaGxpZ2h0ID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZW50cmllc0NvbnRhaW5lcixcbiAgICAgIHRvb2xzQ29udGFpbmVyO1xuXG4gIGlmICghdGhpcy5fdG9vbHNDb250YWluZXIpIHtcbiAgICBlbnRyaWVzQ29udGFpbmVyID0gZG9tUXVlcnkoJy5kanMtcGFsZXR0ZS1lbnRyaWVzJywgdGhpcy5fY29udGFpbmVyKTtcblxuICAgIHRoaXMuX3Rvb2xzQ29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWdyb3VwPXRvb2xzXScsIGVudHJpZXNDb250YWluZXIpO1xuICB9XG5cbiAgdG9vbHNDb250YWluZXIgPSB0aGlzLl90b29sc0NvbnRhaW5lcjtcblxuICBmb3JFYWNoKHRvb2xzQ29udGFpbmVyLmNoaWxkcmVuLCBmdW5jdGlvbih0b29sKSB7XG4gICAgdmFyIGFjdGlvbk5hbWUgPSB0b29sLmdldEF0dHJpYnV0ZSgnZGF0YS1hY3Rpb24nKTtcblxuICAgIGlmICghYWN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b29sQ2xhc3NlcyA9IGRvbUNsYXNzZXModG9vbCk7XG5cbiAgICBhY3Rpb25OYW1lID0gYWN0aW9uTmFtZS5yZXBsYWNlKCctdG9vbCcsICcnKTtcblxuICAgIGlmICh0b29sQ2xhc3Nlcy5jb250YWlucygnZW50cnknKSAmJiBhY3Rpb25OYW1lID09PSBuYW1lKSB7XG4gICAgICB0b29sQ2xhc3Nlcy5hZGQoJ2hpZ2hsaWdodGVkLWVudHJ5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvb2xDbGFzc2VzLnJlbW92ZSgnaGlnaGxpZ2h0ZWQtZW50cnknKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwYWxldHRlIGlzIG9wZW5lZC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHBhbGV0dGUub3BlbigpO1xuICpcbiAqIGlmIChwYWxldHRlLmlzT3BlbigpKSB7XG4gKiAgIC8vIHllcywgd2UgYXJlIG9wZW5cbiAqIH1cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHBhbGV0dGUgaXMgb3BlbmVkXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZG9tQ2xhc3Nlcyh0aGlzLl9jb250YWluZXIpLmhhcyhQQUxFVFRFX09QRU5fQ0xTKTtcbn07XG5cbi8qKlxuICogR2V0IGNvbnRhaW5lciB0aGUgcGFsZXR0ZSBsaXZlcyBpbi5cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICovXG5QYWxldHRlLnByb3RvdHlwZS5fZ2V0UGFyZW50Q29udGFpbmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jYW52YXMuZ2V0Q29udGFpbmVyKCk7XG59O1xuXG5cbi8qIG1hcmt1cCBkZWZpbml0aW9uICovXG5cblBhbGV0dGUuSFRNTF9NQVJLVVAgPVxuICAnPGRpdiBjbGFzcz1cImRqcy1wYWxldHRlXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtcGFsZXR0ZS1lbnRyaWVzXCI+PC9kaXY+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtcGFsZXR0ZS10b2dnbGVcIj48L2Rpdj4nICtcbiAgJzwvZGl2Pic7XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcykge1xuXG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3NlcyhlbGVtZW50KTtcblxuICB2YXIgYWN0dWFsQ2xhc3NOYW1lcyA9IGlzQXJyYXkoY2xhc3NOYW1lcykgPyBjbGFzc05hbWVzIDogY2xhc3NOYW1lcy5zcGxpdCgvXFxzKy9nKTtcbiAgYWN0dWFsQ2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykge1xuICAgIGNsYXNzZXMuYWRkKGNscyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRQYWxldHRlRW50cmllcyhlbnRyaWVzLCBwcm92aWRlcikge1xuXG4gIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0UGFsZXR0ZUVudHJpZXMoKTtcblxuICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgIHJldHVybiBlbnRyaWVzT3JVcGRhdGVyKGVudHJpZXMpO1xuICB9XG5cbiAgZm9yRWFjaChlbnRyaWVzT3JVcGRhdGVyLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICBlbnRyaWVzW2lkXSA9IGVudHJ5O1xuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn0iLCJpbXBvcnQgUGFsZXR0ZSBmcm9tICcuL1BhbGV0dGUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdwYWxldHRlJyBdLFxuICBwYWxldHRlOiBbICd0eXBlJywgUGFsZXR0ZSBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0Z1bmN0aW9uLFxuICBpc0RlZmluZWQsXG4gIG9taXQsXG4gIHNpemVcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgZG9taWZ5IGFzIGRvbWlmeSxcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIHJlbW92ZSBhcyBkb21SZW1vdmVcbn0gZnJvbSAnbWluLWRvbSc7XG5cbnZhciBEQVRBX1JFRiA9ICdkYXRhLWlkJztcblxudmFyIENMT1NFX0VWRU5UUyA9IFtcbiAgJ2NvbnRleHRQYWQuY2xvc2UnLFxuICAnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLFxuICAnY29tbWFuZFN0YWNrLmNoYW5nZWQnXG5dO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIHBvcHVwIG1lbnUgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBvZiBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBjYW52YXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW2NvbmZpZy5zY2FsZT17IG1pbjogMS4wLCBtYXg6IDEuNSB9XVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWluXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWF4XVxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb3B1cE1lbnUoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdmFyIHNjYWxlID0gaXNEZWZpbmVkKGNvbmZpZyAmJiBjb25maWcuc2NhbGUpID8gY29uZmlnLnNjYWxlIDoge1xuICAgIG1pbjogMSxcbiAgICBtYXg6IDEuNVxuICB9O1xuXG4gIHRoaXMuX2NvbmZpZyA9IHtcbiAgICBzY2FsZTogc2NhbGVcbiAgfTtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX3Byb3ZpZGVycyA9IHt9O1xuICB0aGlzLl9jdXJyZW50ID0ge307XG59XG5cblBvcHVwTWVudS4kaW5qZWN0ID0gW1xuICAnY29uZmlnLnBvcHVwTWVudScsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHBvcHVwIG1lbnUgcHJvdmlkZXJcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5PTEwMDBdXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByb3ZpZGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHBvcHVwTWVudVByb3ZpZGVyID0ge1xuICogICBnZXRQb3B1cE1lbnVFbnRyaWVzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gKiAgICAgcmV0dXJuIHtcbiAqICAgICAgICdlbnRyeS0xJzoge1xuICogICAgICAgICBsYWJlbDogJ015IEVudHJ5JyxcbiAqICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsgYWxlcnQoXCJJIGhhdmUgYmVlbiBjbGlja2VkIVwiKTsgfVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqXG4gKiBwb3B1cE1lbnUucmVnaXN0ZXJQcm92aWRlcignbXlNZW51SUQnLCBwb3B1cE1lbnVQcm92aWRlcik7XG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKGlkLCBwcmlvcml0eSwgcHJvdmlkZXIpIHtcbiAgaWYgKCFwcm92aWRlcikge1xuICAgIHByb3ZpZGVyID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMub24oJ3BvcHVwTWVudS5nZXRQcm92aWRlcnMuJyArIGlkLCBwcmlvcml0eSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIHBvcHVwIG1lbnUgaGFzIGVudHJpZXMuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbXB0eVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbihlbGVtZW50LCBwcm92aWRlcklkKSB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICB9XG5cbiAgaWYgKCFwcm92aWRlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm92aWRlcklkIHBhcmFtZXRlciBpcyBtaXNzaW5nJyk7XG4gIH1cblxuICB2YXIgcHJvdmlkZXJzID0gdGhpcy5fZ2V0UHJvdmlkZXJzKHByb3ZpZGVySWQpO1xuXG4gIGlmICghcHJvdmlkZXJzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgZW50cmllcyA9IHRoaXMuX2dldEVudHJpZXMoZWxlbWVudCwgcHJvdmlkZXJzKSxcbiAgICAgIGhlYWRlckVudHJpZXMgPSB0aGlzLl9nZXRIZWFkZXJFbnRyaWVzKGVsZW1lbnQsIHByb3ZpZGVycyk7XG5cbiAgdmFyIGhhc0VudHJpZXMgPSBzaXplKGVudHJpZXMpID4gMCxcbiAgICAgIGhhc0hlYWRlckVudHJpZXMgPSBoZWFkZXJFbnRyaWVzICYmIHNpemUoaGVhZGVyRW50cmllcykgPiAwO1xuXG4gIHJldHVybiAhaGFzRW50cmllcyAmJiAhaGFzSGVhZGVyRW50cmllcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgZW50cmllcyBhbmQgb3BlbiBwb3B1cCBtZW51IGF0IGdpdmVuIHBvc2l0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IGlkIHByb3ZpZGVyIGlkXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBvc2l0aW9uXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBwb3B1cCBtZW51IGluc3RhbmNlXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlkLCBwb3NpdGlvbikge1xuXG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoaWQpO1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRWxlbWVudCBpcyBtaXNzaW5nJyk7XG4gIH1cblxuICBpZiAoIXByb3ZpZGVycyB8fCAhcHJvdmlkZXJzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVnaXN0ZXJlZCBwcm92aWRlcnMgZm9yOiAnICsgaWQpO1xuICB9XG5cbiAgaWYgKCFwb3NpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigndGhlIHBvc2l0aW9uIGFyZ3VtZW50IGlzIG1pc3NpbmcnKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdGhpcy5fZW1pdCgnb3BlbicpO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudCA9IHtcbiAgICBjbGFzc05hbWU6IGlkLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH07XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLl9nZXRFbnRyaWVzKGVsZW1lbnQsIHByb3ZpZGVycyksXG4gICAgICBoZWFkZXJFbnRyaWVzID0gdGhpcy5fZ2V0SGVhZGVyRW50cmllcyhlbGVtZW50LCBwcm92aWRlcnMpO1xuXG4gIGN1cnJlbnQuZW50cmllcyA9IGFzc2lnbih7fSwgZW50cmllcywgaGVhZGVyRW50cmllcyk7XG5cbiAgY3VycmVudC5jb250YWluZXIgPSB0aGlzLl9jcmVhdGVDb250YWluZXIoKTtcblxuICBpZiAoc2l6ZShoZWFkZXJFbnRyaWVzKSkge1xuICAgIGN1cnJlbnQuY29udGFpbmVyLmFwcGVuZENoaWxkKFxuICAgICAgdGhpcy5fY3JlYXRlRW50cmllcyhoZWFkZXJFbnRyaWVzLCAnZGpzLXBvcHVwLWhlYWRlcicpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzaXplKGVudHJpZXMpKSB7XG4gICAgY3VycmVudC5jb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLl9jcmVhdGVFbnRyaWVzKGVudHJpZXMsICdkanMtcG9wdXAtYm9keScpXG4gICAgKTtcbiAgfVxuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXMsXG4gICAgICBwYXJlbnQgPSBjYW52YXMuZ2V0Q29udGFpbmVyKCk7XG5cbiAgdGhpcy5fYXR0YWNoQ29udGFpbmVyKGN1cnJlbnQuY29udGFpbmVyLCBwYXJlbnQsIHBvc2l0aW9uLmN1cnNvcik7XG4gIHRoaXMuX2JpbmRBdXRvQ2xvc2UoKTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBwb3B1cCBtZW51IGFuZCB1bmJpbmRzIHRoZSBldmVudCBoYW5kbGVycy5cbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2Nsb3NlJyk7XG5cbiAgdGhpcy5fdW5iaW5kQXV0b0Nsb3NlKCk7XG4gIGRvbVJlbW92ZSh0aGlzLl9jdXJyZW50LmNvbnRhaW5lcik7XG4gIHRoaXMuX2N1cnJlbnQuY29udGFpbmVyID0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYW4gb3BlbiBwb3B1cCBtZW51IGV4aXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgb3BlblxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9jdXJyZW50LmNvbnRhaW5lcjtcbn07XG5cblxuLyoqXG4gKiBUcmlnZ2VyIGFuIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gZW50cnkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKlxuICogQHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gY2FsbGJhY2ssIGlmIGFueVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihldmVudCkge1xuXG4gIC8vIHNpbGVuY2Ugb3RoZXIgYWN0aW9uc1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIHZhciBlbGVtZW50ID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0LFxuICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZWxlbWVudCwgREFUQV9SRUYpO1xuXG4gIHZhciBlbnRyeSA9IHRoaXMuX2dldEVudHJ5KGVudHJ5SWQpO1xuXG4gIGlmIChlbnRyeS5hY3Rpb24pIHtcbiAgICByZXR1cm4gZW50cnkuYWN0aW9uLmNhbGwobnVsbCwgZXZlbnQsIGVudHJ5KTtcbiAgfVxufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0UHJvdmlkZXJzID0gZnVuY3Rpb24oaWQpIHtcblxuICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudCh7XG4gICAgdHlwZTogJ3BvcHVwTWVudS5nZXRQcm92aWRlcnMuJyArIGlkLFxuICAgIHByb3ZpZGVyczogW11cbiAgfSk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZShldmVudCk7XG5cbiAgcmV0dXJuIGV2ZW50LnByb3ZpZGVycztcbn07XG5cblBvcHVwTWVudS5wcm90b3R5cGUuX2dldEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBwcm92aWRlcnMpIHtcblxuICB2YXIgZW50cmllcyA9IHt9O1xuXG4gIGZvckVhY2gocHJvdmlkZXJzLCBmdW5jdGlvbihwcm92aWRlcikge1xuXG4gICAgLy8gaGFuZGxlIGxlZ2FjeSBtZXRob2RcbiAgICBpZiAoIXByb3ZpZGVyLmdldFBvcHVwTWVudUVudHJpZXMpIHtcbiAgICAgIGZvckVhY2gocHJvdmlkZXIuZ2V0RW50cmllcyhlbGVtZW50KSwgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgdmFyIGlkID0gZW50cnkuaWQ7XG5cbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlcnkgZW50cnkgbXVzdCBoYXZlIHRoZSBpZCBwcm9wZXJ0eSBzZXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVudHJpZXNbaWRdID0gb21pdChlbnRyeSwgWyAnaWQnIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZW50cmllc09yVXBkYXRlciA9IHByb3ZpZGVyLmdldFBvcHVwTWVudUVudHJpZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXNPclVwZGF0ZXIoZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgICAgIGVudHJpZXNbaWRdID0gZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0SGVhZGVyRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3ZpZGVycykge1xuXG4gIHZhciBlbnRyaWVzID0ge307XG5cbiAgZm9yRWFjaChwcm92aWRlcnMsIGZ1bmN0aW9uKHByb3ZpZGVyKSB7XG5cbiAgICAvLyBoYW5kbGUgbGVnYWN5IG1ldGhvZFxuICAgIGlmICghcHJvdmlkZXIuZ2V0UG9wdXBNZW51SGVhZGVyRW50cmllcykge1xuICAgICAgaWYgKCFwcm92aWRlci5nZXRIZWFkZXJFbnRyaWVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yRWFjaChwcm92aWRlci5nZXRIZWFkZXJFbnRyaWVzKGVsZW1lbnQpLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICB2YXIgaWQgPSBlbnRyeS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVyeSBlbnRyeSBtdXN0IGhhdmUgdGhlIGlkIHByb3BlcnR5IHNldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllc1tpZF0gPSBvbWl0KGVudHJ5LCBbICdpZCcgXSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0UG9wdXBNZW51SGVhZGVyRW50cmllcyhlbGVtZW50KTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGVudHJpZXNPclVwZGF0ZXIpKSB7XG4gICAgICBlbnRyaWVzID0gZW50cmllc09yVXBkYXRlcihlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yRWFjaChlbnRyaWVzT3JVcGRhdGVyLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICAgICAgZW50cmllc1tpZF0gPSBlbnRyeTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJpZXM7XG5cblxufTtcblxuLyoqXG4gKiBHZXRzIGFuIGVudHJ5IGluc3RhbmNlIChlaXRoZXIgZW50cnkgb3IgaGVhZGVyRW50cnkpIGJ5IGlkLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gZW50cnlJZFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gZW50cnkgaW5zdGFuY2VcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0RW50cnkgPSBmdW5jdGlvbihlbnRyeUlkKSB7XG5cbiAgdmFyIGVudHJ5ID0gdGhpcy5fY3VycmVudC5lbnRyaWVzW2VudHJ5SWRdO1xuXG4gIGlmICghZW50cnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VudHJ5IG5vdCBmb3VuZCcpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJ5O1xufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZW1pdCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwb3B1cE1lbnUuJyArIGV2ZW50TmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHBvcHVwIG1lbnUgY29udGFpbmVyLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYSBET00gY29udGFpbmVyXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZGpzLXBvcHVwXCI+JyksXG4gICAgICBwb3NpdGlvbiA9IHRoaXMuX2N1cnJlbnQucG9zaXRpb24sXG4gICAgICBjbGFzc05hbWUgPSB0aGlzLl9jdXJyZW50LmNsYXNzTmFtZTtcblxuICBhc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgbGVmdDogcG9zaXRpb24ueCArICdweCcsXG4gICAgdG9wOiBwb3NpdGlvbi55ICsgJ3B4JyxcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xuICB9KTtcblxuICBkb21DbGFzc2VzKGNvbnRhaW5lcikuYWRkKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgY29udGFpbmVyIHRvIHRoZSBET00uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lclxuICogQHBhcmFtIHtPYmplY3R9IHBhcmVudFxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9hdHRhY2hDb250YWluZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHBhcmVudCwgY3Vyc29yKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBFdmVudCBoYW5kbGVyXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnLmVudHJ5JyAsJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoZXZlbnQpO1xuICB9KTtcblxuICB0aGlzLl91cGRhdGVTY2FsZShjb250YWluZXIpO1xuXG4gIC8vIEF0dGFjaCB0byBET01cbiAgcGFyZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgaWYgKGN1cnNvcikge1xuICAgIHRoaXMuX2Fzc3VyZUlzSW5ib3VuZHMoY29udGFpbmVyLCBjdXJzb3IpO1xuICB9XG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyBwb3B1cCBzdHlsZS50cmFuc2Zvcm0gd2l0aCByZXNwZWN0IHRvIHRoZSBjb25maWcgYW5kIHpvb20gbGV2ZWwuXG4gKlxuICogQG1ldGhvZCBfdXBkYXRlU2NhbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX3VwZGF0ZVNjYWxlID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gIHZhciB6b29tID0gdGhpcy5fY2FudmFzLnpvb20oKTtcblxuICB2YXIgc2NhbGVDb25maWcgPSB0aGlzLl9jb25maWcuc2NhbGUsXG4gICAgICBtaW5TY2FsZSxcbiAgICAgIG1heFNjYWxlLFxuICAgICAgc2NhbGUgPSB6b29tO1xuXG4gIGlmIChzY2FsZUNvbmZpZyAhPT0gdHJ1ZSkge1xuXG4gICAgaWYgKHNjYWxlQ29uZmlnID09PSBmYWxzZSkge1xuICAgICAgbWluU2NhbGUgPSAxO1xuICAgICAgbWF4U2NhbGUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5TY2FsZSA9IHNjYWxlQ29uZmlnLm1pbjtcbiAgICAgIG1heFNjYWxlID0gc2NhbGVDb25maWcubWF4O1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQobWluU2NhbGUpICYmIHpvb20gPCBtaW5TY2FsZSkge1xuICAgICAgc2NhbGUgPSBtaW5TY2FsZTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZpbmVkKG1heFNjYWxlKSAmJiB6b29tID4gbWF4U2NhbGUpIHtcbiAgICAgIHNjYWxlID0gbWF4U2NhbGU7XG4gICAgfVxuXG4gIH1cblxuICBzZXRUcmFuc2Zvcm0oY29udGFpbmVyLCAnc2NhbGUoJyArIHNjYWxlICsgJyknKTtcbn07XG5cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVudSBpcyBhbHdheXMgZnVsbHkgc2hvd25cbiAqXG4gKiBAbWV0aG9kIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjb250YWluZXJcbiAqIEBwYXJhbSAge1Bvc2l0aW9ufSBjdXJzb3Ige3gsIHl9XG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2Fzc3VyZUlzSW5ib3VuZHMgPSBmdW5jdGlvbihjb250YWluZXIsIGN1cnNvcikge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzLFxuICAgICAgY2xpZW50UmVjdCA9IGNhbnZhcy5fY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHZhciBjb250YWluZXJYID0gY29udGFpbmVyLm9mZnNldExlZnQsXG4gICAgICBjb250YWluZXJZID0gY29udGFpbmVyLm9mZnNldFRvcCxcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLnNjcm9sbFdpZHRoLFxuICAgICAgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCxcbiAgICAgIG92ZXJBeGlzID0ge30sXG4gICAgICBsZWZ0LCB0b3A7XG5cbiAgdmFyIGN1cnNvclBvc2l0aW9uID0ge1xuICAgIHg6IGN1cnNvci54IC0gY2xpZW50UmVjdC5sZWZ0LFxuICAgIHk6IGN1cnNvci55IC0gY2xpZW50UmVjdC50b3BcbiAgfTtcblxuICBpZiAoY29udGFpbmVyWCArIGNvbnRhaW5lcldpZHRoID4gY2xpZW50UmVjdC53aWR0aCkge1xuICAgIG92ZXJBeGlzLnggPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lclkgKyBjb250YWluZXJIZWlnaHQgPiBjbGllbnRSZWN0LmhlaWdodCkge1xuICAgIG92ZXJBeGlzLnkgPSB0cnVlO1xuICB9XG5cbiAgaWYgKG92ZXJBeGlzLnggJiYgb3ZlckF4aXMueSkge1xuICAgIGxlZnQgPSBjdXJzb3JQb3NpdGlvbi54IC0gY29udGFpbmVyV2lkdGggKyAncHgnO1xuICAgIHRvcCA9IGN1cnNvclBvc2l0aW9uLnkgLSBjb250YWluZXJIZWlnaHQgKyAncHgnO1xuICB9IGVsc2UgaWYgKG92ZXJBeGlzLngpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCAtIGNvbnRhaW5lcldpZHRoICsgJ3B4JztcbiAgICB0b3AgPSBjdXJzb3JQb3NpdGlvbi55ICsgJ3B4JztcbiAgfSBlbHNlIGlmIChvdmVyQXhpcy55ICYmIGN1cnNvclBvc2l0aW9uLnkgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCArICdweCc7XG4gICAgdG9wID0gMTAgKyAncHgnO1xuICB9IGVsc2UgaWYgKG92ZXJBeGlzLnkpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCArICdweCc7XG4gICAgdG9wID0gY3Vyc29yUG9zaXRpb24ueSAtIGNvbnRhaW5lckhlaWdodCArICdweCc7XG4gIH1cblxuICBhc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7IGxlZnQ6IGxlZnQsIHRvcDogdG9wIH0sIHsgdmlzaWJpbGl0eTogJ3Zpc2libGUnLCAnei1pbmRleCc6IDEwMDAgfSk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGxpc3Qgb2YgZW50cmllcyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgRE9NIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGVudHJpZXMgYW4gYXJyYXkgb2YgZW50cnkgb2JqZWN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZW50cnkgY29udGFpbmVyXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhIERPTSBjb250YWluZXJcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fY3JlYXRlRW50cmllcyA9IGZ1bmN0aW9uKGVudHJpZXMsIGNsYXNzTmFtZSkge1xuXG4gIHZhciBlbnRyaWVzQ29udGFpbmVyID0gZG9taWZ5KCc8ZGl2PicpLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgZG9tQ2xhc3NlcyhlbnRyaWVzQ29udGFpbmVyKS5hZGQoY2xhc3NOYW1lKTtcblxuICBmb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgIHZhciBlbnRyeUNvbnRhaW5lciA9IHNlbGYuX2NyZWF0ZUVudHJ5KGVudHJ5LCBpZCk7XG4gICAgZW50cmllc0NvbnRhaW5lci5hcHBlbmRDaGlsZChlbnRyeUNvbnRhaW5lcik7XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzQ29udGFpbmVyO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBzaW5nbGUgZW50cnkgYW5kIHJldHVybnMgaXQgYXMgYSBET00gY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZW50cnlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGEgRE9NIGNvbnRhaW5lclxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9jcmVhdGVFbnRyeSA9IGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuXG4gIHZhciBlbnRyeUNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdj4nKSxcbiAgICAgIGVudHJ5Q2xhc3NlcyA9IGRvbUNsYXNzZXMoZW50cnlDb250YWluZXIpO1xuXG4gIGVudHJ5Q2xhc3Nlcy5hZGQoJ2VudHJ5Jyk7XG5cbiAgaWYgKGVudHJ5LmNsYXNzTmFtZSkge1xuICAgIGVudHJ5LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICBlbnRyeUNsYXNzZXMuYWRkKGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBkb21BdHRyKGVudHJ5Q29udGFpbmVyLCBEQVRBX1JFRiwgaWQpO1xuXG4gIGlmIChlbnRyeS5sYWJlbCkge1xuICAgIHZhciBsYWJlbCA9IGRvbWlmeSgnPHNwYW4+Jyk7XG4gICAgbGFiZWwudGV4dENvbnRlbnQgPSBlbnRyeS5sYWJlbDtcbiAgICBlbnRyeUNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7XG4gIH1cblxuICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICBlbnRyeUNvbnRhaW5lci5hcHBlbmRDaGlsZChkb21pZnkoJzxpbWcgc3JjPVwiJyArIGVudHJ5LmltYWdlVXJsICsgJ1wiIC8+JykpO1xuICB9XG5cbiAgaWYgKGVudHJ5LmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgIGVudHJ5Q2xhc3Nlcy5hZGQoJ2FjdGl2ZScpO1xuICB9XG5cbiAgaWYgKGVudHJ5LmRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgZW50cnlDbGFzc2VzLmFkZCgnZGlzYWJsZWQnKTtcbiAgfVxuXG4gIGlmIChlbnRyeS50aXRsZSkge1xuICAgIGVudHJ5Q29udGFpbmVyLnRpdGxlID0gZW50cnkudGl0bGU7XG4gIH1cblxuICByZXR1cm4gZW50cnlDb250YWluZXI7XG59O1xuXG5cbi8qKlxuICogU2V0IHVwIGxpc3RlbmVyIHRvIGNsb3NlIHBvcHVwIGF1dG9tYXRpY2FsbHkgb24gY2VydGFpbiBldmVudHMuXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2JpbmRBdXRvQ2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMub25jZShDTE9TRV9FVkVOVFMsIHRoaXMuY2xvc2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSB0aGUgYXV0by1jbG9zaW5nIGxpc3RlbmVyLlxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl91bmJpbmRBdXRvQ2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMub2ZmKENMT1NFX0VWRU5UUywgdGhpcy5jbG9zZSwgdGhpcyk7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBzZXRUcmFuc2Zvcm0oZWxlbWVudCwgdHJhbnNmb3JtKSB7XG4gIGVsZW1lbnQuc3R5bGVbJ3RyYW5zZm9ybS1vcmlnaW4nXSA9ICd0b3AgbGVmdCc7XG5cbiAgWyAnJywgJy1tcy0nLCAnLXdlYmtpdC0nIF0uZm9yRWFjaChmdW5jdGlvbihwcmVmaXgpIHtcbiAgICBlbGVtZW50LnN0eWxlW3ByZWZpeCArICd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTtcbiAgfSk7XG59IiwiaW1wb3J0IFBvcHVwTWVudSBmcm9tICcuL1BvcHVwTWVudSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3BvcHVwTWVudScgXSxcbiAgcG9wdXBNZW51OiBbICd0eXBlJywgUG9wdXBNZW51IF1cbn07XG4iLCJpbXBvcnQge1xyXG4gIGZvckVhY2hcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXHJcbiAgYXR0ciBhcyBzdmdBdHRyLFxyXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcclxuICBjbG9uZSBhcyBzdmdDbG9uZSxcclxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxyXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcclxufSBmcm9tICd0aW55LXN2Zyc7XHJcblxyXG5pbXBvcnQgeyBxdWVyeSBhcyBkb21RdWVyeSB9IGZyb20gJ21pbi1kb20nO1xyXG5cclxuaW1wb3J0IHsgZ2V0VmlzdWFsIH0gZnJvbSAnLi4vLi4vdXRpbC9HcmFwaGljc1V0aWwnO1xyXG5cclxudmFyIE1BUktFUl9UWVBFUyA9IFtcclxuICAnbWFya2VyLXN0YXJ0JyxcclxuICAnbWFya2VyLW1pZCcsXHJcbiAgJ21hcmtlci1lbmQnXHJcbl07XHJcblxyXG52YXIgTk9ERVNfQ0FOX0hBVkVfTUFSS0VSID0gW1xyXG4gICdjaXJjbGUnLFxyXG4gICdlbGxpcHNlJyxcclxuICAnbGluZScsXHJcbiAgJ3BhdGgnLFxyXG4gICdwb2x5Z29uJyxcclxuICAncG9seWxpbmUnLFxyXG4gICdyZWN0J1xyXG5dO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHN1cHBvcnQgZm9yIHByZXZpZXdzIG9mIG1vdmluZy9yZXNpemluZyBlbGVtZW50cy5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFByZXZpZXdTdXBwb3J0KGVsZW1lbnRSZWdpc3RyeSwgZXZlbnRCdXMsIGNhbnZhcywgc3R5bGVzKSB7XHJcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xyXG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcclxuICB0aGlzLl9zdHlsZXMgPSBzdHlsZXM7XHJcblxyXG4gIHRoaXMuX2Nsb25lZE1hcmtlcnMgPSB7fTtcclxuXHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbignZHJhZy5jbGVhbnVwJywgZnVuY3Rpb24oKSB7XHJcbiAgICBmb3JFYWNoKHNlbGYuX2Nsb25lZE1hcmtlcnMsIGZ1bmN0aW9uKGNsb25lZE1hcmtlcikge1xyXG4gICAgICBzdmdSZW1vdmUoY2xvbmVkTWFya2VyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNlbGYuX2Nsb25lZE1hcmtlcnMgPSB7fTtcclxuICB9KTtcclxufVxyXG5cclxuUHJldmlld1N1cHBvcnQuJGluamVjdCA9IFtcclxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnLFxyXG4gICdzdHlsZXMnXHJcbl07XHJcblxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgZ3JhcGhpY3Mgb2YgYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLmdldEdmeCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBtb3ZlIHByZXZpZXcgb2YgYSBnaXZlbiBzaGFwZSB0byBhIGdpdmVuIHN2ZyBncm91cC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdyb3VwXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2dmeF1cclxuICpcclxuICogQHJldHVybiB7U1ZHRWxlbWVudH0gZHJhZ2dlclxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLmFkZERyYWdnZXIgPSBmdW5jdGlvbihlbGVtZW50LCBncm91cCwgZ2Z4KSB7XHJcbiAgZ2Z4ID0gZ2Z4IHx8IHRoaXMuZ2V0R2Z4KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZHJhZ2dlciA9IHN2Z0Nsb25lKGdmeCk7XHJcbiAgdmFyIGJib3ggPSBnZnguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gIHRoaXMuX2Nsb25lTWFya2VycyhnZXRWaXN1YWwoZHJhZ2dlcikpO1xyXG5cclxuICBzdmdBdHRyKGRyYWdnZXIsIHRoaXMuX3N0eWxlcy5jbHMoJ2Rqcy1kcmFnZ2VyJywgW10sIHtcclxuICAgIHg6IGJib3gudG9wLFxyXG4gICAgeTogYmJveC5sZWZ0XHJcbiAgfSkpO1xyXG5cclxuICBzdmdBcHBlbmQoZ3JvdXAsIGRyYWdnZXIpO1xyXG5cclxuICByZXR1cm4gZHJhZ2dlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgcmVzaXplIHByZXZpZXcgb2YgYSBnaXZlbiBzaGFwZSB0byBhIGdpdmVuIHN2ZyBncm91cC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdyb3VwXHJcbiAqXHJcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IGZyYW1lXHJcbiAqL1xyXG5QcmV2aWV3U3VwcG9ydC5wcm90b3R5cGUuYWRkRnJhbWUgPSBmdW5jdGlvbihzaGFwZSwgZ3JvdXApIHtcclxuXHJcbiAgdmFyIGZyYW1lID0gc3ZnQ3JlYXRlKCdyZWN0Jywge1xyXG4gICAgY2xhc3M6ICdkanMtcmVzaXplLW92ZXJsYXknLFxyXG4gICAgd2lkdGg6ICBzaGFwZS53aWR0aCxcclxuICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0LFxyXG4gICAgeDogc2hhcGUueCxcclxuICAgIHk6IHNoYXBlLnlcclxuICB9KTtcclxuXHJcbiAgc3ZnQXBwZW5kKGdyb3VwLCBmcmFtZSk7XHJcblxyXG4gIHJldHVybiBmcmFtZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBhbGwgbWFya2VycyByZWZlcmVuY2VkIGJ5IGEgbm9kZSBhbmQgaXRzIGNoaWxkIG5vZGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLl9jbG9uZU1hcmtlcnMgPSBmdW5jdGlvbihnZngpIHtcclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIGlmIChnZnguY2hpbGROb2Rlcykge1xyXG5cclxuICAgIC8vIFRPRE86IHVzZSBmb3JFYWNoIG9uY2Ugd2UgZHJvcCBQaGFudG9tSlNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2Z4LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGNsb25lIG1hcmtlcnMgb2YgY2hpbGQgbm9kZXNcclxuICAgICAgc2VsZi5fY2xvbmVNYXJrZXJzKGdmeC5jaGlsZE5vZGVzWyBpIF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKCFjYW5IYXZlTWFya2VyKGdmeCkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIE1BUktFUl9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uKG1hcmtlclR5cGUpIHtcclxuICAgIGlmIChzdmdBdHRyKGdmeCwgbWFya2VyVHlwZSkpIHtcclxuICAgICAgdmFyIG1hcmtlciA9IGdldE1hcmtlcihnZngsIG1hcmtlclR5cGUsIHNlbGYuX2NhbnZhcy5nZXRDb250YWluZXIoKSk7XHJcblxyXG4gICAgICBzZWxmLl9jbG9uZU1hcmtlcihnZngsIG1hcmtlciwgbWFya2VyVHlwZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgbWFya2VyIHJlZmVyZW5jZWQgYnkgYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBtYXJrZXJcclxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmtlclR5cGVcclxuICovXHJcblByZXZpZXdTdXBwb3J0LnByb3RvdHlwZS5fY2xvbmVNYXJrZXIgPSBmdW5jdGlvbihnZngsIG1hcmtlciwgbWFya2VyVHlwZSkge1xyXG4gIHZhciBtYXJrZXJJZCA9IG1hcmtlci5pZDtcclxuXHJcbiAgdmFyIGNsb25lZE1hcmtlciA9IHRoaXMuX2Nsb25lZE1hcmtlcnNbIG1hcmtlcklkIF07XHJcblxyXG4gIGlmICghY2xvbmVkTWFya2VyKSB7XHJcbiAgICBjbG9uZWRNYXJrZXIgPSBzdmdDbG9uZShtYXJrZXIpO1xyXG5cclxuICAgIHZhciBjbG9uZWRNYXJrZXJJZCA9IG1hcmtlcklkICsgJy1jbG9uZSc7XHJcblxyXG4gICAgY2xvbmVkTWFya2VyLmlkID0gY2xvbmVkTWFya2VySWQ7XHJcblxyXG4gICAgc3ZnQ2xhc3NlcyhjbG9uZWRNYXJrZXIpXHJcbiAgICAgIC5hZGQoJ2Rqcy1kcmFnZ2VyJylcclxuICAgICAgLmFkZCgnZGpzLWRyYWdnZXItbWFya2VyJyk7XHJcblxyXG4gICAgdGhpcy5fY2xvbmVkTWFya2Vyc1sgbWFya2VySWQgXSA9IGNsb25lZE1hcmtlcjtcclxuXHJcbiAgICB2YXIgZGVmcyA9IGRvbVF1ZXJ5KCdkZWZzJywgdGhpcy5fY2FudmFzLl9zdmcpO1xyXG5cclxuICAgIGlmICghZGVmcykge1xyXG4gICAgICBkZWZzID0gc3ZnQ3JlYXRlKCdkZWZzJyk7XHJcblxyXG4gICAgICBzdmdBcHBlbmQodGhpcy5fY2FudmFzLl9zdmcsIGRlZnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN2Z0FwcGVuZChkZWZzLCBjbG9uZWRNYXJrZXIpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlZmVyZW5jZSA9IGlkVG9SZWZlcmVuY2UodGhpcy5fY2xvbmVkTWFya2Vyc1sgbWFya2VySWQgXS5pZCk7XHJcblxyXG4gIHN2Z0F0dHIoZ2Z4LCBtYXJrZXJUeXBlLCByZWZlcmVuY2UpO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG4vKipcclxuICogR2V0IG1hcmtlciBvZiBnaXZlbiB0eXBlIHJlZmVyZW5jZWQgYnkgbm9kZS5cclxuICpcclxuICogQHBhcmFtIHtOb2RlfSBub2RlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrZXJUeXBlXHJcbiAqIEBwYXJhbSB7Tm9kZX0gW3BhcmVudE5vZGVdXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX1cclxuICovXHJcbmZ1bmN0aW9uIGdldE1hcmtlcihub2RlLCBtYXJrZXJUeXBlLCBwYXJlbnROb2RlKSB7XHJcbiAgdmFyIGlkID0gcmVmZXJlbmNlVG9JZChzdmdBdHRyKG5vZGUsIG1hcmtlclR5cGUpKTtcclxuXHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KCdtYXJrZXIjJyArIGlkLCBwYXJlbnROb2RlIHx8IGRvY3VtZW50KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBJRCBvZiBmcmFnbWVudCB3aXRoaW4gY3VycmVudCBkb2N1bWVudCBmcm9tIGl0cyBmdW5jdGlvbmFsIElSSSByZWZlcmVuY2UuXHJcbiAqIFJlZmVyZW5jZXMgbWF5IHVzZSBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cclxuZnVuY3Rpb24gcmVmZXJlbmNlVG9JZChyZWZlcmVuY2UpIHtcclxuICByZXR1cm4gcmVmZXJlbmNlLm1hdGNoKC91cmxcXChbJ1wiXT8jKFteJ1wiXSopWydcIl0/XFwpLylbMV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgZnVuY3Rpb25hbCBJUkkgcmVmZXJlbmNlIGZvciBnaXZlbiBJRCBvZiBmcmFnbWVudCB3aXRoaW4gY3VycmVudCBkb2N1bWVudC5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAqL1xyXG5mdW5jdGlvbiBpZFRvUmVmZXJlbmNlKGlkKSB7XHJcbiAgcmV0dXJuICd1cmwoIycgKyBpZCArICcpJztcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIHdldGhlciBub2RlIHR5cGUgY2FuIGhhdmUgbWFya2VyIGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIGNhbkhhdmVNYXJrZXIobm9kZSkge1xyXG4gIHJldHVybiBOT0RFU19DQU5fSEFWRV9NQVJLRVIuaW5kZXhPZihub2RlLm5vZGVOYW1lKSAhPT0gLTE7XHJcbn0iLCJpbXBvcnQgUHJldmlld1N1cHBvcnQgZnJvbSAnLi9QcmV2aWV3U3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3ByZXZpZXdTdXBwb3J0JyBdLFxuICBwcmV2aWV3U3VwcG9ydDogWyAndHlwZScsIFByZXZpZXdTdXBwb3J0IF1cbn07XG4iLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBhbGxvdyByZXBsYWNpbmcgb2YgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlcGxhY2UobW9kZWxpbmcpIHtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5SZXBsYWNlLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG9sZEVsZW1lbnQgLSBFbGVtZW50IHRvIGJlIHJlcGxhY2VkXG4gKiBAcGFyYW0ge09iamVjdH0gIG5ld0VsZW1lbnREYXRhIC0gQ29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IGVsZW1lbnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgdGhlIG5ldyBib3VuZHMgYW5kIHR5cGUuXG4gKiBAcGFyYW0ge09iamVjdH0gIG9wdGlvbnMgLSBDdXN0b20gb3B0aW9ucyB0aGF0IHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGNvbnRleHQuIEl0IGNhbiBiZSB1c2VkIHRvIGluamVjdCBkYXRhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5lZWRlZCBpbiB0aGUgY29tbWFuZCBjaGFpbi4gRm9yIGV4YW1wbGUgaXQgY291bGQgYmUgdXNlZCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRidXMub24oJ2NvbW1hbmRTdGFjay5zaGFwZS5yZXBsYWNlLnBvc3RFeGVjdXRlJykgdG8gY2hhbmdlIHNoYXBlIGF0dHJpYnV0ZXMgYWZ0ZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlIGNyZWF0aW9uLlxuICovXG5SZXBsYWNlLnByb3RvdHlwZS5yZXBsYWNlRWxlbWVudCA9IGZ1bmN0aW9uKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnREYXRhLCBvcHRpb25zKSB7XG5cbiAgaWYgKG9sZEVsZW1lbnQud2F5cG9pbnRzKSB7XG5cbiAgICAvLyBUT0RPKG5pa2t1KTogd2UgZG8gbm90IHJlcGxhY2UgY29ubmVjdGlvbnMsIHlldFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHdpZHRoID0gbmV3RWxlbWVudERhdGEud2lkdGggfHwgb2xkRWxlbWVudC53aWR0aCxcbiAgICAgIGhlaWdodCA9IG5ld0VsZW1lbnREYXRhLmhlaWdodCB8fCBvbGRFbGVtZW50LmhlaWdodCxcbiAgICAgIHggPSBuZXdFbGVtZW50RGF0YS54IHx8IG9sZEVsZW1lbnQueCxcbiAgICAgIHkgPSBuZXdFbGVtZW50RGF0YS55IHx8IG9sZEVsZW1lbnQueSxcbiAgICAgIGNlbnRlclggPSByb3VuZCh4ICsgd2lkdGggLyAyKSxcbiAgICAgIGNlbnRlclkgPSByb3VuZCh5ICsgaGVpZ2h0IC8gMik7XG5cbiAgLy8gbW9kZWxpbmcgQVBJIHJlcXVpcmVzIGNlbnRlciBjb29yZGluYXRlcyxcbiAgLy8gYWNjb3VudCBmb3IgdGhhdCB3aGVuIGhhbmRsaW5nIHNoYXBlIGJvdW5kc1xuXG4gIHJldHVybiBtb2RlbGluZy5yZXBsYWNlU2hhcGUoXG4gICAgb2xkRWxlbWVudCxcbiAgICBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIG5ld0VsZW1lbnREYXRhLFxuICAgICAge1xuICAgICAgICB4OiBjZW50ZXJYLFxuICAgICAgICB5OiBjZW50ZXJZLFxuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICB9XG4gICAgKSxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuIiwiaW1wb3J0IFJlcGxhY2UgZnJvbSAnLi9SZXBsYWNlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAncmVwbGFjZScgXSxcbiAgcmVwbGFjZTogWyAndHlwZScsIFJlcGxhY2UgXVxufTsiLCJpbXBvcnQge1xuICBwaWNrLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICByZXNpemVCb3VuZHMsXG4gIGVuc3VyZUNvbnN0cmFpbnRzLFxuICBjb21wdXRlQ2hpbGRyZW5CQm94LFxuICBnZXRNaW5SZXNpemVCb3VuZHNcbn0gZnJvbSAnLi9SZXNpemVVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRNaWQsXG4gIHJvdW5kQm91bmRzXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIERFRkFVTFRfTUlOX1dJRFRIID0gMTA7XG5cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIHJlc2l6aW5nIG9mIHNoYXBlcyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBhcmUgcGFydCBvZiBzaGFwZSByZXNpemU6XG4gKlxuICogICogYWRkaW5nIHJlc2l6ZSBoYW5kbGVzLFxuICogICogY3JlYXRpbmcgYSB2aXN1YWwgZHVyaW5nIHJlc2l6ZVxuICogICogY2hlY2tpbmcgcmVzaXplIHJ1bGVzXG4gKiAgKiBjb21taXR0aW5nIGEgY2hhbmdlIG9uY2UgZmluaXNoZWRcbiAqXG4gKlxuICogIyMgQ3VzdG9taXppbmdcbiAqXG4gKiBJdCdzIHBvc3NpYmxlIHRvIGN1c3RvbWl6ZSB0aGUgcmVzaXppbmcgYmVoYXZpb3VyIGJ5IGludGVyY2VwdGluZyAncmVzaXplLnN0YXJ0J1xuICogYW5kIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgdGhyb3VnaCB0aGUgJ2NvbnRleHQnOlxuICpcbiAqICAgKiBtaW5EaW1lbnNpb25zICh7IHdpZHRoLCBoZWlnaHQgfSk6IG1pbmltdW0gc2hhcGUgZGltZW5zaW9uc1xuICpcbiAqICAgKiBjaGlsZHJlbkJveFBhZGRpbmcgKHsgbGVmdCwgdG9wLCBib3R0b20sIHJpZ2h0IH0gfHwgbnVtYmVyKTpcbiAqICAgICBnYXAgYmV0d2VlbiB0aGUgbWluaW11bSBib3VuZGluZyBib3ggYW5kIHRoZSBjb250YWluZXJcbiAqXG4gKiBmLmV4OlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCAxNTAwLCBmdW5jdGlvbihldmVudCkge1xuICogICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gKlxuICogIGNvbnRleHQubWluRGltZW5zaW9ucyA9IHsgd2lkdGg6IDE0MCwgaGVpZ2h0OiAxMjAgfTtcbiAqXG4gKiAgLy8gUGFzc2luZyBnZW5lcmFsIHBhZGRpbmdcbiAqICBjb250ZXh0LmNoaWxkcmVuQm94UGFkZGluZyA9IDMwO1xuICpcbiAqICAvLyBQYXNzaW5nIHBhZGRpbmcgdG8gYSBzcGVjaWZpYyBzaWRlXG4gKiAgY29udGV4dC5jaGlsZHJlbkJveFBhZGRpbmcubGVmdCA9IDIwO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplKGV2ZW50QnVzLCBydWxlcywgbW9kZWxpbmcsIGRyYWdnaW5nKSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cblxuICAvKipcbiAgICogSGFuZGxlIHJlc2l6ZSBtb3ZlIGJ5IHNwZWNpZmllZCBkZWx0YS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogQHBhcmFtIHtQb2ludH0gZGVsdGFcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmUoY29udGV4dCwgZGVsdGEpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgICByZXNpemVDb25zdHJhaW50cyA9IGNvbnRleHQucmVzaXplQ29uc3RyYWludHMsXG4gICAgICAgIG5ld0JvdW5kcztcblxuICAgIGNvbnRleHQuZGVsdGEgPSBkZWx0YTtcblxuICAgIG5ld0JvdW5kcyA9IHJlc2l6ZUJvdW5kcyhzaGFwZSwgZGlyZWN0aW9uLCBkZWx0YSk7XG5cbiAgICAvLyBlbnN1cmUgY29uc3RyYWludHMgZHVyaW5nIHJlc2l6ZVxuICAgIGNvbnRleHQubmV3Qm91bmRzID0gZW5zdXJlQ29uc3RyYWludHMobmV3Qm91bmRzLCByZXNpemVDb25zdHJhaW50cyk7XG5cbiAgICAvLyB1cGRhdGUgKyBjYWNoZSBleGVjdXRhYmxlIHN0YXRlXG4gICAgY29udGV4dC5jYW5FeGVjdXRlID0gc2VsZi5jYW5SZXNpemUoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHJlc2l6ZSBzdGFydC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVTdGFydChjb250ZXh0KSB7XG5cbiAgICB2YXIgcmVzaXplQ29uc3RyYWludHMgPSBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzLFxuXG4gICAgICAgIC8vIGV2YWx1YXRlIG1pbkJvdW5kcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWluQm91bmRzID0gY29udGV4dC5taW5Cb3VuZHM7XG5cbiAgICBpZiAocmVzaXplQ29uc3RyYWludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtaW5Cb3VuZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWluQm91bmRzID0gc2VsZi5jb21wdXRlTWluUmVzaXplQm94KGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnRleHQucmVzaXplQ29uc3RyYWludHMgPSB7XG4gICAgICBtaW46IGFzVFJCTChtaW5Cb3VuZHMpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVzaXplIGVuZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVFbmQoY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgaWYgKGNhbkV4ZWN1dGUpIHtcblxuICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBmb3IgbmV3IGJvdW5kc1xuICAgICAgLy8gKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICAgIG5ld0JvdW5kcyA9IHJvdW5kQm91bmRzKG5ld0JvdW5kcyk7XG5cbiAgICAgIGlmICghYm91bmRzQ2hhbmdlZChzaGFwZSwgbmV3Qm91bmRzKSkge1xuXG4gICAgICAgIC8vIG5vIHJlc2l6ZSBuZWNlc3NhcnlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBwZXJmb3JtIHRoZSBhY3R1YWwgcmVzaXplXG4gICAgICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgICB9XG4gIH1cblxuXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGhhbmRsZVN0YXJ0KGV2ZW50LmNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbigncmVzaXplLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBkZWx0YSA9IHtcbiAgICAgIHg6IGV2ZW50LmR4LFxuICAgICAgeTogZXZlbnQuZHlcbiAgICB9O1xuXG4gICAgaGFuZGxlTW92ZShldmVudC5jb250ZXh0LCBkZWx0YSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBoYW5kbGVFbmQoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xuXG59XG5cblxuUmVzaXplLnByb3RvdHlwZS5jYW5SZXNpemUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBydWxlcyA9IHRoaXMuX3J1bGVzO1xuXG4gIHZhciBjdHggPSBwaWNrKGNvbnRleHQsIFsgJ25ld0JvdW5kcycsICdzaGFwZScsICdkZWx0YScsICdkaXJlY3Rpb24nIF0pO1xuXG4gIHJldHVybiBydWxlcy5hbGxvd2VkKCdzaGFwZS5yZXNpemUnLCBjdHgpO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSBhIHJlc2l6ZSBvcGVyYXRpb24uXG4gKlxuICogWW91IG1heSBzcGVjaWZ5IGFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhbmQgbXVzdCBzcGVjaWZ5IGFcbiAqIHJlc2l6ZSBkaXJlY3Rpb24gZHVyaW5nIGFjdGl2YXRpb24gb2YgdGhlIHJlc2l6ZSBldmVudC5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gY29udGV4dE9yRGlyZWN0aW9uXG4gKi9cblJlc2l6ZS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbihldmVudCwgc2hhcGUsIGNvbnRleHRPckRpcmVjdGlvbikge1xuICB2YXIgZHJhZ2dpbmcgPSB0aGlzLl9kcmFnZ2luZyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkaXJlY3Rpb247XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0T3JEaXJlY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgY29udGV4dE9yRGlyZWN0aW9uID0ge1xuICAgICAgZGlyZWN0aW9uOiBjb250ZXh0T3JEaXJlY3Rpb25cbiAgICB9O1xuICB9XG5cbiAgY29udGV4dCA9IGFzc2lnbih7IHNoYXBlOiBzaGFwZSB9LCBjb250ZXh0T3JEaXJlY3Rpb24pO1xuXG4gIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uO1xuXG4gIGlmICghZGlyZWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgYSBkaXJlY3Rpb24gKG58d3xzfGV8bnd8c2V8bmV8c3cpJyk7XG4gIH1cblxuICBkcmFnZ2luZy5pbml0KGV2ZW50LCBnZXRSZWZlcmVuY2VQb2ludChzaGFwZSwgZGlyZWN0aW9uKSwgJ3Jlc2l6ZScsIHtcbiAgICBhdXRvQWN0aXZhdGU6IHRydWUsXG4gICAgY3Vyc29yOiBnZXRDdXJzb3IoZGlyZWN0aW9uKSxcbiAgICBkYXRhOiB7XG4gICAgICBzaGFwZTogc2hhcGUsXG4gICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfVxuICB9KTtcbn07XG5cblJlc2l6ZS5wcm90b3R5cGUuY29tcHV0ZU1pblJlc2l6ZUJveCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgbWluRGltZW5zaW9ucyxcbiAgICAgIGNoaWxkcmVuQm91bmRzO1xuXG4gIG1pbkRpbWVuc2lvbnMgPSBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgfHwge1xuICAgIHdpZHRoOiBERUZBVUxUX01JTl9XSURUSCxcbiAgICBoZWlnaHQ6IERFRkFVTFRfTUlOX1dJRFRIXG4gIH07XG5cbiAgLy8gZ2V0IGNoaWxkcmVuIGJvdW5kc1xuICBjaGlsZHJlbkJvdW5kcyA9IGNvbXB1dGVDaGlsZHJlbkJCb3goc2hhcGUsIGNvbnRleHQuY2hpbGRyZW5Cb3hQYWRkaW5nKTtcblxuICAvLyBnZXQgY29ycmVjdCBtaW5pbXVtIGJvdW5kcyBmcm9tIGdpdmVuIHJlc2l6ZSBkaXJlY3Rpb25cbiAgLy8gYmFzaWNhbGx5IGVuc3VyZXMgdGhhdCB0aGUgbWluQm91bmRzIGlzIG1heChjaGlsZHJlbkJvdW5kcywgbWluRGltZW5zaW9ucylcbiAgcmV0dXJuIGdldE1pblJlc2l6ZUJvdW5kcyhkaXJlY3Rpb24sIHNoYXBlLCBtaW5EaW1lbnNpb25zLCBjaGlsZHJlbkJvdW5kcyk7XG59O1xuXG5cblJlc2l6ZS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAncnVsZXMnLFxuICAnbW9kZWxpbmcnLFxuICAnZHJhZ2dpbmcnXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gYm91bmRzQ2hhbmdlZChzaGFwZSwgbmV3Qm91bmRzKSB7XG4gIHJldHVybiBzaGFwZS54ICE9PSBuZXdCb3VuZHMueCB8fFxuICAgIHNoYXBlLnkgIT09IG5ld0JvdW5kcy55IHx8XG4gICAgc2hhcGUud2lkdGggIT09IG5ld0JvdW5kcy53aWR0aCB8fFxuICAgIHNoYXBlLmhlaWdodCAhPT0gbmV3Qm91bmRzLmhlaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZmVyZW5jZVBvaW50KHNoYXBlLCBkaXJlY3Rpb24pIHtcbiAgdmFyIG1pZCA9IGdldE1pZChzaGFwZSksXG4gICAgICB0cmJsID0gYXNUUkJMKHNoYXBlKTtcblxuICB2YXIgcmVmZXJlbmNlUG9pbnQgPSB7XG4gICAgeDogbWlkLngsXG4gICAgeTogbWlkLnlcbiAgfTtcblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC55ID0gdHJibC50b3A7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3MnKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC55ID0gdHJibC5ib3R0b207XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC54ID0gdHJibC5yaWdodDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMSkge1xuICAgIHJlZmVyZW5jZVBvaW50LnggPSB0cmJsLmxlZnQ7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnNvcihkaXJlY3Rpb24pIHtcbiAgdmFyIHByZWZpeCA9ICdyZXNpemUtJztcblxuICBpZiAoZGlyZWN0aW9uID09PSAnbicgfHwgZGlyZWN0aW9uID09PSAncycpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ25zJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJyB8fCBkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgIHJldHVybiBwcmVmaXggKyAnZXcnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ253JyB8fCBkaXJlY3Rpb24gPT09ICdzZScpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ253c2UnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmVmaXggKyAnbmVzdyc7XG4gIH1cbn0iLCJpbXBvcnQge1xuICBiaW5kLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNsZWFyIGFzIHN2Z0NsZWFyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnRcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGlzUHJpbWFyeUJ1dHRvblxufSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgdHJhbnNmb3JtXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7IGdldFJlZmVyZW5jZVBvaW50IH0gZnJvbSAnLi9SZXNpemUnO1xuXG52YXIgSEFORExFX09GRlNFVCA9IC02LFxuICAgIEhBTkRMRV9TSVpFID0gNCxcbiAgICBIQU5ETEVfSElUX1NJWkUgPSAyMDtcblxudmFyIENMU19SRVNJWkVSID0gJ2Rqcy1yZXNpemVyJztcblxudmFyIGRpcmVjdGlvbnMgPSBbICduJywgJ3cnLCAncycsICdlJywgJ253JywgJ25lJywgJ3NlJywgJ3N3JyBdO1xuXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIGFkZGluZyByZXNpemUgaGFuZGxlcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICogQHBhcmFtIHtSZXNpemV9IHJlc2l6ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVIYW5kbGVzKGV2ZW50QnVzLCBjYW52YXMsIHNlbGVjdGlvbiwgcmVzaXplKSB7XG5cbiAgdGhpcy5fcmVzaXplID0gcmVzaXplO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbmV3U2VsZWN0aW9uID0gZS5uZXdTZWxlY3Rpb247XG5cbiAgICAvLyByZW1vdmUgb2xkIHNlbGVjdGlvbiBtYXJrZXJzXG4gICAgc2VsZi5yZW1vdmVSZXNpemVycygpO1xuXG4gICAgLy8gYWRkIG5ldyBzZWxlY3Rpb24gbWFya2VycyBPTkxZIGlmIHNpbmdsZSBzZWxlY3Rpb25cbiAgICBpZiAobmV3U2VsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZm9yRWFjaChuZXdTZWxlY3Rpb24sIGJpbmQoc2VsZi5hZGRSZXNpemVyLCBzZWxmKSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc2hhcGUuY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmVsZW1lbnQ7XG5cbiAgICBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWQoc2hhcGUpKSB7XG4gICAgICBzZWxmLnJlbW92ZVJlc2l6ZXJzKCk7XG5cbiAgICAgIHNlbGYuYWRkUmVzaXplcihzaGFwZSk7XG4gICAgfVxuICB9KTtcbn1cblxuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5tYWtlRHJhZ2dhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4LCBkaXJlY3Rpb24pIHtcbiAgdmFyIHJlc2l6ZSA9IHRoaXMuX3Jlc2l6ZTtcblxuICBmdW5jdGlvbiBzdGFydFJlc2l6ZShldmVudCkge1xuXG4gICAgLy8gb25seSB0cmlnZ2VyIG9uIGxlZnQgbW91c2UgYnV0dG9uXG4gICAgaWYgKGlzUHJpbWFyeUJ1dHRvbihldmVudCkpIHtcbiAgICAgIHJlc2l6ZS5hY3RpdmF0ZShldmVudCwgZWxlbWVudCwgZGlyZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBkb21FdmVudC5iaW5kKGdmeCwgJ21vdXNlZG93bicsIHN0YXJ0UmVzaXplKTtcbiAgZG9tRXZlbnQuYmluZChnZngsICd0b3VjaHN0YXJ0Jywgc3RhcnRSZXNpemUpO1xufTtcblxuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5fY3JlYXRlUmVzaXplciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHksIGRpcmVjdGlvbikge1xuICB2YXIgcmVzaXplcnNQYXJlbnQgPSB0aGlzLl9nZXRSZXNpemVyc1BhcmVudCgpO1xuXG4gIHZhciBvZmZzZXQgPSBnZXRIYW5kbGVPZmZzZXQoZGlyZWN0aW9uKTtcblxuICB2YXIgZ3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdDbGFzc2VzKGdyb3VwKS5hZGQoQ0xTX1JFU0laRVIpO1xuICBzdmdDbGFzc2VzKGdyb3VwKS5hZGQoQ0xTX1JFU0laRVIgKyAnLScgKyBlbGVtZW50LmlkKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKENMU19SRVNJWkVSICsgJy0nICsgZGlyZWN0aW9uKTtcblxuICBzdmdBcHBlbmQocmVzaXplcnNQYXJlbnQsIGdyb3VwKTtcblxuICB2YXIgdmlzdWFsID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cih2aXN1YWwsIHtcbiAgICB4OiAtSEFORExFX1NJWkUgLyAyICsgb2Zmc2V0LngsXG4gICAgeTogLUhBTkRMRV9TSVpFIC8gMiArIG9mZnNldC55LFxuICAgIHdpZHRoOiBIQU5ETEVfU0laRSxcbiAgICBoZWlnaHQ6IEhBTkRMRV9TSVpFXG4gIH0pO1xuXG4gIHN2Z0NsYXNzZXModmlzdWFsKS5hZGQoQ0xTX1JFU0laRVIgKyAnLXZpc3VhbCcpO1xuXG4gIHN2Z0FwcGVuZChncm91cCwgdmlzdWFsKTtcblxuICB2YXIgaGl0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cihoaXQsIHtcbiAgICB4OiAtSEFORExFX0hJVF9TSVpFIC8gMiArIG9mZnNldC54LFxuICAgIHk6IC1IQU5ETEVfSElUX1NJWkUgLyAyICsgb2Zmc2V0LnksXG4gICAgd2lkdGg6IEhBTkRMRV9ISVRfU0laRSxcbiAgICBoZWlnaHQ6IEhBTkRMRV9ISVRfU0laRVxuICB9KTtcblxuICBzdmdDbGFzc2VzKGhpdCkuYWRkKENMU19SRVNJWkVSICsgJy1oaXQnKTtcblxuICBzdmdBcHBlbmQoZ3JvdXAsIGhpdCk7XG5cbiAgdHJhbnNmb3JtKGdyb3VwLCB4LCB5KTtcblxuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5jcmVhdGVSZXNpemVyID0gZnVuY3Rpb24oZWxlbWVudCwgZGlyZWN0aW9uKSB7XG4gIHZhciBwb2ludCA9IGdldFJlZmVyZW5jZVBvaW50KGVsZW1lbnQsIGRpcmVjdGlvbik7XG5cbiAgdmFyIHJlc2l6ZXIgPSB0aGlzLl9jcmVhdGVSZXNpemVyKGVsZW1lbnQsIHBvaW50LngsIHBvaW50LnksIGRpcmVjdGlvbik7XG5cbiAgdGhpcy5tYWtlRHJhZ2dhYmxlKGVsZW1lbnQsIHJlc2l6ZXIsIGRpcmVjdGlvbik7XG59O1xuXG4vLyByZXNpemUgaGFuZGxlcyBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQWRkIHJlc2l6ZXJzIGZvciBhIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKi9cblJlc2l6ZUhhbmRsZXMucHJvdG90eXBlLmFkZFJlc2l6ZXIgPSBmdW5jdGlvbihzaGFwZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHJlc2l6ZSA9IHRoaXMuX3Jlc2l6ZTtcblxuICBpZiAoIXJlc2l6ZS5jYW5SZXNpemUoeyBzaGFwZTogc2hhcGUgfSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JFYWNoKGRpcmVjdGlvbnMsIGZ1bmN0aW9uKGRpcmVjdGlvbikge1xuICAgIHNlbGYuY3JlYXRlUmVzaXplcihzaGFwZSwgZGlyZWN0aW9uKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgcmVzaXplcnNcbiAqL1xuUmVzaXplSGFuZGxlcy5wcm90b3R5cGUucmVtb3ZlUmVzaXplcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc2l6ZXJzUGFyZW50ID0gdGhpcy5fZ2V0UmVzaXplcnNQYXJlbnQoKTtcblxuICBzdmdDbGVhcihyZXNpemVyc1BhcmVudCk7XG59O1xuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5fZ2V0UmVzaXplcnNQYXJlbnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NhbnZhcy5nZXRMYXllcigncmVzaXplcnMnKTtcbn07XG5cblJlc2l6ZUhhbmRsZXMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdzZWxlY3Rpb24nLFxuICAncmVzaXplJ1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEhhbmRsZU9mZnNldChkaXJlY3Rpb24pIHtcbiAgdmFyIG9mZnNldCA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICBvZmZzZXQueCA9IC1IQU5ETEVfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCd3JykgIT09IC0xKSB7XG4gICAgb2Zmc2V0LnggPSBIQU5ETEVfT0ZGU0VUO1xuICB9XG5cbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XG4gICAgb2Zmc2V0LnkgPSAtSEFORExFX09GRlNFVDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMSkge1xuICAgIG9mZnNldC55ID0gSEFORExFX09GRlNFVDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQ7XG59IiwidmFyIE1BUktFUl9SRVNJWklORyA9ICdkanMtcmVzaXppbmcnLFxuICAgIE1BUktFUl9SRVNJWkVfTk9UX09LID0gJ3Jlc2l6ZS1ub3Qtb2snO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5pbXBvcnQge1xuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmUsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3Nlc1xufSBmcm9tICd0aW55LXN2Zyc7XG5cblxuLyoqXG4gKiBQcm92aWRlcyBwcmV2aWV3cyBmb3IgcmVzaXppbmcgc2hhcGVzIHdoZW4gcmVzaXppbmcuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7UHJldmlld1N1cHBvcnR9IHByZXZpZXdTdXBwb3J0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZVByZXZpZXcoZXZlbnRCdXMsIGNhbnZhcywgcHJldmlld1N1cHBvcnQpIHtcblxuICAvKipcbiAgICogVXBkYXRlIHJlc2l6ZXIgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVGcmFtZShjb250ZXh0KSB7XG5cbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBib3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lO1xuXG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lID0gcHJldmlld1N1cHBvcnQuYWRkRnJhbWUoc2hhcGUsIGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSk7XG5cbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgfVxuXG4gICAgaWYgKGJvdW5kcy53aWR0aCA+IDUpIHtcbiAgICAgIHN2Z0F0dHIoZnJhbWUsIHsgeDogYm91bmRzLngsIHdpZHRoOiBib3VuZHMud2lkdGggfSk7XG4gICAgfVxuXG4gICAgaWYgKGJvdW5kcy5oZWlnaHQgPiA1KSB7XG4gICAgICBzdmdBdHRyKGZyYW1lLCB7IHk6IGJvdW5kcy55LCBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuY2FuRXhlY3V0ZSkge1xuICAgICAgc3ZnQ2xhc3NlcyhmcmFtZSkucmVtb3ZlKE1BUktFUl9SRVNJWkVfTk9UX09LKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQ2xhc3NlcyhmcmFtZSkuYWRkKE1BUktFUl9SRVNJWkVfTk9UX09LKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJlc2l6ZXIgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVGcmFtZShjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lO1xuXG4gICAgaWYgKGZyYW1lKSB7XG4gICAgICBzdmdSZW1vdmUoY29udGV4dC5mcmFtZSk7XG4gICAgfVxuXG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihzaGFwZSwgTUFSS0VSX1JFU0laSU5HKTtcbiAgfVxuXG4gIC8vIGFkZCBhbmQgdXBkYXRlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB1cGRhdGVGcmFtZShldmVudC5jb250ZXh0KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVtb3ZlRnJhbWUoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xuXG59XG5cblJlc2l6ZVByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07IiwiaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBpc051bWJlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBtYXggPSBNYXRoLm1heCxcbiAgICBtaW4gPSBNYXRoLm1pbjtcblxudmFyIERFRkFVTFRfQ0hJTERfQk9YX1BBRERJTkcgPSAyMDtcblxuaW1wb3J0IHtcbiAgZ2V0QkJveFxufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBhc0JvdW5kc1xufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cblxuLyoqXG4gKiBTdWJzdHJhY3QgYSBUUkJMIGZyb20gYW5vdGhlclxuICpcbiAqIEBwYXJhbSAge1RSQkx9IHRyYmxBXG4gKiBAcGFyYW0gIHtUUkJMfSB0cmJsQlxuICpcbiAqIEByZXR1cm4ge1RSQkx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJhY3RUUkJMKHRyYmxBLCB0cmJsQikge1xuICByZXR1cm4ge1xuICAgIHRvcDogdHJibEEudG9wIC0gdHJibEIudG9wLFxuICAgIHJpZ2h0OiB0cmJsQS5yaWdodCAtIHRyYmxCLnJpZ2h0LFxuICAgIGJvdHRvbTogdHJibEEuYm90dG9tIC0gdHJibEIuYm90dG9tLFxuICAgIGxlZnQ6IHRyYmxBLmxlZnQgLSB0cmJsQi5sZWZ0XG4gIH07XG59XG5cbi8qKlxuICogUmVzaXplIHRoZSBnaXZlbiBib3VuZHMgYnkgdGhlIHNwZWNpZmllZCBkZWx0YSBmcm9tIGEgZ2l2ZW4gYW5jaG9yIHBvaW50LlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBib3VuZHMgdGhlIGJvdW5kaW5nIGJveCB0aGF0IHNob3VsZCBiZSByZXNpemVkXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBlbGVtZW50IGlzIHJlc2l6ZWQgKG53LCBuZSwgc2UsIHN3KVxuICogQHBhcmFtIHtQb2ludH0gZGVsdGEgb2YgdGhlIHJlc2l6ZSBvcGVyYXRpb25cbiAqXG4gKiBAcmV0dXJuIHtCb3VuZHN9IHJlc2l6ZWQgYm91bmRpbmcgYm94XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVCb3VuZHMoYm91bmRzLCBkaXJlY3Rpb24sIGRlbHRhKSB7XG4gIHZhciBkeCA9IGRlbHRhLngsXG4gICAgICBkeSA9IGRlbHRhLnk7XG5cbiAgdmFyIG5ld0JvdW5kcyA9IHtcbiAgICB4OiBib3VuZHMueCxcbiAgICB5OiBib3VuZHMueSxcbiAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogYm91bmRzLmhlaWdodFxuICB9O1xuXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy55ID0gYm91bmRzLnkgKyBkeTtcbiAgICBuZXdCb3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIGR5O1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XG4gICAgbmV3Qm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgKyBkeTtcbiAgfVxuXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZignZScpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCArIGR4O1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCd3JykgIT09IC0xKSB7XG4gICAgbmV3Qm91bmRzLnggPSBib3VuZHMueCArIGR4O1xuICAgIG5ld0JvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCAtIGR4O1xuICB9XG5cbiAgcmV0dXJuIG5ld0JvdW5kcztcbn1cblxuXG4vKipcbiAqIFJlc2l6ZSB0aGUgZ2l2ZW4gYm91bmRzIGJ5IGFwcGx5aW5nIHRoZSBwYXNzZWRcbiAqIHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gZGVsdGEuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IGJvdW5kc1xuICogQHBhcmFtIHtUUkJMfSB0cmJsUmVzaXplXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplVFJCTChib3VuZHMsIHJlc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgKHJlc2l6ZS5sZWZ0IHx8IDApLFxuICAgIHk6IGJvdW5kcy55ICsgKHJlc2l6ZS50b3AgfHwgMCksXG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCAtIChyZXNpemUubGVmdCB8fCAwKSArIChyZXNpemUucmlnaHQgfHwgMCksXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IC0gKHJlc2l6ZS50b3AgfHwgMCkgKyAocmVzaXplLmJvdHRvbSB8fCAwKVxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWF0dGFjaFBvaW50KGJvdW5kcywgbmV3Qm91bmRzLCBwb2ludCkge1xuXG4gIHZhciBzeCA9IGJvdW5kcy53aWR0aCAvIG5ld0JvdW5kcy53aWR0aCxcbiAgICAgIHN5ID0gYm91bmRzLmhlaWdodCAvIG5ld0JvdW5kcy5oZWlnaHQ7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKChuZXdCb3VuZHMueCArIG5ld0JvdW5kcy53aWR0aCAvIDIpKSAtIE1hdGguZmxvb3IoKChib3VuZHMueCArIGJvdW5kcy53aWR0aCAvIDIpIC0gcG9pbnQueCkgLyBzeCksXG4gICAgeTogTWF0aC5yb3VuZCgobmV3Qm91bmRzLnkgKyBuZXdCb3VuZHMuaGVpZ2h0IC8gMikpIC0gTWF0aC5mbG9vcigoKGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCAvIDIpIC0gcG9pbnQueSkgLyBzeSlcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBhcHBseUNvbnN0cmFpbnRzKGF0dHIsIHRyYmwsIHJlc2l6ZUNvbnN0cmFpbnRzKSB7XG5cbiAgdmFyIHZhbHVlID0gdHJibFthdHRyXSxcbiAgICAgIG1pblZhbHVlID0gcmVzaXplQ29uc3RyYWludHMubWluICYmIHJlc2l6ZUNvbnN0cmFpbnRzLm1pblthdHRyXSxcbiAgICAgIG1heFZhbHVlID0gcmVzaXplQ29uc3RyYWludHMubWF4ICYmIHJlc2l6ZUNvbnN0cmFpbnRzLm1heFthdHRyXTtcblxuICBpZiAoaXNOdW1iZXIobWluVmFsdWUpKSB7XG4gICAgdmFsdWUgPSAoL3RvcHxsZWZ0Ly50ZXN0KGF0dHIpID8gbWluIDogbWF4KSh2YWx1ZSwgbWluVmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKG1heFZhbHVlKSkge1xuICAgIHZhbHVlID0gKC90b3B8bGVmdC8udGVzdChhdHRyKSA/IG1heCA6IG1pbikodmFsdWUsIG1heFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnN0cmFpbnRzKGN1cnJlbnRCb3VuZHMsIHJlc2l6ZUNvbnN0cmFpbnRzKSB7XG5cbiAgaWYgKCFyZXNpemVDb25zdHJhaW50cykge1xuICAgIHJldHVybiBjdXJyZW50Qm91bmRzO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRUcmJsID0gYXNUUkJMKGN1cnJlbnRCb3VuZHMpO1xuXG4gIHJldHVybiBhc0JvdW5kcyh7XG4gICAgdG9wOiBhcHBseUNvbnN0cmFpbnRzKCd0b3AnLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpLFxuICAgIHJpZ2h0OiBhcHBseUNvbnN0cmFpbnRzKCdyaWdodCcsIGN1cnJlbnRUcmJsLCByZXNpemVDb25zdHJhaW50cyksXG4gICAgYm90dG9tOiBhcHBseUNvbnN0cmFpbnRzKCdib3R0b20nLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpLFxuICAgIGxlZnQ6IGFwcGx5Q29uc3RyYWludHMoJ2xlZnQnLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpXG4gIH0pO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaW5SZXNpemVCb3VuZHMoZGlyZWN0aW9uLCBjdXJyZW50Qm91bmRzLCBtaW5EaW1lbnNpb25zLCBjaGlsZHJlbkJvdW5kcykge1xuXG4gIHZhciBjdXJyZW50Qm94ID0gYXNUUkJMKGN1cnJlbnRCb3VuZHMpO1xuXG4gIHZhciBtaW5Cb3ggPSB7XG4gICAgdG9wOiAvbi8udGVzdChkaXJlY3Rpb24pID8gY3VycmVudEJveC5ib3R0b20gLSBtaW5EaW1lbnNpb25zLmhlaWdodCA6IGN1cnJlbnRCb3gudG9wLFxuICAgIGxlZnQ6IC93Ly50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LnJpZ2h0IC0gbWluRGltZW5zaW9ucy53aWR0aCA6IGN1cnJlbnRCb3gubGVmdCxcbiAgICBib3R0b206IC9zLy50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LnRvcCArIG1pbkRpbWVuc2lvbnMuaGVpZ2h0IDogY3VycmVudEJveC5ib3R0b20sXG4gICAgcmlnaHQ6IC9lLy50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LmxlZnQgKyBtaW5EaW1lbnNpb25zLndpZHRoIDogY3VycmVudEJveC5yaWdodFxuICB9O1xuXG4gIHZhciBjaGlsZHJlbkJveCA9IGNoaWxkcmVuQm91bmRzID8gYXNUUkJMKGNoaWxkcmVuQm91bmRzKSA6IG1pbkJveDtcblxuICB2YXIgY29tYmluZWRCb3ggPSB7XG4gICAgdG9wOiBtaW4obWluQm94LnRvcCwgY2hpbGRyZW5Cb3gudG9wKSxcbiAgICBsZWZ0OiBtaW4obWluQm94LmxlZnQsIGNoaWxkcmVuQm94LmxlZnQpLFxuICAgIGJvdHRvbTogbWF4KG1pbkJveC5ib3R0b20sIGNoaWxkcmVuQm94LmJvdHRvbSksXG4gICAgcmlnaHQ6IG1heChtaW5Cb3gucmlnaHQsIGNoaWxkcmVuQm94LnJpZ2h0KVxuICB9O1xuXG4gIHJldHVybiBhc0JvdW5kcyhjb21iaW5lZEJveCk7XG59XG5cbmZ1bmN0aW9uIGFzUGFkZGluZyhtYXlCZVBhZGRpbmcsIGRlZmF1bHRWYWx1ZSkge1xuICBpZiAodHlwZW9mIG1heUJlUGFkZGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbWF5QmVQYWRkaW5nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBERUZBVUxUX0NISUxEX0JPWF9QQURESU5HO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRQYWRkaW5nKGJib3gsIHBhZGRpbmcpIHtcbiAgdmFyIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbTtcblxuICBpZiAodHlwZW9mIHBhZGRpbmcgPT09ICdvYmplY3QnKSB7XG4gICAgbGVmdCA9IGFzUGFkZGluZyhwYWRkaW5nLmxlZnQpO1xuICAgIHJpZ2h0ID0gYXNQYWRkaW5nKHBhZGRpbmcucmlnaHQpO1xuICAgIHRvcCA9IGFzUGFkZGluZyhwYWRkaW5nLnRvcCk7XG4gICAgYm90dG9tID0gYXNQYWRkaW5nKHBhZGRpbmcuYm90dG9tKTtcbiAgfSBlbHNlIHtcbiAgICBsZWZ0ID0gcmlnaHQgPSB0b3AgPSBib3R0b20gPSBhc1BhZGRpbmcocGFkZGluZyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGJib3gueCAtIGxlZnQsXG4gICAgeTogYmJveC55IC0gdG9wLFxuICAgIHdpZHRoOiBiYm94LndpZHRoICsgbGVmdCArIHJpZ2h0LFxuICAgIGhlaWdodDogYmJveC5oZWlnaHQgKyB0b3AgKyBib3R0b21cbiAgfTtcbn1cblxuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBlbGVtZW50IHBhcnQgb2YgdGhlIHJlc2l6ZVxuICogdGFyZ2V0cyBtaW4gYm91bmRhcnkgYm94P1xuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggZXhjbHVkZXNcbiAqIGNvbm5lY3Rpb25zIGFuZCBsYWJlbHMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBpc0JCb3hDaGlsZChlbGVtZW50KSB7XG5cbiAgLy8gZXhjbHVkZSBjb25uZWN0aW9uc1xuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBleGNsdWRlIGxhYmVsc1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmV0dXJuIGNoaWxkcmVuIGJvdW5kaW5nIGNvbXB1dGVkIGZyb20gYSBzaGFwZXMgY2hpbGRyZW5cbiAqIG9yIGEgbGlzdCBvZiBwcmVmaWx0ZXJlZCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV8QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gc2hhcGVPckNoaWxkcmVuXG4gKiBAcGFyYW0gIHtudW1iZXJ8T2JqZWN0fSBwYWRkaW5nXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNoaWxkcmVuQkJveChzaGFwZU9yQ2hpbGRyZW4sIHBhZGRpbmcpIHtcblxuICB2YXIgZWxlbWVudHM7XG5cbiAgLy8gY29tcHV0ZSBiYXNlZCBvbiBzaGFwZVxuICBpZiAoc2hhcGVPckNoaWxkcmVuLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG5cbiAgICAvLyBncmFiIGFsbCB0aGUgY2hpbGRyZW4gdGhhdCBhcmUgcGFydCBvZiB0aGVcbiAgICAvLyBwYXJlbnRzIGNoaWxkcmVuIGJveFxuICAgIGVsZW1lbnRzID0gZmlsdGVyKHNoYXBlT3JDaGlsZHJlbi5jaGlsZHJlbiwgaXNCQm94Q2hpbGQpO1xuXG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudHMgPSBzaGFwZU9yQ2hpbGRyZW47XG4gIH1cblxuICBpZiAoZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFkZFBhZGRpbmcoZ2V0QkJveChlbGVtZW50cyksIHBhZGRpbmcpO1xuICB9XG59XG4iLCJpbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuXG5pbXBvcnQgUmVzaXplIGZyb20gJy4vUmVzaXplJztcbmltcG9ydCBSZXNpemVQcmV2aWV3IGZyb20gJy4vUmVzaXplUHJldmlldyc7XG5pbXBvcnQgUmVzaXplSGFuZGxlcyBmcm9tICcuL1Jlc2l6ZUhhbmRsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAncmVzaXplJyxcbiAgICAncmVzaXplUHJldmlldycsXG4gICAgJ3Jlc2l6ZUhhbmRsZXMnXG4gIF0sXG4gIHJlc2l6ZTogWyAndHlwZScsIFJlc2l6ZSBdLFxuICByZXNpemVQcmV2aWV3OiBbICd0eXBlJywgUmVzaXplUHJldmlldyBdLFxuICByZXNpemVIYW5kbGVzOiBbICd0eXBlJywgUmVzaXplSGFuZGxlcyBdXG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICcuLi8uLi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQSBiYXNpYyBwcm92aWRlciB0aGF0IG1heSBiZSBleHRlbmRlZCB0byBpbXBsZW1lbnQgbW9kZWxpbmcgcnVsZXMuXG4gKlxuICogRXh0ZW5zaW9ucyBzaG91bGQgaW1wbGVtZW50IHRoZSBpbml0IG1ldGhvZCB0byBhY3R1YWxseSBhZGQgdGhlaXIgY3VzdG9tXG4gKiBtb2RlbGluZyBjaGVja3MuIENoZWNrcyBtYXkgYmUgYWRkZWQgdmlhIHRoZSAjYWRkUnVsZShhY3Rpb24sIGZuKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUnVsZVByb3ZpZGVyKGV2ZW50QnVzKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLmluaXQoKTtcbn1cblxuUnVsZVByb3ZpZGVyLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoUnVsZVByb3ZpZGVyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5cbi8qKlxuICogQWRkcyBhIG1vZGVsaW5nIHJ1bGUgZm9yIHRoZSBnaXZlbiBhY3Rpb24sIGltcGxlbWVudGVkIHRocm91Z2hcbiAqIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSB0aGUgbW9kZWxpbmcgc3BlY2lmaWMgYWN0aW9uIGNvbnRleHRcbiAqIHRvIHBlcmZvcm0gaXRzIGNoZWNrLiBJdCBtdXN0IHJldHVybiBgZmFsc2VgIHRvIGRpc2FsbG93IHRoZVxuICogYWN0aW9uIGZyb20gaGFwcGVuaW5nIG9yIGB0cnVlYCB0byBhbGxvdyB0aGUgYWN0aW9uLlxuICpcbiAqIEEgcnVsZSBwcm92aWRlciBtYXkgcGFzcyBvdmVyIHRoZSBldmFsdWF0aW9uIHRvIGxvd2VyIHByaW9yaXR5XG4gKiBydWxlcyBieSByZXR1cm5pbmcgcmV0dXJuIG5vdGhpbmcgKG9yIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4pLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogUmVzaXphYmxlUnVsZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAqXG4gKiAgIFxcLyoqXG4gKiAgICAqIFJldHVybiBgdHJ1ZWAsIGBmYWxzZWAgb3Igbm90aGluZyB0byBkZW5vdGVcbiAqICAgICogX2FsbG93ZWRfLCBfbm90IGFsbG93ZWRfIGFuZCBfY29udGludWUgZXZhbHVhdGluZ18uXG4gKiAgICAqXFwvXG4gKiAgIHRoaXMuYWRkUnVsZSgnc2hhcGUucmVzaXplJywgZnVuY3Rpb24oY29udGV4dCkge1xuICpcbiAqICAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuICpcbiAqICAgICBpZiAoIWNvbnRleHQubmV3Qm91bmRzKSB7XG4gKiAgICAgICAvLyBjaGVjayBnZW5lcmFsIHJlc2l6YWJpbGl0eVxuICogICAgICAgaWYgKCFzaGFwZS5yZXNpemFibGUpIHtcbiAqICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICogICAgICAgfVxuICpcbiAqICAgICAgIC8vIG5vdCByZXR1cm5pbmcgYW55dGhpbmcgKHJlYWQ6IHVuZGVmaW5lZClcbiAqICAgICAgIC8vIHdpbGwgY29udGludWUgdGhlIGV2YWx1YXRpb24gb2Ygb3RoZXIgcnVsZXNcbiAqICAgICAgIC8vICh3aXRoIGxvd2VyIHByaW9yaXR5KVxuICogICAgICAgcmV0dXJuO1xuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAvLyBlbGVtZW50IG11c3QgaGF2ZSBtaW5pbXVtIHNpemUgb2YgMTAqMTAgcG9pbnRzXG4gKiAgICAgICByZXR1cm4gY29udGV4dC5uZXdCb3VuZHMud2lkdGggPiAxMCAmJiBjb250ZXh0Lm5ld0JvdW5kcy5oZWlnaHQgPiAxMDtcbiAqICAgICB9XG4gKiAgIH0pO1xuICogfTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBhY3Rpb25zIHRoZSBpZGVudGlmaWVyIGZvciB0aGUgbW9kZWxpbmcgYWN0aW9uIHRvIGNoZWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSB0aGUgcHJpb3JpdHkgYXQgd2hpY2ggdGhpcyBydWxlIGlzIGJlaW5nIGFwcGxpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBhY3R1YWwgY2hlY2tcbiAqL1xuUnVsZVByb3ZpZGVyLnByb3RvdHlwZS5hZGRSdWxlID0gZnVuY3Rpb24oYWN0aW9ucywgcHJpb3JpdHksIGZuKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBhY3Rpb25zID0gWyBhY3Rpb25zIF07XG4gIH1cblxuICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oYWN0aW9uKSB7XG5cbiAgICBzZWxmLmNhbkV4ZWN1dGUoYWN0aW9uLCBwcmlvcml0eSwgZnVuY3Rpb24oY29udGV4dCwgYWN0aW9uLCBldmVudCkge1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQpO1xuICAgIH0sIHRydWUpO1xuICB9KTtcbn07XG5cbi8qKlxuICogSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFkZCBuZXcgcnVsZXMgZHVyaW5nIHByb3ZpZGVyIGluaXRpYWxpemF0aW9uLlxuICovXG5SdWxlUHJvdmlkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHt9OyIsIi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgcnVsZXMgZm9yIGNlcnRhaW4gZGlhZ3JhbSBhY3Rpb25zLlxuICpcbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgaG9vayBpbnRvIHRoZSB7QGxpbmsgQ29tbWFuZFN0YWNrfVxuICogdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHJ1bGUgZXZhbHVhdGlvbi4gTWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlXG4gKiBgY29tbWFuZFN0YWNrYCBzZXJ2aWNlIHdpdGggdGhpcyBtb2R1bGUgaWYgeW91IHBsYW4gdG8gdXNlIGl0LlxuICpcbiAqIFRvZ2V0aGVyIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiB5b3UgbWF5IHVzZSB0aGUge0BsaW5rIFJ1bGVQcm92aWRlcn1cbiAqIHRvIGltcGxlbWVudCB5b3VyIG93biBydWxlIGNoZWNrZXJzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIG1lbnQgdG8gYmUgZWFzaWx5IHJlcGxhY2VkLCB0aHVzIHRoZSB0aW55IGZvb3QgcHJpbnQuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUnVsZXMoaW5qZWN0b3IpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snLCBmYWxzZSk7XG59XG5cblJ1bGVzLiRpbmplY3QgPSBbICdpbmplY3RvcicgXTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgYSBnaXZlbiBtb2RlbGluZyBhY3Rpb24gY2FuIGJlIGV4ZWN1dGVkXG4gKiBpbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIHJlc3BvbmQgd2l0aCBhbGxvdyB1bmxlc3MgYW55b25lXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gdGhlIGFjdGlvbiB0byBiZSBjaGVja2VkXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdIHRoZSBjb250ZXh0IHRvIGNoZWNrIHRoZSBhY3Rpb24gaW5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUsIGZhbHNlIG9yIG51bGwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gaXMgYWxsb3dlZCwgbm90IGFsbG93ZWQgb3Igc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblJ1bGVzLnByb3RvdHlwZS5hbGxvd2VkID0gZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XG4gIHZhciBhbGxvd2VkID0gdHJ1ZTtcblxuICB2YXIgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuXG4gIGlmIChjb21tYW5kU3RhY2spIHtcbiAgICBhbGxvd2VkID0gY29tbWFuZFN0YWNrLmNhbkV4ZWN1dGUoYWN0aW9uLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIG1hcCB1bmRlZmluZWQgdG8gdHJ1ZSwgaS5lLiBubyBydWxlc1xuICByZXR1cm4gYWxsb3dlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFsbG93ZWQ7XG59OyIsImltcG9ydCBSdWxlcyBmcm9tICcuL1J1bGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAncnVsZXMnIF0sXG4gIHJ1bGVzOiBbICd0eXBlJywgUnVsZXMgXVxufTtcbiIsImltcG9ydCB7XG4gIGNsZWFyIGFzIGRvbUNsZWFyLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgYXR0ciBhcyBkb21BdHRyLFxuICBkb21pZnkgYXMgZG9taWZ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBnZXRCQm94IGFzIGdldEJvdW5kaW5nQm94XG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBlc2NhcGVIVE1MXG59IGZyb20gJy4uLy4uL3V0aWwvRXNjYXBlVXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZXMgc2VhcmNoaW5nIGluZnJhc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNlYXJjaFBhZChjYW52YXMsIGV2ZW50QnVzLCBvdmVybGF5cywgc2VsZWN0aW9uKSB7XG4gIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgdGhpcy5fcmVzdWx0cyA9IFtdO1xuICB0aGlzLl9ldmVudE1hcHMgPSBbXTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX292ZXJsYXlzID0gb3ZlcmxheXM7XG4gIHRoaXMuX3NlbGVjdGlvbiA9IHNlbGVjdGlvbjtcblxuICAvLyBzZXR1cCBlbGVtZW50c1xuICB0aGlzLl9jb250YWluZXIgPSBkb21pZnkoU2VhcmNoUGFkLkJPWF9IVE1MKTtcbiAgdGhpcy5fc2VhcmNoSW5wdXQgPSBkb21RdWVyeShTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsIHRoaXMuX2NvbnRhaW5lcik7XG4gIHRoaXMuX3Jlc3VsdHNDb250YWluZXIgPSBkb21RdWVyeShTZWFyY2hQYWQuUkVTVUxUU19DT05UQUlORVJfU0VMRUNUT1IsIHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLy8gYXR0YWNoIHNlYXJjaCBwYWRcbiAgdGhpcy5fY2FudmFzLmdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLy8gY2xlYW51cCBvbiBkZXN0cm95XG4gIGV2ZW50QnVzLm9uKFsgJ2NhbnZhcy5kZXN0cm95JywgJ2RpYWdyYW0uZGVzdHJveScgXSwgdGhpcy5jbG9zZSwgdGhpcyk7XG59XG5cblxuU2VhcmNoUGFkLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnZXZlbnRCdXMnLFxuICAnb3ZlcmxheXMnLFxuICAnc2VsZWN0aW9uJ1xuXTtcblxuXG4vKipcbiAqIEJpbmRzIGFuZCBrZWVwcyB0cmFjayBvZiBhbGwgZXZlbnQgbGlzdGVyZW5lcnNcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fYmluZEV2ZW50cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4pIHtcbiAgICBzZWxmLl9ldmVudE1hcHMucHVzaCh7XG4gICAgICBlbDogZWwsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbGlzdGVuZXI6IGRvbURlbGVnYXRlLmJpbmQoZWwsIHNlbGVjdG9yLCB0eXBlLCBmbilcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNsb3NlIHNlYXJjaCBvbiBjbGlja2luZyBhbnl3aGVyZSBvdXRzaWRlXG4gIGxpc3Rlbihkb2N1bWVudCwgJ2h0bWwnLCAnY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5jbG9zZSgpO1xuICB9KTtcblxuICAvLyBzdG9wIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgYW5kIGNsb3Npbmcgc2VhcmNoXG4gIC8vIGZvY3VzIG9uIGlucHV0XG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiwgJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5kZWxlZ2F0ZVRhcmdldC5mb2N1cygpO1xuICB9KTtcblxuICAvLyBwcmVzZWxlY3QgcmVzdWx0IG9uIGhvdmVyXG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNUT1IsICdtb3VzZW92ZXInLCBmdW5jdGlvbihlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzZWxmLl9zY3JvbGxUb05vZGUoZS5kZWxlZ2F0ZVRhcmdldCk7XG4gICAgc2VsZi5fcHJlc2VsZWN0KGUuZGVsZWdhdGVUYXJnZXQpO1xuICB9KTtcblxuICAvLyBzZWxlY3RzIGRlc2lyZWQgcmVzdWx0IG9uIG1vdXNlIGNsaWNrXG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNUT1IsICdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHNlbGYuX3NlbGVjdChlLmRlbGVnYXRlVGFyZ2V0KTtcbiAgfSk7XG5cbiAgLy8gcHJldmVudCBjdXJzb3IgaW4gaW5wdXQgZnJvbSBnb2luZyBsZWZ0IGFuZCByaWdodCB3aGVuIHVzaW5nIHVwL2Rvd24gdG9cbiAgLy8gbmF2aWdhdGUgcmVzdWx0c1xuICBsaXN0ZW4odGhpcy5fY29udGFpbmVyLCBTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsICdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXG4gICAgLy8gdXBcbiAgICBpZiAoZS5rZXlDb2RlID09PSAzOCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIGRvd25cbiAgICBpZiAoZS5rZXlDb2RlID09PSA0MCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gaGFuZGxlIGtleWJvYXJkIGlucHV0XG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiwgJ2tleXVwJywgZnVuY3Rpb24oZSkge1xuXG4gICAgLy8gZXNjYXBlXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLy8gZW50ZXJcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZi5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gc2VsZWN0ZWQgPyBzZWxmLl9zZWxlY3Qoc2VsZWN0ZWQpIDogc2VsZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIHVwXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgIHJldHVybiBzZWxmLl9zY3JvbGxUb0RpcmVjdGlvbih0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBkb3duXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgIHJldHVybiBzZWxmLl9zY3JvbGxUb0RpcmVjdGlvbigpO1xuICAgIH1cblxuICAgIC8vIGxlZnQgJiYgcmlnaHRcbiAgICAvLyBkbyBub3Qgc2VhcmNoIHdoaWxlIG5hdmlnYXRpbmcgdGV4dCBpbnB1dFxuICAgIGlmIChlLmtleUNvZGUgPT09IDM3IHx8IGUua2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbnl0aGluZyBlbHNlXG4gICAgc2VsZi5fc2VhcmNoKGUuZGVsZWdhdGVUYXJnZXQudmFsdWUpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBVbmJpbmRzIGFsbCBwcmV2aW91c2x5IGVzdGFibGlzaGVkIGxpc3RlbmVyc1xuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl91bmJpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRNYXBzLmZvckVhY2goZnVuY3Rpb24obSkge1xuICAgIGRvbURlbGVnYXRlLnVuYmluZChtLmVsLCBtLnR5cGUsIG0ubGlzdGVuZXIpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHNlYXJjaCBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBwYXR0ZXJuXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NsZWFyUmVzdWx0cygpO1xuXG4gIC8vIGRvIG5vdCBzZWFyY2ggb24gZW1wdHkgcXVlcnlcbiAgaWYgKCFwYXR0ZXJuIHx8IHBhdHRlcm4gPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlYXJjaFJlc3VsdHMgPSB0aGlzLl9zZWFyY2hQcm92aWRlci5maW5kKHBhdHRlcm4pO1xuXG4gIGlmICghc2VhcmNoUmVzdWx0cy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBhcHBlbmQgbmV3IHJlc3VsdHNcbiAgc2VhcmNoUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgIHZhciBpZCA9IHJlc3VsdC5lbGVtZW50LmlkO1xuICAgIHZhciBub2RlID0gc2VsZi5fY3JlYXRlUmVzdWx0Tm9kZShyZXN1bHQsIGlkKTtcbiAgICBzZWxmLl9yZXN1bHRzW2lkXSA9IHtcbiAgICAgIGVsZW1lbnQ6IHJlc3VsdC5lbGVtZW50LFxuICAgICAgbm9kZTogbm9kZVxuICAgIH07XG4gIH0pO1xuXG4gIC8vIHByZXNlbGVjdCBmaXJzdCByZXN1bHRcbiAgdmFyIG5vZGUgPSBkb21RdWVyeShTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SLCB0aGlzLl9yZXN1bHRzQ29udGFpbmVyKTtcbiAgdGhpcy5fc2Nyb2xsVG9Ob2RlKG5vZGUpO1xuICB0aGlzLl9wcmVzZWxlY3Qobm9kZSk7XG59O1xuXG5cbi8qKlxuICogTmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzL25leHQgcmVzdWx0LiBEZWZhdWx0cyB0byBuZXh0IHJlc3VsdC5cbiAqIEBwYXJhbSAge2Jvb2xlYW59IHByZXZpb3VzXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3Njcm9sbFRvRGlyZWN0aW9uID0gZnVuY3Rpb24ocHJldmlvdXMpIHtcbiAgdmFyIHNlbGVjdGVkID0gdGhpcy5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vZGUgPSBwcmV2aW91cyA/IHNlbGVjdGVkLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBzZWxlY3RlZC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIGlmIChub2RlKSB7XG4gICAgdGhpcy5fc2Nyb2xsVG9Ob2RlKG5vZGUpO1xuICAgIHRoaXMuX3ByZXNlbGVjdChub2RlKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFNjcm9sbCB0byB0aGUgbm9kZSBpZiBpdCBpcyBub3QgdmlzaWJsZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3Njcm9sbFRvTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgaWYgKCFub2RlIHx8IG5vZGUgPT09IHRoaXMuX2dldEN1cnJlbnRSZXN1bHQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBub2RlT2Zmc2V0ID0gbm9kZS5vZmZzZXRUb3A7XG4gIHZhciBjb250YWluZXJTY3JvbGwgPSB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvcDtcblxuICB2YXIgYm90dG9tU2Nyb2xsID0gbm9kZU9mZnNldCAtIHRoaXMuX3Jlc3VsdHNDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgbm9kZS5jbGllbnRIZWlnaHQ7XG5cbiAgaWYgKG5vZGVPZmZzZXQgPCBjb250YWluZXJTY3JvbGwpIHtcbiAgICB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvcCA9IG5vZGVPZmZzZXQ7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyU2Nyb2xsIDwgYm90dG9tU2Nyb2xsKSB7XG4gICAgdGhpcy5fcmVzdWx0c0NvbnRhaW5lci5zY3JvbGxUb3AgPSBib3R0b21TY3JvbGw7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgYWxsIHJlc3VsdHMgZGF0YS5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fY2xlYXJSZXN1bHRzID0gZnVuY3Rpb24oKSB7XG4gIGRvbUNsZWFyKHRoaXMuX3Jlc3VsdHNDb250YWluZXIpO1xuXG4gIHRoaXMuX3Jlc3VsdHMgPSBbXTtcblxuICB0aGlzLl9yZXNldE92ZXJsYXkoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuY2xlYXJlZCcpO1xufTtcblxuXG4vKipcbiAqIEdldCBjdXJyZW50bHkgc2VsZWN0ZWQgcmVzdWx0LlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX2dldEN1cnJlbnRSZXN1bHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNURURfU0VMRUNUT1IsIHRoaXMuX3Jlc3VsdHNDb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZSByZXN1bHQgRE9NIGVsZW1lbnQgd2l0aGluIHJlc3VsdHMgY29udGFpbmVyXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgc2VhcmNoIHJlc3VsdC5cbiAqXG4gKiAncmVzdWx0JyA6IG9uZSBvZiB0aGUgZWxlbWVudHMgcmV0dXJuZWQgYnkgU2VhcmNoUHJvdmlkZXJcbiAqICdpZCcgOiBpZCBhdHRyaWJ1dGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBuZXcgRE9NIG5vZGVcbiAqIHJldHVybiA6IGNyZWF0ZWQgRE9NIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtTZWFyY2hSZXN1bHR9IHJlc3VsdFxuICogQHBhcmFtICB7c3RyaW5nfSBpZFxuICogQHJldHVybiB7RWxlbWVudH1cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fY3JlYXRlUmVzdWx0Tm9kZSA9IGZ1bmN0aW9uKHJlc3VsdCwgaWQpIHtcbiAgdmFyIG5vZGUgPSBkb21pZnkoU2VhcmNoUGFkLlJFU1VMVF9IVE1MKTtcblxuICAvLyBjcmVhdGUgb25seSBpZiBhdmFpbGFibGVcbiAgaWYgKHJlc3VsdC5wcmltYXJ5VG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVJbm5lclRleHROb2RlKG5vZGUsIHJlc3VsdC5wcmltYXJ5VG9rZW5zLCBTZWFyY2hQYWQuUkVTVUxUX1BSSU1BUllfSFRNTCk7XG4gIH1cblxuICAvLyBzZWNvbmRhcnkgdG9rZW5zIChyZXByZXNlbnQgZWxlbWVudCBJRCkgYXJlIGFsbHdheXMgYXZhaWxhYmxlXG4gIGNyZWF0ZUlubmVyVGV4dE5vZGUobm9kZSwgcmVzdWx0LnNlY29uZGFyeVRva2VucywgU2VhcmNoUGFkLlJFU1VMVF9TRUNPTkRBUllfSFRNTCk7XG5cbiAgZG9tQXR0cihub2RlLCBTZWFyY2hQYWQuUkVTVUxUX0lEX0FUVFJJQlVURSwgaWQpO1xuXG4gIHRoaXMuX3Jlc3VsdHNDb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgc2VhcmNoIGVsZW1lbnQgcHJvdmlkZXIuXG4gKlxuICogU2VhcmNoUHJvdmlkZXIuZmluZCAtIHByb3ZpZGVzIHNlYXJjaCBmdW5jdGlvbiBvdmVyIG93biBlbGVtZW50c1xuICogIChwYXR0ZXJuKSA9PiBbeyB0ZXh0OiA8U3RyaW5nPiwgZWxlbWVudDogPEVsZW1lbnQ+fSwgLi4uXVxuICpcbiAqIEBwYXJhbSAge1NlYXJjaFByb3ZpZGVyfSBwcm92aWRlclxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLnJlZ2lzdGVyUHJvdmlkZXIgPSBmdW5jdGlvbihwcm92aWRlcikge1xuICB0aGlzLl9zZWFyY2hQcm92aWRlciA9IHByb3ZpZGVyO1xufTtcblxuXG4vKipcbiAqIE9wZW4gc2VhcmNoIHBhZC5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fc2VhcmNoUHJvdmlkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHNlYXJjaCBwcm92aWRlciByZWdpc3RlcmVkJyk7XG4gIH1cblxuICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2JpbmRFdmVudHMoKTtcblxuICB0aGlzLl9vcGVuID0gdHJ1ZTtcblxuICBkb21DbGFzc2VzKHRoaXMuX2NvbnRhaW5lcikuYWRkKCdvcGVuJyk7XG5cbiAgdGhpcy5fc2VhcmNoSW5wdXQuZm9jdXMoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQub3BlbmVkJyk7XG59O1xuXG5cbi8qKlxuICogQ2xvc2Ugc2VhcmNoIHBhZC5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl91bmJpbmRFdmVudHMoKTtcblxuICB0aGlzLl9vcGVuID0gZmFsc2U7XG5cbiAgZG9tQ2xhc3Nlcyh0aGlzLl9jb250YWluZXIpLnJlbW92ZSgnb3BlbicpO1xuXG4gIHRoaXMuX2NsZWFyUmVzdWx0cygpO1xuXG4gIHRoaXMuX3NlYXJjaElucHV0LnZhbHVlID0gJyc7XG4gIHRoaXMuX3NlYXJjaElucHV0LmJsdXIoKTtcblxuICB0aGlzLl9yZXNldE92ZXJsYXkoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuY2xvc2VkJyk7XG59O1xuXG5cbi8qKlxuICogVG9nZ2xlcyBzZWFyY2ggcGFkIG9uL29mZi5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5pc09wZW4oKSA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xufTtcblxuXG4vKipcbiAqIFJlcG9ydCBzdGF0ZSBvZiBzZWFyY2ggcGFkLlxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fb3Blbjtcbn07XG5cblxuLyoqXG4gKiBQcmVzZWxlY3QgcmVzdWx0IGVudHJ5LlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fcHJlc2VsZWN0ID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgc2VsZWN0ZWROb2RlID0gdGhpcy5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuXG4gIC8vIGFscmVhZHkgc2VsZWN0ZWRcbiAgaWYgKG5vZGUgPT09IHNlbGVjdGVkTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHJlbW92aW5nIHByZXNlbGVjdGlvbiBmcm9tIGN1cnJlbnQgbm9kZVxuICBpZiAoc2VsZWN0ZWROb2RlKSB7XG4gICAgZG9tQ2xhc3NlcyhzZWxlY3RlZE5vZGUpLnJlbW92ZShTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTKTtcbiAgfVxuXG4gIHZhciBpZCA9IGRvbUF0dHIobm9kZSwgU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUpO1xuICB2YXIgZWxlbWVudCA9IHRoaXMuX3Jlc3VsdHNbaWRdLmVsZW1lbnQ7XG5cbiAgZG9tQ2xhc3Nlcyhub2RlKS5hZGQoU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RFRF9DTEFTUyk7XG5cbiAgdGhpcy5fcmVzZXRPdmVybGF5KGVsZW1lbnQpO1xuXG4gIHRoaXMuX2NlbnRlclZpZXdib3goZWxlbWVudCk7XG5cbiAgdGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQucHJlc2VsZWN0ZWQnLCBlbGVtZW50KTtcbn07XG5cblxuLyoqXG4gKiBTZWxlY3QgcmVzdWx0IG5vZGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9zZWxlY3QgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBpZCA9IGRvbUF0dHIobm9kZSwgU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUpO1xuICB2YXIgZWxlbWVudCA9IHRoaXMuX3Jlc3VsdHNbaWRdLmVsZW1lbnQ7XG5cbiAgdGhpcy5jbG9zZSgpO1xuXG4gIHRoaXMuX3Jlc2V0T3ZlcmxheSgpO1xuXG4gIHRoaXMuX2NlbnRlclZpZXdib3goZWxlbWVudCk7XG5cbiAgdGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuc2VsZWN0ZWQnLCBlbGVtZW50KTtcbn07XG5cblxuLyoqXG4gKiBDZW50ZXIgdmlld2JveCBvbiB0aGUgZWxlbWVudCBtaWRkbGUgcG9pbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9jZW50ZXJWaWV3Ym94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgdmlld2JveCA9IHRoaXMuX2NhbnZhcy52aWV3Ym94KCk7XG5cbiAgdmFyIGJveCA9IGdldEJvdW5kaW5nQm94KGVsZW1lbnQpO1xuXG4gIHZhciBuZXdWaWV3Ym94ID0ge1xuICAgIHg6IChib3gueCArIGJveC53aWR0aC8yKSAtIHZpZXdib3gub3V0ZXIud2lkdGgvMixcbiAgICB5OiAoYm94LnkgKyBib3guaGVpZ2h0LzIpIC0gdmlld2JveC5vdXRlci5oZWlnaHQvMixcbiAgICB3aWR0aDogdmlld2JveC5vdXRlci53aWR0aCxcbiAgICBoZWlnaHQ6IHZpZXdib3gub3V0ZXIuaGVpZ2h0XG4gIH07XG5cbiAgdGhpcy5fY2FudmFzLnZpZXdib3gobmV3Vmlld2JveCk7XG5cbiAgdGhpcy5fY2FudmFzLnpvb20odmlld2JveC5zY2FsZSk7XG59O1xuXG5cbi8qKlxuICogUmVzZXQgb3ZlcmxheSByZW1vdmVzIGFuZCwgb3B0aW9uYWxseSwgc2V0XG4gKiBvdmVybGF5IHRvIGEgbmV3IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9yZXNldE92ZXJsYXkgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmICh0aGlzLl9vdmVybGF5SWQpIHtcbiAgICB0aGlzLl9vdmVybGF5cy5yZW1vdmUodGhpcy5fb3ZlcmxheUlkKTtcbiAgfVxuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgdmFyIGJveCA9IGdldEJvdW5kaW5nQm94KGVsZW1lbnQpO1xuICAgIHZhciBvdmVybGF5ID0gY29uc3RydWN0T3ZlcmxheShib3gpO1xuICAgIHRoaXMuX292ZXJsYXlJZCA9IHRoaXMuX292ZXJsYXlzLmFkZChlbGVtZW50LCBvdmVybGF5KTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbnN0cnVjdCBvdmVybGF5IG9iamVjdCBmb3IgdGhlIGdpdmVuIGJvdW5kaW5nIGJveC5cbiAqXG4gKiBAcGFyYW0gIHtCb3VuZGluZ0JveH0gYm94XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdE92ZXJsYXkoYm94KSB7XG5cbiAgdmFyIG9mZnNldCA9IDY7XG4gIHZhciB3ID0gYm94LndpZHRoICsgb2Zmc2V0ICogMjtcbiAgdmFyIGggPSBib3guaGVpZ2h0ICsgb2Zmc2V0ICogMjtcblxuICB2YXIgc3R5bGVzID0gW1xuICAgICd3aWR0aDogJysgdyArJ3B4JyxcbiAgICAnaGVpZ2h0OiAnKyBoICsgJ3B4J1xuICBdLmpvaW4oJzsgJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjoge1xuICAgICAgYm90dG9tOiBoIC0gb2Zmc2V0LFxuICAgICAgcmlnaHQ6IHcgLSBvZmZzZXRcbiAgICB9LFxuICAgIHNob3c6IHRydWUsXG4gICAgaHRtbDogJzxkaXYgc3R5bGU9XCInICsgc3R5bGVzICsgJ1wiIGNsYXNzPVwiJyArIFNlYXJjaFBhZC5PVkVSTEFZX0NMQVNTICsgJ1wiPjwvZGl2PidcbiAgfTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIGFwcGVuZHMgY2hpbGQgbm9kZSBmcm9tIHJlc3VsdCB0b2tlbnMgYW5kIEhUTUwgdGVtcGxhdGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gdG9rZW5zXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHRlbXBsYXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlubmVyVGV4dE5vZGUocGFyZW50Tm9kZSwgdG9rZW5zLCB0ZW1wbGF0ZSkge1xuICB2YXIgdGV4dCA9IGNyZWF0ZUh0bWxUZXh0KHRva2Vucyk7XG4gIHZhciBjaGlsZE5vZGUgPSBkb21pZnkodGVtcGxhdGUpO1xuICBjaGlsZE5vZGUuaW5uZXJIVE1MID0gdGV4dDtcbiAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBpbnRlcm5hbCBIVE1MIG1hcmt1cCBmcm9tIHJlc3VsdCB0b2tlbnMuXG4gKiBDYXRlcnMgZm9yIGhpZ2hsaWdodGluZyBwYXR0ZXJuIG1hdGNoZWQgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IHRva2Vuc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjcmVhdGVIdG1sVGV4dCh0b2tlbnMpIHtcbiAgdmFyIGh0bWxUZXh0ID0gJyc7XG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24odCkge1xuICAgIGlmICh0Lm1hdGNoZWQpIHtcbiAgICAgIGh0bWxUZXh0ICs9ICc8c3Ryb25nIGNsYXNzPVwiJyArIFNlYXJjaFBhZC5SRVNVTFRfSElHSExJR0hUX0NMQVNTICsgJ1wiPicgKyBlc2NhcGVIVE1MKHQubWF0Y2hlZCkgKyAnPC9zdHJvbmc+JztcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbFRleHQgKz0gZXNjYXBlSFRNTCh0Lm5vcm1hbCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaHRtbFRleHQgIT09ICcnID8gaHRtbFRleHQgOiBudWxsO1xufVxuXG5cbi8qKlxuICogQ09OU1RBTlRTXG4gKi9cblNlYXJjaFBhZC5DT05UQUlORVJfU0VMRUNUT1IgPSAnLmRqcy1zZWFyY2gtY29udGFpbmVyJztcblNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiA9ICcuZGpzLXNlYXJjaC1pbnB1dCBpbnB1dCc7XG5TZWFyY2hQYWQuUkVTVUxUU19DT05UQUlORVJfU0VMRUNUT1IgPSAnLmRqcy1zZWFyY2gtcmVzdWx0cyc7XG5TZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SID0gJy5kanMtc2VhcmNoLXJlc3VsdCc7XG5TZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTID0gJ2Rqcy1zZWFyY2gtcmVzdWx0LXNlbGVjdGVkJztcblNlYXJjaFBhZC5SRVNVTFRfU0VMRUNURURfU0VMRUNUT1IgPSAnLicgKyBTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTO1xuU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUgPSAnZGF0YS1yZXN1bHQtaWQnO1xuU2VhcmNoUGFkLlJFU1VMVF9ISUdITElHSFRfQ0xBU1MgPSAnZGpzLXNlYXJjaC1oaWdobGlnaHQnO1xuU2VhcmNoUGFkLk9WRVJMQVlfQ0xBU1MgPSAnZGpzLXNlYXJjaC1vdmVybGF5JztcblxuU2VhcmNoUGFkLkJPWF9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLWNvbnRhaW5lciBkanMtZHJhZ2dhYmxlIGRqcy1zY3JvbGxhYmxlXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLWlucHV0XCI+JyArXG4gICAgICAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIvPicgK1xuICAgICc8L2Rpdj4nICtcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1zZWFyY2gtcmVzdWx0c1wiPjwvZGl2PicgK1xuICAnPC9kaXY+JztcblxuU2VhcmNoUGFkLlJFU1VMVF9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdFwiPjwvZGl2Pic7XG5cblNlYXJjaFBhZC5SRVNVTFRfUFJJTUFSWV9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdC1wcmltYXJ5XCI+PC9kaXY+JztcblxuU2VhcmNoUGFkLlJFU1VMVF9TRUNPTkRBUllfSFRNTCA9XG4gICc8cCBjbGFzcz1cImRqcy1zZWFyY2gtcmVzdWx0LXNlY29uZGFyeVwiPjwvcD4nO1xuIiwiaW1wb3J0IE92ZXJsYXlzTW9kdWxlIGZyb20gJy4uL292ZXJsYXlzJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcblxuaW1wb3J0IFNlYXJjaFBhZCBmcm9tICcuL1NlYXJjaFBhZCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBPdmVybGF5c01vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgc2VhcmNoUGFkOiBbICd0eXBlJywgU2VhcmNoUGFkIF1cbn07XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IG9mZmVycyB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW4gYSBkaWFncmFtLlxuICogT2ZmZXJzIHRoZSBhcGkgdG8gY29udHJvbCB0aGUgc2VsZWN0aW9uLCB0b28uXG4gKlxuICogQGNsYXNzXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXMgdGhlIGV2ZW50IGJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWxlY3Rpb24oZXZlbnRCdXMpIHtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuXG4gIHRoaXMuX3NlbGVjdGVkRWxlbWVudHMgPSBbXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUucmVtb3ZlJywgJ2Nvbm5lY3Rpb24ucmVtb3ZlJyBdLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG4gICAgc2VsZi5kZXNlbGVjdChlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZGlhZ3JhbS5jbGVhcicgXSwgZnVuY3Rpb24oZSkge1xuICAgIHNlbGYuc2VsZWN0KG51bGwpO1xuICB9KTtcbn1cblxuU2VsZWN0aW9uLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmRlc2VsZWN0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudHM7XG5cbiAgdmFyIGlkeCA9IHNlbGVjdGVkRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcblxuICBpZiAoaWR4ICE9PSAtMSkge1xuICAgIHZhciBvbGRTZWxlY3Rpb24gPSBzZWxlY3RlZEVsZW1lbnRzLnNsaWNlKCk7XG5cbiAgICBzZWxlY3RlZEVsZW1lbnRzLnNwbGljZShpZHgsIDEpO1xuXG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VsZWN0aW9uLmNoYW5nZWQnLCB7IG9sZFNlbGVjdGlvbjogb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb246IHNlbGVjdGVkRWxlbWVudHMgfSk7XG4gIH1cbn07XG5cblxuU2VsZWN0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRWxlbWVudHM7XG59O1xuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmlzU2VsZWN0ZWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xufTtcblxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHNlbGVjdHMgb25lIG9yIG1vcmUgZWxlbWVudHMgb24gdGhlIGRpYWdyYW0uXG4gKlxuICogQnkgcGFzc2luZyBhbiBhZGRpdGlvbmFsIGFkZCBwYXJhbWV0ZXIgeW91IGNhbiBkZWNpZGUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQocylcbiAqIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgYWxyZWFkeSBleGlzdGluZyBzZWxlY3Rpb24gb3Igbm90LlxuICpcbiAqIEBtZXRob2QgU2VsZWN0aW9uI3NlbGVjdFxuICpcbiAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gZWxlbWVudHMgZWxlbWVudCBvciBhcnJheSBvZiBlbGVtZW50cyB0byBiZSBzZWxlY3RlZFxuICogQHBhcmFtICB7Ym9vbGVhbn0gW2FkZF0gd2hldGhlciB0aGUgZWxlbWVudChzKSBzaG91bGQgYmUgYXBwZW5kZWQgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBkZWZhdWx0cyB0byBmYWxzZVxuICovXG5TZWxlY3Rpb24ucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBhZGQpIHtcbiAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzLFxuICAgICAgb2xkU2VsZWN0aW9uID0gc2VsZWN0ZWRFbGVtZW50cy5zbGljZSgpO1xuXG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzID8gWyBlbGVtZW50cyBdIDogW107XG4gIH1cblxuICAvLyBzZWxlY3Rpb24gbWF5IGJlIGNsZWFyZWQgYnkgcGFzc2luZyBhbiBlbXB0eSBhcnJheSBvciBudWxsXG4gIC8vIHRvIHRoZSBtZXRob2RcbiAgaWYgKGFkZCkge1xuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xKSB7XG5cbiAgICAgICAgLy8gYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cy5zbGljZSgpO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VsZWN0aW9uLmNoYW5nZWQnLCB7IG9sZFNlbGVjdGlvbjogb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb246IHNlbGVjdGVkRWxlbWVudHMgfSk7XG59O1xuIiwiaW1wb3J0IHtcbiAgaGFzUHJpbWFyeU1vZGlmaWVyXG59IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQge1xuICBmaW5kLCBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWxlY3Rpb25CZWhhdmlvcihcbiAgICBldmVudEJ1cywgc2VsZWN0aW9uLCBjYW52YXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgYXV0b1NlbGVjdCA9IGhpbnRzLmF1dG9TZWxlY3Q7XG5cbiAgICAvLyBzZWxlY3QgZWxlbWVudHMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZFxuICAgIGlmIChjYW5FeGVjdXRlKSB7XG4gICAgICBpZiAoYXV0b1NlbGVjdCA9PT0gZmFsc2UpIHtcblxuICAgICAgICAvLyBzZWxlY3Qgbm8gZWxlbWVudHNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShhdXRvU2VsZWN0KSkge1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0KGF1dG9TZWxlY3QpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzIGJ5IGRlZmF1bHRcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50cy5maWx0ZXIoaXNTaG93bikpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuZW5kJywgNTAwLCBmdW5jdGlvbihlKSB7XG5cbiAgICAvLyBzZWxlY3QgdGhlIGNvbm5lY3QgZW5kIHRhcmdldFxuICAgIC8vIGFmdGVyIGEgY29ubmVjdCBvcGVyYXRpb25cbiAgICBpZiAoZS5jb250ZXh0LmNhbkV4ZWN1dGUgJiYgZS5jb250ZXh0LmhvdmVyKSB7XG4gICAgICBzZWxlY3Rpb24uc2VsZWN0KGUuY29udGV4dC5ob3Zlcik7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgcHJldmlvdXNTZWxlY3Rpb24gPSBlLnByZXZpb3VzU2VsZWN0aW9uIHx8IFtdO1xuXG4gICAgdmFyIHNoYXBlID0gZWxlbWVudFJlZ2lzdHJ5LmdldChlLmNvbnRleHQuc2hhcGUuaWQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IHRoZSBtYWluIG1vdmVkIGVsZW1lbnQgaXMgYmVpbmdcbiAgICAvLyBzZWxlY3RlZCBhZnRlciBhIG1vdmUgb3BlcmF0aW9uXG4gICAgdmFyIGluU2VsZWN0aW9uID0gZmluZChwcmV2aW91c1NlbGVjdGlvbiwgZnVuY3Rpb24oc2VsZWN0ZWRTaGFwZSkge1xuICAgICAgcmV0dXJuIHNoYXBlLmlkID09PSBzZWxlY3RlZFNoYXBlLmlkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpblNlbGVjdGlvbikge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChzaGFwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTaGlmdCArIGNsaWNrIHNlbGVjdGlvblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQ7XG5cbiAgICAvLyBkbyBub3Qgc2VsZWN0IHRoZSByb290IGVsZW1lbnRcbiAgICAvLyBvciBjb25uZWN0aW9uc1xuICAgIGlmIChlbGVtZW50ID09PSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSkge1xuICAgICAgZWxlbWVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGlzU2VsZWN0ZWQgPSBzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KSxcbiAgICAgICAgaXNNdWx0aVNlbGVjdCA9IHNlbGVjdGlvbi5nZXQoKS5sZW5ndGggPiAxO1xuXG4gICAgLy8gbW91c2UtZXZlbnQ6IFNFTEVDVElPTl9LRVlcbiAgICB2YXIgYWRkID0gaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KTtcblxuICAgIC8vIHNlbGVjdCBPUiBkZXNlbGVjdCBlbGVtZW50IGluIG11bHRpIHNlbGVjdGlvblxuICAgIGlmIChpc1NlbGVjdGVkICYmIGlzTXVsdGlTZWxlY3QpIHtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5kZXNlbGVjdChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0KGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZVxuICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50LCBhZGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuU2VsZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG5mdW5jdGlvbiBpc1Nob3duKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFlbGVtZW50LmhpZGRlbjtcbn1cbiIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgTUFSS0VSX0hPVkVSID0gJ2hvdmVyJyxcbiAgICBNQVJLRVJfU0VMRUNURUQgPSAnc2VsZWN0ZWQnO1xuXG5cbi8qKlxuICogQSBwbHVnaW4gdGhhdCBhZGRzIGEgdmlzaWJsZSBzZWxlY3Rpb24gVUkgdG8gc2hhcGVzIGFuZCBjb25uZWN0aW9uc1xuICogYnkgYXBwZW5kaW5nIHRoZSA8Y29kZT5ob3ZlcjwvY29kZT4gYW5kIDxjb2RlPnNlbGVjdGVkPC9jb2RlPiBjbGFzc2VzIHRvIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKlxuICogTWFrZXMgZWxlbWVudHMgc2VsZWN0YWJsZSwgdG9vLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50c1xuICogQHBhcmFtIHtTZWxlY3Rpb25TZXJ2aWNlfSBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2VsZWN0aW9uVmlzdWFscyhldmVudHMsIGNhbnZhcywgc2VsZWN0aW9uLCBzdHlsZXMpIHtcblxuICB0aGlzLl9tdWx0aVNlbGVjdGlvbkJveCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gYWRkTWFya2VyKGUsIGNscykge1xuICAgIGNhbnZhcy5hZGRNYXJrZXIoZSwgY2xzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU1hcmtlcihlLCBjbHMpIHtcbiAgICBjYW52YXMucmVtb3ZlTWFya2VyKGUsIGNscyk7XG4gIH1cblxuICBldmVudHMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIGFkZE1hcmtlcihldmVudC5lbGVtZW50LCBNQVJLRVJfSE9WRVIpO1xuICB9KTtcblxuICBldmVudHMub24oJ2VsZW1lbnQub3V0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZW1vdmVNYXJrZXIoZXZlbnQuZWxlbWVudCwgTUFSS0VSX0hPVkVSKTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBmdW5jdGlvbiBkZXNlbGVjdChzKSB7XG4gICAgICByZW1vdmVNYXJrZXIocywgTUFSS0VSX1NFTEVDVEVEKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxlY3Qocykge1xuICAgICAgYWRkTWFya2VyKHMsIE1BUktFUl9TRUxFQ1RFRCk7XG4gICAgfVxuXG4gICAgdmFyIG9sZFNlbGVjdGlvbiA9IGV2ZW50Lm9sZFNlbGVjdGlvbixcbiAgICAgICAgbmV3U2VsZWN0aW9uID0gZXZlbnQubmV3U2VsZWN0aW9uO1xuXG4gICAgZm9yRWFjaChvbGRTZWxlY3Rpb24sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChuZXdTZWxlY3Rpb24uaW5kZXhPZihlKSA9PT0gLTEpIHtcbiAgICAgICAgZGVzZWxlY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKG5ld1NlbGVjdGlvbiwgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKG9sZFNlbGVjdGlvbi5pbmRleE9mKGUpID09PSAtMSkge1xuICAgICAgICBzZWxlY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5TZWxlY3Rpb25WaXN1YWxzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3N0eWxlcydcbl07IiwiaW1wb3J0IEludGVyYWN0aW9uRXZlbnRzTW9kdWxlIGZyb20gJy4uL2ludGVyYWN0aW9uLWV2ZW50cyc7XG5pbXBvcnQgT3V0bGluZU1vZHVsZSBmcm9tICcuLi9vdXRsaW5lJztcblxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tICcuL1NlbGVjdGlvbic7XG5pbXBvcnQgU2VsZWN0aW9uVmlzdWFscyBmcm9tICcuL1NlbGVjdGlvblZpc3VhbHMnO1xuaW1wb3J0IFNlbGVjdGlvbkJlaGF2aW9yIGZyb20gJy4vU2VsZWN0aW9uQmVoYXZpb3InO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3NlbGVjdGlvblZpc3VhbHMnLCAnc2VsZWN0aW9uQmVoYXZpb3InIF0sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgT3V0bGluZU1vZHVsZVxuICBdLFxuICBzZWxlY3Rpb246IFsgJ3R5cGUnLCBTZWxlY3Rpb24gXSxcbiAgc2VsZWN0aW9uVmlzdWFsczogWyAndHlwZScsIFNlbGVjdGlvblZpc3VhbHMgXSxcbiAgc2VsZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBTZWxlY3Rpb25CZWhhdmlvciBdXG59O1xuIiwiaW1wb3J0IFNuYXBDb250ZXh0IGZyb20gJy4vU25hcENvbnRleHQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRDaGlsZHJlbixcclxuICBpc1NuYXBwZWQsXHJcbiAgbWlkXHJcbn0gZnJvbSAnLi9TbmFwVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0NtZCB9IGZyb20gJy4uL2tleWJvYXJkL0tleWJvYXJkVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZvckVhY2gsXHJcbiAgaXNOdW1iZXJcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTI1MDtcclxuXHJcblxyXG4vKipcclxuICogU25hcCBkdXJpbmcgY3JlYXRlIGFuZCBtb3ZlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBlbGVtZW50UmVnaXN0cnlcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtTbmFwcGluZ30gc25hcHBpbmdcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZU1vdmVTbmFwcGluZyhlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBzbmFwcGluZykge1xyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLnN0YXJ0JyxcclxuICAgICdzaGFwZS5tb3ZlLnN0YXJ0J1xyXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBzZWxmLmluaXRTbmFwKGV2ZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2NyZWF0ZS5tb3ZlJyxcclxuICAgICdjcmVhdGUuZW5kJyxcclxuICAgICdzaGFwZS5tb3ZlLm1vdmUnLFxyXG4gICAgJ3NoYXBlLm1vdmUuZW5kJ1xyXG4gIF0sIEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0LFxyXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xyXG5cclxuICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICYmIGlzQ21kKGV2ZW50Lm9yaWdpbmFsRXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNTbmFwcGVkKGV2ZW50KSB8fCAhdGFyZ2V0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc25hcFBvaW50cyA9IHNuYXBDb250ZXh0LnBvaW50c0ZvclRhcmdldCh0YXJnZXQpO1xyXG5cclxuICAgIGlmICghc25hcFBvaW50cy5pbml0aWFsaXplZCkge1xyXG4gICAgICBzbmFwUG9pbnRzID0gc2VsZi5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQpO1xyXG5cclxuICAgICAgc25hcFBvaW50cy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc25hcHBpbmcuc25hcChldmVudCwgc25hcFBvaW50cyk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuY2xlYW51cCcsXHJcbiAgICAnc2hhcGUubW92ZS5jbGVhbnVwJ1xyXG4gIF0sIGZ1bmN0aW9uKCkge1xyXG4gICAgc25hcHBpbmcuaGlkZSgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5DcmVhdGVNb3ZlU25hcHBpbmcuJGluamVjdCA9IFtcclxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdzbmFwcGluZydcclxuXTtcclxuXHJcbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuaW5pdFNuYXAgPSBmdW5jdGlvbihldmVudCkge1xyXG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnk7XHJcblxyXG4gIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQ7XHJcblxyXG4gIGlmICghc25hcENvbnRleHQpIHtcclxuICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dCA9IG5ldyBTbmFwQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHNoYXBlTWlkO1xyXG5cclxuICBpZiAoZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCkpIHtcclxuXHJcbiAgICAvLyBtb3ZlXHJcbiAgICBzaGFwZU1pZCA9IG1pZChzaGFwZSwgZXZlbnQpO1xyXG4gIH0gZWxzZSB7XHJcblxyXG4gICAgLy8gY3JlYXRlXHJcbiAgICBzaGFwZU1pZCA9IHtcclxuICAgICAgeDogZXZlbnQueCArIG1pZChzaGFwZSkueCxcclxuICAgICAgeTogZXZlbnQueSArIG1pZChzaGFwZSkueVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHZhciBzaGFwZVRvcExlZnQgPSB7XHJcbiAgICAgICAgeDogc2hhcGVNaWQueCAtIHNoYXBlLndpZHRoIC8gMixcclxuICAgICAgICB5OiBzaGFwZU1pZC55IC0gc2hhcGUuaGVpZ2h0IC8gMlxyXG4gICAgICB9LFxyXG4gICAgICBzaGFwZUJvdHRvbVJpZ2h0ID0ge1xyXG4gICAgICAgIHg6IHNoYXBlTWlkLnggKyBzaGFwZS53aWR0aCAvIDIsXHJcbiAgICAgICAgeTogc2hhcGVNaWQueSArIHNoYXBlLmhlaWdodCAvIDJcclxuICAgICAgfTtcclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbignbWlkJywge1xyXG4gICAgeDogc2hhcGVNaWQueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzaGFwZU1pZC55IC0gZXZlbnQueVxyXG4gIH0pO1xyXG5cclxuICAvLyBzbmFwIGxhYmVscyB0byBtaWQgb25seVxyXG4gIGlmIChpc0xhYmVsKHNoYXBlKSkge1xyXG4gICAgcmV0dXJuIHNuYXBDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbigndG9wLWxlZnQnLCB7XHJcbiAgICB4OiBzaGFwZVRvcExlZnQueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzaGFwZVRvcExlZnQueSAtIGV2ZW50LnlcclxuICB9KTtcclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbignYm90dG9tLXJpZ2h0Jywge1xyXG4gICAgeDogc2hhcGVCb3R0b21SaWdodC54IC0gZXZlbnQueCxcclxuICAgIHk6IHNoYXBlQm90dG9tUmlnaHQueSAtIGV2ZW50LnlcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHNuYXBDb250ZXh0O1xyXG59O1xyXG5cclxuQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzID0gZnVuY3Rpb24oc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCkge1xyXG4gIHZhciBzbmFwVGFyZ2V0cyA9IHRoaXMuZ2V0U25hcFRhcmdldHMoc2hhcGUsIHRhcmdldCk7XHJcblxyXG4gIGZvckVhY2goc25hcFRhcmdldHMsIGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcclxuXHJcbiAgICAvLyBoYW5kbGUgbGFiZWxzXHJcbiAgICBpZiAoaXNMYWJlbChzbmFwVGFyZ2V0KSkge1xyXG5cclxuICAgICAgaWYgKGlzTGFiZWwoc2hhcGUpKSB7XHJcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIG1pZChzbmFwVGFyZ2V0KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgY29ubmVjdGlvbnNcclxuICAgIGlmIChpc0Nvbm5lY3Rpb24oc25hcFRhcmdldCkpIHtcclxuXHJcbiAgICAgIC8vIGlnbm9yZSBzaW5nbGUgc2VnbWVudCBjb25uZWN0aW9uc1xyXG4gICAgICBpZiAoc25hcFRhcmdldC53YXlwb2ludHMubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWdub3JlIGZpcnN0IGFuZCBsYXN0IHdheXBvaW50XHJcbiAgICAgIHZhciB3YXlwb2ludHMgPSBzbmFwVGFyZ2V0LndheXBvaW50cy5zbGljZSgxLCAtMSk7XHJcblxyXG4gICAgICBmb3JFYWNoKHdheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcclxuICAgICAgICBzbmFwUG9pbnRzLmFkZCgnbWlkJywgd2F5cG9pbnQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgc2hhcGVzXHJcbiAgICBzbmFwUG9pbnRzLmFkZCgnbWlkJywgbWlkKHNuYXBUYXJnZXQpKTtcclxuICB9KTtcclxuXHJcbiAgaWYgKCFpc051bWJlcihzaGFwZS54KSB8fCAhaXNOdW1iZXIoc2hhcGUueSkpIHtcclxuICAgIHJldHVybiBzbmFwUG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgLy8gc25hcCB0byBvcmlnaW5hbCBwb3NpdGlvbiB3aGVuIG1vdmluZ1xyXG4gIGlmICh0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xyXG4gICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIG1pZChzaGFwZSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNuYXBQb2ludHM7XHJcbn07XHJcblxyXG5DcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBUYXJnZXRzID0gZnVuY3Rpb24oc2hhcGUsIHRhcmdldCkge1xyXG4gIHJldHVybiBnZXRDaGlsZHJlbih0YXJnZXQpLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xyXG4gICAgcmV0dXJuICFpc0hpZGRlbihjaGlsZCk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC53YXlwb2ludHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSGlkZGVuKGVsZW1lbnQpIHtcclxuICByZXR1cm4gISFlbGVtZW50LmhpZGRlbjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcclxufSIsImltcG9ydCBTbmFwQ29udGV4dCBmcm9tICcuL1NuYXBDb250ZXh0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgYm90dG9tUmlnaHQsXHJcbiAgZ2V0Q2hpbGRyZW4sXHJcbiAgaXNTbmFwcGVkLFxyXG4gIHNldFNuYXBwZWQsXHJcbiAgdG9wTGVmdCxcclxufSBmcm9tICcuL1NuYXBVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQ21kIH0gZnJvbSAnLi4va2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNUUkJMLFxyXG4gIGdldE1pZFxyXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTI1MDtcclxuXHJcblxyXG4vKipcclxuICogU25hcCBkdXJpbmcgcmVzaXplLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge1NuYXBwaW5nfSBzbmFwcGluZ1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplU25hcHBpbmcoZXZlbnRCdXMsIHNuYXBwaW5nKSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbihbICdyZXNpemUuc3RhcnQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBzZWxmLmluaXRTbmFwKGV2ZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ3Jlc2l6ZS5tb3ZlJyxcclxuICAgICdyZXNpemUuZW5kJyxcclxuICBdLCBISUdIRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHBhcmVudCA9IHNoYXBlLnBhcmVudCxcclxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcclxuICAgICAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQ7XHJcblxyXG4gICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQgJiYgaXNDbWQoZXZlbnQub3JpZ2luYWxFdmVudCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1NuYXBwZWQoZXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc25hcFBvaW50cyA9IHNuYXBDb250ZXh0LnBvaW50c0ZvclRhcmdldChwYXJlbnQpO1xyXG5cclxuICAgIGlmICghc25hcFBvaW50cy5pbml0aWFsaXplZCkge1xyXG4gICAgICBzbmFwUG9pbnRzID0gc2VsZi5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCBwYXJlbnQsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICBzbmFwUG9pbnRzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGRpcmVjdGlvbikpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCBldmVudC54KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbChkaXJlY3Rpb24pKSB7XHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5JywgZXZlbnQueSk7XHJcbiAgICB9XHJcblxyXG4gICAgc25hcHBpbmcuc25hcChldmVudCwgc25hcFBvaW50cyk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFsgJ3Jlc2l6ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbigpIHtcclxuICAgIHNuYXBwaW5nLmhpZGUoKTtcclxuICB9KTtcclxufVxyXG5cclxuUmVzaXplU25hcHBpbmcucHJvdG90eXBlLmluaXRTbmFwID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgZGlyZWN0aW9uID0gY29udGV4dC5kaXJlY3Rpb24sXHJcbiAgICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dDtcclxuXHJcbiAgaWYgKCFzbmFwQ29udGV4dCkge1xyXG4gICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0ID0gbmV3IFNuYXBDb250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICB2YXIgc25hcE9yaWdpbiA9IGdldFNuYXBPcmlnaW4oc2hhcGUsIGRpcmVjdGlvbik7XHJcblxyXG4gIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oJ2Nvcm5lcicsIHtcclxuICAgIHg6IHNuYXBPcmlnaW4ueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzbmFwT3JpZ2luLnkgLSBldmVudC55XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBzbmFwQ29udGV4dDtcclxufTtcclxuXHJcblJlc2l6ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzID0gZnVuY3Rpb24oc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCwgZGlyZWN0aW9uKSB7XHJcbiAgdmFyIHNuYXBUYXJnZXRzID0gdGhpcy5nZXRTbmFwVGFyZ2V0cyhzaGFwZSwgdGFyZ2V0KTtcclxuXHJcbiAgZm9yRWFjaChzbmFwVGFyZ2V0cywgZnVuY3Rpb24oc25hcFRhcmdldCkge1xyXG4gICAgc25hcFBvaW50cy5hZGQoJ2Nvcm5lcicsIGJvdHRvbVJpZ2h0KHNuYXBUYXJnZXQpKTtcclxuICAgIHNuYXBQb2ludHMuYWRkKCdjb3JuZXInLCB0b3BMZWZ0KHNuYXBUYXJnZXQpKTtcclxuICB9KTtcclxuXHJcbiAgc25hcFBvaW50cy5hZGQoJ2Nvcm5lcicsIGdldFNuYXBPcmlnaW4oc2hhcGUsIGRpcmVjdGlvbikpO1xyXG5cclxuICByZXR1cm4gc25hcFBvaW50cztcclxufTtcclxuXHJcblJlc2l6ZVNuYXBwaW5nLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnc25hcHBpbmcnXHJcbl07XHJcblxyXG5SZXNpemVTbmFwcGluZy5wcm90b3R5cGUuZ2V0U25hcFRhcmdldHMgPSBmdW5jdGlvbihzaGFwZSwgdGFyZ2V0KSB7XHJcbiAgcmV0dXJuIGdldENoaWxkcmVuKHRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICByZXR1cm4gIWlzQXR0YWNoZWQoY2hpbGQsIHNoYXBlKVxyXG4gICAgICAmJiAhaXNDb25uZWN0aW9uKGNoaWxkKVxyXG4gICAgICAmJiAhaXNIaWRkZW4oY2hpbGQpXHJcbiAgICAgICYmICFpc0xhYmVsKGNoaWxkKTtcclxuICB9KTtcclxufTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gZ2V0U25hcE9yaWdpbihzaGFwZSwgZGlyZWN0aW9uKSB7XHJcbiAgdmFyIG1pZCA9IGdldE1pZChzaGFwZSksXHJcbiAgICAgIHRyYmwgPSBhc1RSQkwoc2hhcGUpO1xyXG5cclxuICB2YXIgc25hcE9yaWdpbiA9IHtcclxuICAgIHg6IG1pZC54LFxyXG4gICAgeTogbWlkLnlcclxuICB9O1xyXG5cclxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueSA9IHRyYmwudG9wO1xyXG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3MnKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueSA9IHRyYmwuYm90dG9tO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdlJykgIT09IC0xKSB7XHJcbiAgICBzbmFwT3JpZ2luLnggPSB0cmJsLnJpZ2h0O1xyXG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3cnKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueCA9IHRyYmwubGVmdDtcclxuICB9XHJcblxyXG4gIHJldHVybiBzbmFwT3JpZ2luO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0F0dGFjaGVkKGVsZW1lbnQsIGhvc3QpIHtcclxuICByZXR1cm4gZWxlbWVudC5ob3N0ID09PSBob3N0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0hpZGRlbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC5oaWRkZW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChkaXJlY3Rpb24pIHtcclxuICByZXR1cm4gZGlyZWN0aW9uID09PSAnbicgfHwgZGlyZWN0aW9uID09PSAncyc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmVydGljYWwoZGlyZWN0aW9uKSB7XHJcbiAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2UnIHx8IGRpcmVjdGlvbiA9PT0gJ3cnO1xyXG59IiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHNuYXBUb1xufSBmcm9tICcuL1NuYXBVdGlsJztcblxuXG4vKipcbiAqIEEgc25hcCBjb250ZXh0LCBjb250YWluaW5nIHRoZSAocG9zc2libHkgaW5jb21wbGV0ZSlcbiAqIG1hcHBpbmdzIG9mIGRyb3AgdGFyZ2V0cyAodG8gaWRlbnRpZnkgdGhlIHNuYXBwaW5nKVxuICogdG8gY29tcHV0ZWQgc25hcCBwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNuYXBDb250ZXh0KCkge1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBTbmFwUG9pbnRzPiBtYXBwaW5nIGRyb3AgdGFyZ2V0cyB0b1xuICAgKiBhIGxpc3Qgb2YgcG9zc2libGUgc25hcHBpbmdzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fdGFyZ2V0cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBQb2ludD4gaW5pdGlhbCBwb3NpdGlvbmluZyBvZiBlbGVtZW50XG4gICAqIHJlZ2FyZGluZyB2YXJpb3VzIHNuYXAgZGlyZWN0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX3NuYXBPcmlnaW5zID0ge307XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc25hcCBsb2NhdGlvbnNcbiAgICpcbiAgICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gICAqL1xuICB0aGlzLl9zbmFwTG9jYXRpb25zID0gW107XG5cbiAgLyoqXG4gICAqIE1hcDxTdHJpbmcsIEFycmF5PFBvaW50Pj4gb2YgZGVmYXVsdCBzbmFwcGluZyBsb2NhdGlvbnNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX2RlZmF1bHRTbmFwcyA9IHt9O1xufVxuXG5cblNuYXBDb250ZXh0LnByb3RvdHlwZS5nZXRTbmFwT3JpZ2luID0gZnVuY3Rpb24oc25hcExvY2F0aW9uKSB7XG4gIHJldHVybiB0aGlzLl9zbmFwT3JpZ2luc1tzbmFwTG9jYXRpb25dO1xufTtcblxuXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuc2V0U25hcE9yaWdpbiA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbiwgaW5pdGlhbFZhbHVlKSB7XG4gIHRoaXMuX3NuYXBPcmlnaW5zW3NuYXBMb2NhdGlvbl0gPSBpbml0aWFsVmFsdWU7XG5cbiAgaWYgKHRoaXMuX3NuYXBMb2NhdGlvbnMuaW5kZXhPZihzbmFwTG9jYXRpb24pID09PSAtMSkge1xuICAgIHRoaXMuX3NuYXBMb2NhdGlvbnMucHVzaChzbmFwTG9jYXRpb24pO1xuICB9XG59O1xuXG5cblNuYXBDb250ZXh0LnByb3RvdHlwZS5hZGREZWZhdWx0U25hcCA9IGZ1bmN0aW9uKHR5cGUsIHBvaW50KSB7XG5cbiAgdmFyIHNuYXBWYWx1ZXMgPSB0aGlzLl9kZWZhdWx0U25hcHNbdHlwZV07XG5cbiAgaWYgKCFzbmFwVmFsdWVzKSB7XG4gICAgc25hcFZhbHVlcyA9IHRoaXMuX2RlZmF1bHRTbmFwc1t0eXBlXSA9IFtdO1xuICB9XG5cbiAgc25hcFZhbHVlcy5wdXNoKHBvaW50KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgbnVtYmVyIG9mIGluaXRpYWxpemVkIHNuYXBzLCBpLmUuIHNuYXAgbG9jYXRpb25zIHN1Y2ggYXNcbiAqIHRvcC1sZWZ0LCBtaWQsIGJvdHRvbS1yaWdodCBhbmQgc28gZm9ydGguXG4gKlxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn0gc25hcExvY2F0aW9uc1xuICovXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuZ2V0U25hcExvY2F0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fc25hcExvY2F0aW9ucztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzbmFwIGxvY2F0aW9ucyBmb3IgdGhpcyBjb250ZXh0LlxuICpcbiAqIFRoZSBvcmRlciBvZiBsb2NhdGlvbnMgZGV0ZXJtaW5lcyBwcmVjZWRlbmNlLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc25hcExvY2F0aW9uc1xuICovXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuc2V0U25hcExvY2F0aW9ucyA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbnMpIHtcbiAgdGhpcy5fc25hcExvY2F0aW9ucyA9IHNuYXBMb2NhdGlvbnM7XG59O1xuXG4vKipcbiAqIEdldCBzbmFwIHBvaW50cyBmb3IgYSBnaXZlbiB0YXJnZXRcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8c3RyaW5nfSB0YXJnZXRcbiAqL1xuU25hcENvbnRleHQucHJvdG90eXBlLnBvaW50c0ZvclRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkge1xuXG4gIHZhciB0YXJnZXRJZCA9IHRhcmdldC5pZCB8fCB0YXJnZXQ7XG5cbiAgdmFyIHNuYXBQb2ludHMgPSB0aGlzLl90YXJnZXRzW3RhcmdldElkXTtcblxuICBpZiAoIXNuYXBQb2ludHMpIHtcbiAgICBzbmFwUG9pbnRzID0gdGhpcy5fdGFyZ2V0c1t0YXJnZXRJZF0gPSBuZXcgU25hcFBvaW50cygpO1xuICAgIHNuYXBQb2ludHMuaW5pdERlZmF1bHRzKHRoaXMuX2RlZmF1bHRTbmFwcyk7XG4gIH1cblxuICByZXR1cm4gc25hcFBvaW50cztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBzbmFwIHBvaW50cyBhbmQgaW5pdGlhbGl6ZXMgdGhlbSB3aXRoIHRoZVxuICogZ2l2ZW4gZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBBcnJheTxQb2ludD4+fSBbZGVmYXVsdFBvaW50c11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNuYXBQb2ludHMoZGVmYXVsdFNuYXBzKSB7XG5cbiAgLyoqXG4gICAqIE1hcDxTdHJpbmcsIE1hcDwoeHx5KSwgQXJyYXk8bnVtYmVyPj4+IG1hcHBpbmcgc25hcCBsb2NhdGlvbnMsXG4gICAqIGkuZS4gdG9wLWxlZnQsIGJvdHRvbS1yaWdodCwgY2VudGVyIHRvIGFjdHVhbCBzbmFwIHZhbHVlcy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX3NuYXBWYWx1ZXMgPSB7fTtcbn1cblxuU25hcFBvaW50cy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oc25hcExvY2F0aW9uLCBwb2ludCkge1xuXG4gIHZhciBzbmFwVmFsdWVzID0gdGhpcy5fc25hcFZhbHVlc1tzbmFwTG9jYXRpb25dO1xuXG4gIGlmICghc25hcFZhbHVlcykge1xuICAgIHNuYXBWYWx1ZXMgPSB0aGlzLl9zbmFwVmFsdWVzW3NuYXBMb2NhdGlvbl0gPSB7IHg6IFtdLCB5OiBbXSB9O1xuICB9XG5cbiAgaWYgKHNuYXBWYWx1ZXMueC5pbmRleE9mKHBvaW50LngpID09PSAtMSkge1xuICAgIHNuYXBWYWx1ZXMueC5wdXNoKHBvaW50LngpO1xuICB9XG5cbiAgaWYgKHNuYXBWYWx1ZXMueS5pbmRleE9mKHBvaW50LnkpID09PSAtMSkge1xuICAgIHNuYXBWYWx1ZXMueS5wdXNoKHBvaW50LnkpO1xuICB9XG59O1xuXG5cblNuYXBQb2ludHMucHJvdG90eXBlLnNuYXAgPSBmdW5jdGlvbihwb2ludCwgc25hcExvY2F0aW9uLCBheGlzLCB0b2xlcmFuY2UpIHtcbiAgdmFyIHNuYXBwaW5nVmFsdWVzID0gdGhpcy5fc25hcFZhbHVlc1tzbmFwTG9jYXRpb25dO1xuXG4gIHJldHVybiBzbmFwcGluZ1ZhbHVlcyAmJiBzbmFwVG8ocG9pbnRbYXhpc10sIHNuYXBwaW5nVmFsdWVzW2F4aXNdLCB0b2xlcmFuY2UpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbnVtYmVyIG9mIGRlZmF1bHQgc25hcHBpbmcgcG9pbnRzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZGVmYXVsdFNuYXBzXG4gKi9cblNuYXBQb2ludHMucHJvdG90eXBlLmluaXREZWZhdWx0cyA9IGZ1bmN0aW9uKGRlZmF1bHRTbmFwcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKGRlZmF1bHRTbmFwcyB8fCB7fSwgZnVuY3Rpb24oc25hcFBvaW50cywgc25hcExvY2F0aW9uKSB7XG4gICAgZm9yRWFjaChzbmFwUG9pbnRzLCBmdW5jdGlvbihwb2ludCkge1xuICAgICAgc2VsZi5hZGQoc25hcExvY2F0aW9uLCBwb2ludCk7XG4gICAgfSk7XG4gIH0pO1xufTsiLCJ2YXIgYWJzID0gTWF0aC5hYnMsXG4gICAgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5cbi8qKlxuICogU25hcCB2YWx1ZSB0byBhIGNvbGxlY3Rpb24gb2YgcmVmZXJlbmNlIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0gIHtBcnJheTxudW1iZXI+fSB2YWx1ZXNcbiAqIEBwYXJhbSAge251bWJlcn0gW3RvbGVyYW5jZT0xMF1cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSB2YWx1ZSB3ZSBzbmFwcGVkIHRvIG9yIG51bGwsIGlmIG5vbmUgc25hcHBlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcFRvKHZhbHVlLCB2YWx1ZXMsIHRvbGVyYW5jZSkge1xuICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgPT09IHVuZGVmaW5lZCA/IDEwIDogdG9sZXJhbmNlO1xuXG4gIHZhciBpZHgsIHNuYXBWYWx1ZTtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IHZhbHVlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgc25hcFZhbHVlID0gdmFsdWVzW2lkeF07XG5cbiAgICBpZiAoYWJzKHNuYXBWYWx1ZSAtIHZhbHVlKSA8PSB0b2xlcmFuY2UpIHtcbiAgICAgIHJldHVybiBzbmFwVmFsdWU7XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExlZnQoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLngsXG4gICAgeTogYm91bmRzLnlcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcFJpZ2h0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgYm91bmRzLndpZHRoLFxuICAgIHk6IGJvdW5kcy55XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3R0b21MZWZ0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54LFxuICAgIHk6IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tUmlnaHQoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGgsXG4gICAgeTogYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWQoYm91bmRzLCBkZWZhdWx0VmFsdWUpIHtcblxuICBpZiAoIWJvdW5kcyB8fCBpc05hTihib3VuZHMueCkgfHwgaXNOYU4oYm91bmRzLnkpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyKSxcbiAgICB5OiByb3VuZChib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgLyAyKVxuICB9O1xufVxuXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHNuYXAgc3RhdGUgb2YgdGhlIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHBhcmFtICB7c3RyaW5nfSBheGlzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHNuYXBwZWQgc3RhdGVcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NuYXBwZWQoZXZlbnQsIGF4aXMpIHtcbiAgdmFyIHNuYXBwZWQgPSBldmVudC5zbmFwcGVkO1xuXG4gIGlmICghc25hcHBlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXhpcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc25hcHBlZFtheGlzXTtcbiAgfVxuXG4gIHJldHVybiBzbmFwcGVkLnggJiYgc25hcHBlZC55O1xufVxuXG5cbi8qKlxuICogU2V0IHRoZSBnaXZlbiBldmVudCBhcyBzbmFwcGVkLlxuICpcbiAqIFRoaXMgbWV0aG9kIG1heSBjaGFuZ2UgdGhlIHggYW5kL29yIHkgcG9zaXRpb24gb2YgdGhlIHNoYXBlXG4gKiBmcm9tIHRoZSBnaXZlbiBldmVudCFcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcbiAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IHZhbHVlXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBvbGQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgYXhpcyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2F4aXMgbXVzdCBiZSBpbiBbeCwgeV0nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInICYmIHZhbHVlICE9PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBOdW1iZXIgb3IgZmFsc2UnKTtcbiAgfVxuXG4gIHZhciBkZWx0YSxcbiAgICAgIHByZXZpb3VzVmFsdWUgPSBldmVudFtheGlzXTtcblxuICB2YXIgc25hcHBlZCA9IGV2ZW50LnNuYXBwZWQgPSAoZXZlbnQuc25hcHBlZCB8fCB7fSk7XG5cblxuICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgc25hcHBlZFtheGlzXSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHNuYXBwZWRbYXhpc10gPSB0cnVlO1xuXG4gICAgZGVsdGEgPSB2YWx1ZSAtIHByZXZpb3VzVmFsdWU7XG5cbiAgICBldmVudFtheGlzXSArPSBkZWx0YTtcbiAgICBldmVudFsnZCcgKyBheGlzXSArPSBkZWx0YTtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIEdldCBjaGlsZHJlbiBvZiBhIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBwYXJlbnRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfGRqcy5tb2RlbC5Db25uZWN0aW9uPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkcmVuKHBhcmVudCkge1xuICByZXR1cm4gcGFyZW50LmNoaWxkcmVuIHx8IFtdO1xufSIsImltcG9ydCB7XG4gIGJpbmQsXG4gIGRlYm91bmNlLFxuICBmb3JFYWNoLFxuICBpc051bWJlcixcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1NuYXBwZWQsXG4gIHNldFNuYXBwZWRcbn0gZnJvbSAnLi9TbmFwVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIFNOQVBfVE9MRVJBTkNFID0gNztcblxuZXhwb3J0IHZhciBTTkFQX0xJTkVfSElERV9ERUxBWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBHZW5lcmljIHNuYXBwaW5nIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU25hcHBpbmcoY2FudmFzKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcblxuICAvLyBkZWxheSBoaWRlIGJ5IDEwMDAgc2Vjb25kcyBzaW5jZSBsYXN0IHNuYXBcbiAgdGhpcy5fYXN5bmNIaWRlID0gZGVib3VuY2UoYmluZCh0aGlzLmhpZGUsIHRoaXMpLCBTTkFQX0xJTkVfSElERV9ERUxBWSk7XG59XG5cblNuYXBwaW5nLiRpbmplY3QgPSBbICdjYW52YXMnIF07XG5cbi8qKlxuICogU25hcCBhbiBldmVudCB0byBnaXZlbiBzbmFwIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtTbmFwUG9pbnRzfSBzbmFwUG9pbnRzXG4gKi9cblNuYXBwaW5nLnByb3RvdHlwZS5zbmFwID0gZnVuY3Rpb24oZXZlbnQsIHNuYXBQb2ludHMpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0LFxuICAgICAgc25hcExvY2F0aW9ucyA9IHNuYXBDb250ZXh0LmdldFNuYXBMb2NhdGlvbnMoKTtcblxuICB2YXIgc25hcHBpbmcgPSB7XG4gICAgeDogaXNTbmFwcGVkKGV2ZW50LCAneCcpLFxuICAgIHk6IGlzU25hcHBlZChldmVudCwgJ3knKVxuICB9O1xuXG4gIGZvckVhY2goc25hcExvY2F0aW9ucywgZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICB2YXIgc25hcE9yaWdpbiA9IHNuYXBDb250ZXh0LmdldFNuYXBPcmlnaW4obG9jYXRpb24pO1xuXG4gICAgdmFyIHNuYXBDdXJyZW50ID0ge1xuICAgICAgeDogZXZlbnQueCArIHNuYXBPcmlnaW4ueCxcbiAgICAgIHk6IGV2ZW50LnkgKyBzbmFwT3JpZ2luLnlcbiAgICB9O1xuXG4gICAgLy8gc25hcCBib3RoIGF4aXMgaWYgbm90IHNuYXBwZWQgYWxyZWFkeVxuICAgIGZvckVhY2goWyAneCcsICd5JyBdLCBmdW5jdGlvbihheGlzKSB7XG4gICAgICB2YXIgbG9jYXRpb25TbmFwcGluZztcblxuICAgICAgaWYgKCFzbmFwcGluZ1theGlzXSkge1xuICAgICAgICBsb2NhdGlvblNuYXBwaW5nID0gc25hcFBvaW50cy5zbmFwKHNuYXBDdXJyZW50LCBsb2NhdGlvbiwgYXhpcywgU05BUF9UT0xFUkFOQ0UpO1xuXG4gICAgICAgIGlmIChsb2NhdGlvblNuYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzbmFwcGluZ1theGlzXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBsb2NhdGlvblNuYXBwaW5nLFxuICAgICAgICAgICAgb3JpZ2luVmFsdWU6IGxvY2F0aW9uU25hcHBpbmcgLSBzbmFwT3JpZ2luW2F4aXNdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gbm8gbmVlZCB0byBjb250aW51ZSBzbmFwcGluZ1xuICAgIGlmIChzbmFwcGluZy54ICYmIHNuYXBwaW5nLnkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHNob3cgc25hcCBsaW5lc1xuICB0aGlzLnNob3dTbmFwTGluZSgndmVydGljYWwnLCBzbmFwcGluZy54ICYmIHNuYXBwaW5nLngudmFsdWUpO1xuICB0aGlzLnNob3dTbmFwTGluZSgnaG9yaXpvbnRhbCcsIHNuYXBwaW5nLnkgJiYgc25hcHBpbmcueS52YWx1ZSk7XG5cbiAgLy8gc25hcCBldmVudFxuICBmb3JFYWNoKFsgJ3gnLCAneScgXSwgZnVuY3Rpb24oYXhpcykge1xuICAgIHZhciBheGlzU25hcHBpbmcgPSBzbmFwcGluZ1theGlzXTtcblxuICAgIGlmIChpc09iamVjdChheGlzU25hcHBpbmcpKSB7XG4gICAgICBzZXRTbmFwcGVkKGV2ZW50LCBheGlzLCBheGlzU25hcHBpbmcub3JpZ2luVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuX2NyZWF0ZUxpbmUgPSBmdW5jdGlvbihvcmllbnRhdGlvbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2NhbnZhcy5nZXRMYXllcignc25hcCcpO1xuXG4gIHZhciBsaW5lID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG5cbiAgc3ZnQXR0cihsaW5lLCB7IGQ6ICdNMCwwIEwwLDAnIH0pO1xuXG4gIHN2Z0NsYXNzZXMobGluZSkuYWRkKCdkanMtc25hcC1saW5lJyk7XG5cbiAgc3ZnQXBwZW5kKHJvb3QsIGxpbmUpO1xuXG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikge1xuXG4gICAgICBpZiAoIWlzTnVtYmVyKHBvc2l0aW9uKSkge1xuICAgICAgICBzdmdBdHRyKGxpbmUsIHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBzdmdBdHRyKGxpbmUsIHtcbiAgICAgICAgICAgIGQ6ICdNLTEwMDAwMCwnICsgcG9zaXRpb24gKyAnIEwrMTAwMDAwLCcgKyBwb3NpdGlvbixcbiAgICAgICAgICAgIGRpc3BsYXk6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3ZnQXR0cihsaW5lLCB7XG4gICAgICAgICAgICBkOiAnTSAnICsgcG9zaXRpb24gKyAnLC0xMDAwMDAgTCAnICsgcG9zaXRpb24gKyAnLCArMTAwMDAwJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuX2NyZWF0ZVNuYXBMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zbmFwTGluZXMgPSB7XG4gICAgaG9yaXpvbnRhbDogdGhpcy5fY3JlYXRlTGluZSgnaG9yaXpvbnRhbCcpLFxuICAgIHZlcnRpY2FsOiB0aGlzLl9jcmVhdGVMaW5lKCd2ZXJ0aWNhbCcpXG4gIH07XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuc2hvd1NuYXBMaW5lID0gZnVuY3Rpb24ob3JpZW50YXRpb24sIHBvc2l0aW9uKSB7XG5cbiAgdmFyIGxpbmUgPSB0aGlzLmdldFNuYXBMaW5lKG9yaWVudGF0aW9uKTtcblxuICBpZiAobGluZSkge1xuICAgIGxpbmUudXBkYXRlKHBvc2l0aW9uKTtcbiAgfVxuXG4gIHRoaXMuX2FzeW5jSGlkZSgpO1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBMaW5lID0gZnVuY3Rpb24ob3JpZW50YXRpb24pIHtcbiAgaWYgKCF0aGlzLl9zbmFwTGluZXMpIHtcbiAgICB0aGlzLl9jcmVhdGVTbmFwTGluZXMoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9zbmFwTGluZXNbb3JpZW50YXRpb25dO1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcbiAgZm9yRWFjaCh0aGlzLl9zbmFwTGluZXMsIGZ1bmN0aW9uKHNuYXBMaW5lKSB7XG4gICAgc25hcExpbmUudXBkYXRlKCk7XG4gIH0pO1xufTtcbiIsImltcG9ydCBDcmVhdGVNb3ZlU25hcHBpbmcgZnJvbSAnLi9DcmVhdGVNb3ZlU25hcHBpbmcnO1xuaW1wb3J0IFJlc2l6ZVNuYXBwaW5nIGZyb20gJy4vUmVzaXplU25hcHBpbmcnO1xuaW1wb3J0IFNuYXBwaW5nIGZyb20gJy4vU25hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2NyZWF0ZU1vdmVTbmFwcGluZycsXG4gICAgJ3Jlc2l6ZVNuYXBwaW5nJyxcbiAgICAnc25hcHBpbmcnXG4gIF0sXG4gIGNyZWF0ZU1vdmVTbmFwcGluZzogWyAndHlwZScsIENyZWF0ZU1vdmVTbmFwcGluZyBdLFxuICByZXNpemVTbmFwcGluZzogWyAndHlwZScsIFJlc2l6ZVNuYXBwaW5nIF0sXG4gIHNuYXBwaW5nOiBbICd0eXBlJywgU25hcHBpbmcgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgaXNOdW1iZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBhc1RSQkwgfSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7IGdldEJCb3ggfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHsgZ2V0RGlyZWN0aW9uIH0gZnJvbSAnLi9TcGFjZVV0aWwnO1xuXG5pbXBvcnQgeyBoYXNQcmltYXJ5TW9kaWZpZXIgfSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHsgc2V0IGFzIHNldEN1cnNvciB9IGZyb20gJy4uLy4uL3V0aWwvQ3Vyc29yJztcblxuaW1wb3J0IHsgc2VsZkFuZEFsbENoaWxkcmVuIH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbnZhciBhYnMgPSBNYXRoLmFicyxcbiAgICByb3VuZCA9IE1hdGgucm91bmQ7XG5cbnZhciBBWElTX1RPX0RJTUVOU0lPTiA9IHtcbiAgeDogJ3dpZHRoJyxcbiAgeTogJ2hlaWdodCdcbn07XG5cbnZhciBDVVJTT1JfQ1JPU1NIQUlSID0gJ2Nyb3NzaGFpcic7XG5cbnZhciBESVJFQ1RJT05fVE9fVFJCTCA9IHtcbiAgbjogJ3RvcCcsXG4gIHc6ICdsZWZ0JyxcbiAgczogJ2JvdHRvbScsXG4gIGU6ICdyaWdodCdcbn07XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcblxudmFyIERJUkVDVElPTl9UT19PUFBPU0lURSA9IHtcbiAgbjogJ3MnLFxuICB3OiAnZScsXG4gIHM6ICduJyxcbiAgZTogJ3cnXG59O1xuXG52YXIgUEFERElORyA9IDIwO1xuXG5cbi8qKlxuICogQWRkIG9yIHJlbW92ZSBzcGFjZSBieSBtb3ZpbmcgYW5kIHJlc2l6aW5nIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKiBAcGFyYW0ge3Rvb2xNYW5hZ2VyfSB0b29sTWFuYWdlclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2woY2FudmFzLCBkcmFnZ2luZywgZXZlbnRCdXMsIG1vZGVsaW5nLCBydWxlcywgdG9vbE1hbmFnZXIpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90b29sTWFuYWdlciA9IHRvb2xNYW5hZ2VyO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0b29sTWFuYWdlci5yZWdpc3RlclRvb2woJ3NwYWNlJywge1xuICAgIHRvb2w6ICdzcGFjZVRvb2wuc2VsZWN0aW9uJyxcbiAgICBkcmFnZ2luZzogJ3NwYWNlVG9vbCdcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudEJ1cy5vbmNlKCdzcGFjZVRvb2wuc2VsZWN0aW9uLmVuZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTWFrZVNwYWNlKGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLm1vdmUnLCBISUdIX1BSSU9SSVRZICwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGluaXRpYWxpemVkID0gY29udGV4dC5pbml0aWFsaXplZDtcblxuICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGluaXRpYWxpemVkID0gY29udGV4dC5pbml0aWFsaXplZCA9IHNlbGYuaW5pdChldmVudCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICBlbnN1cmVDb25zdHJhaW50cyhldmVudCk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBheGlzID0gY29udGV4dC5heGlzLFxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcbiAgICAgICAgbW92aW5nU2hhcGVzID0gY29udGV4dC5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIHJlc2l6aW5nU2hhcGVzID0gY29udGV4dC5yZXNpemluZ1NoYXBlcyxcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0O1xuXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZW5zdXJlQ29uc3RyYWludHMoZXZlbnQpO1xuXG4gICAgdmFyIGRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgZGVsdGFbIGF4aXMgXSA9IHJvdW5kKGV2ZW50WyAnZCcgKyBheGlzIF0pO1xuXG4gICAgc2VsZi5tYWtlU3BhY2UobW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpO1xuXG4gICAgZXZlbnRCdXMub25jZSgnc3BhY2VUb29sLmVuZGVkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgLy8gYWN0aXZhdGUgc3BhY2UgdG9vbCBzZWxlY3Rpb24gYWZ0ZXIgbWFrZSBzcGFjZVxuICAgICAgc2VsZi5hY3RpdmF0ZVNlbGVjdGlvbihldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cblNwYWNlVG9vbC4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuLyoqXG4gKiBBY3RpdmF0ZSBzcGFjZSB0b29sIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0b0FjdGl2YXRlXG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUuYWN0aXZhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihldmVudCwgYXV0b0FjdGl2YXRlLCByZWFjdGl2YXRlKSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdzcGFjZVRvb2wuc2VsZWN0aW9uJywge1xuICAgIGF1dG9BY3RpdmF0ZTogYXV0b0FjdGl2YXRlLFxuICAgIGN1cnNvcjogQ1VSU09SX0NST1NTSEFJUixcbiAgICBkYXRhOiB7XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHJlYWN0aXZhdGU6IHJlYWN0aXZhdGVcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYXBDbGljazogZmFsc2VcbiAgfSk7XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlIHNwYWNlIHRvb2wgbWFrZSBzcGFjZS5cbiAqXG4gKiBAcGFyYW0gIHtNb3VzZUV2ZW50fSBldmVudFxuICovXG5TcGFjZVRvb2wucHJvdG90eXBlLmFjdGl2YXRlTWFrZVNwYWNlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ3NwYWNlVG9vbCcsIHtcbiAgICBhdXRvQWN0aXZhdGU6IHRydWUsXG4gICAgY3Vyc29yOiBDVVJTT1JfQ1JPU1NIQUlSLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogTWFrZSBzcGFjZS5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBtb3ZpbmdTaGFwZXNcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IHJlc2l6aW5nU2hhcGVzXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlbHRhXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhLnhcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGEueVxuICogQHBhcmFtICB7c3RyaW5nfSBkaXJlY3Rpb25cbiAqIEBwYXJhbSAge251bWJlcn0gc3RhcnRcbiAqL1xuU3BhY2VUb29sLnByb3RvdHlwZS5tYWtlU3BhY2UgPSBmdW5jdGlvbihtb3ZpbmdTaGFwZXMsIHJlc2l6aW5nU2hhcGVzLCBkZWx0YSwgZGlyZWN0aW9uLCBzdGFydCkge1xuICByZXR1cm4gdGhpcy5fbW9kZWxpbmcuY3JlYXRlU3BhY2UobW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIG1ha2Ugc3BhY2UgYW5kIHJldHVybiB0cnVlIGlmIHRoYXQgd2FzIHN1Y2Nlc3NmdWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0KSB7XG4gIHZhciBheGlzID0gYWJzKGV2ZW50LmR4KSA+IGFicyhldmVudC5keSkgPyAneCcgOiAneScsXG4gICAgICBkZWx0YSA9IGV2ZW50WyAnZCcgKyBheGlzIF0sXG4gICAgICBzdGFydCA9IGV2ZW50WyBheGlzIF0gLSBkZWx0YTtcblxuICBpZiAoYWJzKGRlbHRhKSA8IDUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBpbnZlcnQgZGVsdGEgdG8gcmVtb3ZlIHNwYWNlIHdoZW4gbW92aW5nIGxlZnRcbiAgaWYgKGRlbHRhIDwgMCkge1xuICAgIGRlbHRhICo9IC0xO1xuICB9XG5cbiAgLy8gaW52ZXJ0IGRlbHRhIHRvIGFkZC9yZW1vdmUgc3BhY2Ugd2hlbiByZW1vdmluZy9hZGRpbmcgc3BhY2UgaWYgbW9kaWZpZXIga2V5IGlzIHByZXNzZWRcbiAgaWYgKGhhc1ByaW1hcnlNb2RpZmllcihldmVudCkpIHtcbiAgICBkZWx0YSAqPSAtMTtcbiAgfVxuXG4gIHZhciBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oYXhpcywgZGVsdGEpO1xuXG4gIHZhciByb290ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgdmFyIGNoaWxkcmVuID0gc2VsZkFuZEFsbENoaWxkcmVuKHJvb3QsIHRydWUpO1xuXG4gIHZhciBlbGVtZW50cyA9IHRoaXMuY2FsY3VsYXRlQWRqdXN0bWVudHMoY2hpbGRyZW4sIGF4aXMsIGRlbHRhLCBzdGFydCk7XG5cbiAgdmFyIG1pbkRpbWVuc2lvbnMgPSB0aGlzLl9ldmVudEJ1cy5maXJlKCdzcGFjZVRvb2wuZ2V0TWluRGltZW5zaW9ucycsIHtcbiAgICBheGlzOiBheGlzLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIHNoYXBlczogZWxlbWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgc3RhcnQ6IHN0YXJ0XG4gIH0pO1xuXG4gIHZhciBzcGFjZVRvb2xDb25zdHJhaW50cyA9IGdldFNwYWNlVG9vbENvbnN0cmFpbnRzKGVsZW1lbnRzLCBheGlzLCBkaXJlY3Rpb24sIHN0YXJ0LCBtaW5EaW1lbnNpb25zKTtcblxuICBhc3NpZ24oXG4gICAgY29udGV4dCxcbiAgICBlbGVtZW50cyxcbiAgICB7XG4gICAgICBheGlzOiBheGlzLFxuICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgICBzcGFjZVRvb2xDb25zdHJhaW50czogc3BhY2VUb29sQ29uc3RyYWludHMsXG4gICAgICBzdGFydDogc3RhcnRcbiAgICB9XG4gICk7XG5cbiAgc2V0Q3Vyc29yKCdyZXNpemUtJyArIChheGlzID09PSAneCcgPyAnZXcnIDogJ25zJykpO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBHZXQgZWxlbWVudHMgdG8gYmUgbW92ZWQgYW5kIHJlc2l6ZWQuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSAge3N0cmluZ30gYXhpc1xuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVxuICogQHBhcmFtICB7bnVtYmVyfSBzdGFydFxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuU3BhY2VUb29sLnByb3RvdHlwZS5jYWxjdWxhdGVBZGp1c3RtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBheGlzLCBkZWx0YSwgc3RhcnQpIHtcbiAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXM7XG5cbiAgdmFyIG1vdmluZ1NoYXBlcyA9IFtdLFxuICAgICAgcmVzaXppbmdTaGFwZXMgPSBbXTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCB8fCBpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGVTdGFydCA9IGVsZW1lbnRbIGF4aXMgXSxcbiAgICAgICAgc2hhcGVFbmQgPSBzaGFwZVN0YXJ0ICsgZWxlbWVudFsgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgLy8gc2hhcGUgdG8gYmUgbW92ZWRcbiAgICBpZiAoKGRlbHRhID4gMCAmJiBzaGFwZVN0YXJ0ID4gc3RhcnQpIHx8IChkZWx0YSA8IDAgJiYgc2hhcGVFbmQgPCBzdGFydCkpIHtcbiAgICAgIHJldHVybiBtb3ZpbmdTaGFwZXMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBzaGFwZSB0byBiZSByZXNpemVkXG4gICAgaWYgKHNoYXBlU3RhcnQgPCBzdGFydCAmJlxuICAgICAgc2hhcGVFbmQgPiBzdGFydCAmJlxuICAgICAgcnVsZXMuYWxsb3dlZCgnc2hhcGUucmVzaXplJywgeyBzaGFwZTogZWxlbWVudCB9KVxuICAgICkge1xuXG4gICAgICByZXR1cm4gcmVzaXppbmdTaGFwZXMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbW92aW5nU2hhcGVzOiBtb3ZpbmdTaGFwZXMsXG4gICAgcmVzaXppbmdTaGFwZXM6IHJlc2l6aW5nU2hhcGVzXG4gIH07XG59O1xuXG5TcGFjZVRvb2wucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdGlvbigpO1xuICB9XG59O1xuXG5TcGFjZVRvb2wucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcy5fZHJhZ2dpbmcuY29udGV4dCgpO1xuXG4gIHJldHVybiBjb250ZXh0ICYmIC9ec3BhY2VUb29sLy50ZXN0KGNvbnRleHQucHJlZml4KTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRQYWRkaW5nKHRyYmwpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRyYmwudG9wIC0gUEFERElORyxcbiAgICByaWdodDogdHJibC5yaWdodCArIFBBRERJTkcsXG4gICAgYm90dG9tOiB0cmJsLmJvdHRvbSArIFBBRERJTkcsXG4gICAgbGVmdDogdHJibC5sZWZ0IC0gUEFERElOR1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb25zdHJhaW50cyhldmVudCkge1xuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICBzcGFjZVRvb2xDb25zdHJhaW50cyA9IGNvbnRleHQuc3BhY2VUb29sQ29uc3RyYWludHM7XG5cbiAgaWYgKCFzcGFjZVRvb2xDb25zdHJhaW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB4LCB5O1xuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0KSkge1xuICAgIHggPSBNYXRoLm1heChldmVudC54LCBzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0KTtcblxuICAgIGV2ZW50LmR4ID0gZXZlbnQuZHggKyB4IC0gZXZlbnQueDtcbiAgICBldmVudC54ID0geDtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCkpIHtcbiAgICB4ID0gTWF0aC5taW4oZXZlbnQueCwgc3BhY2VUb29sQ29uc3RyYWludHMucmlnaHQpO1xuXG4gICAgZXZlbnQuZHggPSBldmVudC5keCArIHggLSBldmVudC54O1xuICAgIGV2ZW50LnggPSB4O1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCkpIHtcbiAgICB5ID0gTWF0aC5tYXgoZXZlbnQueSwgc3BhY2VUb29sQ29uc3RyYWludHMudG9wKTtcblxuICAgIGV2ZW50LmR5ID0gZXZlbnQuZHkgKyB5IC0gZXZlbnQueTtcbiAgICBldmVudC55ID0geTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20pKSB7XG4gICAgeSA9IE1hdGgubWluKGV2ZW50LnksIHNwYWNlVG9vbENvbnN0cmFpbnRzLmJvdHRvbSk7XG5cbiAgICBldmVudC5keSA9IGV2ZW50LmR5ICsgeSAtIGV2ZW50Lnk7XG4gICAgZXZlbnQueSA9IHk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3BhY2VUb29sQ29uc3RyYWludHMoZWxlbWVudHMsIGF4aXMsIGRpcmVjdGlvbiwgc3RhcnQsIG1pbkRpbWVuc2lvbnMpIHtcbiAgdmFyIG1vdmluZ1NoYXBlcyA9IGVsZW1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgIHJlc2l6aW5nU2hhcGVzID0gZWxlbWVudHMucmVzaXppbmdTaGFwZXM7XG5cbiAgaWYgKCFyZXNpemluZ1NoYXBlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc3BhY2VUb29sQ29uc3RyYWludHMgPSB7fSxcbiAgICAgIG1pbixcbiAgICAgIG1heDtcblxuICBmb3JFYWNoKHJlc2l6aW5nU2hhcGVzLCBmdW5jdGlvbihyZXNpemluZ1NoYXBlKSB7XG4gICAgdmFyIHJlc2l6aW5nU2hhcGVCQm94ID0gYXNUUkJMKHJlc2l6aW5nU2hhcGUpO1xuXG4gICAgLy8gZmluZCBjaGlsZHJlbiB0aGF0IGFyZSBub3QgbW92aW5nIG9yIHJlc2l6aW5nXG4gICAgdmFyIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW4gPSBmaWx0ZXIocmVzaXppbmdTaGFwZS5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGNoaWxkKSAmJlxuICAgICAgICAhaXNMYWJlbChjaGlsZCkgJiZcbiAgICAgICAgIWluY2x1ZGVzKG1vdmluZ1NoYXBlcywgY2hpbGQpICYmXG4gICAgICAgICFpbmNsdWRlcyhyZXNpemluZ1NoYXBlcywgY2hpbGQpO1xuICAgIH0pO1xuXG4gICAgLy8gZmluZCBjaGlsZHJlbiB0aGF0IGFyZSBtb3ZpbmdcbiAgICB2YXIgbW92aW5nQ2hpbGRyZW4gPSBmaWx0ZXIocmVzaXppbmdTaGFwZS5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGNoaWxkKSAmJiAhaXNMYWJlbChjaGlsZCkgJiYgaW5jbHVkZXMobW92aW5nU2hhcGVzLCBjaGlsZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgbWluT3JNYXgsXG4gICAgICAgIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW5CQm94LFxuICAgICAgICBtb3ZpbmdDaGlsZHJlbkJCb3g7XG5cbiAgICBpZiAobm9uTW92aW5nUmVzaXppbmdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW5CQm94ID0gYWRkUGFkZGluZyhhc1RSQkwoZ2V0QkJveChub25Nb3ZpbmdSZXNpemluZ0NoaWxkcmVuKSkpO1xuXG4gICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgcmVzaXppbmdTaGFwZUJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBkaXJlY3Rpb24gXSBdICtcbiAgICAgICAgbm9uTW92aW5nUmVzaXppbmdDaGlsZHJlbkJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBkaXJlY3Rpb24gXSBdO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMuYm90dG9tID0gbWF4ID0gaXNOdW1iZXIobWF4KSA/IE1hdGgubWluKG1heCwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3cnKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnJpZ2h0ID0gbWF4ID0gaXNOdW1iZXIobWF4KSA/IE1hdGgubWluKG1heCwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3MnKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0ID0gbWluID0gaXNOdW1iZXIobWluKSA/IE1hdGgubWF4KG1pbiwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vdmluZ0NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgbW92aW5nQ2hpbGRyZW5CQm94ID0gYWRkUGFkZGluZyhhc1RSQkwoZ2V0QkJveChtb3ZpbmdDaGlsZHJlbikpKTtcblxuICAgICAgbWluT3JNYXggPSBzdGFydCAtXG4gICAgICAgIG1vdmluZ0NoaWxkcmVuQkJveFsgRElSRUNUSU9OX1RPX1RSQkxbIERJUkVDVElPTl9UT19PUFBPU0lURVsgZGlyZWN0aW9uIF0gXSBdICtcbiAgICAgICAgcmVzaXppbmdTaGFwZUJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBESVJFQ1RJT05fVE9fT1BQT1NJVEVbIGRpcmVjdGlvbiBdIF0gXTtcblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ24nKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmJvdHRvbSA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy50b3AgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZScpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMubGVmdCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXNpemluZ1NoYXBlTWluRGltZW5zaW9ucyA9IG1pbkRpbWVuc2lvbnMgJiYgbWluRGltZW5zaW9uc1sgcmVzaXppbmdTaGFwZS5pZCBdO1xuXG4gICAgaWYgKHJlc2l6aW5nU2hhcGVNaW5EaW1lbnNpb25zKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20gPSBtYXggPSBpc051bWJlcihtYXgpID8gTWF0aC5taW4obWF4LCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAndycpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgICByZXNpemluZ1NoYXBlWyBBWElTX1RPX0RJTUVOU0lPTiBbIGF4aXMgXSBdICtcbiAgICAgICAgICByZXNpemluZ1NoYXBlTWluRGltZW5zaW9uc1sgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgICByZXNpemluZ1NoYXBlWyBBWElTX1RPX0RJTUVOU0lPTiBbIGF4aXMgXSBdICtcbiAgICAgICAgICByZXNpemluZ1NoYXBlTWluRGltZW5zaW9uc1sgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmxlZnQgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzcGFjZVRvb2xDb25zdHJhaW50cztcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XG59IiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBNQVJLRVJfRFJBR0dJTkcgPSAnZGpzLWRyYWdnaW5nJyxcbiAgICBNQVJLRVJfUkVTSVpJTkcgPSAnZGpzLXJlc2l6aW5nJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxudmFyIG1heCA9IE1hdGgubWF4O1xuXG5cbi8qKlxuICogUHJvdmlkZXMgcHJldmlld3MgZm9yIHNlbGVjdGluZy9tb3ZpbmcvcmVzaXppbmcgc2hhcGVzIHdoZW4gY3JlYXRpbmcvcmVtb3Zpbmcgc3BhY2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7U3R5bGVzfSBzdHlsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sUHJldmlldyhcbiAgICBldmVudEJ1cywgZWxlbWVudFJlZ2lzdHJ5LCBjYW52YXMsXG4gICAgc3R5bGVzLCBwcmV2aWV3U3VwcG9ydCkge1xuXG4gIGZ1bmN0aW9uIGFkZFByZXZpZXdHZngoY29sbGVjdGlvbiwgZHJhZ0dyb3VwKSB7XG4gICAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBwcmV2aWV3U3VwcG9ydC5hZGREcmFnZ2VyKGVsZW1lbnQsIGRyYWdHcm91cCk7XG5cbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGFkZCBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzcGFjZSA9IGNhbnZhcy5nZXRMYXllcignc3BhY2UnKSxcbiAgICAgICAgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2YXIgb3JpZW50YXRpb24gPSB7XG4gICAgICB4OiAnTSAwLC0xMDAwMCBMIDAsMTAwMDAnLFxuICAgICAgeTogJ00gLTEwMDAwLDAgTCAxMDAwMCwwJ1xuICAgIH07XG5cbiAgICB2YXIgY3Jvc3NoYWlyR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgICBzdmdBdHRyKGNyb3NzaGFpckdyb3VwLCBzdHlsZXMuY2xzKCdkanMtY3Jvc3NoYWlyLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XG5cbiAgICBzdmdBcHBlbmQoc3BhY2UsIGNyb3NzaGFpckdyb3VwKTtcblxuICAgIC8vIGhvcml6b250YWwgcGF0aFxuICAgIHZhciBwYXRoWCA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgIHN2Z0F0dHIocGF0aFgsICdkJywgb3JpZW50YXRpb24ueCk7XG4gICAgc3ZnQ2xhc3NlcyhwYXRoWCkuYWRkKCdkanMtY3Jvc3NoYWlyJyk7XG5cbiAgICBzdmdBcHBlbmQoY3Jvc3NoYWlyR3JvdXAsIHBhdGhYKTtcblxuICAgIC8vIHZlcnRpY2FsIHBhdGhcbiAgICB2YXIgcGF0aFkgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICBzdmdBdHRyKHBhdGhZLCAnZCcsIG9yaWVudGF0aW9uLnkpO1xuICAgIHN2Z0NsYXNzZXMocGF0aFkpLmFkZCgnZGpzLWNyb3NzaGFpcicpO1xuXG4gICAgc3ZnQXBwZW5kKGNyb3NzaGFpckdyb3VwLCBwYXRoWSk7XG5cbiAgICBjb250ZXh0LmNyb3NzaGFpckdyb3VwID0gY3Jvc3NoYWlyR3JvdXA7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24ubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNyb3NzaGFpckdyb3VwID0gZXZlbnQuY29udGV4dC5jcm9zc2hhaXJHcm91cDtcblxuICAgIHRyYW5zbGF0ZShjcm9zc2hhaXJHcm91cCwgZXZlbnQueCwgZXZlbnQueSk7XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjcm9zc2hhaXJHcm91cCA9IGNvbnRleHQuY3Jvc3NoYWlyR3JvdXA7XG5cbiAgICBpZiAoY3Jvc3NoYWlyR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShjcm9zc2hhaXJHcm91cCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhZGQgYW5kIHVwZGF0ZSBtb3ZlL3Jlc2l6ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc3BhY2VUb29sLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGxpbmUgPSBjb250ZXh0LmxpbmUsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXMsXG4gICAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXM7XG5cbiAgICBpZiAoIWNvbnRleHQuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRleHQuZHJhZ0dyb3VwKSB7XG4gICAgICB2YXIgc3BhY2VMYXllciA9IGNhbnZhcy5nZXRMYXllcignc3BhY2UnKTtcblxuICAgICAgbGluZSA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihsaW5lLCAnZCcsICdNMCwwIEwwLDAnKTtcbiAgICAgIHN2Z0NsYXNzZXMobGluZSkuYWRkKCdkanMtY3Jvc3NoYWlyJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChzcGFjZUxheWVyLCBsaW5lKTtcblxuICAgICAgY29udGV4dC5saW5lID0gbGluZTtcblxuICAgICAgdmFyIGRyYWdHcm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQXR0cihkcmFnR3JvdXAsIHN0eWxlcy5jbHMoJ2Rqcy1kcmFnLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XG5cbiAgICAgIHN2Z0FwcGVuZChjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksIGRyYWdHcm91cCk7XG5cbiAgICAgIC8vIHNoYXBlc1xuICAgICAgYWRkUHJldmlld0dmeChtb3ZpbmdTaGFwZXMsIGRyYWdHcm91cCk7XG5cbiAgICAgIC8vIGNvbm5lY3Rpb25zXG4gICAgICB2YXIgbW92aW5nQ29ubmVjdGlvbnMgPSBjb250ZXh0Lm1vdmluZ0Nvbm5lY3Rpb25zID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBzb3VyY2VJc01vdmluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gobW92aW5nU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgICAgIGZvckVhY2goc2hhcGUub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUlzTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHRhcmdldElzTW92aW5nID0gZmFsc2U7XG5cbiAgICAgICAgZm9yRWFjaChtb3ZpbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgICAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgdGFyZ2V0SXNNb3ZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgc291cmNlSXNSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgICAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgc291cmNlSXNSZXNpemluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB0YXJnZXRJc1Jlc2l6aW5nID0gZmFsc2U7XG5cbiAgICAgICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgICBmb3JFYWNoKHNoYXBlLmluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gY29ubmVjdGlvbikge1xuICAgICAgICAgICAgICB0YXJnZXRJc1Jlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGlzQ29ubmVjdGlvbihlbGVtZW50KVxuICAgICAgICAgICYmIChzb3VyY2VJc01vdmluZyB8fCBzb3VyY2VJc1Jlc2l6aW5nKVxuICAgICAgICAgICYmICh0YXJnZXRJc01vdmluZyB8fCB0YXJnZXRJc1Jlc2l6aW5nKTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGFkZFByZXZpZXdHZngobW92aW5nQ29ubmVjdGlvbnMsIGRyYWdHcm91cCk7XG5cbiAgICAgIGNvbnRleHQuZHJhZ0dyb3VwID0gZHJhZ0dyb3VwO1xuICAgIH1cblxuICAgIGlmICghY29udGV4dC5mcmFtZUdyb3VwKSB7XG4gICAgICB2YXIgZnJhbWVHcm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQXR0cihmcmFtZUdyb3VwLCBzdHlsZXMuY2xzKCdkanMtZnJhbWUtZ3JvdXAnLCBbICduby1ldmVudHMnIF0pKTtcblxuICAgICAgc3ZnQXBwZW5kKGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSwgZnJhbWVHcm91cCk7XG5cbiAgICAgIHZhciBmcmFtZXMgPSBbXTtcblxuICAgICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgdmFyIGZyYW1lID0gcHJldmlld1N1cHBvcnQuYWRkRnJhbWUoc2hhcGUsIGZyYW1lR3JvdXApO1xuXG4gICAgICAgIHZhciBpbml0aWFsQm91bmRzID0gZnJhbWUuZ2V0QkJveCgpO1xuXG4gICAgICAgIGZyYW1lcy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBmcmFtZSxcbiAgICAgICAgICBpbml0aWFsQm91bmRzOiBpbml0aWFsQm91bmRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbnZhcy5hZGRNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgICB9KTtcblxuICAgICAgY29udGV4dC5mcmFtZUdyb3VwID0gZnJhbWVHcm91cDtcbiAgICAgIGNvbnRleHQuZnJhbWVzID0gZnJhbWVzO1xuICAgIH1cblxuICAgIHZhciBvcmllbnRhdGlvbiA9IHtcbiAgICAgIHg6ICdNJyArIGV2ZW50LnggKyAnLCAtMTAwMDAgTCcgKyBldmVudC54ICsgJywgMTAwMDAnLFxuICAgICAgeTogJ00gLTEwMDAwLCAnICsgZXZlbnQueSArICcgTCAxMDAwMCwgJyArIGV2ZW50LnlcbiAgICB9O1xuXG4gICAgc3ZnQXR0cihsaW5lLCB7IGQ6IG9yaWVudGF0aW9uWyBheGlzIF0gfSk7XG5cbiAgICB2YXIgb3Bwb3NpdGUgPSB7IHg6ICd5JywgeTogJ3gnIH07XG4gICAgdmFyIGRlbHRhID0geyB4OiBldmVudC5keCwgeTogZXZlbnQuZHkgfTtcbiAgICBkZWx0YVsgb3Bwb3NpdGVbIGNvbnRleHQuYXhpcyBdIF0gPSAwO1xuXG4gICAgLy8gdXBkYXRlIG1vdmUgcHJldmlld3NcbiAgICB0cmFuc2xhdGUoY29udGV4dC5kcmFnR3JvdXAsIGRlbHRhLngsIGRlbHRhLnkpO1xuXG4gICAgLy8gdXBkYXRlIHJlc2l6ZSBwcmV2aWV3c1xuICAgIGZvckVhY2goY29udGV4dC5mcmFtZXMsIGZ1bmN0aW9uKGZyYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGZyYW1lLmVsZW1lbnQsXG4gICAgICAgICAgaW5pdGlhbEJvdW5kcyA9IGZyYW1lLmluaXRpYWxCb3VuZHMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICBpZiAoY29udGV4dC5kaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICB3aWR0aDogbWF4KGluaXRpYWxCb3VuZHMud2lkdGggKyBkZWx0YS54LCA1KVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoID0gbWF4KGluaXRpYWxCb3VuZHMud2lkdGggLSBkZWx0YS54LCA1KTtcblxuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgeDogaW5pdGlhbEJvdW5kcy54ICsgaW5pdGlhbEJvdW5kcy53aWR0aCAtIHdpZHRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29udGV4dC5kaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICBoZWlnaHQ6IG1heChpbml0aWFsQm91bmRzLmhlaWdodCArIGRlbHRhLnksIDUpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVpZ2h0ID0gbWF4KGluaXRpYWxCb3VuZHMuaGVpZ2h0IC0gZGVsdGEueSwgNSk7XG5cbiAgICAgICAgc3ZnQXR0cihlbGVtZW50LCB7XG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgeTogaW5pdGlhbEJvdW5kcy55ICsgaW5pdGlhbEJvdW5kcy5oZWlnaHQgLSBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIG1vdmUvcmVzaXplIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgICBtb3ZpbmdDb25uZWN0aW9ucyA9IGNvbnRleHQubW92aW5nQ29ubmVjdGlvbnMsXG4gICAgICAgIHJlc2l6aW5nU2hhcGVzID0gY29udGV4dC5yZXNpemluZ1NoYXBlcyxcbiAgICAgICAgbGluZSA9IGNvbnRleHQubGluZSxcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXAsXG4gICAgICAgIGZyYW1lR3JvdXAgPSBjb250ZXh0LmZyYW1lR3JvdXA7XG5cbiAgICAvLyBtb3Zpbmcgc2hhcGVzXG4gICAgZm9yRWFjaChtb3ZpbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKHNoYXBlLCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH0pO1xuXG4gICAgLy8gbW92aW5nIGNvbm5lY3Rpb25zXG4gICAgZm9yRWFjaChtb3ZpbmdDb25uZWN0aW9ucywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH0pO1xuXG4gICAgaWYgKGRyYWdHcm91cCkge1xuICAgICAgc3ZnUmVtb3ZlKGxpbmUpO1xuICAgICAgc3ZnUmVtb3ZlKGRyYWdHcm91cCk7XG4gICAgfVxuXG4gICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVHcm91cCkge1xuICAgICAgc3ZnUmVtb3ZlKGZyYW1lR3JvdXApO1xuICAgIH1cbiAgfSk7XG59XG5cblNwYWNlVG9vbFByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdjYW52YXMnLFxuICAnc3R5bGVzJyxcbiAgJ3ByZXZpZXdTdXBwb3J0J1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBpcyBhIGNvbm5lY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogUmV0dXJuIGRpcmVjdGlvbiBnaXZlbiBheGlzIGFuZCBkZWx0YS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhXG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKGF4aXMsIGRlbHRhKSB7XG5cbiAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgIGlmIChkZWx0YSA+IDApIHtcbiAgICAgIHJldHVybiAnZSc7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgcmV0dXJuICd3JztcbiAgICB9XG4gIH1cblxuICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgaWYgKGRlbHRhID4gMCkge1xuICAgICAgcmV0dXJuICdzJztcbiAgICB9XG5cbiAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICByZXR1cm4gJ24nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgY29ubmVjdGlvbnMgd2hvc2Ugd2F5cG9pbnRzIGFyZSB0byBiZSB1cGRhdGVkLiBXYXlwb2ludHMgYXJlIHRvIGJlIHVwZGF0ZWQgaWYgc3RhcnRcbiAqIG9yIGVuZCBpcyB0byBiZSBtb3ZlZCBvciByZXNpemVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfSBtb3ZpbmdTaGFwZXNcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfSByZXNpemluZ1NoYXBlc1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZWwuQ29ubmVjdGlvbj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zKG1vdmluZ1NoYXBlcywgcmVzaXppbmdTaGFwZXMpIHtcbiAgdmFyIHdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnMgPSBbXTtcblxuICBmb3JFYWNoKG1vdmluZ1NoYXBlcy5jb25jYXQocmVzaXppbmdTaGFwZXMpLCBmdW5jdGlvbihzaGFwZSkge1xuICAgIHZhciBpbmNvbWluZyA9IHNoYXBlLmluY29taW5nLFxuICAgICAgICBvdXRnb2luZyA9IHNoYXBlLm91dGdvaW5nO1xuXG4gICAgZm9yRWFjaChpbmNvbWluZy5jb25jYXQob3V0Z29pbmcpLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQ7XG5cbiAgICAgIGlmIChpbmNsdWRlcyhtb3ZpbmdTaGFwZXMsIHNvdXJjZSkgfHxcbiAgICAgICAgaW5jbHVkZXMobW92aW5nU2hhcGVzLCB0YXJnZXQpIHx8XG4gICAgICAgIGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCBzb3VyY2UpIHx8XG4gICAgICAgIGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG5cbiAgICAgICAgaWYgKCFpbmNsdWRlcyh3YXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgIHdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gd2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucztcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufVxuXG4vKipcbiAqIFJlc2l6ZSBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGJvdW5kc1xuICogQHBhcmFtIHtudW1iZXJ9IGJvdW5kcy54XG4gKiBAcGFyYW0ge251bWJlcn0gYm91bmRzLnlcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3VuZHMud2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3VuZHMuaGVpZ2h0XG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGVsdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YS54XG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGEueVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUJvdW5kcyhib3VuZHMsIGRpcmVjdGlvbiwgZGVsdGEpIHtcbiAgdmFyIHggPSBib3VuZHMueCxcbiAgICAgIHkgPSBib3VuZHMueSxcbiAgICAgIHdpZHRoID0gYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCxcbiAgICAgIGR4ID0gZGVsdGEueCxcbiAgICAgIGR5ID0gZGVsdGEueTtcblxuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICBjYXNlICduJzpcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCxcbiAgICAgIHk6IHkgKyBkeSxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0IC0gZHlcbiAgICB9O1xuICBjYXNlICdzJzpcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCxcbiAgICAgIHk6IHksXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCArIGR5XG4gICAgfTtcbiAgY2FzZSAndyc6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyBkeCxcbiAgICAgIHk6IHksXG4gICAgICB3aWR0aDogd2lkdGggLSBkeCxcbiAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgfTtcbiAgY2FzZSAnZSc6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5LFxuICAgICAgd2lkdGg6IHdpZHRoICsgZHgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH07XG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGRpcmVjdGlvbjogJyArIGRpcmVjdGlvbik7XG4gIH1cbn0iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuaW1wb3J0IFByZXZpZXdTdXBwb3J0TW9kdWxlIGZyb20gJy4uL3ByZXZpZXctc3VwcG9ydCc7XG5cbmltcG9ydCBTcGFjZVRvb2wgZnJvbSAnLi9TcGFjZVRvb2wnO1xuaW1wb3J0IFNwYWNlVG9vbFByZXZpZXcgZnJvbSAnLi9TcGFjZVRvb2xQcmV2aWV3JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWydzcGFjZVRvb2xQcmV2aWV3J10sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgVG9vbE1hbmFnZXJNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgc3BhY2VUb29sOiBbJ3R5cGUnLCBTcGFjZVRvb2wgXSxcbiAgc3BhY2VUb29sUHJldmlldzogWyd0eXBlJywgU3BhY2VUb29sUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuLyoqXG4gKiBUaGUgdG9vbCBtYW5hZ2VyIGFjdHMgYXMgbWlkZGxlLW1hbiBiZXR3ZWVuIHRoZSBhdmFpbGFibGUgdG9vbCdzIGFuZCB0aGUgUGFsZXR0ZSxcbiAqIGl0IHRha2VzIGNhcmUgb2YgbWFraW5nIHN1cmUgdGhhdCB0aGUgY29ycmVjdCBhY3RpdmUgc3RhdGUgaXMgc2V0LlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gICAgZXZlbnRCdXNcbiAqIEBwYXJhbSAge09iamVjdH0gICAgZHJhZ2dpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9vbE1hbmFnZXIoZXZlbnRCdXMsIGRyYWdnaW5nKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG5cbiAgdGhpcy5fdG9vbHMgPSBbXTtcbiAgdGhpcy5fYWN0aXZlID0gbnVsbDtcbn1cblxuVG9vbE1hbmFnZXIuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2RyYWdnaW5nJyBdO1xuXG5Ub29sTWFuYWdlci5wcm90b3R5cGUucmVnaXN0ZXJUb29sID0gZnVuY3Rpb24obmFtZSwgZXZlbnRzKSB7XG4gIHZhciB0b29scyA9IHRoaXMuX3Rvb2xzO1xuXG4gIGlmICghZXZlbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHRvb2wgaGFzIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBpdFxcJ3MgXCJldmVudHNcIicpO1xuICB9XG5cbiAgdG9vbHMucHVzaChuYW1lKTtcblxuICB0aGlzLmJpbmRFdmVudHMobmFtZSwgZXZlbnRzKTtcbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKHRvb2wpIHtcbiAgcmV0dXJuIHRvb2wgJiYgdGhpcy5fYWN0aXZlID09PSB0b29sO1xufTtcblxuVG9vbE1hbmFnZXIucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKHRvb2wpIHtcbiAgcmV0dXJuIHRoaXMuX3Rvb2xzLmxlbmd0aDtcbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5zZXRBY3RpdmUgPSBmdW5jdGlvbih0b29sKSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIGlmICh0aGlzLl9hY3RpdmUgIT09IHRvb2wpIHtcbiAgICB0aGlzLl9hY3RpdmUgPSB0b29sO1xuXG4gICAgZXZlbnRCdXMuZmlyZSgndG9vbC1tYW5hZ2VyLnVwZGF0ZScsIHsgdG9vbDogdG9vbCB9KTtcbiAgfVxufTtcblxuVG9vbE1hbmFnZXIucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbihuYW1lLCBldmVudHMpIHtcbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXMsXG4gICAgICBkcmFnZ2luZyA9IHRoaXMuX2RyYWdnaW5nO1xuXG4gIHZhciBldmVudHNUb1JlZ2lzdGVyID0gW107XG5cbiAgZXZlbnRCdXMub24oZXZlbnRzLnRvb2wgKyAnLmluaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIC8vIEFjdGl2ZSB0b29scyB0aGF0IHdhbnQgdG8gcmVhY3RpdmF0ZSB0aGVtc2VsdmVzIG11c3QgZG8gdGhpcyBleHBsaWNpdGx5XG4gICAgaWYgKCFjb250ZXh0LnJlYWN0aXZhdGUgJiYgdGhpcy5pc0FjdGl2ZShuYW1lKSkge1xuICAgICAgdGhpcy5zZXRBY3RpdmUobnVsbCk7XG5cbiAgICAgIGRyYWdnaW5nLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0QWN0aXZlKG5hbWUpO1xuXG4gIH0sIHRoaXMpO1xuXG4gIC8vIFRvZG9bcmljYXJkb106IGFkZCB0ZXN0IGNhc2VzXG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50c1RvUmVnaXN0ZXIucHVzaChldmVudCArICcuZW5kZWQnKTtcbiAgICBldmVudHNUb1JlZ2lzdGVyLnB1c2goZXZlbnQgKyAnLmNhbmNlbGVkJyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKGV2ZW50c1RvUmVnaXN0ZXIsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAvLyBXZSBkZWZlciB0aGUgZGUtYWN0aXZhdGlvbiBvZiB0aGUgdG9vbCB0byB0aGUgLmFjdGl2YXRlIHBoYXNlLFxuICAgIC8vIHNvIHdlJ3JlIGFibGUgdG8gY2hlY2sgaWYgd2Ugd2FudCB0byB0b2dnbGUgb2ZmIHRoZSBjdXJyZW50XG4gICAgLy8gYWN0aXZlIHRvb2wgb3Igc3dpdGNoIHRvIGEgbmV3IG9uZVxuICAgIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9yaWdpbmFsRXZlbnQgJiYgZG9tQ2xvc2VzdChvcmlnaW5hbEV2ZW50LnRhcmdldCwgJy5ncm91cFtkYXRhLWdyb3VwPVwidG9vbHNcIl0nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0QWN0aXZlKG51bGwpO1xuICB9LCB0aGlzKTtcbn07XG4iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuXG5pbXBvcnQgVG9vbE1hbmFnZXIgZnJvbSAnLi9Ub29sTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmFnZ2luZ01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAndG9vbE1hbmFnZXInIF0sXG4gIHRvb2xNYW5hZ2VyOiBbICd0eXBlJywgVG9vbE1hbmFnZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGlzU3RyaW5nLFxuICBhc3NpZ24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICByZW1vdmUgYXMgZG9tUmVtb3ZlLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IElkcyBmcm9tICcuLi8uLi91dGlsL0lkR2VuZXJhdG9yJztcblxuLy8gZG9jdW1lbnQgd2lkZSB1bmlxdWUgdG9vbHRpcCBpZHNcbnZhciBpZHMgPSBuZXcgSWRzKCd0dCcpO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3QocGFyZW50Tm9kZSkge1xuICB2YXIgcm9vdCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy10b29sdGlwLWNvbnRhaW5lclwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMDsgaGVpZ2h0OiAwO1wiIC8+J1xuICApO1xuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvb3QsIHBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5cblxuZnVuY3Rpb24gc2V0UG9zaXRpb24oZWwsIHgsIHkpIHtcbiAgYXNzaWduKGVsLnN0eWxlLCB7IGxlZnQ6IHggKyAncHgnLCB0b3A6IHkgKyAncHgnIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRWaXNpYmxlKGVsLCB2aXNpYmxlKSB7XG4gIGVsLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICcnO1xufVxuXG5cbnZhciB0b29sdGlwQ2xhc3MgPSAnZGpzLXRvb2x0aXAnLFxuICAgIHRvb2x0aXBTZWxlY3RvciA9ICcuJyArIHRvb2x0aXBDbGFzcztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBhbGxvd3MgdXNlcnMgdG8gcmVuZGVyIHRvb2wgdGlwcyBvbiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBUaGUgdG9vbHRpcCBzZXJ2aWNlIHdpbGwgdGFrZSBjYXJlIG9mIHVwZGF0aW5nIHRoZSB0b29sdGlwIHBvc2l0aW9uaW5nXG4gKiBkdXJpbmcgbmF2aWdhdGlvbiArIHpvb21pbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKlxuICogLy8gYWRkIGEgcGluayBiYWRnZSBvbiB0aGUgdG9wIGxlZnQgb2YgdGhlIHNoYXBlXG4gKiB0b29sdGlwcy5hZGQoe1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHg6IDUwLFxuICogICAgIHk6IDEwMFxuICogICB9LFxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqIC8vIG9yIHdpdGggb3B0aW9uYWwgbGlmZSBzcGFuXG4gKiB0b29sdGlwcy5hZGQoe1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHRvcDogLTUsXG4gKiAgICAgbGVmdDogLTVcbiAqICAgfSxcbiAqICAgaHRtbDogJzxkaXYgc3R5bGU9XCJ3aWR0aDogMTBweDsgYmFja2dyb3VuZDogZnVjaHNpYTsgY29sb3I6IHdoaXRlO1wiPjA8L2Rpdj4nLFxuICogICB0dGw6IDIwMDBcbiAqIH0pO1xuICpcbiAqIC8vIHJlbW92ZSBhIHRvb2wgdGlwXG4gKiB2YXIgaWQgPSB0b29sdGlwcy5hZGQoLi4uKTtcbiAqIHRvb2x0aXBzLnJlbW92ZShpZCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUb29sdGlwcyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHRoaXMuX2lkcyA9IGlkcztcblxuICB0aGlzLl90b29sdGlwRGVmYXVsdHMgPSB7XG4gICAgc2hvdzoge1xuICAgICAgbWluWm9vbTogMC43LFxuICAgICAgbWF4Wm9vbTogNS4wXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBNYXBwaW5nIHRvb2x0aXBJZCAtPiB0b29sdGlwXG4gICAqL1xuICB0aGlzLl90b29sdGlwcyA9IHt9O1xuXG4gIC8vIHJvb3QgaHRtbCBlbGVtZW50IGZvciBhbGwgdG9vbHRpcHNcbiAgdGhpcy5fdG9vbHRpcFJvb3QgPSBjcmVhdGVSb290KGNhbnZhcy5nZXRDb250YWluZXIoKSk7XG5cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2VvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ21vdXNlb3ZlcicsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2VvdXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHNlbGYudHJpZ2dlcignbW91c2VvdXQnLCBldmVudCk7XG4gIH0pO1xuXG4gIHRoaXMuX2luaXQoKTtcbn1cblxuXG5Ub29sdGlwcy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnY2FudmFzJyBdO1xuXG5cbi8qKlxuICogQWRkcyBhIEhUTUwgdG9vbHRpcCB0byB0aGUgZGlhZ3JhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgIHRvb2x0aXAgICB0aGUgdG9vbHRpcCBjb25maWd1cmF0aW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0gICAgdG9vbHRpcC5odG1sICAgICAgICAgICAgICAgICBodG1sIGVsZW1lbnQgdG8gdXNlIGFzIGFuIHRvb2x0aXBcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgIFt0b29sdGlwLnNob3ddICAgICAgICAgICAgICAgc2hvdyBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5zaG93Lm1pblpvb21dICAgICAgIG1pbmltYWwgem9vbSBsZXZlbCB0byBzaG93IHRoZSB0b29sdGlwXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5zaG93Lm1heFpvb21dICAgICAgIG1heGltdW0gem9vbSBsZXZlbCB0byBzaG93IHRoZSB0b29sdGlwXG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICB0b29sdGlwLnBvc2l0aW9uICAgICAgICAgICAgIHdoZXJlIHRvIGF0dGFjaCB0aGUgdG9vbHRpcFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAucG9zaXRpb24ubGVmdF0gICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggbGVmdCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5wb3NpdGlvbi50b3BdICAgICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCB0b3AgYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAucG9zaXRpb24uYm90dG9tXSAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggYm90dG9tIGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnBvc2l0aW9uLnJpZ2h0XSAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IHJpZ2h0IGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnRpbWVvdXQ9LTFdXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgaWQgdGhhdCBtYXkgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHRvb2x0aXAgZm9yIHVwZGF0ZSBvciByZW1vdmFsXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0b29sdGlwKSB7XG5cbiAgaWYgKCF0b29sdGlwLnBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IHRvb2x0aXAgcG9zaXRpb24nKTtcbiAgfVxuXG4gIGlmICghdG9vbHRpcC5odG1sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IHRvb2x0aXAgaHRtbCcpO1xuICB9XG5cbiAgdmFyIGlkID0gdGhpcy5faWRzLm5leHQoKTtcblxuICB0b29sdGlwID0gYXNzaWduKHt9LCB0aGlzLl90b29sdGlwRGVmYXVsdHMsIHRvb2x0aXAsIHtcbiAgICBpZDogaWRcbiAgfSk7XG5cbiAgdGhpcy5fYWRkVG9vbHRpcCh0b29sdGlwKTtcblxuICBpZiAodG9vbHRpcC50aW1lb3V0KSB7XG4gICAgdGhpcy5zZXRUaW1lb3V0KHRvb2x0aXApO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuVG9vbHRpcHMucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihhY3Rpb24sIGV2ZW50KSB7XG5cbiAgdmFyIG5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCB8fCBldmVudC50YXJnZXQ7XG5cbiAgdmFyIHRvb2x0aXAgPSB0aGlzLmdldChkb21BdHRyKG5vZGUsICdkYXRhLXRvb2x0aXAtaWQnKSk7XG5cbiAgaWYgKCF0b29sdGlwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gJ21vdXNlb3ZlcicgJiYgdG9vbHRpcC50aW1lb3V0KSB7XG4gICAgdGhpcy5jbGVhclRpbWVvdXQodG9vbHRpcCk7XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSAnbW91c2VvdXQnICYmIHRvb2x0aXAudGltZW91dCkge1xuXG4gICAgLy8gY3V0IHRpbWVvdXQgYWZ0ZXIgbW91c2Ugb3V0XG4gICAgdG9vbHRpcC50aW1lb3V0ID0gMTAwMDtcblxuICAgIHRoaXMuc2V0VGltZW91dCh0b29sdGlwKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYSB0b29sdGlwIHdpdGggdGhlIGdpdmVuIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihpZCkge1xuXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBpZC5pZDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl90b29sdGlwc1tpZF07XG59O1xuXG5Ub29sdGlwcy5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHRvb2x0aXAgPSB0aGlzLmdldCh0b29sdGlwKTtcblxuICBpZiAoIXRvb2x0aXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcmVtb3ZlVGltZXIgPSB0b29sdGlwLnJlbW92ZVRpbWVyO1xuXG4gIGlmIChyZW1vdmVUaW1lcikge1xuICAgIGNsZWFyVGltZW91dChyZW1vdmVUaW1lcik7XG4gICAgdG9vbHRpcC5yZW1vdmVUaW1lciA9IG51bGw7XG4gIH1cbn07XG5cblRvb2x0aXBzLnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHRvb2x0aXAgPSB0aGlzLmdldCh0b29sdGlwKTtcblxuICBpZiAoIXRvb2x0aXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmNsZWFyVGltZW91dCh0b29sdGlwKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdG9vbHRpcC5yZW1vdmVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5yZW1vdmUodG9vbHRpcCk7XG4gIH0sIHRvb2x0aXAudGltZW91dCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiB0b29sdGlwIHdpdGggdGhlIGdpdmVuIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpZCkge1xuXG4gIHZhciB0b29sdGlwID0gdGhpcy5nZXQoaWQpO1xuXG4gIGlmICh0b29sdGlwKSB7XG4gICAgZG9tUmVtb3ZlKHRvb2x0aXAuaHRtbCk7XG4gICAgZG9tUmVtb3ZlKHRvb2x0aXAuaHRtbENvbnRhaW5lcik7XG5cbiAgICBkZWxldGUgdG9vbHRpcC5odG1sQ29udGFpbmVyO1xuXG4gICAgZGVsZXRlIHRoaXMuX3Rvb2x0aXBzW3Rvb2x0aXAuaWRdO1xuICB9XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7XG4gIHNldFZpc2libGUodGhpcy5fdG9vbHRpcFJvb3QpO1xufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkge1xuICBzZXRWaXNpYmxlKHRoaXMuX3Rvb2x0aXBSb290LCBmYWxzZSk7XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5fdXBkYXRlUm9vdCA9IGZ1bmN0aW9uKHZpZXdib3gpIHtcbiAgdmFyIGEgPSB2aWV3Ym94LnNjYWxlIHx8IDE7XG4gIHZhciBkID0gdmlld2JveC5zY2FsZSB8fCAxO1xuXG4gIHZhciBtYXRyaXggPSAnbWF0cml4KCcgKyBhICsgJywwLDAsJyArIGQgKyAnLCcgKyAoLTEgKiB2aWV3Ym94LnggKiBhKSArICcsJyArICgtMSAqIHZpZXdib3gueSAqIGQpICsgJyknO1xuXG4gIHRoaXMuX3Rvb2x0aXBSb290LnN0eWxlLnRyYW5zZm9ybSA9IG1hdHJpeDtcbiAgdGhpcy5fdG9vbHRpcFJvb3Quc3R5bGVbJy1tcy10cmFuc2Zvcm0nXSA9IG1hdHJpeDtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLl9hZGRUb29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHZhciBpZCA9IHRvb2x0aXAuaWQsXG4gICAgICBodG1sID0gdG9vbHRpcC5odG1sLFxuICAgICAgaHRtbENvbnRhaW5lcixcbiAgICAgIHRvb2x0aXBSb290ID0gdGhpcy5fdG9vbHRpcFJvb3Q7XG5cbiAgLy8gdW53cmFwIGpxdWVyeSAoZm9yIHRob3NlIHdobyBuZWVkIGl0KVxuICBpZiAoaHRtbC5nZXQgJiYgaHRtbC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgaHRtbCA9IGh0bWwuZ2V0KDApO1xuICB9XG5cbiAgLy8gY3JlYXRlIHByb3BlciBodG1sIGVsZW1lbnRzIGZyb21cbiAgLy8gdG9vbHRpcCBIVE1MIHN0cmluZ3NcbiAgaWYgKGlzU3RyaW5nKGh0bWwpKSB7XG4gICAgaHRtbCA9IGRvbWlmeShodG1sKTtcbiAgfVxuXG4gIGh0bWxDb250YWluZXIgPSBkb21pZnkoJzxkaXYgZGF0YS10b29sdGlwLWlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHRvb2x0aXBDbGFzcyArICdcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiPicpO1xuXG4gIGh0bWxDb250YWluZXIuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgaWYgKHRvb2x0aXAudHlwZSkge1xuICAgIGRvbUNsYXNzZXMoaHRtbENvbnRhaW5lcikuYWRkKCdkanMtdG9vbHRpcC0nICsgdG9vbHRpcC50eXBlKTtcbiAgfVxuXG4gIGlmICh0b29sdGlwLmNsYXNzTmFtZSkge1xuICAgIGRvbUNsYXNzZXMoaHRtbENvbnRhaW5lcikuYWRkKHRvb2x0aXAuY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvb2x0aXAuaHRtbENvbnRhaW5lciA9IGh0bWxDb250YWluZXI7XG5cbiAgdG9vbHRpcFJvb3QuYXBwZW5kQ2hpbGQoaHRtbENvbnRhaW5lcik7XG5cbiAgdGhpcy5fdG9vbHRpcHNbaWRdID0gdG9vbHRpcDtcblxuICB0aGlzLl91cGRhdGVUb29sdGlwKHRvb2x0aXApO1xufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuX3VwZGF0ZVRvb2x0aXAgPSBmdW5jdGlvbih0b29sdGlwKSB7XG5cbiAgdmFyIHBvc2l0aW9uID0gdG9vbHRpcC5wb3NpdGlvbixcbiAgICAgIGh0bWxDb250YWluZXIgPSB0b29sdGlwLmh0bWxDb250YWluZXI7XG5cbiAgLy8gdXBkYXRlIG92ZXJsYXkgaHRtbCBiYXNlZCBvbiB0b29sdGlwIHgsIHlcblxuICBzZXRQb3NpdGlvbihodG1sQ29udGFpbmVyLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLl91cGRhdGVUb29sdGlwVmlzaWJpbHR5ID0gZnVuY3Rpb24odmlld2JveCkge1xuXG4gIGZvckVhY2godGhpcy5fdG9vbHRpcHMsIGZ1bmN0aW9uKHRvb2x0aXApIHtcbiAgICB2YXIgc2hvdyA9IHRvb2x0aXAuc2hvdyxcbiAgICAgICAgaHRtbENvbnRhaW5lciA9IHRvb2x0aXAuaHRtbENvbnRhaW5lcixcbiAgICAgICAgdmlzaWJsZSA9IHRydWU7XG5cbiAgICBpZiAoc2hvdykge1xuICAgICAgaWYgKHNob3cubWluWm9vbSA+IHZpZXdib3guc2NhbGUgfHxcbiAgICAgICAgICBzaG93Lm1heFpvb20gPCB2aWV3Ym94LnNjYWxlKSB7XG4gICAgICAgIHZpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgc2V0VmlzaWJsZShodG1sQ29udGFpbmVyLCB2aXNpYmxlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVG9vbHRpcHMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIHNjcm9sbC96b29tIGludGVncmF0aW9uXG5cbiAgZnVuY3Rpb24gdXBkYXRlVmlld2JveCh2aWV3Ym94KSB7XG4gICAgc2VsZi5fdXBkYXRlUm9vdCh2aWV3Ym94KTtcbiAgICBzZWxmLl91cGRhdGVUb29sdGlwVmlzaWJpbHR5KHZpZXdib3gpO1xuXG4gICAgc2VsZi5zaG93KCk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbignY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHNlbGYuaGlkZSgpO1xuICB9KTtcblxuICB0aGlzLl9ldmVudEJ1cy5vbignY2FudmFzLnZpZXdib3guY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdXBkYXRlVmlld2JveChldmVudC52aWV3Ym94KTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IFRvb2x0aXBzIGZyb20gJy4vVG9vbHRpcHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICd0b29sdGlwcycgXSxcbiAgdG9vbHRpcHM6IFsgJ3R5cGUnLCBUb29sdGlwcyBdXG59OyIsImltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG91Y2hGaXgoY2FudmFzLCBldmVudEJ1cykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5hZGRCQm94TWFya2VyKGUuc3ZnKTtcbiAgfSk7XG59XG5cblRvdWNoRml4LiRpbmplY3QgPSBbICdjYW52YXMnLCAnZXZlbnRCdXMnIF07XG5cblxuLyoqXG4gKiBTYWZhcmkgbW9iaWxlIChpT1MgNykgZG9lcyBub3QgZmlyZSB0b3VjaHN0YXJ0IGV2ZW50IGluIDxTVkc+IGVsZW1lbnRcbiAqIGlmIHRoZXJlIGlzIG5vIHNoYXBlIGJldHdlZW4gMCwwIGFuZCB2aWV3cG9ydCBlbGVtZW50cyBvcmlnaW4uXG4gKlxuICogU28gdG91Y2hzdGFydCBldmVudCBpcyBvbmx5IGZpcmVkIHdoZW4gdGhlIDxnIGNsYXNzPVwidmlld3BvcnRcIj4gZWxlbWVudCB3YXMgaGl0LlxuICogUHV0dGluZyBhbiBlbGVtZW50IG92ZXIgYW5kIGJlbG93IHRoZSAndmlld3BvcnQnIGZpeGVzIHRoYXQgYmVoYXZpb3IuXG4gKi9cblRvdWNoRml4LnByb3RvdHlwZS5hZGRCQm94TWFya2VyID0gZnVuY3Rpb24oc3ZnKSB7XG5cbiAgdmFyIG1hcmtlclN0eWxlID0ge1xuICAgIGZpbGw6ICdub25lJyxcbiAgICBjbGFzczogJ291dGVyLWJvdW5kLW1hcmtlcidcbiAgfTtcblxuICB2YXIgcmVjdDEgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cihyZWN0MSwge1xuICAgIHg6IC0xMDAwMCxcbiAgICB5OiAxMDAwMCxcbiAgICB3aWR0aDogMTAsXG4gICAgaGVpZ2h0OiAxMFxuICB9KTtcbiAgc3ZnQXR0cihyZWN0MSwgbWFya2VyU3R5bGUpO1xuXG4gIHN2Z0FwcGVuZChzdmcsIHJlY3QxKTtcblxuICB2YXIgcmVjdDIgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cihyZWN0Miwge1xuICAgIHg6IDEwMDAwLFxuICAgIHk6IDEwMDAwLFxuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEwXG4gIH0pO1xuICBzdmdBdHRyKHJlY3QyLCBtYXJrZXJTdHlsZSk7XG5cbiAgc3ZnQXBwZW5kKHN2ZywgcmVjdDIpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgY2xvc2VzdCBhcyBkb21DbG9zZXN0XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQgSGFtbWVyIGZyb20gJ2hhbW1lcmpzJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxudmFyIE1JTl9aT09NID0gMC4yLFxuICAgIE1BWF9aT09NID0gNDtcblxudmFyIG1vdXNlRXZlbnRzID0gW1xuICAnbW91c2Vkb3duJyxcbiAgJ21vdXNldXAnLFxuICAnbW91c2VvdmVyJyxcbiAgJ21vdXNlb3V0JyxcbiAgJ2NsaWNrJyxcbiAgJ2RibGNsaWNrJ1xuXTtcblxuZnVuY3Rpb24gbG9nKCkge1xuXG4gIC8vIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIGdldChzZXJ2aWNlLCBpbmplY3Rvcikge1xuICByZXR1cm4gaW5qZWN0b3IuZ2V0KHNlcnZpY2UsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc3RvcEV2ZW50KGV2ZW50KSB7XG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgaWYgKHR5cGVvZiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVRvdWNoUmVjb2duaXplcihub2RlKSB7XG5cbiAgZnVuY3Rpb24gc3RvcE1vdXNlKGV2ZW50KSB7XG5cbiAgICBmb3JFYWNoKG1vdXNlRXZlbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBkb21FdmVudC5iaW5kKG5vZGUsIGUsIHN0b3BFdmVudCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd01vdXNlKGV2ZW50KSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGZvckVhY2gobW91c2VFdmVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9tRXZlbnQudW5iaW5kKG5vZGUsIGUsIHN0b3BFdmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgZG9tRXZlbnQuYmluZChub2RlLCAndG91Y2hzdGFydCcsIHN0b3BNb3VzZSwgdHJ1ZSk7XG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ3RvdWNoZW5kJywgYWxsb3dNb3VzZSwgdHJ1ZSk7XG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ3RvdWNoY2FuY2VsJywgYWxsb3dNb3VzZSwgdHJ1ZSk7XG5cbiAgLy8gQSB0b3VjaCBldmVudCByZWNvZ25pemVyIHRoYXQgaGFuZGxlc1xuICAvLyB0b3VjaCBldmVudHMgb25seSAod2Uga25vdywgd2UgY2FuIGFscmVhZHkgaGFuZGxlXG4gIC8vIG1vdXNlIGV2ZW50cyBvdXQgb2YgdGhlIGJveClcblxuICB2YXIgcmVjb2duaXplciA9IG5ldyBIYW1tZXIuTWFuYWdlcihub2RlLCB7XG4gICAgaW5wdXRDbGFzczogSGFtbWVyLlRvdWNoSW5wdXQsXG4gICAgcmVjb2duaXplcnM6IFtdXG4gIH0pO1xuXG5cbiAgdmFyIHRhcCA9IG5ldyBIYW1tZXIuVGFwKCk7XG4gIHZhciBwYW4gPSBuZXcgSGFtbWVyLlBhbih7IHRocmVzaG9sZDogMTAgfSk7XG4gIHZhciBwcmVzcyA9IG5ldyBIYW1tZXIuUHJlc3MoKTtcbiAgdmFyIHBpbmNoID0gbmV3IEhhbW1lci5QaW5jaCgpO1xuXG4gIHZhciBkb3VibGVUYXAgPSBuZXcgSGFtbWVyLlRhcCh7IGV2ZW50OiAnZG91YmxldGFwJywgdGFwczogMiB9KTtcblxuICBwaW5jaC5yZXF1aXJlRmFpbHVyZShwYW4pO1xuICBwaW5jaC5yZXF1aXJlRmFpbHVyZShwcmVzcyk7XG5cbiAgcmVjb2duaXplci5hZGQoWyBwYW4sIHByZXNzLCBwaW5jaCwgZG91YmxlVGFwLCB0YXAgXSk7XG5cbiAgcmVjb2duaXplci5yZXNldCA9IGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycyxcbiAgICAgICAgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2coJ3JlY29nbml6ZXInLCAnc3RvcCcpO1xuXG4gICAgcmVjb2duaXplci5zdG9wKGZvcmNlKTtcblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcjtcblxuICAgICAgbG9nKCdyZWNvZ25pemVyJywgJ3Jlc2V0Jyk7XG4gICAgICBmb3IgKGkgPSAwOyAociA9IHJlY29nbml6ZXJzW2ldKTsgaSsrKSB7XG4gICAgICAgIHIucmVzZXQoKTtcbiAgICAgICAgci5zdGF0ZSA9IDg7IC8vIEZBSUxFRCBTVEFURVxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH0sIDApO1xuICB9O1xuXG4gIHJlY29nbml6ZXIub24oJ2hhbW1lci5pbnB1dCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnNyY0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJlY29nbml6ZXIucmVzZXQodHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IHByb3ZpZGVzIHRvdWNoIGV2ZW50cyBmb3IgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW50ZXJhY3Rpb25FdmVudHN9IGludGVyYWN0aW9uRXZlbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvdWNoSW50ZXJhY3Rpb25FdmVudHMoXG4gICAgaW5qZWN0b3IsIGNhbnZhcywgZXZlbnRCdXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LCBpbnRlcmFjdGlvbkV2ZW50cykge1xuXG4gIC8vIG9wdGlvbmFsIGludGVncmF0aW9uc1xuICB2YXIgZHJhZ2dpbmcgPSBnZXQoJ2RyYWdnaW5nJywgaW5qZWN0b3IpLFxuICAgICAgbW92ZSA9IGdldCgnbW92ZScsIGluamVjdG9yKSxcbiAgICAgIGNvbnRleHRQYWQgPSBnZXQoJ2NvbnRleHRQYWQnLCBpbmplY3RvciksXG4gICAgICBwYWxldHRlID0gZ2V0KCdwYWxldHRlJywgaW5qZWN0b3IpO1xuXG4gIC8vIHRoZSB0b3VjaCByZWNvZ25pemVyXG4gIHZhciByZWNvZ25pemVyO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZXIodHlwZSkge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBsb2coJ2VsZW1lbnQnLCB0eXBlLCBldmVudCk7XG5cbiAgICAgIGludGVyYWN0aW9uRXZlbnRzLmZpcmUodHlwZSwgZXZlbnQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRHZngodGFyZ2V0KSB7XG4gICAgdmFyIG5vZGUgPSBkb21DbG9zZXN0KHRhcmdldCwgJ3N2ZywgLmRqcy1lbGVtZW50JywgdHJ1ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0RXZlbnRzKHN2Zykge1xuXG4gICAgLy8gdG91Y2ggcmVjb2duaXplclxuICAgIHJlY29nbml6ZXIgPSBjcmVhdGVUb3VjaFJlY29nbml6ZXIoc3ZnKTtcblxuICAgIHJlY29nbml6ZXIub24oJ2RvdWJsZXRhcCcsIGhhbmRsZXIoJ2VsZW1lbnQuZGJsY2xpY2snKSk7XG5cbiAgICByZWNvZ25pemVyLm9uKCd0YXAnLCBoYW5kbGVyKCdlbGVtZW50LmNsaWNrJykpO1xuXG4gICAgZnVuY3Rpb24gc3RhcnRHcmFiQ2FudmFzKGV2ZW50KSB7XG5cbiAgICAgIGxvZygnY2FudmFzJywgJ2dyYWIgc3RhcnQnKTtcblxuICAgICAgdmFyIGx4ID0gMCwgbHkgPSAwO1xuXG4gICAgICBmdW5jdGlvbiB1cGRhdGUoZSkge1xuXG4gICAgICAgIHZhciBkeCA9IGUuZGVsdGFYIC0gbHgsXG4gICAgICAgICAgICBkeSA9IGUuZGVsdGFZIC0gbHk7XG5cbiAgICAgICAgY2FudmFzLnNjcm9sbCh7IGR4OiBkeCwgZHk6IGR5IH0pO1xuXG4gICAgICAgIGx4ID0gZS5kZWx0YVg7XG4gICAgICAgIGx5ID0gZS5kZWx0YVk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChlKSB7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwYW5tb3ZlJywgdXBkYXRlKTtcbiAgICAgICAgcmVjb2duaXplci5vZmYoJ3BhbmVuZCcsIGVuZCk7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwYW5jYW5jZWwnLCBlbmQpO1xuXG4gICAgICAgIGxvZygnY2FudmFzJywgJ2dyYWIgZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHJlY29nbml6ZXIub24oJ3Bhbm1vdmUnLCB1cGRhdGUpO1xuICAgICAgcmVjb2duaXplci5vbigncGFuZW5kJywgZW5kKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BhbmNhbmNlbCcsIGVuZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRHcmFiKGV2ZW50KSB7XG5cbiAgICAgIHZhciBnZnggPSBnZXRHZngoZXZlbnQudGFyZ2V0KSxcbiAgICAgICAgICBlbGVtZW50ID0gZ2Z4ICYmIGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcblxuICAgICAgLy8gcmVjb2duaXplclxuICAgICAgaWYgKG1vdmUgJiYgY2FudmFzLmdldFJvb3RFbGVtZW50KCkgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgbG9nKCdlbGVtZW50JywgJ21vdmUgc3RhcnQnLCBlbGVtZW50LCBldmVudCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtb3ZlLnN0YXJ0KGV2ZW50LCBlbGVtZW50LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0R3JhYkNhbnZhcyhldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRab29tKGUpIHtcblxuICAgICAgbG9nKCdjYW52YXMnLCAnem9vbSBzdGFydCcpO1xuXG4gICAgICB2YXIgem9vbSA9IGNhbnZhcy56b29tKCksXG4gICAgICAgICAgbWlkID0gZS5jZW50ZXI7XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZShlKSB7XG5cbiAgICAgICAgdmFyIHJhdGlvID0gMSAtICgxIC0gZS5zY2FsZSkgLyAxLjUwLFxuICAgICAgICAgICAgbmV3Wm9vbSA9IE1hdGgubWF4KE1JTl9aT09NLCBNYXRoLm1pbihNQVhfWk9PTSwgcmF0aW8gKiB6b29tKSk7XG5cbiAgICAgICAgY2FudmFzLnpvb20obmV3Wm9vbSwgbWlkKTtcblxuICAgICAgICBzdG9wRXZlbnQoZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChlKSB7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwaW5jaG1vdmUnLCB1cGRhdGUpO1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGluY2hlbmQnLCBlbmQpO1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGluY2hjYW5jZWwnLCBlbmQpO1xuXG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQodHJ1ZSk7XG5cbiAgICAgICAgbG9nKCdjYW52YXMnLCAnem9vbSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgcmVjb2duaXplci5vbigncGluY2htb3ZlJywgdXBkYXRlKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BpbmNoZW5kJywgZW5kKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BpbmNoY2FuY2VsJywgZW5kKTtcbiAgICB9XG5cbiAgICByZWNvZ25pemVyLm9uKCdwYW5zdGFydCcsIHN0YXJ0R3JhYik7XG4gICAgcmVjb2duaXplci5vbigncHJlc3MnLCBzdGFydEdyYWIpO1xuXG4gICAgcmVjb2duaXplci5vbigncGluY2hzdGFydCcsIHN0YXJ0Wm9vbSk7XG4gIH1cblxuICBpZiAoZHJhZ2dpbmcpIHtcblxuICAgIC8vIHNpbXVsYXRlIGhvdmVyIGR1cmluZyBkcmFnZ2luZ1xuICAgIGV2ZW50QnVzLm9uKCdkcmFnLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIGlmICghb3JpZ2luYWxFdmVudCB8fCBvcmlnaW5hbEV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3NpdGlvbiA9IHRvUG9pbnQob3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIC8vIHRoaXMgZ2V0cyByZWFsbHkgZXhwZW5zaXZlIC4uLlxuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpLFxuICAgICAgICAgIGdmeCA9IGdldEdmeChub2RlKSxcbiAgICAgICAgICBlbGVtZW50ID0gZ2Z4ICYmIGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcblxuICAgICAgaWYgKGVsZW1lbnQgIT09IGV2ZW50LmhvdmVyKSB7XG4gICAgICAgIGlmIChldmVudC5ob3Zlcikge1xuICAgICAgICAgIGRyYWdnaW5nLm91dChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGRyYWdnaW5nLmhvdmVyKHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG5cbiAgICAgICAgICBldmVudC5ob3ZlciA9IGVsZW1lbnQ7XG4gICAgICAgICAgZXZlbnQuaG92ZXJHZnggPSBnZng7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb250ZXh0UGFkKSB7XG5cbiAgICBldmVudEJ1cy5vbignY29udGV4dFBhZC5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5wYWQuaHRtbDtcblxuICAgICAgLy8gdG91Y2ggcmVjb2duaXplclxuICAgICAgdmFyIHBhZFJlY29nbml6ZXIgPSBjcmVhdGVUb3VjaFJlY29nbml6ZXIobm9kZSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3BhbnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgbG9nKCdjb250ZXh0LXBhZCcsICdwYW5zdGFydCcsIGV2ZW50KTtcbiAgICAgICAgY29udGV4dFBhZC50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigncHJlc3MnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ2NvbnRleHQtcGFkJywgJ3ByZXNzJywgZXZlbnQpO1xuICAgICAgICBjb250ZXh0UGFkLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50LCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCd0YXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ2NvbnRleHQtcGFkJywgJ3RhcCcsIGV2ZW50KTtcbiAgICAgICAgY29udGV4dFBhZC50cmlnZ2VyKCdjbGljaycsIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhbGV0dGUpIHtcbiAgICBldmVudEJ1cy5vbigncGFsZXR0ZS5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5jb250YWluZXI7XG5cbiAgICAgIC8vIHRvdWNoIHJlY29nbml6ZXJcbiAgICAgIHZhciBwYWRSZWNvZ25pemVyID0gY3JlYXRlVG91Y2hSZWNvZ25pemVyKG5vZGUpO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCdwYW5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxvZygncGFsZXR0ZScsICdwYW5zdGFydCcsIGV2ZW50KTtcbiAgICAgICAgcGFsZXR0ZS50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigncHJlc3MnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ3BhbGV0dGUnLCAncHJlc3MnLCBldmVudCk7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlcignZHJhZ3N0YXJ0JywgZXZlbnQsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3RhcCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxvZygncGFsZXR0ZScsICd0YXAnLCBldmVudCk7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlcignY2xpY2snLCBldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuaW5pdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaW5pdEV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcbn1cblxuXG5Ub3VjaEludGVyYWN0aW9uRXZlbnRzLiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdjYW52YXMnLFxuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2ludGVyYWN0aW9uRXZlbnRzJyxcbiAgJ3RvdWNoRml4J1xuXTtcbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuXG5pbXBvcnQgVG91Y2hJbnRlcmFjdGlvbkV2ZW50cyBmcm9tICcuL1RvdWNoSW50ZXJhY3Rpb25FdmVudHMnO1xuaW1wb3J0IFRvdWNoRml4IGZyb20gJy4vVG91Y2hGaXgnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlIF0sXG4gIF9faW5pdF9fOiBbICd0b3VjaEludGVyYWN0aW9uRXZlbnRzJyBdLFxuICB0b3VjaEludGVyYWN0aW9uRXZlbnRzOiBbICd0eXBlJywgVG91Y2hJbnRlcmFjdGlvbkV2ZW50cyBdLFxuICB0b3VjaEZpeDogWyAndHlwZScsIFRvdWNoRml4IF1cbn07IiwiaW1wb3J0IHRyYW5zbGF0ZSBmcm9tICcuL3RyYW5zbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHJhbnNsYXRlOiBbICd2YWx1ZScsIHRyYW5zbGF0ZSBdXG59OyIsIi8qKlxuICogQSBzaW1wbGUgdHJhbnNsYXRpb24gc3R1YiB0byBiZSB1c2VkIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKiBpbiBkaWFncmFtcy4gQ2FuIGJlIGVhc2lseSByZXBsYWNlZCB3aXRoIGEgbW9yZSBzb3BoaXN0aWNhdGVkXG4gKiBzb2x1dGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIHVzZSBpdCBpbnNpZGUgYW55IGRpYWdyYW0gY29tcG9uZW50IGJ5IGluamVjdGluZyBgdHJhbnNsYXRlYC5cbiAqXG4gKiBmdW5jdGlvbiBNeVNlcnZpY2UodHJhbnNsYXRlKSB7XG4gKiAgIGFsZXJ0KHRyYW5zbGF0ZSgnSEVMTE8ge3lvdX0nLCB7IHlvdTogJ1lvdSEnIH0pKTtcbiAqIH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgdG8gaW50ZXJwb2xhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVwbGFjZW1lbnRzXSBhIG1hcCB3aXRoIHN1YnN0aXR1dGVzXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgdHJhbnNsYXRlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNsYXRlKHRlbXBsYXRlLCByZXBsYWNlbWVudHMpIHtcblxuICByZXBsYWNlbWVudHMgPSByZXBsYWNlbWVudHMgfHwge307XG5cbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soW159XSspfS9nLCBmdW5jdGlvbihfLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2tleV0gfHwgJ3snICsga2V5ICsgJ30nO1xuICB9KTtcbn0iLCJpbXBvcnQge1xuICBnZXRNaWRcbn0gZnJvbSAnLi9MYXlvdXRVdGlsJztcblxuXG4vKipcbiAqIEEgYmFzZSBjb25uZWN0aW9uIGxheW91dGVyIGltcGxlbWVudGF0aW9uXG4gKiB0aGF0IGxheW91dHMgdGhlIGNvbm5lY3Rpb24gYnkgZGlyZWN0bHkgY29ubmVjdGluZ1xuICogbWlkKHNvdXJjZSkgKyBtaWQodGFyZ2V0KS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzZUxheW91dGVyKCkge31cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbmV3IGxheW91dGVkIHdheXBvaW50cyBmb3IgdGhlIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogVGhlIGNvbm5lY3Rpb24gcGFzc2VkIGlzIHN0aWxsIHVuY2hhbmdlZDsgeW91IG1heSBmaWd1cmUgb3V0IGFib3V0XG4gKiB0aGUgbmV3IGNvbm5lY3Rpb24gc3RhcnQgLyBlbmQgdmlhIHRoZSBsYXlvdXQgaGludHMgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uU3RhcnRdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvbkVuZF1cbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5zb3VyY2VdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMudGFyZ2V0XVxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gdGhlIGxheW91dGVkIGNvbm5lY3Rpb24gd2F5cG9pbnRzXG4gKi9cbkJhc2VMYXlvdXRlci5wcm90b3R5cGUubGF5b3V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICByZXR1cm4gW1xuICAgIGhpbnRzLmNvbm5lY3Rpb25TdGFydCB8fCBnZXRNaWQoaGludHMuc291cmNlIHx8IGNvbm5lY3Rpb24uc291cmNlKSxcbiAgICBoaW50cy5jb25uZWN0aW9uRW5kIHx8IGdldE1pZChoaW50cy50YXJnZXQgfHwgY29ubmVjdGlvbi50YXJnZXQpXG4gIF07XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb25cbn0gZnJvbSAnLi9MYXlvdXRVdGlsJztcblxuXG5mdW5jdGlvbiBkb2NraW5nVG9Qb2ludChkb2NraW5nKSB7XG5cbiAgLy8gdXNlIHRoZSBkb2NraW5ncyBhY3R1YWwgcG9pbnQgYW5kXG4gIC8vIHJldGFpbiB0aGUgb3JpZ2luYWwgZG9ja2luZ1xuICByZXR1cm4gYXNzaWduKHsgb3JpZ2luYWw6IGRvY2tpbmcucG9pbnQub3JpZ2luYWwgfHwgZG9ja2luZy5wb2ludCB9LCBkb2NraW5nLmFjdHVhbCk7XG59XG5cblxuLyoqXG4gKiBBIHtAbGluayBDb25uZWN0aW9uRG9ja2luZ30gdGhhdCBjcm9wcyBjb25uZWN0aW9uIHdheXBvaW50cyBiYXNlZCBvblxuICogdGhlIHBhdGgocykgb2YgdGhlIGNvbm5lY3Rpb24gc291cmNlIGFuZCB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtkanMuY29yZS5FbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nKGVsZW1lbnRSZWdpc3RyeSwgZ3JhcGhpY3NGYWN0b3J5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xufVxuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnZ3JhcGhpY3NGYWN0b3J5JyBdO1xuXG5cbi8qKlxuICogQGluaGVyaXREb2MgQ29ubmVjdGlvbkRvY2tpbmcjZ2V0Q3JvcHBlZFdheXBvaW50c1xuICovXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5nZXRDcm9wcGVkV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgc291cmNlLCB0YXJnZXQpIHtcblxuICBzb3VyY2UgPSBzb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2U7XG4gIHRhcmdldCA9IHRhcmdldCB8fCBjb25uZWN0aW9uLnRhcmdldDtcblxuICB2YXIgc291cmNlRG9ja2luZyA9IHRoaXMuZ2V0RG9ja2luZ1BvaW50KGNvbm5lY3Rpb24sIHNvdXJjZSwgdHJ1ZSksXG4gICAgICB0YXJnZXREb2NraW5nID0gdGhpcy5nZXREb2NraW5nUG9pbnQoY29ubmVjdGlvbiwgdGFyZ2V0KTtcblxuICB2YXIgY3JvcHBlZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKHNvdXJjZURvY2tpbmcuaWR4ICsgMSwgdGFyZ2V0RG9ja2luZy5pZHgpO1xuXG4gIGNyb3BwZWRXYXlwb2ludHMudW5zaGlmdChkb2NraW5nVG9Qb2ludChzb3VyY2VEb2NraW5nKSk7XG4gIGNyb3BwZWRXYXlwb2ludHMucHVzaChkb2NraW5nVG9Qb2ludCh0YXJnZXREb2NraW5nKSk7XG5cbiAgcmV0dXJuIGNyb3BwZWRXYXlwb2ludHM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgY29ubmVjdGlvbiBkb2NraW5nIHBvaW50IG9uIHRoZSBzcGVjaWZpZWQgc2hhcGVcbiAqXG4gKiBAaW5oZXJpdERvYyBDb25uZWN0aW9uRG9ja2luZyNnZXREb2NraW5nUG9pbnRcbiAqL1xuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuZ2V0RG9ja2luZ1BvaW50ID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgc2hhcGUsIGRvY2tTdGFydCkge1xuXG4gIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgIGRvY2tpbmdJZHgsXG4gICAgICBkb2NraW5nUG9pbnQsXG4gICAgICBjcm9wcGVkUG9pbnQ7XG5cbiAgZG9ja2luZ0lkeCA9IGRvY2tTdGFydCA/IDAgOiB3YXlwb2ludHMubGVuZ3RoIC0gMTtcbiAgZG9ja2luZ1BvaW50ID0gd2F5cG9pbnRzW2RvY2tpbmdJZHhdO1xuXG4gIGNyb3BwZWRQb2ludCA9IHRoaXMuX2dldEludGVyc2VjdGlvbihzaGFwZSwgY29ubmVjdGlvbiwgZG9ja1N0YXJ0KTtcblxuICByZXR1cm4ge1xuICAgIHBvaW50OiBkb2NraW5nUG9pbnQsXG4gICAgYWN0dWFsOiBjcm9wcGVkUG9pbnQgfHwgZG9ja2luZ1BvaW50LFxuICAgIGlkeDogZG9ja2luZ0lkeFxuICB9O1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKHNoYXBlLCBjb25uZWN0aW9uLCB0YWtlRmlyc3QpIHtcblxuICB2YXIgc2hhcGVQYXRoID0gdGhpcy5fZ2V0U2hhcGVQYXRoKHNoYXBlKSxcbiAgICAgIGNvbm5lY3Rpb25QYXRoID0gdGhpcy5fZ2V0Q29ubmVjdGlvblBhdGgoY29ubmVjdGlvbik7XG5cbiAgcmV0dXJuIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKHNoYXBlUGF0aCwgY29ubmVjdGlvblBhdGgsIHRha2VGaXJzdCk7XG59O1xuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5fZ2V0Q29ubmVjdGlvblBhdGggPSBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gIHJldHVybiB0aGlzLl9ncmFwaGljc0ZhY3RvcnkuZ2V0Q29ubmVjdGlvblBhdGgoY29ubmVjdGlvbik7XG59O1xuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5fZ2V0U2hhcGVQYXRoID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHRoaXMuX2dyYXBoaWNzRmFjdG9yeS5nZXRTaGFwZVBhdGgoc2hhcGUpO1xufTtcblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldEdmeCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbn07XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgcG9pbnREaXN0YW5jZSxcbiAgcG9pbnRzT25MaW5lXG59IGZyb20gJy4uL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQgaW50ZXJzZWN0UGF0aHMgZnJvbSAncGF0aC1pbnRlcnNlY3Rpb24nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZEJvdW5kcyhib3VuZHMpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54KSxcbiAgICB5OiBNYXRoLnJvdW5kKGJvdW5kcy55KSxcbiAgICB3aWR0aDogTWF0aC5yb3VuZChib3VuZHMud2lkdGgpLFxuICAgIGhlaWdodDogTWF0aC5yb3VuZChib3VuZHMuaGVpZ2h0KVxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFBvaW50KHBvaW50KSB7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKHBvaW50LngpLFxuICAgIHk6IE1hdGgucm91bmQocG9pbnQueSlcbiAgfTtcbn1cblxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGJvdW5kcyB0byBhIHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gZGVzY3JpcHRvci5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc3xQb2ludH0gYm91bmRzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNUUkJMKGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHRvcDogYm91bmRzLnksXG4gICAgcmlnaHQ6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICBib3R0b206IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMCksXG4gICAgbGVmdDogYm91bmRzLnhcbiAgfTtcbn1cblxuXG4vKipcbiAqIENvbnZlcnQgYSB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCB9IHRvIGFuIG9iamVjdHMgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0cmJsXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNCb3VuZHModHJibCkge1xuICByZXR1cm4ge1xuICAgIHg6IHRyYmwubGVmdCxcbiAgICB5OiB0cmJsLnRvcCxcbiAgICB3aWR0aDogdHJibC5yaWdodCAtIHRyYmwubGVmdCxcbiAgICBoZWlnaHQ6IHRyYmwuYm90dG9tIC0gdHJibC50b3BcbiAgfTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgbWlkIG9mIHRoZSBnaXZlbiBib3VuZHMgb3IgcG9pbnQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN8UG9pbnR9IGJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkKGJvdW5kcykge1xuICByZXR1cm4gcm91bmRQb2ludCh7XG4gICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIHx8IDApIC8gMixcbiAgICB5OiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApIC8gMlxuICB9KTtcbn1cblxuXG4vLyBvcmllbnRhdGlvbiB1dGlscyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogR2V0IG9yaWVudGF0aW9uIG9mIHRoZSBnaXZlbiByZWN0YW5nbGUgd2l0aCByZXNwZWN0IHRvXG4gKiB0aGUgcmVmZXJlbmNlIHJlY3RhbmdsZS5cbiAqXG4gKiBBIHBhZGRpbmcgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSBtYXkgYmUgcGFzc2VkIHRvIGluZmx1ZW5jZVxuICogaG9yaXpvbnRhbCAvIHZlcnRpY2FsIG9yaWVudGF0aW9uIGFuZCBpbnRlcnNlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHJlY3RcbiAqIEBwYXJhbSB7Qm91bmRzfSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7UG9pbnR8bnVtYmVyfSBwYWRkaW5nXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgb3JpZW50YXRpb247IG9uZSBvZiB0b3AsIHRvcC1sZWZ0LCBsZWZ0LCAuLi4sIGJvdHRvbSwgcmlnaHQgb3IgaW50ZXJzZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZW50YXRpb24ocmVjdCwgcmVmZXJlbmNlLCBwYWRkaW5nKSB7XG5cbiAgcGFkZGluZyA9IHBhZGRpbmcgfHwgMDtcblxuICAvLyBtYWtlIHN1cmUgd2UgY2FuIHVzZSBhbiBvYmplY3QsIHRvb1xuICAvLyBmb3IgaW5kaXZpZHVhbCB7IHgsIHkgfSBwYWRkaW5nXG4gIGlmICghaXNPYmplY3QocGFkZGluZykpIHtcbiAgICBwYWRkaW5nID0geyB4OiBwYWRkaW5nLCB5OiBwYWRkaW5nIH07XG4gIH1cblxuXG4gIHZhciByZWN0T3JpZW50YXRpb24gPSBhc1RSQkwocmVjdCksXG4gICAgICByZWZlcmVuY2VPcmllbnRhdGlvbiA9IGFzVFJCTChyZWZlcmVuY2UpO1xuXG4gIHZhciB0b3AgPSByZWN0T3JpZW50YXRpb24uYm90dG9tICsgcGFkZGluZy55IDw9IHJlZmVyZW5jZU9yaWVudGF0aW9uLnRvcCxcbiAgICAgIHJpZ2h0ID0gcmVjdE9yaWVudGF0aW9uLmxlZnQgLSBwYWRkaW5nLnggPj0gcmVmZXJlbmNlT3JpZW50YXRpb24ucmlnaHQsXG4gICAgICBib3R0b20gPSByZWN0T3JpZW50YXRpb24udG9wIC0gcGFkZGluZy55ID49IHJlZmVyZW5jZU9yaWVudGF0aW9uLmJvdHRvbSxcbiAgICAgIGxlZnQgPSByZWN0T3JpZW50YXRpb24ucmlnaHQgKyBwYWRkaW5nLnggPD0gcmVmZXJlbmNlT3JpZW50YXRpb24ubGVmdDtcblxuICB2YXIgdmVydGljYWwgPSB0b3AgPyAndG9wJyA6IChib3R0b20gPyAnYm90dG9tJyA6IG51bGwpLFxuICAgICAgaG9yaXpvbnRhbCA9IGxlZnQgPyAnbGVmdCcgOiAocmlnaHQgPyAncmlnaHQnIDogbnVsbCk7XG5cbiAgaWYgKGhvcml6b250YWwgJiYgdmVydGljYWwpIHtcbiAgICByZXR1cm4gdmVydGljYWwgKyAnLScgKyBob3Jpem9udGFsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBob3Jpem9udGFsIHx8IHZlcnRpY2FsIHx8ICdpbnRlcnNlY3QnO1xuICB9XG59XG5cblxuLy8gaW50ZXJzZWN0aW9uIHV0aWxzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBHZXQgaW50ZXJzZWN0aW9uIGJldHdlZW4gYW4gZWxlbWVudCBhbmQgYSBsaW5lIHBhdGguXG4gKlxuICogQHBhcmFtIHtQYXRoRGVmfSBlbGVtZW50UGF0aFxuICogQHBhcmFtIHtQYXRoRGVmfSBsaW5lUGF0aFxuICogQHBhcmFtIHtib29sZWFufSBjcm9wU3RhcnQgY3JvcCBmcm9tIHN0YXJ0IG9yIGVuZFxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb24oZWxlbWVudFBhdGgsIGxpbmVQYXRoLCBjcm9wU3RhcnQpIHtcblxuICB2YXIgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbnMoZWxlbWVudFBhdGgsIGxpbmVQYXRoKTtcblxuICAvLyByZWNvZ25pemUgaW50ZXJzZWN0aW9uc1xuICAvLyBvbmx5IG9uZSAtPiBjaG9vc2VcbiAgLy8gdHdvIGNsb3NlIHRvZ2V0aGVyIC0+IGNob29zZSBmaXJzdFxuICAvLyB0d28gb3IgbW9yZSBkaXN0aW5jdCAtPiBwdWxsIG91dCBhcHByb3ByaWF0ZSBvbmVcbiAgLy8gbm9uZSAtPiBvayAoZmFsbGJhY2sgdG8gcG9pbnQgaXRzZWxmKVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gcm91bmRQb2ludChpbnRlcnNlY3Rpb25zWzBdKTtcbiAgfSBlbHNlIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA9PT0gMiAmJiBwb2ludERpc3RhbmNlKGludGVyc2VjdGlvbnNbMF0sIGludGVyc2VjdGlvbnNbMV0pIDwgMSkge1xuICAgIHJldHVybiByb3VuZFBvaW50KGludGVyc2VjdGlvbnNbMF0pO1xuICB9IGVsc2UgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID4gMSkge1xuXG4gICAgLy8gc29ydCBieSBpbnRlcnNlY3Rpb25zIGJhc2VkIG9uIGNvbm5lY3Rpb24gc2VnbWVudCArXG4gICAgLy8gZGlzdGFuY2UgZnJvbSBzdGFydFxuICAgIGludGVyc2VjdGlvbnMgPSBzb3J0QnkoaW50ZXJzZWN0aW9ucywgZnVuY3Rpb24oaSkge1xuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5mbG9vcihpLnQyICogMTAwKSB8fCAxO1xuXG4gICAgICBkaXN0YW5jZSA9IDEwMCAtIGRpc3RhbmNlO1xuXG4gICAgICBkaXN0YW5jZSA9IChkaXN0YW5jZSA8IDEwID8gJzAnIDogJycpICsgZGlzdGFuY2U7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIHNvcnQgc3RyaW5nIHRoYXQgbWFrZXMgc3VyZSB3ZSBzb3J0XG4gICAgICAvLyBsaW5lIHNlZ21lbnQgQVNDICsgbGluZSBzZWdtZW50IHBvc2l0aW9uIERFU0MgKGZvciBjcm9wU3RhcnQpXG4gICAgICAvLyBsaW5lIHNlZ21lbnQgQVNDICsgbGluZSBzZWdtZW50IHBvc2l0aW9uIEFTQyAoZm9yIGNyb3BFbmQpXG4gICAgICByZXR1cm4gaS5zZWdtZW50MiArICcjJyArIGRpc3RhbmNlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvdW5kUG9pbnQoaW50ZXJzZWN0aW9uc1tjcm9wU3RhcnQgPyAwIDogaW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxXSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9ucyhhLCBiKSB7XG4gIHJldHVybiBpbnRlcnNlY3RQYXRocyhhLCBiKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKHdheXBvaW50cykge1xuXG4gIC8vIGFsdGVyIGNvcHkgb2Ygd2F5cG9pbnRzLCBub3Qgb3JpZ2luYWxcbiAgd2F5cG9pbnRzID0gd2F5cG9pbnRzLnNsaWNlKCk7XG5cbiAgdmFyIGlkeCA9IDAsXG4gICAgICBwb2ludCxcbiAgICAgIHByZXZpb3VzUG9pbnQsXG4gICAgICBuZXh0UG9pbnQ7XG5cbiAgd2hpbGUgKHdheXBvaW50c1tpZHhdKSB7XG4gICAgcG9pbnQgPSB3YXlwb2ludHNbaWR4XTtcbiAgICBwcmV2aW91c1BvaW50ID0gd2F5cG9pbnRzW2lkeCAtIDFdO1xuICAgIG5leHRQb2ludCA9IHdheXBvaW50c1tpZHggKyAxXTtcblxuICAgIGlmIChwb2ludERpc3RhbmNlKHBvaW50LCBuZXh0UG9pbnQpID09PSAwIHx8XG4gICAgICAgIHBvaW50c09uTGluZShwcmV2aW91c1BvaW50LCBuZXh0UG9pbnQsIHBvaW50KSkge1xuXG4gICAgICAvLyByZW1vdmUgcG9pbnQsIGlmIG92ZXJsYXBwaW5nIHdpdGgge25leHRQb2ludH1cbiAgICAgIC8vIG9yIG9uIGxpbmUgd2l0aCB7cHJldmlvdXNQb2ludH0gLT4ge3BvaW50fSAtPiB7bmV4dFBvaW50fVxuICAgICAgd2F5cG9pbnRzLnNwbGljZShpZHgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZHgrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzO1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaW5kLFxuICBpc0FycmF5LFxuICB3aXRob3V0XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZFxufSBmcm9tICcuL0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBwb2ludEluUmVjdCxcbiAgcG9pbnREaXN0YW5jZSxcbiAgcG9pbnRzQWxpZ25lZCxcbiAgcG9pbnRzT25MaW5lXG59IGZyb20gJy4uL3V0aWwvR2VvbWV0cnknO1xuXG52YXIgTUlOX1NFR01FTlRfTEVOR1RIID0gMjAsXG4gICAgUE9JTlRfT1JJRU5UQVRJT05fUEFERElORyA9IDU7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbnZhciBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEID0gMjAsXG4gICAgT1JJRU5UQVRJT05fVEhSRVNIT0xEID0ge1xuICAgICAgJ2g6aCc6IDIwLFxuICAgICAgJ3Y6dic6IDIwLFxuICAgICAgJ2g6dic6IC0xMCxcbiAgICAgICd2OmgnOiAtMTBcbiAgICB9O1xuXG5mdW5jdGlvbiBuZWVkc1R1cm4ob3JpZW50YXRpb24sIHN0YXJ0RGlyZWN0aW9uKSB7XG4gIHJldHVybiAhe1xuICAgIHQ6IC90b3AvLFxuICAgIHI6IC9yaWdodC8sXG4gICAgYjogL2JvdHRvbS8sXG4gICAgbDogL2xlZnQvLFxuICAgIGg6IC8uLyxcbiAgICB2OiAvLi9cbiAgfVtzdGFydERpcmVjdGlvbl0udGVzdChvcmllbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNhbkxheW91dFN0cmFpZ2h0KGRpcmVjdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICB0OiAvdG9wLyxcbiAgICByOiAvcmlnaHQvLFxuICAgIGI6IC9ib3R0b20vLFxuICAgIGw6IC9sZWZ0LyxcbiAgICBoOiAvbGVmdHxyaWdodC8sXG4gICAgdjogL3RvcHxib3R0b20vXG4gIH1bZGlyZWN0aW9uXS50ZXN0KHRhcmdldE9yaWVudGF0aW9uKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuICB2YXIgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihiLCBhLCBQT0lOVF9PUklFTlRBVElPTl9QQURESU5HKTtcblxuICB2YXIgc3RhcnREaXJlY3Rpb24gPSBkaXJlY3Rpb25zLnNwbGl0KCc6JylbMF07XG5cbiAgdmFyIHhtaWQgPSByb3VuZCgoYi54IC0gYS54KSAvIDIgKyBhLngpLFxuICAgICAgeW1pZCA9IHJvdW5kKChiLnkgLSBhLnkpIC8gMiArIGEueSk7XG5cbiAgdmFyIHNlZ21lbnRFbmQsIHNlZ21lbnREaXJlY3Rpb25zO1xuXG4gIHZhciBsYXlvdXRTdHJhaWdodCA9IGNhbkxheW91dFN0cmFpZ2h0KHN0YXJ0RGlyZWN0aW9uLCBvcmllbnRhdGlvbiksXG4gICAgICBsYXlvdXRIb3Jpem9udGFsID0gL2h8cnxsLy50ZXN0KHN0YXJ0RGlyZWN0aW9uKSxcbiAgICAgIGxheW91dFR1cm4gPSBmYWxzZTtcblxuICB2YXIgdHVybk5leHREaXJlY3Rpb25zID0gZmFsc2U7XG5cbiAgaWYgKGxheW91dFN0cmFpZ2h0KSB7XG4gICAgc2VnbWVudEVuZCA9IGxheW91dEhvcml6b250YWwgPyB7IHg6IHhtaWQsIHk6IGEueSB9IDogeyB4OiBhLngsIHk6IHltaWQgfTtcblxuICAgIHNlZ21lbnREaXJlY3Rpb25zID0gbGF5b3V0SG9yaXpvbnRhbCA/ICdoOmgnIDogJ3Y6dic7XG4gIH0gZWxzZSB7XG4gICAgbGF5b3V0VHVybiA9IG5lZWRzVHVybihvcmllbnRhdGlvbiwgc3RhcnREaXJlY3Rpb24pO1xuXG4gICAgc2VnbWVudERpcmVjdGlvbnMgPSBsYXlvdXRIb3Jpem9udGFsID8gJ2g6dicgOiAndjpoJztcblxuICAgIGlmIChsYXlvdXRUdXJuKSB7XG5cbiAgICAgIGlmIChsYXlvdXRIb3Jpem9udGFsKSB7XG4gICAgICAgIHR1cm5OZXh0RGlyZWN0aW9ucyA9IHltaWQgPT09IGEueTtcblxuICAgICAgICBzZWdtZW50RW5kID0ge1xuICAgICAgICAgIHg6IGEueCArIE1JTl9TRUdNRU5UX0xFTkdUSCAqICgvbC8udGVzdChzdGFydERpcmVjdGlvbikgPyAtMSA6IDEpLFxuICAgICAgICAgIHk6IHR1cm5OZXh0RGlyZWN0aW9ucyA/IHltaWQgKyBNSU5fU0VHTUVOVF9MRU5HVEggOiB5bWlkXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0dXJuTmV4dERpcmVjdGlvbnMgPSB4bWlkID09PSBhLng7XG5cbiAgICAgICAgc2VnbWVudEVuZCA9IHtcbiAgICAgICAgICB4OiB0dXJuTmV4dERpcmVjdGlvbnMgPyB4bWlkICsgTUlOX1NFR01FTlRfTEVOR1RIIDogeG1pZCxcbiAgICAgICAgICB5OiBhLnkgKyBNSU5fU0VHTUVOVF9MRU5HVEggKiAoL3QvLnRlc3Qoc3RhcnREaXJlY3Rpb24pID8gLTEgOiAxKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRFbmQgPSB7XG4gICAgICAgIHg6IHhtaWQsXG4gICAgICAgIHk6IHltaWRcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3YXlwb2ludHM6IGdldEJlbmRwb2ludHMoYSwgc2VnbWVudEVuZCwgc2VnbWVudERpcmVjdGlvbnMpLmNvbmNhdChzZWdtZW50RW5kKSxcbiAgICBkaXJlY3Rpb25zOiAgc2VnbWVudERpcmVjdGlvbnMsXG4gICAgdHVybk5leHREaXJlY3Rpb25zOiB0dXJuTmV4dERpcmVjdGlvbnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnRTZWdtZW50KGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGdldFNlZ21lbnRCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBnZXRFbmRTZWdtZW50KGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgdmFyIGludmVydGVkU2VnbWVudCA9IGdldFNlZ21lbnRCZW5kcG9pbnRzKGIsIGEsIGludmVydERpcmVjdGlvbnMoZGlyZWN0aW9ucykpO1xuXG4gIHJldHVybiB7XG4gICAgd2F5cG9pbnRzOiBpbnZlcnRlZFNlZ21lbnQud2F5cG9pbnRzLnNsaWNlKCkucmV2ZXJzZSgpLFxuICAgIGRpcmVjdGlvbnM6IGludmVydERpcmVjdGlvbnMoaW52ZXJ0ZWRTZWdtZW50LmRpcmVjdGlvbnMpLFxuICAgIHR1cm5OZXh0RGlyZWN0aW9uczogaW52ZXJ0ZWRTZWdtZW50LnR1cm5OZXh0RGlyZWN0aW9uc1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNaWRTZWdtZW50KHN0YXJ0U2VnbWVudCwgZW5kU2VnbWVudCkge1xuXG4gIHZhciBzdGFydERpcmVjdGlvbiA9IHN0YXJ0U2VnbWVudC5kaXJlY3Rpb25zLnNwbGl0KCc6JylbMV0sXG4gICAgICBlbmREaXJlY3Rpb24gPSBlbmRTZWdtZW50LmRpcmVjdGlvbnMuc3BsaXQoJzonKVswXTtcblxuICBpZiAoc3RhcnRTZWdtZW50LnR1cm5OZXh0RGlyZWN0aW9ucykge1xuICAgIHN0YXJ0RGlyZWN0aW9uID0gc3RhcnREaXJlY3Rpb24gPT0gJ2gnID8gJ3YnIDogJ2gnO1xuICB9XG5cbiAgaWYgKGVuZFNlZ21lbnQudHVybk5leHREaXJlY3Rpb25zKSB7XG4gICAgZW5kRGlyZWN0aW9uID0gZW5kRGlyZWN0aW9uID09ICdoJyA/ICd2JyA6ICdoJztcbiAgfVxuXG4gIHZhciBkaXJlY3Rpb25zID0gc3RhcnREaXJlY3Rpb24gKyAnOicgKyBlbmREaXJlY3Rpb247XG5cbiAgdmFyIGJlbmRwb2ludHMgPSBnZXRCZW5kcG9pbnRzKFxuICAgIHN0YXJ0U2VnbWVudC53YXlwb2ludHNbc3RhcnRTZWdtZW50LndheXBvaW50cy5sZW5ndGggLSAxXSxcbiAgICBlbmRTZWdtZW50LndheXBvaW50c1swXSxcbiAgICBkaXJlY3Rpb25zXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB3YXlwb2ludHM6IGJlbmRwb2ludHMsXG4gICAgZGlyZWN0aW9uczogZGlyZWN0aW9uc1xuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZlcnREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMuc3BsaXQoJzonKS5yZXZlcnNlKCkuam9pbignOicpO1xufVxuXG4vKipcbiAqIEhhbmRsZSBzaW1wbGUgbGF5b3V0cyB3aXRoIG1heGltdW0gdHdvIGJlbmRwb2ludHMuXG4gKi9cbmZ1bmN0aW9uIGdldFNpbXBsZUJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuXG4gIHZhciB4bWlkID0gcm91bmQoKGIueCAtIGEueCkgLyAyICsgYS54KSxcbiAgICAgIHltaWQgPSByb3VuZCgoYi55IC0gYS55KSAvIDIgKyBhLnkpO1xuXG4gIC8vIG9uZSBwb2ludCwgcmlnaHQgb3IgbGVmdCBmcm9tIGFcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICdoOnYnKSB7XG4gICAgcmV0dXJuIFsgeyB4OiBiLngsIHk6IGEueSB9IF07XG4gIH1cblxuICAvLyBvbmUgcG9pbnQsIGFib3ZlIG9yIGJlbG93IGFcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICd2OmgnKSB7XG4gICAgcmV0dXJuIFsgeyB4OiBhLngsIHk6IGIueSB9IF07XG4gIH1cblxuICAvLyB2ZXJ0aWNhbCBzZWdtZW50IGJldHdlZW4gYSBhbmQgYlxuICBpZiAoZGlyZWN0aW9ucyA9PT0gJ2g6aCcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiB4bWlkLCB5OiBhLnkgfSxcbiAgICAgIHsgeDogeG1pZCwgeTogYi55IH1cbiAgICBdO1xuICB9XG5cbiAgLy8gaG9yaXpvbnRhbCBzZWdtZW50IGJldHdlZW4gYSBhbmQgYlxuICBpZiAoZGlyZWN0aW9ucyA9PT0gJ3Y6dicpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiBhLngsIHk6IHltaWQgfSxcbiAgICAgIHsgeDogYi54LCB5OiB5bWlkIH1cbiAgICBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRpcmVjdGlvbnM6IGNhbiBvbmx5IGhhbmRsZSB2YXJpYW5zIG9mIFtodl06W2h2XScpO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWlkIHBvaW50cyBmb3IgYSBtYW5oYXR0YW4gY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHMuXG4gKlxuICogQGV4YW1wbGUgaDpoIChob3Jpem9udGFsOmhvcml6b250YWwpXG4gKlxuICogW2FdLS0tLVt4XVxuICogICAgICAgICB8XG4gKiAgICAgICAgW3hdLS0tLVtiXVxuICpcbiAqIEBleGFtcGxlIGg6diAoaG9yaXpvbnRhbDp2ZXJ0aWNhbClcbiAqXG4gKiBbYV0tLS0tW3hdXG4gKiAgICAgICAgIHxcbiAqICAgICAgICBbYl1cbiAqXG4gKiBAZXhhbXBsZSBoOnIgKGhvcml6b250YWw6cmlnaHQpXG4gKlxuICogW2FdLS0tLVt4XVxuICogICAgICAgICB8XG4gKiAgICBbYl0tW3hdXG4gKlxuICogQHBhcmFtICB7UG9pbnR9IGFcbiAqIEBwYXJhbSAge1BvaW50fSBiXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGRpcmVjdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59XG4gKi9cbmZ1bmN0aW9uIGdldEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucyB8fCAnaDpoJztcblxuICBpZiAoIWlzVmFsaWREaXJlY3Rpb25zKGRpcmVjdGlvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3Vua25vd24gZGlyZWN0aW9uczogPCcgKyBkaXJlY3Rpb25zICsgJz46ICcgK1xuICAgICAgJ211c3QgYmUgc3BlY2lmaWVkIGFzIDxzdGFydD46PGVuZD4gJyArXG4gICAgICAnd2l0aCBzdGFydC9lbmQgaW4geyBoLHYsdCxyLGIsbCB9J1xuICAgICk7XG4gIH1cblxuICAvLyBjb21wdXRlIGV4cGxpY2l0IGRpcmVjdGlvbnMsIGludm9sdmluZyB0cmJsIGRvY2tpbmdzXG4gIC8vIHVzaW5nIGEgdGhyZWUgc2VnbWVudGVkIGxheW91dGluZyBhbGdvcml0aG1cbiAgaWYgKGlzRXhwbGljaXREaXJlY3Rpb25zKGRpcmVjdGlvbnMpKSB7XG4gICAgdmFyIHN0YXJ0U2VnbWVudCA9IGdldFN0YXJ0U2VnbWVudChhLCBiLCBkaXJlY3Rpb25zKSxcbiAgICAgICAgZW5kU2VnbWVudCA9IGdldEVuZFNlZ21lbnQoYSwgYiwgZGlyZWN0aW9ucyksXG4gICAgICAgIG1pZFNlZ21lbnQgPSBnZXRNaWRTZWdtZW50KHN0YXJ0U2VnbWVudCwgZW5kU2VnbWVudCk7XG5cbiAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgc3RhcnRTZWdtZW50LndheXBvaW50cyxcbiAgICAgIG1pZFNlZ21lbnQud2F5cG9pbnRzLFxuICAgICAgZW5kU2VnbWVudC53YXlwb2ludHNcbiAgICApO1xuICB9XG5cbiAgLy8gaGFuZGxlIHNpbXBsZSBbaHZdOltodl0gY2FzZXMgdGhhdCBjYW4gYmUgZWFzaWx5IGNvbXB1dGVkXG4gIHJldHVybiBnZXRTaW1wbGVCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBhY2NvcmRpbmdcbiAqIHRvIHRoZSBtYW5oYXR0YW4gbGF5b3V0IChvbmx5IGhvcml6b250YWwgYW5kIHZlcnRpY2FsKSBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBhXG4gKiBAcGFyYW0ge1BvaW50fSBiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtkaXJlY3Rpb25zPSdoOmgnXSBzcGVjaWZpZXMgbWFuaGF0dGFuIGRpcmVjdGlvbnMgZm9yIGVhY2ggcG9pbnQgYXMge2FkaXJlY3Rpb259OntiZGlyZWN0aW9ufS5cbiAgICAgICAgICAgICAgICAgICBBIGRpcmVjdGlvbmZvciBhIHBvaW50IGlzIGVpdGhlciBgaGAgKGhvcml6b250YWwpIG9yIGB2YCAodmVydGljYWwpXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdFBvaW50cyhhLCBiLCBkaXJlY3Rpb25zKSB7XG5cbiAgdmFyIHBvaW50cyA9IGdldEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucyk7XG5cbiAgcG9pbnRzLnVuc2hpZnQoYSk7XG4gIHBvaW50cy5wdXNoKGIpO1xuXG4gIHJldHVybiB3aXRob3V0UmVkdW5kYW50UG9pbnRzKHBvaW50cyk7XG59XG5cblxuLyoqXG4gKiBDb25uZWN0IHR3byByZWN0YW5nbGVzIHVzaW5nIGEgbWFuaGF0dGFuIGxheW91dGVkIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHNvdXJjZSBzb3VyY2UgcmVjdGFuZ2xlXG4gKiBAcGFyYW0ge0JvdW5kc30gdGFyZ2V0IHRhcmdldCByZWN0YW5nbGVcbiAqIEBwYXJhbSB7UG9pbnR9IFtzdGFydF0gc291cmNlIGRvY2tpbmdcbiAqIEBwYXJhbSB7UG9pbnR9IFtlbmRdIHRhcmdldCBkb2NraW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaGludHMucHJlc2VydmVEb2NraW5nPXNvdXJjZV0gcHJlc2VydmUgZG9ja2luZyBvbiBzZWxlY3RlZCBzaWRlXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtoaW50cy5wcmVmZXJyZWRMYXlvdXRzXVxuICogQHBhcmFtIHtQb2ludHxib29sZWFufSBbaGludHMuY29ubmVjdGlvblN0YXJ0XSB3aGV0aGVyIHRoZSBzdGFydCBjaGFuZ2VkXG4gKiBAcGFyYW0ge1BvaW50fGJvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uRW5kXSB3aGV0aGVyIHRoZSBlbmQgY2hhbmdlZFxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gY29ubmVjdGlvbiBwb2ludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RSZWN0YW5nbGVzKHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cykge1xuXG4gIHZhciBwcmVmZXJyZWRMYXlvdXRzID0gaGludHMgJiYgaGludHMucHJlZmVycmVkTGF5b3V0cyB8fCBbXTtcblxuICB2YXIgcHJlZmVycmVkTGF5b3V0ID0gd2l0aG91dChwcmVmZXJyZWRMYXlvdXRzLCAnc3RyYWlnaHQnKVswXSB8fCAnaDpoJztcblxuICB2YXIgdGhyZXNob2xkID0gT1JJRU5UQVRJT05fVEhSRVNIT0xEW3ByZWZlcnJlZExheW91dF0gfHwgMDtcblxuICB2YXIgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2UsIHRhcmdldCwgdGhyZXNob2xkKTtcblxuICB2YXIgZGlyZWN0aW9ucyA9IGdldERpcmVjdGlvbnMob3JpZW50YXRpb24sIHByZWZlcnJlZExheW91dCk7XG5cbiAgc3RhcnQgPSBzdGFydCB8fCBnZXRNaWQoc291cmNlKTtcbiAgZW5kID0gZW5kIHx8IGdldE1pZCh0YXJnZXQpO1xuXG4gIHZhciBkaXJlY3Rpb25TcGxpdCA9IGRpcmVjdGlvbnMuc3BsaXQoJzonKTtcblxuICAvLyBjb21wdXRlIGFjdHVhbCBkb2NraW5nIHBvaW50cyBmb3Igc3RhcnQgLyBlbmRcbiAgLy8gdGhpcyBlbnN1cmVzIHdlIHByb3Blcmx5IGxheW91dCBvbmx5IHBhcnRzIG9mIHRoZVxuICAvLyBjb25uZWN0aW9uIHRoYXQgbGllcyBpbiBiZXR3ZWVuIHRoZSB0d28gcmVjdGFuZ2xlc1xuICB2YXIgc3RhcnREb2NraW5nID0gZ2V0RG9ja2luZ1BvaW50KHN0YXJ0LCBzb3VyY2UsIGRpcmVjdGlvblNwbGl0WzBdLCBpbnZlcnRPcmllbnRhdGlvbihvcmllbnRhdGlvbikpLFxuICAgICAgZW5kRG9ja2luZyA9IGdldERvY2tpbmdQb2ludChlbmQsIHRhcmdldCwgZGlyZWN0aW9uU3BsaXRbMV0sIG9yaWVudGF0aW9uKTtcblxuICByZXR1cm4gY29ubmVjdFBvaW50cyhzdGFydERvY2tpbmcsIGVuZERvY2tpbmcsIGRpcmVjdGlvbnMpO1xufVxuXG5cbi8qKlxuICogUmVwYWlyIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdHdvIHJlY3RhbmdsZXMsIG9mIHdoaWNoIG9uZSBoYXMgYmVlbiB1cGRhdGVkLlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBzb3VyY2VcbiAqIEBwYXJhbSB7Qm91bmRzfSB0YXJnZXRcbiAqIEBwYXJhbSB7UG9pbnR9IFtzdGFydF1cbiAqIEBwYXJhbSB7UG9pbnR9IFtlbmRdXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gW3dheXBvaW50c11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtoaW50cy5wcmVmZXJyZWRMYXlvdXRzXSBsaXN0IG9mIHByZWZlcnJlZCBsYXlvdXRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uU3RhcnRdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uRW5kXVxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gcmVwYWlyZWQgd2F5cG9pbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBhaXJDb25uZWN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCB3YXlwb2ludHMsIGhpbnRzKSB7XG5cbiAgaWYgKGlzQXJyYXkoc3RhcnQpKSB7XG4gICAgd2F5cG9pbnRzID0gc3RhcnQ7XG4gICAgaGludHMgPSBlbmQ7XG5cbiAgICBzdGFydCA9IGdldE1pZChzb3VyY2UpO1xuICAgIGVuZCA9IGdldE1pZCh0YXJnZXQpO1xuICB9XG5cbiAgaGludHMgPSBhc3NpZ24oeyBwcmVmZXJyZWRMYXlvdXRzOiBbXSB9LCBoaW50cyk7XG4gIHdheXBvaW50cyA9IHdheXBvaW50cyB8fCBbXTtcblxuICB2YXIgcHJlZmVycmVkTGF5b3V0cyA9IGhpbnRzLnByZWZlcnJlZExheW91dHMsXG4gICAgICBwcmVmZXJTdHJhaWdodCA9IHByZWZlcnJlZExheW91dHMuaW5kZXhPZignc3RyYWlnaHQnKSAhPT0gLTEsXG4gICAgICByZXBhaXJlZFdheXBvaW50cztcblxuICAvLyBqdXN0IGxheW91dCBub24tZXhpc3Rpbmcgb3Igc2ltcGxlIGNvbm5lY3Rpb25zXG4gIC8vIGF0dGVtcHQgdG8gcmVuZGVyIHN0cmFpZ2h0IGxpbmVzLCBpZiByZXF1aXJlZFxuXG4gIC8vIGF0dGVtcHQgdG8gbGF5b3V0IGEgc3RyYWlnaHQgbGluZVxuICByZXBhaXJlZFdheXBvaW50cyA9IHByZWZlclN0cmFpZ2h0ICYmIHRyeUxheW91dFN0cmFpZ2h0KHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cyk7XG5cbiAgaWYgKHJlcGFpcmVkV2F5cG9pbnRzKSB7XG4gICAgcmV0dXJuIHJlcGFpcmVkV2F5cG9pbnRzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGxheW91dCBmcm9tIGVuZFxuICByZXBhaXJlZFdheXBvaW50cyA9IGhpbnRzLmNvbm5lY3Rpb25FbmQgJiYgdHJ5UmVwYWlyQ29ubmVjdGlvbkVuZCh0YXJnZXQsIHNvdXJjZSwgZW5kLCB3YXlwb2ludHMpO1xuXG4gIGlmIChyZXBhaXJlZFdheXBvaW50cykge1xuICAgIHJldHVybiByZXBhaXJlZFdheXBvaW50cztcbiAgfVxuXG4gIC8vIHRyeSB0byBsYXlvdXQgZnJvbSBzdGFydFxuICByZXBhaXJlZFdheXBvaW50cyA9IGhpbnRzLmNvbm5lY3Rpb25TdGFydCAmJiB0cnlSZXBhaXJDb25uZWN0aW9uU3RhcnQoc291cmNlLCB0YXJnZXQsIHN0YXJ0LCB3YXlwb2ludHMpO1xuXG4gIGlmIChyZXBhaXJlZFdheXBvaW50cykge1xuICAgIHJldHVybiByZXBhaXJlZFdheXBvaW50cztcbiAgfVxuXG4gIC8vIG9yIHdoZXRoZXIgbm90aGluZyBzZWVtcyB0byBoYXZlIGNoYW5nZWRcbiAgaWYgKCFoaW50cy5jb25uZWN0aW9uU3RhcnQgJiYgIWhpbnRzLmNvbm5lY3Rpb25FbmQgJiYgd2F5cG9pbnRzICYmIHdheXBvaW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzO1xuICB9XG5cbiAgLy8gc2ltcGx5IHJlY29ubmVjdCBpZiBub3RoaW5nIGVsc2Ugd29ya2VkXG4gIHJldHVybiBjb25uZWN0UmVjdGFuZ2xlcyhzb3VyY2UsIHRhcmdldCwgc3RhcnQsIGVuZCwgaGludHMpO1xufVxuXG5cbmZ1bmN0aW9uIGluUmFuZ2UoYSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gYSA+PSBzdGFydCAmJiBhIDw9IGVuZDtcbn1cblxuZnVuY3Rpb24gaXNJblJhbmdlKGF4aXMsIGEsIGIpIHtcbiAgdmFyIHNpemUgPSB7XG4gICAgeDogJ3dpZHRoJyxcbiAgICB5OiAnaGVpZ2h0J1xuICB9O1xuXG4gIHJldHVybiBpblJhbmdlKGFbYXhpc10sIGJbYXhpc10sIGJbYXhpc10gKyBiW3NpemVbYXhpc11dKTtcbn1cblxuLyoqXG4gKiBMYXlvdXQgYSBzdHJhaWdodCBjb25uZWN0aW9uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHNvdXJjZVxuICogQHBhcmFtIHtCb3VuZHN9IHRhcmdldFxuICogQHBhcmFtIHtQb2ludH0gc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IGVuZFxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD58bnVsbH0gd2F5cG9pbnRzIGlmIHN0cmFpZ2h0IGxheW91dCB3b3JrZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeUxheW91dFN0cmFpZ2h0KHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cykge1xuICB2YXIgYXhpcyA9IHt9LFxuICAgICAgcHJpbWFyeUF4aXMsXG4gICAgICBvcmllbnRhdGlvbjtcblxuICBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHNvdXJjZSwgdGFyZ2V0KTtcblxuICAvLyBvbmx5IGxheW91dCBhIHN0cmFpZ2h0IGNvbm5lY3Rpb24gaWYgc2hhcGVzIGFyZVxuICAvLyBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBhbGlnbmVkXG4gIGlmICghL14odG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSQvLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoL3RvcHxib3R0b20vLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcHJpbWFyeUF4aXMgPSAneCc7XG4gIH1cblxuICBpZiAoL2xlZnR8cmlnaHQvLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcHJpbWFyeUF4aXMgPSAneSc7XG4gIH1cblxuICBpZiAoaGludHMucHJlc2VydmVEb2NraW5nID09PSAndGFyZ2V0Jykge1xuXG4gICAgaWYgKCFpc0luUmFuZ2UocHJpbWFyeUF4aXMsIGVuZCwgc291cmNlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXhpc1twcmltYXJ5QXhpc10gPSBlbmRbcHJpbWFyeUF4aXNdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBzdGFydC54LFxuICAgICAgICB5OiBheGlzLnkgIT09IHVuZGVmaW5lZCA/IGF4aXMueSA6IHN0YXJ0LnksXG4gICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBzdGFydC54LFxuICAgICAgICAgIHk6IGF4aXMueSAhPT0gdW5kZWZpbmVkID8gYXhpcy55IDogc3RhcnQueVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBlbmQueCxcbiAgICAgICAgeTogZW5kLnlcbiAgICAgIH1cbiAgICBdO1xuXG4gIH0gZWxzZSB7XG5cbiAgICBpZiAoIWlzSW5SYW5nZShwcmltYXJ5QXhpcywgc3RhcnQsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGF4aXNbcHJpbWFyeUF4aXNdID0gc3RhcnRbcHJpbWFyeUF4aXNdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgeDogc3RhcnQueCxcbiAgICAgICAgeTogc3RhcnQueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBlbmQueCxcbiAgICAgICAgeTogYXhpcy55ICE9PSB1bmRlZmluZWQgPyBheGlzLnkgOiBlbmQueSxcbiAgICAgICAgb3JpZ2luYWw6IHtcbiAgICAgICAgICB4OiBheGlzLnggIT09IHVuZGVmaW5lZCA/IGF4aXMueCA6IGVuZC54LFxuICAgICAgICAgIHk6IGF4aXMueSAhPT0gdW5kZWZpbmVkID8gYXhpcy55IDogZW5kLnlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH1cblxufVxuXG4vKipcbiAqIFJlcGFpciBhIGNvbm5lY3Rpb24gZnJvbSBzdGFydC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gbW92ZWRcbiAqIEBwYXJhbSB7Qm91bmRzfSBvdGhlclxuICogQHBhcmFtIHtQb2ludH0gbmV3RG9ja2luZ1xuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHBvaW50cyBvcmlnaW5hbFBvaW50cyBmcm9tIG1vdmVkIHRvIG90aGVyXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fG51bGx9IHRoZSByZXBhaXJlZCBwb2ludHMgYmV0d2VlbiB0aGUgdHdvIHJlY3RhbmdsZXNcbiAqL1xuZnVuY3Rpb24gdHJ5UmVwYWlyQ29ubmVjdGlvblN0YXJ0KG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgcG9pbnRzKSB7XG4gIHJldHVybiBfdHJ5UmVwYWlyQ29ubmVjdGlvblNpZGUobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCBwb2ludHMpO1xufVxuXG4vKipcbiAqIFJlcGFpciBhIGNvbm5lY3Rpb24gZnJvbSBlbmQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG1vdmVkXG4gKiBAcGFyYW0ge0JvdW5kc30gb3RoZXJcbiAqIEBwYXJhbSB7UG9pbnR9IG5ld0RvY2tpbmdcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMgb3JpZ2luYWxQb2ludHMgZnJvbSBtb3ZlZCB0byBvdGhlclxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50PnxudWxsfSB0aGUgcmVwYWlyZWQgcG9pbnRzIGJldHdlZW4gdGhlIHR3byByZWN0YW5nbGVzXG4gKi9cbmZ1bmN0aW9uIHRyeVJlcGFpckNvbm5lY3Rpb25FbmQobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCBwb2ludHMpIHtcbiAgdmFyIHdheXBvaW50cyA9IHBvaW50cy5zbGljZSgpLnJldmVyc2UoKTtcblxuICB3YXlwb2ludHMgPSBfdHJ5UmVwYWlyQ29ubmVjdGlvblNpZGUobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCB3YXlwb2ludHMpO1xuXG4gIHJldHVybiB3YXlwb2ludHMgPyB3YXlwb2ludHMucmV2ZXJzZSgpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYSBjb25uZWN0aW9uIGZyb20gb25lIHNpZGUgdGhhdCBtb3ZlZC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gbW92ZWRcbiAqIEBwYXJhbSB7Qm91bmRzfSBvdGhlclxuICogQHBhcmFtIHtQb2ludH0gbmV3RG9ja2luZ1xuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHBvaW50cyBvcmlnaW5hbFBvaW50cyBmcm9tIG1vdmVkIHRvIG90aGVyXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fSB0aGUgcmVwYWlyZWQgcG9pbnRzIGJldHdlZW4gdGhlIHR3byByZWN0YW5nbGVzXG4gKi9cbmZ1bmN0aW9uIF90cnlSZXBhaXJDb25uZWN0aW9uU2lkZShtb3ZlZCwgb3RoZXIsIG5ld0RvY2tpbmcsIHBvaW50cykge1xuXG4gIGZ1bmN0aW9uIG5lZWRzUmVsYXlvdXQocG9pbnRzKSB7XG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZWxheW91dCBpZiB0d28gcG9pbnRzIG92ZXJsYXBcbiAgICAvLyB0aGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0b1xuICAgIHJldHVybiAhIWZpbmQocG9pbnRzLCBmdW5jdGlvbihwLCBpZHgpIHtcbiAgICAgIHZhciBxID0gcG9pbnRzW2lkeCAtIDFdO1xuXG4gICAgICByZXR1cm4gcSAmJiBwb2ludERpc3RhbmNlKHAsIHEpIDwgMztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGFpckJlbmRwb2ludChjYW5kaWRhdGUsIG9sZFBlZXIsIG5ld1BlZXIpIHtcblxuICAgIHZhciBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKG9sZFBlZXIsIGNhbmRpZGF0ZSk7XG5cbiAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgIGNhc2UgJ3YnOlxuXG4gICAgICAvLyByZXBhaXIgaG9yaXpvbnRhbCBhbGlnbm1lbnRcbiAgICAgIHJldHVybiB7IHg6IG5ld1BlZXIueCwgeTogY2FuZGlkYXRlLnkgfTtcbiAgICBjYXNlICdoJzpcblxuICAgICAgLy8gcmVwYWlyIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgcmV0dXJuIHsgeDogY2FuZGlkYXRlLngsIHk6IG5ld1BlZXIueSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHg6IGNhbmRpZGF0ZS54LCB5OiBjYW5kaWRhdGUuIHkgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU92ZXJsYXBwaW5nKHBvaW50cywgYSwgYikge1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gcG9pbnRzLmxlbmd0aCAtIDI7IGkgIT09IDA7IGktLSkge1xuXG4gICAgICAvLyBpbnRlcnNlY3RzICg/KSBicmVhaywgcmVtb3ZlIGFsbCBiZW5kcG9pbnRzIHVwIHRvIHRoaXMgb25lIGFuZCByZWxheW91dFxuICAgICAgaWYgKHBvaW50SW5SZWN0KHBvaW50c1tpXSwgYSwgSU5URVJTRUNUSU9OX1RIUkVTSE9MRCkgfHxcbiAgICAgICAgICBwb2ludEluUmVjdChwb2ludHNbaV0sIGIsIElOVEVSU0VDVElPTl9USFJFU0hPTEQpKSB7XG5cbiAgICAgICAgLy8gcmV0dXJuIHNsaWNlZCBvbGQgY29ubmVjdGlvblxuICAgICAgICByZXR1cm4gcG9pbnRzLnNsaWNlKGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG4gIH1cblxuICAvLyAoMCkgb25seSByZXBhaXIgd2hhdCBoYXMgbGF5b3V0YWJsZSBiZW5kcG9pbnRzXG5cbiAgLy8gKDEpIGlmIG9ubHkgb25lIGJlbmRwb2ludCBhbmQgb24gc2hhcGUgbW92ZWQgb250byBvdGhlciBzaGFwZXMgYXhpc1xuICAvLyAgICAgKGhvcml6b250YWxseSAvIHZlcnRpY2FsbHkpLCByZWxheW91dFxuXG4gIGlmIChuZWVkc1JlbGF5b3V0KHBvaW50cykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvbGREb2NraW5nID0gcG9pbnRzWzBdLFxuICAgICAgbmV3UG9pbnRzID0gcG9pbnRzLnNsaWNlKCksXG4gICAgICBzbGljZWRQb2ludHM7XG5cbiAgLy8gKDIpIHJlcGFpciBvbmx5IGxhc3QgbGluZSBzZWdtZW50IGFuZCBvbmx5IGlmIGl0IHdhcyBsYXlvdXRlZCBiZWZvcmVcblxuICBuZXdQb2ludHNbMF0gPSBuZXdEb2NraW5nO1xuICBuZXdQb2ludHNbMV0gPSByZXBhaXJCZW5kcG9pbnQobmV3UG9pbnRzWzFdLCBvbGREb2NraW5nLCBuZXdEb2NraW5nKTtcblxuXG4gIC8vICgzKSBpZiBzaGFwZSBpbnRlcnNlY3RzIHdpdGggYW55IGJlbmRwb2ludCBhZnRlciByZXBhaXIsXG4gIC8vICAgICByZW1vdmUgYWxsIHNlZ21lbnRzIHVwIHRvIHRoaXMgYmVuZHBvaW50IGFuZCByZXBhaXIgZnJvbSB0aGVyZVxuICBzbGljZWRQb2ludHMgPSByZW1vdmVPdmVybGFwcGluZyhuZXdQb2ludHMsIG1vdmVkLCBvdGhlcik7XG5cbiAgaWYgKHNsaWNlZFBvaW50cyAhPT0gbmV3UG9pbnRzKSB7XG4gICAgbmV3UG9pbnRzID0gX3RyeVJlcGFpckNvbm5lY3Rpb25TaWRlKG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgc2xpY2VkUG9pbnRzKTtcbiAgfVxuXG4gIC8vICg0KSBkbyBOT1QgcmVwYWlyIGlmIHJlcGFpcmVkIGJlbmRwb2ludHMgYXJlIGFsaWduZWRcbiAgaWYgKG5ld1BvaW50cyAmJiBwb2ludHNBbGlnbmVkKG5ld1BvaW50cykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQb2ludHM7XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYW5oYXR0YW4gZGlyZWN0aW9ucyBjb25uZWN0aW5nIHR3byByZWN0YW5nbGVzXG4gKiB3aXRoIHRoZSBnaXZlbiBvcmllbnRhdGlvbi5cbiAqXG4gKiBXaWxsIGFsd2F5cyByZXR1cm4gdGhlIGRlZmF1bHQgbGF5b3V0LCBpZiBpdCBpcyBzcGVjaWZpY1xuICogcmVnYXJkaW5nIHNpZGVzIGFscmVhZHkgKHRyYmwpLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogZ2V0RGlyZWN0aW9ucygndG9wJyk7IC8vIC0+ICd2OnYnXG4gKiBnZXREaXJlY3Rpb25zKCdpbnRlcnNlY3QnKTsgLy8gLT4gJ3Q6dCdcbiAqXG4gKiBnZXREaXJlY3Rpb25zKCd0b3AtcmlnaHQnLCAndjpoJyk7IC8vIC0+ICd2OmgnXG4gKiBnZXREaXJlY3Rpb25zKCd0b3AtcmlnaHQnLCAnaDpoJyk7IC8vIC0+ICdoOmgnXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmllbnRhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRMYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGlvbnMob3JpZW50YXRpb24sIGRlZmF1bHRMYXlvdXQpIHtcblxuICAvLyBkb24ndCBvdmVycmlkZSBzcGVjaWZpYyB0cmJsIGRpcmVjdGlvbnNcbiAgaWYgKGlzRXhwbGljaXREaXJlY3Rpb25zKGRlZmF1bHRMYXlvdXQpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMYXlvdXQ7XG4gIH1cblxuICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gIGNhc2UgJ2ludGVyc2VjdCc6XG4gICAgcmV0dXJuICd0OnQnO1xuXG4gIGNhc2UgJ3RvcCc6XG4gIGNhc2UgJ2JvdHRvbSc6XG4gICAgcmV0dXJuICd2OnYnO1xuXG4gIGNhc2UgJ2xlZnQnOlxuICBjYXNlICdyaWdodCc6XG4gICAgcmV0dXJuICdoOmgnO1xuXG4gIC8vICd0b3AtbGVmdCdcbiAgLy8gJ3RvcC1yaWdodCdcbiAgLy8gJ2JvdHRvbS1sZWZ0J1xuICAvLyAnYm90dG9tLXJpZ2h0J1xuICBkZWZhdWx0OlxuICAgIHJldHVybiBkZWZhdWx0TGF5b3V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMgJiYgL15ofHZ8dHxyfGJ8bDpofHZ8dHxyfGJ8bCQvLnRlc3QoZGlyZWN0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljaXREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMgJiYgL3R8cnxifGwvLnRlc3QoZGlyZWN0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGludmVydE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHJldHVybiB7XG4gICAgJ3RvcCc6ICdib3R0b20nLFxuICAgICdib3R0b20nOiAndG9wJyxcbiAgICAnbGVmdCc6ICdyaWdodCcsXG4gICAgJ3JpZ2h0JzogJ2xlZnQnLFxuICAgICd0b3AtbGVmdCc6ICdib3R0b20tcmlnaHQnLFxuICAgICdib3R0b20tcmlnaHQnOiAndG9wLWxlZnQnLFxuICAgICd0b3AtcmlnaHQnOiAnYm90dG9tLWxlZnQnLFxuICAgICdib3R0b20tbGVmdCc6ICd0b3AtcmlnaHQnLFxuICB9W29yaWVudGF0aW9uXTtcbn1cblxuZnVuY3Rpb24gZ2V0RG9ja2luZ1BvaW50KHBvaW50LCByZWN0YW5nbGUsIGRvY2tpbmdEaXJlY3Rpb24sIHRhcmdldE9yaWVudGF0aW9uKSB7XG5cbiAgLy8gZW5zdXJlIHdlIGVuZCB1cCB3aXRoIGEgc3BlY2lmaWMgZG9ja2luZyBkaXJlY3Rpb25cbiAgLy8gYmFzZWQgb24gdGhlIHRhcmdldE9yaWVudGF0aW9uLCBpZiA8aHx2PiBpcyBiZWluZyBwYXNzZWRcblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ2gnKSB7XG4gICAgZG9ja2luZ0RpcmVjdGlvbiA9IC9sZWZ0Ly50ZXN0KHRhcmdldE9yaWVudGF0aW9uKSA/ICdsJyA6ICdyJztcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAndicpIHtcbiAgICBkb2NraW5nRGlyZWN0aW9uID0gL3RvcC8udGVzdCh0YXJnZXRPcmllbnRhdGlvbikgPyAndCcgOiAnYic7XG4gIH1cblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ3QnKSB7XG4gICAgcmV0dXJuIHsgb3JpZ2luYWw6IHBvaW50LCB4OiBwb2ludC54LCB5OiByZWN0YW5nbGUueSB9O1xuICB9XG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICdyJykge1xuICAgIHJldHVybiB7IG9yaWdpbmFsOiBwb2ludCwgeDogcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHk6IHBvaW50LnkgfTtcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAnYicpIHtcbiAgICByZXR1cm4geyBvcmlnaW5hbDogcG9pbnQsIHg6IHBvaW50LngsIHk6IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCB9O1xuICB9XG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICdsJykge1xuICAgIHJldHVybiB7IG9yaWdpbmFsOiBwb2ludCwgeDogcmVjdGFuZ2xlLngsIHk6IHBvaW50LnkgfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBkb2NraW5nRGlyZWN0aW9uOiA8JyArIGRvY2tpbmdEaXJlY3Rpb24gKyAnPicpO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIGxpc3Qgb2Ygd2F5cG9pbnRzIHdpdGggcmVkdW5kYW50IG9uZXMgZmlsdGVyZWQgb3V0LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogT3JpZ2luYWwgcG9pbnRzOlxuICpcbiAqICAgW3hdIC0tLS0tIFt4XSAtLS0tLS0gW3hdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFt4XSAtLS0tLSBbeF0gLSBbeF1cbiAqXG4gKiBGaWx0ZXJlZDpcbiAqXG4gKiAgIFt4XSAtLS0tLS0tLS0tLS0tLS0tIFt4XVxuICogICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICBbeF0gLS0tLS0tLS0tLS0gW3hdXG4gKlxuICogQHBhcmFtICB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0UmVkdW5kYW50UG9pbnRzKHdheXBvaW50cykge1xuICByZXR1cm4gd2F5cG9pbnRzLnJlZHVjZShmdW5jdGlvbihwb2ludHMsIHAsIGlkeCkge1xuXG4gICAgdmFyIHByZXZpb3VzID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSxcbiAgICAgICAgbmV4dCA9IHdheXBvaW50c1tpZHggKyAxXTtcblxuICAgIGlmICghcG9pbnRzT25MaW5lKHByZXZpb3VzLCBuZXh0LCBwLCAwKSkge1xuICAgICAgcG9pbnRzLnB1c2gocCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbiAgfSwgW10pO1xufVxuIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IFJlZnMgZnJvbSAnb2JqZWN0LXJlZnMnO1xuXG52YXIgcGFyZW50UmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2NoaWxkcmVuJywgZW51bWVyYWJsZTogdHJ1ZSwgY29sbGVjdGlvbjogdHJ1ZSB9LCB7IG5hbWU6ICdwYXJlbnQnIH0pLFxuICAgIGxhYmVsUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2xhYmVscycsIGVudW1lcmFibGU6IHRydWUsIGNvbGxlY3Rpb246IHRydWUgfSwgeyBuYW1lOiAnbGFiZWxUYXJnZXQnIH0pLFxuICAgIGF0dGFjaGVyUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2F0dGFjaGVycycsIGNvbGxlY3Rpb246IHRydWUgfSwgeyBuYW1lOiAnaG9zdCcgfSksXG4gICAgb3V0Z29pbmdSZWZzID0gbmV3IFJlZnMoeyBuYW1lOiAnb3V0Z29pbmcnLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ3NvdXJjZScgfSksXG4gICAgaW5jb21pbmdSZWZzID0gbmV3IFJlZnMoeyBuYW1lOiAnaW5jb21pbmcnLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ3RhcmdldCcgfSk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBkanMubW9kZWxcbiAqL1xuXG4vKipcbiAqIEBtZW1iZXJPZiBkanMubW9kZWxcbiAqL1xuXG4vKipcbiAqIFRoZSBiYXNpYyBncmFwaGljYWwgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAY2xhc3NcbiAqXG4gKiBAYWJzdHJhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2UoKSB7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdGhhdCBiYWNrcyB1cCB0aGUgc2hhcGVcbiAgICpcbiAgICogQG5hbWUgQmFzZSNidXNpbmVzc09iamVjdFxuICAgKiBAdHlwZSBPYmplY3RcbiAgICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYnVzaW5lc3NPYmplY3QnLCB7XG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG5cblxuICAvKipcbiAgICogU2luZ2xlIGxhYmVsIHN1cHBvcnQsIHdpbGwgbWFwcGVkIHRvIG11bHRpIGxhYmVsIGFycmF5XG4gICAqXG4gICAqIEBuYW1lIEJhc2UjbGFiZWxcbiAgICogQHR5cGUgT2JqZWN0XG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2xhYmVsJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbHNbMF07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKG5ld0xhYmVsKSB7XG5cbiAgICAgIHZhciBsYWJlbCA9IHRoaXMubGFiZWwsXG4gICAgICAgICAgbGFiZWxzID0gdGhpcy5sYWJlbHM7XG5cbiAgICAgIGlmICghbmV3TGFiZWwgJiYgbGFiZWwpIHtcbiAgICAgICAgbGFiZWxzLnJlbW92ZShsYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbHMuYWRkKG5ld0xhYmVsLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHNoYXBlXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjcGFyZW50XG4gICAqIEB0eXBlIFNoYXBlXG4gICAqL1xuICBwYXJlbnRSZWZzLmJpbmQodGhpcywgJ3BhcmVudCcpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBsYWJlbHNcbiAgICpcbiAgICogQG5hbWUgQmFzZSNsYWJlbHNcbiAgICogQHR5cGUgTGFiZWxcbiAgICovXG4gIGxhYmVsUmVmcy5iaW5kKHRoaXMsICdsYWJlbHMnKTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnNcbiAgICpcbiAgICogQG5hbWUgQmFzZSNvdXRnb2luZ1xuICAgKiBAdHlwZSBBcnJheTxDb25uZWN0aW9uPlxuICAgKi9cbiAgb3V0Z29pbmdSZWZzLmJpbmQodGhpcywgJ291dGdvaW5nJyk7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGluY29taW5nIGNvbm5lY3Rpb25zXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjaW5jb21pbmdcbiAgICogQHR5cGUgQXJyYXk8Q29ubmVjdGlvbj5cbiAgICovXG4gIGluY29taW5nUmVmcy5iaW5kKHRoaXMsICdpbmNvbWluZycpO1xufVxuXG5cbi8qKlxuICogQSBncmFwaGljYWwgb2JqZWN0XG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgQmFzZS5jYWxsKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgZnJhbWUgc2hhcGVzXG4gICAqXG4gICAqIEBuYW1lIFNoYXBlI2lzRnJhbWVcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgY2hpbGRyZW5cbiAgICpcbiAgICogQG5hbWUgU2hhcGUjY2hpbGRyZW5cbiAgICogQHR5cGUgQXJyYXk8QmFzZT5cbiAgICovXG4gIHBhcmVudFJlZnMuYmluZCh0aGlzLCAnY2hpbGRyZW4nKTtcblxuICAvKipcbiAgICogQG5hbWUgU2hhcGUjaG9zdFxuICAgKiBAdHlwZSBTaGFwZVxuICAgKi9cbiAgYXR0YWNoZXJSZWZzLmJpbmQodGhpcywgJ2hvc3QnKTtcblxuICAvKipcbiAgICogQG5hbWUgU2hhcGUjYXR0YWNoZXJzXG4gICAqIEB0eXBlIFNoYXBlXG4gICAqL1xuICBhdHRhY2hlclJlZnMuYmluZCh0aGlzLCAnYXR0YWNoZXJzJyk7XG59XG5cbmluaGVyaXRzKFNoYXBlLCBCYXNlKTtcblxuXG4vKipcbiAqIEEgcm9vdCBncmFwaGljYWwgb2JqZWN0XG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBTaGFwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gUm9vdCgpIHtcbiAgU2hhcGUuY2FsbCh0aGlzKTtcbn1cblxuaW5oZXJpdHMoUm9vdCwgU2hhcGUpO1xuXG5cbi8qKlxuICogQSBsYWJlbCBmb3IgYW4gZWxlbWVudFxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGV4dGVuZHMgU2hhcGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExhYmVsKCkge1xuICBTaGFwZS5jYWxsKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWxlZCBlbGVtZW50XG4gICAqXG4gICAqIEBuYW1lIExhYmVsI2xhYmVsVGFyZ2V0XG4gICAqIEB0eXBlIEJhc2VcbiAgICovXG4gIGxhYmVsUmVmcy5iaW5kKHRoaXMsICdsYWJlbFRhcmdldCcpO1xufVxuXG5pbmhlcml0cyhMYWJlbCwgU2hhcGUpO1xuXG5cbi8qKlxuICogQSBjb25uZWN0aW9uIGJldHdlZW4gdHdvIGVsZW1lbnRzXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0aW9uKCkge1xuICBCYXNlLmNhbGwodGhpcyk7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoaXMgY29ubmVjdGlvbiBvcmlnaW5hdGVzIGZyb21cbiAgICpcbiAgICogQG5hbWUgQ29ubmVjdGlvbiNzb3VyY2VcbiAgICogQHR5cGUgQmFzZVxuICAgKi9cbiAgb3V0Z29pbmdSZWZzLmJpbmQodGhpcywgJ3NvdXJjZScpO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGlzIGNvbm5lY3Rpb24gcG9pbnRzIHRvXG4gICAqXG4gICAqIEBuYW1lIENvbm5lY3Rpb24jdGFyZ2V0XG4gICAqIEB0eXBlIEJhc2VcbiAgICovXG4gIGluY29taW5nUmVmcy5iaW5kKHRoaXMsICd0YXJnZXQnKTtcbn1cblxuaW5oZXJpdHMoQ29ubmVjdGlvbiwgQmFzZSk7XG5cblxudmFyIHR5cGVzID0ge1xuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uLFxuICBzaGFwZTogU2hhcGUsXG4gIGxhYmVsOiBMYWJlbCxcbiAgcm9vdDogUm9vdFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1vZGVsIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKlxuICogQG1ldGhvZCBjcmVhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBzaGFwZTEgPSBNb2RlbC5jcmVhdGUoJ3NoYXBlJywgeyB4OiAxMCwgeTogMTAsIHdpZHRoOiAxMDAsIGhlaWdodDogMTAwIH0pO1xuICogdmFyIHNoYXBlMiA9IE1vZGVsLmNyZWF0ZSgnc2hhcGUnLCB7IHg6IDIxMCwgeTogMjEwLCB3aWR0aDogMTAwLCBoZWlnaHQ6IDEwMCB9KTtcbiAqXG4gKiB2YXIgY29ubmVjdGlvbiA9IE1vZGVsLmNyZWF0ZSgnY29ubmVjdGlvbicsIHsgd2F5cG9pbnRzOiBbIHsgeDogMTEwLCB5OiA1NSB9LCB7eDogMjEwLCB5OiA1NSB9IF0gfSk7XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxvd2VyLWNhc2VkIG1vZGVsIG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMgYXR0cmlidXRlcyB0byBpbml0aWFsaXplIHRoZSBuZXcgbW9kZWwgaW5zdGFuY2Ugd2l0aFxuICpcbiAqIEByZXR1cm4ge0Jhc2V9IHRoZSBuZXcgbW9kZWwgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSh0eXBlLCBhdHRycykge1xuICB2YXIgVHlwZSA9IHR5cGVzW3R5cGVdO1xuICBpZiAoIVR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdHlwZTogPCcgKyB0eXBlICsgJz4nKTtcbiAgfVxuICByZXR1cm4gYXNzaWduKG5ldyBUeXBlKCksIGF0dHJzKTtcbn0iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICBtb3ZlU3BlZWQ6IDUwLFxuICBtb3ZlU3BlZWRBY2NlbGVyYXRlZDogMjAwXG59O1xuXG5cbi8qKlxuICogQSBmZWF0dXJlIHRoYXQgYWxsb3dzIHVzZXJzIHRvIG1vdmUgdGhlIGNhbnZhcyB1c2luZyB0aGUga2V5Ym9hcmQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkPTUwXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkQWNjZWxlcmF0ZWQ9MjAwXVxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmRNb3ZlKFxuICAgIGNvbmZpZyxcbiAgICBrZXlib2FyZCxcbiAgICBjYW52YXNcbikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9jb25maWcgPSBhc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuXG4gIGtleWJvYXJkLmFkZExpc3RlbmVyKGFycm93c0xpc3RlbmVyKTtcblxuXG4gIGZ1bmN0aW9uIGFycm93c0xpc3RlbmVyKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQsXG4gICAgICAgIGNvbmZpZyA9IHNlbGYuX2NvbmZpZztcblxuICAgIGlmICgha2V5Ym9hcmQuaXNDbWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFtcbiAgICAgICdBcnJvd0xlZnQnLCAnTGVmdCcsXG4gICAgICAnQXJyb3dVcCcsICdVcCcsXG4gICAgICAnQXJyb3dEb3duJywgJ0Rvd24nLFxuICAgICAgJ0Fycm93UmlnaHQnLCAnUmlnaHQnXG4gICAgXSwgZXZlbnQpKSB7XG5cbiAgICAgIHZhciBzcGVlZCA9IChcbiAgICAgICAga2V5Ym9hcmQuaXNTaGlmdChldmVudCkgP1xuICAgICAgICAgIGNvbmZpZy5tb3ZlU3BlZWRBY2NlbGVyYXRlZCA6XG4gICAgICAgICAgY29uZmlnLm1vdmVTcGVlZFxuICAgICAgKTtcblxuICAgICAgdmFyIGRpcmVjdGlvbjtcblxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICBjYXNlICdMZWZ0JzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ2xlZnQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnVXAnOlxuICAgICAgICBkaXJlY3Rpb24gPSAndXAnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnUmlnaHQnOlxuICAgICAgICBkaXJlY3Rpb24gPSAncmlnaHQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdEb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ2Rvd24nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc2VsZi5tb3ZlQ2FudmFzKHtcbiAgICAgICAgc3BlZWQ6IHNwZWVkLFxuICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMubW92ZUNhbnZhcyA9IGZ1bmN0aW9uKG9wdHMpIHtcblxuICAgIHZhciBkeCA9IDAsXG4gICAgICAgIGR5ID0gMCxcbiAgICAgICAgc3BlZWQgPSBvcHRzLnNwZWVkO1xuXG4gICAgdmFyIGFjdHVhbFNwZWVkID0gc3BlZWQgLyBNYXRoLm1pbihNYXRoLnNxcnQoY2FudmFzLnZpZXdib3goKS5zY2FsZSksIDEpO1xuXG4gICAgc3dpdGNoIChvcHRzLmRpcmVjdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOiAvLyBMZWZ0XG4gICAgICBkeCA9IGFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXAnOiAvLyBVcFxuICAgICAgZHkgPSBhY3R1YWxTcGVlZDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzogLy8gUmlnaHRcbiAgICAgIGR4ID0gLWFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG93bic6IC8vIERvd25cbiAgICAgIGR5ID0gLWFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FudmFzLnNjcm9sbCh7XG4gICAgICBkeDogZHgsXG4gICAgICBkeTogZHlcbiAgICB9KTtcbiAgfTtcblxufVxuXG5cbktleWJvYXJkTW92ZS4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmtleWJvYXJkTW92ZScsXG4gICdrZXlib2FyZCcsXG4gICdjYW52YXMnXG5dO1xuIiwiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4uLy4uL2ZlYXR1cmVzL2tleWJvYXJkJztcblxuaW1wb3J0IEtleWJvYXJkTW92ZSBmcm9tICcuL0tleWJvYXJkTW92ZSc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEtleWJvYXJkTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdrZXlib2FyZE1vdmUnIF0sXG4gIGtleWJvYXJkTW92ZTogWyAndHlwZScsIEtleWJvYXJkTW92ZSBdXG59OyIsImltcG9ydCB7XG4gIHNldCBhcyBjdXJzb3JTZXQsXG4gIHVuc2V0IGFzIGN1cnNvclVuc2V0XG59IGZyb20gJy4uLy4uL3V0aWwvQ3Vyc29yJztcblxuaW1wb3J0IHtcbiAgaW5zdGFsbCBhcyBpbnN0YWxsQ2xpY2tUcmFwXG59IGZyb20gJy4uLy4uL3V0aWwvQ2xpY2tUcmFwJztcblxuaW1wb3J0IHtcbiAgZGVsdGEgYXMgZGVsdGFQb3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9Qb3NpdGlvblV0aWwnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgY2xvc2VzdCBhcyBkb21DbG9zZXN0XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICB0b1BvaW50XG59IGZyb20gJy4uLy4uL3V0aWwvRXZlbnQnO1xuXG5cbnZhciBUSFJFU0hPTEQgPSAxNTtcblxuXG4vKipcbiAqIE1vdmUgdGhlIGNhbnZhcyB2aWEgbW91c2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUNhbnZhcyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdmFyIGNvbnRleHQ7XG5cblxuICAvLyBsaXN0ZW4gZm9yIG1vdmUgb24gZWxlbWVudCBtb3VzZSBkb3duO1xuICAvLyBhbGxvdyBvdGhlcnMgdG8gaG9vayBpbnRvIHRoZSBldmVudCBiZWZvcmUgdXMgdGhvdWdoXG4gIC8vIChkcmFnZ2luZyAvIGVsZW1lbnQgbW92aW5nIHdpbGwgZG8gdGhpcylcbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGhhbmRsZVN0YXJ0KGUub3JpZ2luYWxFdmVudCk7XG4gIH0pO1xuXG5cbiAgZnVuY3Rpb24gaGFuZGxlTW92ZShldmVudCkge1xuXG4gICAgdmFyIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcbiAgICAgICAgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KSxcbiAgICAgICAgZGVsdGEgPSBkZWx0YVBvcyhwb3NpdGlvbiwgc3RhcnQpO1xuXG4gICAgaWYgKCFjb250ZXh0LmRyYWdnaW5nICYmIGxlbmd0aChkZWx0YSkgPiBUSFJFU0hPTEQpIHtcbiAgICAgIGNvbnRleHQuZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICBpbnN0YWxsQ2xpY2tUcmFwKGV2ZW50QnVzKTtcblxuICAgICAgY3Vyc29yU2V0KCdncmFiJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuZHJhZ2dpbmcpIHtcblxuICAgICAgdmFyIGxhc3RQb3NpdGlvbiA9IGNvbnRleHQubGFzdCB8fCBjb250ZXh0LnN0YXJ0O1xuXG4gICAgICBkZWx0YSA9IGRlbHRhUG9zKHBvc2l0aW9uLCBsYXN0UG9zaXRpb24pO1xuXG4gICAgICBjYW52YXMuc2Nyb2xsKHtcbiAgICAgICAgZHg6IGRlbHRhLngsXG4gICAgICAgIGR5OiBkZWx0YS55XG4gICAgICB9KTtcblxuICAgICAgY29udGV4dC5sYXN0ID0gcG9zaXRpb247XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBzZWxlY3RcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBoYW5kbGVFbmQoZXZlbnQpIHtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBoYW5kbGVNb3ZlKTtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgaGFuZGxlRW5kKTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgY3Vyc29yVW5zZXQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0KGV2ZW50KSB7XG5cbiAgICAvLyBldmVudCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgJy5kanMtZHJhZ2dhYmxlJ1xuICAgIGlmIChkb21DbG9zZXN0KGV2ZW50LnRhcmdldCwgJy5kanMtZHJhZ2dhYmxlJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIHJlamVjdCBub24tbGVmdCBsZWZ0IG1vdXNlIGJ1dHRvbiBvciBtb2RpZmllciBrZXlcbiAgICBpZiAoZXZlbnQuYnV0dG9uIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dCA9IHtcbiAgICAgIHN0YXJ0OiB0b1BvaW50KGV2ZW50KVxuICAgIH07XG5cbiAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgaGFuZGxlTW92ZSk7XG4gICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBoYW5kbGVFbmQpO1xuXG4gICAgLy8gd2UndmUgaGFuZGxlZCB0aGUgZXZlbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5cbk1vdmVDYW52YXMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy9cblxuZnVuY3Rpb24gbGVuZ3RoKHBvaW50KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnQueCwgMikgKyBNYXRoLnBvdyhwb2ludC55LCAyKSk7XG59XG4iLCJpbXBvcnQgTW92ZUNhbnZhcyBmcm9tICcuL01vdmVDYW52YXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdtb3ZlQ2FudmFzJyBdLFxuICBtb3ZlQ2FudmFzOiBbICd0eXBlJywgTW92ZUNhbnZhcyBdXG59OyIsImltcG9ydCBUb3VjaE1vZHVsZSBmcm9tICcuLi8uLi9mZWF0dXJlcy90b3VjaCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBUb3VjaE1vZHVsZVxuICBdXG59OyIsImltcG9ydCB7XG4gIGV2ZW50IGFzIGRvbUV2ZW50LFxuICBjbG9zZXN0IGFzIGRvbUNsb3Nlc3Rcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGdldFN0ZXBTaXplLFxuICBjYXBcbn0gZnJvbSAnLi9ab29tVXRpbCc7XG5cbmltcG9ydCB7XG4gIGxvZzEwXG59IGZyb20gJy4uLy4uL3V0aWwvTWF0aCc7XG5cbmltcG9ydCB7XG4gIGJpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgc2lnbiA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbihuKSB7XG4gIHJldHVybiBuID49IDAgPyAxIDogLTE7XG59O1xuXG52YXIgUkFOR0UgPSB7IG1pbjogMC4yLCBtYXg6IDQgfSxcbiAgICBOVU1fU1RFUFMgPSAxMDtcblxudmFyIERFTFRBX1RIUkVTSE9MRCA9IDAuMTtcblxudmFyIERFRkFVTFRfU0NBTEUgPSAwLjc1O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHpvb21pbmcgYW5kIHNjcm9sbGluZyB3aXRoaW4gdGhlXG4gKiB7QGxpbmsgQ2FudmFzfSB2aWEgdGhlIG1vdXNlIHdoZWVsLlxuICpcbiAqIE1vdXNlIHdoZWVsIHpvb21pbmcgLyBzY3JvbGxpbmcgbWF5IGJlIGRpc2FibGVkIHVzaW5nXG4gKiB0aGUge0BsaW5rIHRvZ2dsZShlbmFibGVkKX0gbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXVxuICogQHBhcmFtIHtib29sZWFufSBbY29uZmlnLmVuYWJsZWQ9dHJ1ZV0gZGVmYXVsdCBlbmFibGVkIHN0YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZT0uNzVdIHNjcm9sbCBzZW5zaXZpdHlcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFpvb21TY3JvbGwoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2NvbnRhaW5lciA9IGNhbnZhcy5fY29udGFpbmVyO1xuXG4gIHRoaXMuX2hhbmRsZVdoZWVsID0gYmluZCh0aGlzLl9oYW5kbGVXaGVlbCwgdGhpcyk7XG5cbiAgdGhpcy5fdG90YWxEZWx0YSA9IDA7XG4gIHRoaXMuX3NjYWxlID0gY29uZmlnLnNjYWxlIHx8IERFRkFVTFRfU0NBTEU7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuaW5pdCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLl9pbml0KGNvbmZpZy5lbmFibGVkICE9PSBmYWxzZSk7XG4gIH0pO1xufVxuXG5ab29tU2Nyb2xsLiRpbmplY3QgPSBbXG4gICdjb25maWcuem9vbVNjcm9sbCcsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dO1xuXG5ab29tU2Nyb2xsLnByb3RvdHlwZS5zY3JvbGwgPSBmdW5jdGlvbiBzY3JvbGwoZGVsdGEpIHtcbiAgdGhpcy5fY2FudmFzLnNjcm9sbChkZWx0YSk7XG59O1xuXG5cblpvb21TY3JvbGwucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHRoaXMuX2NhbnZhcy56b29tKCdmaXQtdmlld3BvcnQnKTtcbn07XG5cbi8qKlxuICogWm9vbSBkZXBlbmRpbmcgb24gZGVsdGEuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhXG4gKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb25cbiAqL1xuWm9vbVNjcm9sbC5wcm90b3R5cGUuem9vbSA9IGZ1bmN0aW9uIHpvb20oZGVsdGEsIHBvc2l0aW9uKSB7XG5cbiAgLy8gem9vbSB3aXRoIGhhbGYgdGhlIHN0ZXAgc2l6ZSBvZiBzdGVwWm9vbVxuICB2YXIgc3RlcFNpemUgPSBnZXRTdGVwU2l6ZShSQU5HRSwgTlVNX1NURVBTICogMik7XG5cbiAgLy8gYWRkIHVudGlsIHRocmVzaG9sZCByZWFjaGVkXG4gIHRoaXMuX3RvdGFsRGVsdGEgKz0gZGVsdGE7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMuX3RvdGFsRGVsdGEpID4gREVMVEFfVEhSRVNIT0xEKSB7XG4gICAgdGhpcy5fem9vbShkZWx0YSwgcG9zaXRpb24sIHN0ZXBTaXplKTtcblxuICAgIC8vIHJlc2V0XG4gICAgdGhpcy5fdG90YWxEZWx0YSA9IDA7XG4gIH1cbn07XG5cblxuWm9vbVNjcm9sbC5wcm90b3R5cGUuX2hhbmRsZVdoZWVsID0gZnVuY3Rpb24gaGFuZGxlV2hlZWwoZXZlbnQpIHtcblxuICAvLyBldmVudCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgJy5kanMtc2Nyb2xsYWJsZSdcbiAgaWYgKGRvbUNsb3Nlc3QoZXZlbnQudGFyZ2V0LCAnLmRqcy1zY3JvbGxhYmxlJywgdHJ1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IHRoaXMuX2NvbnRhaW5lcjtcblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIC8vIHBpbmNoIHRvIHpvb20gaXMgbWFwcGVkIHRvIHdoZWVsICsgY3RybEtleSA9IHRydWVcbiAgLy8gaW4gbW9kZXJuIGJyb3dzZXJzICghKVxuXG4gIHZhciBpc1pvb20gPSBldmVudC5jdHJsS2V5O1xuXG4gIHZhciBpc0hvcml6b250YWxTY3JvbGwgPSBldmVudC5zaGlmdEtleTtcblxuICB2YXIgZmFjdG9yID0gLTEgKiB0aGlzLl9zY2FsZSxcbiAgICAgIGRlbHRhO1xuXG4gIGlmIChpc1pvb20pIHtcbiAgICBmYWN0b3IgKj0gZXZlbnQuZGVsdGFNb2RlID09PSAwID8gMC4wMjAgOiAwLjMyO1xuICB9IGVsc2Uge1xuICAgIGZhY3RvciAqPSBldmVudC5kZWx0YU1vZGUgPT09IDAgPyAxLjAgOiAxNi4wO1xuICB9XG5cbiAgaWYgKGlzWm9vbSkge1xuICAgIHZhciBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgb2Zmc2V0ID0ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCAtIGVsZW1lbnRSZWN0LmxlZnQsXG4gICAgICB5OiBldmVudC5jbGllbnRZIC0gZWxlbWVudFJlY3QudG9wXG4gICAgfTtcblxuICAgIGRlbHRhID0gKFxuICAgICAgTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhldmVudC5kZWx0YVksIDIpICtcbiAgICAgICAgTWF0aC5wb3coZXZlbnQuZGVsdGFYLCAyKVxuICAgICAgKSAqIHNpZ24oZXZlbnQuZGVsdGFZKSAqIGZhY3RvclxuICAgICk7XG5cbiAgICAvLyB6b29tIGluIHJlbGF0aXZlIHRvIGRpYWdyYW0ge3gseX0gY29vcmRpbmF0ZXNcbiAgICB0aGlzLnpvb20oZGVsdGEsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsU2Nyb2xsKSB7XG4gICAgICBkZWx0YSA9IHtcbiAgICAgICAgZHg6IGZhY3RvciAqIGV2ZW50LmRlbHRhWSxcbiAgICAgICAgZHk6IDBcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICBkeDogZmFjdG9yICogZXZlbnQuZGVsdGFYLFxuICAgICAgICBkeTogZmFjdG9yICogZXZlbnQuZGVsdGFZXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsKGRlbHRhKTtcbiAgfVxufTtcblxuLyoqXG4gKiBab29tIHdpdGggZml4ZWQgc3RlcCBzaXplLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFpvb20gZGVsdGEgKDEgZm9yIHpvb21pbmcgaW4sIC0xIGZvciBvdXQpLlxuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uXG4gKi9cblpvb21TY3JvbGwucHJvdG90eXBlLnN0ZXBab29tID0gZnVuY3Rpb24gc3RlcFpvb20oZGVsdGEsIHBvc2l0aW9uKSB7XG5cbiAgdmFyIHN0ZXBTaXplID0gZ2V0U3RlcFNpemUoUkFOR0UsIE5VTV9TVEVQUyk7XG5cbiAgdGhpcy5fem9vbShkZWx0YSwgcG9zaXRpb24sIHN0ZXBTaXplKTtcbn07XG5cblxuLyoqXG4gKiBab29tIGluL291dCBnaXZlbiBhIHN0ZXAgc2l6ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBTaXplXG4gKi9cblpvb21TY3JvbGwucHJvdG90eXBlLl96b29tID0gZnVuY3Rpb24oZGVsdGEsIHBvc2l0aW9uLCBzdGVwU2l6ZSkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBkaXJlY3Rpb24gPSBkZWx0YSA+IDAgPyAxIDogLTE7XG5cbiAgdmFyIGN1cnJlbnRMaW5lYXJab29tTGV2ZWwgPSBsb2cxMChjYW52YXMuem9vbSgpKTtcblxuICAvLyBzbmFwIHRvIGEgcHJveGltYXRlIHpvb20gc3RlcFxuICB2YXIgbmV3TGluZWFyWm9vbUxldmVsID0gTWF0aC5yb3VuZChjdXJyZW50TGluZWFyWm9vbUxldmVsIC8gc3RlcFNpemUpICogc3RlcFNpemU7XG5cbiAgLy8gaW5jcmVhc2Ugb3IgZGVjcmVhc2Ugb25lIHpvb20gc3RlcCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uXG4gIG5ld0xpbmVhclpvb21MZXZlbCArPSBzdGVwU2l6ZSAqIGRpcmVjdGlvbjtcblxuICAvLyBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGxvZ2FyaXRobWljIHpvb20gbGV2ZWwgYmFzZWQgb24gdGhlIGxpbmVhciB6b29tIGxldmVsXG4gIC8vIChlLmcuIDIgZm9yIGFuIGFic29sdXRlIHgyIHpvb20pXG4gIHZhciBuZXdMb2dab29tTGV2ZWwgPSBNYXRoLnBvdygxMCwgbmV3TGluZWFyWm9vbUxldmVsKTtcblxuICBjYW52YXMuem9vbShjYXAoUkFOR0UsIG5ld0xvZ1pvb21MZXZlbCksIHBvc2l0aW9uKTtcbn07XG5cblxuLyoqXG4gKiBUb2dnbGUgdGhlIHpvb20gc2Nyb2xsIGFiaWxpdHkgdmlhIG1vdXNlIHdoZWVsLlxuICpcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtuZXdFbmFibGVkXSBuZXcgZW5hYmxlZCBzdGF0ZVxuICovXG5ab29tU2Nyb2xsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUobmV3RW5hYmxlZCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY29udGFpbmVyO1xuICB2YXIgaGFuZGxlV2hlZWwgPSB0aGlzLl9oYW5kbGVXaGVlbDtcblxuICB2YXIgb2xkRW5hYmxlZCA9IHRoaXMuX2VuYWJsZWQ7XG5cbiAgaWYgKHR5cGVvZiBuZXdFbmFibGVkID09PSAndW5kZWZpbmVkJykge1xuICAgIG5ld0VuYWJsZWQgPSAhb2xkRW5hYmxlZDtcbiAgfVxuXG4gIC8vIG9ubHkgcmVhY3Qgb24gYWN0dWFsIGNoYW5nZXNcbiAgaWYgKG9sZEVuYWJsZWQgIT09IG5ld0VuYWJsZWQpIHtcblxuICAgIC8vIGFkZCBvciByZW1vdmUgd2hlZWwgbGlzdGVuZXIgYmFzZWQgb25cbiAgICAvLyBjaGFuZ2VkIGVuYWJsZWQgc3RhdGVcbiAgICBkb21FdmVudFtuZXdFbmFibGVkID8gJ2JpbmQnIDogJ3VuYmluZCddKGVsZW1lbnQsICd3aGVlbCcsIGhhbmRsZVdoZWVsLCBmYWxzZSk7XG4gIH1cblxuICB0aGlzLl9lbmFibGVkID0gbmV3RW5hYmxlZDtcblxuICByZXR1cm4gbmV3RW5hYmxlZDtcbn07XG5cblxuWm9vbVNjcm9sbC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihuZXdFbmFibGVkKSB7XG4gIHRoaXMudG9nZ2xlKG5ld0VuYWJsZWQpO1xufTtcbiIsImltcG9ydCB7XG4gIGxvZzEwXG59IGZyb20gJy4uLy4uL3V0aWwvTWF0aCc7XG5cbi8qKlxuICogR2V0IHN0ZXAgc2l6ZSBmb3IgZ2l2ZW4gcmFuZ2UgYW5kIG51bWJlciBvZiBzdGVwcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZS5taW5cbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZS5tYXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0ZXBTaXplKHJhbmdlLCBzdGVwcykge1xuXG4gIHZhciBtaW5MaW5lYXJSYW5nZSA9IGxvZzEwKHJhbmdlLm1pbiksXG4gICAgICBtYXhMaW5lYXJSYW5nZSA9IGxvZzEwKHJhbmdlLm1heCk7XG5cbiAgdmFyIGFic29sdXRlTGluZWFyUmFuZ2UgPSBNYXRoLmFicyhtaW5MaW5lYXJSYW5nZSkgKyBNYXRoLmFicyhtYXhMaW5lYXJSYW5nZSk7XG5cbiAgcmV0dXJuIGFic29sdXRlTGluZWFyUmFuZ2UgLyBzdGVwcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcChyYW5nZSwgc2NhbGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHJhbmdlLm1pbiwgTWF0aC5taW4ocmFuZ2UubWF4LCBzY2FsZSkpO1xufVxuIiwiaW1wb3J0IFpvb21TY3JvbGwgZnJvbSAnLi9ab29tU2Nyb2xsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnem9vbVNjcm9sbCcgXSxcbiAgem9vbVNjcm9sbDogWyAndHlwZScsIFpvb21TY3JvbGwgXVxufTsiLCJpbXBvcnQge1xuICBhc1RSQkwsXG4gIGdldE9yaWVudGF0aW9uLFxuICByb3VuZFBvaW50XG59IGZyb20gJy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgY2VudGVyLFxuICBkZWx0YVxufSBmcm9tICcuL1Bvc2l0aW9uVXRpbCc7XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb2ludCByZWxhdGl2ZSB0byB0aGUgbmV3IGVsZW1lbnQncyBwb3NpdGlvblxuICpcbiAqIEBwYXJhbSB7cG9pbnR9IHBvaW50IFthYnNvbHV0ZV1cbiAqIEBwYXJhbSB7Ym91bmRzfSBvbGRCb3VuZHNcbiAqIEBwYXJhbSB7Ym91bmRzfSBuZXdCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtwb2ludH0gcG9pbnQgW2Fic29sdXRlXVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3QXR0YWNoUG9pbnQocG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHZhciBvbGRDZW50ZXIgPSBjZW50ZXIob2xkQm91bmRzKSxcbiAgICAgIG5ld0NlbnRlciA9IGNlbnRlcihuZXdCb3VuZHMpLFxuICAgICAgb2xkRGVsdGEgPSBkZWx0YShwb2ludCwgb2xkQ2VudGVyKTtcblxuICB2YXIgbmV3RGVsdGEgPSB7XG4gICAgeDogb2xkRGVsdGEueCAqIChuZXdCb3VuZHMud2lkdGggLyBvbGRCb3VuZHMud2lkdGgpLFxuICAgIHk6IG9sZERlbHRhLnkgKiAobmV3Qm91bmRzLmhlaWdodCAvIG9sZEJvdW5kcy5oZWlnaHQpXG4gIH07XG5cbiAgcmV0dXJuIHJvdW5kUG9pbnQoe1xuICAgIHg6IG5ld0NlbnRlci54ICsgbmV3RGVsdGEueCxcbiAgICB5OiBuZXdDZW50ZXIueSArIG5ld0RlbHRhLnlcbiAgfSk7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaGFwZSdzIGRlbHRhIHJlbGF0aXZlIHRvIGEgbmV3IHBvc2l0aW9uXG4gKiBvZiBhIGNlcnRhaW4gZWxlbWVudCdzIGJvdW5kc1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBwb2ludCBbYWJzb2x1dGVdXG4gKiBAcGFyYW0ge2JvdW5kc30gb2xkQm91bmRzXG4gKiBAcGFyYW0ge2JvdW5kc30gbmV3Qm91bmRzXG4gKlxuICogQHJldHVybiB7ZGVsdGF9IGRlbHRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBdHRhY2hTaGFwZURlbHRhKHNoYXBlLCBvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICB2YXIgc2hhcGVDZW50ZXIgPSBjZW50ZXIoc2hhcGUpLFxuICAgICAgb2xkQ2VudGVyID0gY2VudGVyKG9sZEJvdW5kcyksXG4gICAgICBuZXdDZW50ZXIgPSBjZW50ZXIobmV3Qm91bmRzKSxcbiAgICAgIHNoYXBlRGVsdGEgPSBkZWx0YShzaGFwZSwgc2hhcGVDZW50ZXIpLFxuICAgICAgb2xkQ2VudGVyRGVsdGEgPSBkZWx0YShzaGFwZUNlbnRlciwgb2xkQ2VudGVyKSxcbiAgICAgIHN0aWNreVBvc2l0aW9uRGVsdGEgPSBnZXRTdGlja3lQb3NpdGlvbkRlbHRhKHNoYXBlQ2VudGVyLCBvbGRCb3VuZHMsIG5ld0JvdW5kcyk7XG5cbiAgaWYgKHN0aWNreVBvc2l0aW9uRGVsdGEpIHtcbiAgICByZXR1cm4gc3RpY2t5UG9zaXRpb25EZWx0YTtcbiAgfVxuXG4gIHZhciBuZXdDZW50ZXJEZWx0YSA9IHtcbiAgICB4OiBvbGRDZW50ZXJEZWx0YS54ICogKG5ld0JvdW5kcy53aWR0aCAvIG9sZEJvdW5kcy53aWR0aCksXG4gICAgeTogb2xkQ2VudGVyRGVsdGEueSAqIChuZXdCb3VuZHMuaGVpZ2h0IC8gb2xkQm91bmRzLmhlaWdodClcbiAgfTtcblxuICB2YXIgbmV3U2hhcGVDZW50ZXIgPSB7XG4gICAgeDogbmV3Q2VudGVyLnggKyBuZXdDZW50ZXJEZWx0YS54LFxuICAgIHk6IG5ld0NlbnRlci55ICsgbmV3Q2VudGVyRGVsdGEueVxuICB9O1xuXG4gIHJldHVybiByb3VuZFBvaW50KHtcbiAgICB4OiBuZXdTaGFwZUNlbnRlci54ICsgc2hhcGVEZWx0YS54IC0gc2hhcGUueCxcbiAgICB5OiBuZXdTaGFwZUNlbnRlci55ICsgc2hhcGVEZWx0YS55IC0gc2hhcGUueVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RpY2t5UG9zaXRpb25EZWx0YShvbGRTaGFwZUNlbnRlciwgb2xkQm91bmRzLCBuZXdCb3VuZHMpIHtcbiAgdmFyIG9sZFRSQkwgPSBhc1RSQkwob2xkQm91bmRzKSxcbiAgICAgIG5ld1RSQkwgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICBpZiAoaXNNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9sZE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24ob2xkQm91bmRzLCBvbGRTaGFwZUNlbnRlciksXG4gICAgICBzdGlja3lQb3NpdGlvbkRlbHRhLFxuICAgICAgbmV3U2hhcGVDZW50ZXIsXG4gICAgICBuZXdPcmllbnRhdGlvbjtcblxuICBpZiAob2xkT3JpZW50YXRpb24gPT09ICd0b3AnKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiBuZXdUUkJMLmJvdHRvbSAtIG9sZFRSQkwuYm90dG9tXG4gICAgfTtcbiAgfSBlbHNlIGlmIChvbGRPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICBzdGlja3lQb3NpdGlvbkRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IG5ld1RSQkwudG9wIC0gb2xkVFJCTC50b3BcbiAgICB9O1xuICB9IGVsc2UgaWYgKG9sZE9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IG5ld1RSQkwubGVmdCAtIG9sZFRSQkwubGVmdCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9IGVsc2UgaWYgKG9sZE9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICBzdGlja3lQb3NpdGlvbkRlbHRhID0ge1xuICAgICAgeDogbmV3VFJCTC5yaWdodCAtIG9sZFRSQkwucmlnaHQsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIGZhbGxiYWNrIHRvIHByb3BvcnRpb25hbCBtb3ZlbWVudCBmb3IgY29ybmVyLXBsYWNlZCBhdHRhY2htZW50c1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbmV3U2hhcGVDZW50ZXIgPSB7XG4gICAgeDogb2xkU2hhcGVDZW50ZXIueCArIHN0aWNreVBvc2l0aW9uRGVsdGEueCxcbiAgICB5OiBvbGRTaGFwZUNlbnRlci55ICsgc3RpY2t5UG9zaXRpb25EZWx0YS55XG4gIH07XG5cbiAgbmV3T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihuZXdCb3VuZHMsIG5ld1NoYXBlQ2VudGVyKTtcblxuICBpZiAobmV3T3JpZW50YXRpb24gIT09IG9sZE9yaWVudGF0aW9uKSB7XG5cbiAgICAvLyBmYWxsYmFjayB0byBwcm9wb3J0aW9uYWwgbW92ZW1lbnQgaWYgb3JpZW50YXRpb24gd291bGQgb3RoZXJ3aXNlIGNoYW5nZVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHN0aWNreVBvc2l0aW9uRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGlzTW92ZWQob2xkVFJCTCwgbmV3VFJCTCkge1xuICByZXR1cm4gaXNIb3Jpem9udGFsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB8fCBpc1ZlcnRpY2FsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKTtcbn1cblxuZnVuY3Rpb24gaXNIb3Jpem9udGFsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB7XG4gIHJldHVybiBvbGRUUkJMLnJpZ2h0ICE9PSBuZXdUUkJMLnJpZ2h0ICYmIG9sZFRSQkwubGVmdCAhPT0gbmV3VFJCTC5sZWZ0O1xufVxuXG5mdW5jdGlvbiBpc1ZlcnRpY2FsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB7XG4gIHJldHVybiBvbGRUUkJMLnRvcCAhPT0gbmV3VFJCTC50b3AgJiYgb2xkVFJCTC5ib3R0b20gIT09IG5ld1RSQkwuYm90dG9tO1xufVxuIiwidmFyIFRSQVBfUFJJT1JJVFkgPSA1MDAwO1xuXG4vKipcbiAqIEluc3RhbGxzIGEgY2xpY2sgdHJhcCB0aGF0IHByZXZlbnRzIGEgZ2hvc3QgY2xpY2sgZm9sbG93aW5nIGEgZHJhZ2dpbmcgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRvIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgaW5zdGFsbGVkIHRyYXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsKGV2ZW50QnVzLCBldmVudE5hbWUpIHtcblxuICBldmVudE5hbWUgPSBldmVudE5hbWUgfHwgJ2VsZW1lbnQuY2xpY2snO1xuXG4gIGZ1bmN0aW9uIHRyYXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXZlbnRCdXMub25jZShldmVudE5hbWUsIFRSQVBfUFJJT1JJVFksIHRyYXApO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBldmVudEJ1cy5vZmYoZXZlbnROYW1lLCB0cmFwKTtcbiAgfTtcbn0iLCIvKipcbiAqIEZhaWxzYWZlIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBjb2xsZWN0aW9uXG4gKlxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gW2NvbGxlY3Rpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtlbGVtZW50XVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gdGhlIHByZXZpb3VzIGluZGV4IG9mIHRoZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmUoY29sbGVjdGlvbiwgZWxlbWVudCkge1xuXG4gIGlmICghY29sbGVjdGlvbiB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpZHggPSBjb2xsZWN0aW9uLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICBjb2xsZWN0aW9uLnNwbGljZShpZHgsIDEpO1xuICB9XG5cbiAgcmV0dXJuIGlkeDtcbn1cblxuLyoqXG4gKiBGYWlsIHNhdmUgYWRkIGFuIGVsZW1lbnQgdG8gdGhlIGdpdmVuIGNvbm5lY3Rpb24sIGVuc3VyaW5nXG4gKiBpdCBkb2VzIG5vdCB5ZXQgZXhpc3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKGNvbGxlY3Rpb24sIGVsZW1lbnQsIGlkeCkge1xuXG4gIGlmICghY29sbGVjdGlvbiB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaWR4ICE9PSAnbnVtYmVyJykge1xuICAgIGlkeCA9IC0xO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRJZHggPSBjb2xsZWN0aW9uLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGN1cnJlbnRJZHggIT09IC0xKSB7XG5cbiAgICBpZiAoY3VycmVudElkeCA9PT0gaWR4KSB7XG5cbiAgICAgIC8vIG5vdGhpbmcgdG8gZG8sIHBvc2l0aW9uIGhhcyBub3QgY2hhbmdlZFxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gY3VycmVudCBwb3NpdGlvblxuICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShjdXJyZW50SWR4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gYWxyZWFkeSBleGlzdHMgaW4gY29sbGVjdGlvblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlkeCAhPT0gLTEpIHtcblxuICAgIC8vIGluc2VydCBhdCBzcGVjaWZpZWQgcG9zaXRpb25cbiAgICBjb2xsZWN0aW9uLnNwbGljZShpZHgsIDAsIGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gcHVzaCB0byBlbmRcbiAgICBjb2xsZWN0aW9uLnB1c2goZWxlbWVudCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEZhaWwgc2F2ZSBnZXQgdGhlIGluZGV4IG9mIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvciAtMSBpZiBjb2xsZWN0aW9uIG9yIGVsZW1lbnQgZG9cbiAqICAgICAgICAgICAgICAgICAgbm90IGV4aXN0IG9yIHRoZSBlbGVtZW50IGlzIG5vdCBjb250YWluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGNvbGxlY3Rpb24sIGVsZW1lbnQpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xufVxuIiwiaW1wb3J0IHtcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzXG59IGZyb20gJ21pbi1kb20nO1xuXG52YXIgQ1VSU09SX0NMU19QQVRURVJOID0gL15kanMtY3Vyc29yLS4qJC87XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChtb2RlKSB7XG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3Nlcyhkb2N1bWVudC5ib2R5KTtcblxuICBjbGFzc2VzLnJlbW92ZU1hdGNoaW5nKENVUlNPUl9DTFNfUEFUVEVSTik7XG5cbiAgaWYgKG1vZGUpIHtcbiAgICBjbGFzc2VzLmFkZCgnZGpzLWN1cnNvci0nICsgbW9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0KCkge1xuICBzZXQobnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXMobW9kZSkge1xuICB2YXIgY2xhc3NlcyA9IGRvbUNsYXNzZXMoZG9jdW1lbnQuYm9keSk7XG5cbiAgcmV0dXJuIGNsYXNzZXMuaGFzKCdkanMtY3Vyc29yLScgKyBtb2RlKTtcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgaXNPYmplY3QsXG4gIGlzVW5kZWZpbmVkLFxuICBncm91cEJ5LFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEdldCBwYXJlbnQgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuYmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudHMpIHtcblxuICAvLyBmaW5kIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBjaGlsZHJlbiBvZiBhbnkgb3RoZXIgZWxlbWVudHNcbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiAhZmluZChlbGVtZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGUgIT09IGVsZW1lbnQgJiYgZ2V0UGFyZW50KGVsZW1lbnQsIGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIGlmICghcGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQ7XG4gIH1cblxuICBpZiAoIWVsZW1lbnQucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGdldFBhcmVudChlbGVtZW50LnBhcmVudCwgcGFyZW50KTtcbn1cblxuXG4vKipcbiAqIEFkZHMgYW4gZWxlbWVudCB0byBhIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGVcbiAqIGVsZW1lbnQgd2FzIGFkZGVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVuaXF1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKGVsZW1lbnRzLCBlLCB1bmlxdWUpIHtcbiAgdmFyIGNhbkFkZCA9ICF1bmlxdWUgfHwgZWxlbWVudHMuaW5kZXhPZihlKSA9PT0gLTE7XG5cbiAgaWYgKGNhbkFkZCkge1xuICAgIGVsZW1lbnRzLnB1c2goZSk7XG4gIH1cblxuICByZXR1cm4gY2FuQWRkO1xufVxuXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIGNhbGxpbmcgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGBmbmBcbiAqIHdpdGggKGVsZW1lbnQsIGluZGV4LCByZWN1cnNpb25EZXB0aCkuXG4gKlxuICogUmVjdXJzZSBpbnRvIGFsbCBlbGVtZW50cyB0aGF0IGFyZSByZXR1cm5lZCBieSBgZm5gLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheTxPYmplY3Q+fSBlbGVtZW50c1xuICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGl0ZXJhdG9yIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIChlbGVtZW50LCBpbmRleCwgcmVjdXJzaW9uRGVwdGgpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtkZXB0aF0gbWF4aW11bSByZWN1cnNpb24gZGVwdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hFbGVtZW50KGVsZW1lbnRzLCBmbiwgZGVwdGgpIHtcblxuICBkZXB0aCA9IGRlcHRoIHx8IDA7XG5cbiAgaWYgKCFpc0FycmF5KGVsZW1lbnRzKSkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24ocywgaSkge1xuICAgIHZhciBmaWx0ZXIgPSBmbihzLCBpLCBkZXB0aCk7XG5cbiAgICBpZiAoaXNBcnJheShmaWx0ZXIpICYmIGZpbHRlci5sZW5ndGgpIHtcbiAgICAgIGVhY2hFbGVtZW50KGZpbHRlciwgZm4sIGRlcHRoICsgMSk7XG4gICAgfVxuICB9KTtcbn1cblxuXG4vKipcbiAqIENvbGxlY3RzIHNlbGYgKyBjaGlsZCBlbGVtZW50cyB1cCB0byBhIGdpdmVuIGRlcHRoIGZyb20gYSBsaXN0IG9mIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfEFycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdGhlIGVsZW1lbnRzIHRvIHNlbGVjdCB0aGUgY2hpbGRyZW4gZnJvbVxuICogQHBhcmFtICB7Ym9vbGVhbn0gdW5pcXVlIHdoZXRoZXIgdG8gcmV0dXJuIGEgdW5pcXVlIHJlc3VsdCBzZXQgKG5vIGR1cGxpY2F0ZXMpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heERlcHRoIHRoZSBkZXB0aCB0byBzZWFyY2ggdGhyb3VnaCBvciAtMSBmb3IgaW5maW5pdGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZvdW5kIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kQ2hpbGRyZW4oZWxlbWVudHMsIHVuaXF1ZSwgbWF4RGVwdGgpIHtcbiAgdmFyIHJlc3VsdCA9IFtdLFxuICAgICAgcHJvY2Vzc2VkQ2hpbGRyZW4gPSBbXTtcblxuICBlYWNoRWxlbWVudChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaSwgZGVwdGgpIHtcbiAgICBhZGQocmVzdWx0LCBlbGVtZW50LCB1bmlxdWUpO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcblxuICAgIC8vIG1heCB0cmF2ZXJzYWwgZGVwdGggbm90IHJlYWNoZWQgeWV0XG4gICAgaWYgKG1heERlcHRoID09PSAtMSB8fCBkZXB0aCA8IG1heERlcHRoKSB7XG5cbiAgICAgIC8vIGNoaWxkcmVuIGV4aXN0ICYmIGNoaWxkcmVuIG5vdCB5ZXQgcHJvY2Vzc2VkXG4gICAgICBpZiAoY2hpbGRyZW4gJiYgYWRkKHByb2Nlc3NlZENoaWxkcmVuLCBjaGlsZHJlbiwgdW5pcXVlKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHVybiBzZWxmICsgZGlyZWN0IGNoaWxkcmVuIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdG8gcXVlcnlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGFsbG93RHVwbGljYXRlcyB0byBhbGxvdyBkdXBsaWNhdGVzIGluIHRoZSByZXN1bHQgc2V0XG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgY29sbGVjdGVkIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kRGlyZWN0Q2hpbGRyZW4oZWxlbWVudHMsIGFsbG93RHVwbGljYXRlcykge1xuICByZXR1cm4gc2VsZkFuZENoaWxkcmVuKGVsZW1lbnRzLCAhYWxsb3dEdXBsaWNhdGVzLCAxKTtcbn1cblxuXG4vKipcbiAqIFJldHVybiBzZWxmICsgQUxMIGNoaWxkcmVuIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdG8gcXVlcnlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGFsbG93RHVwbGljYXRlcyB0byBhbGxvdyBkdXBsaWNhdGVzIGluIHRoZSByZXN1bHQgc2V0XG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgY29sbGVjdGVkIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kQWxsQ2hpbGRyZW4oZWxlbWVudHMsIGFsbG93RHVwbGljYXRlcykge1xuICByZXR1cm4gc2VsZkFuZENoaWxkcmVuKGVsZW1lbnRzLCAhYWxsb3dEdXBsaWNhdGVzLCAtMSk7XG59XG5cblxuLyoqXG4gKiBHZXRzIHRoZSB0aGUgY2xvc3VyZSBmb3IgYWxsIHNlbGVjdGVkIGVsZW1lbnRzLFxuICogdGhlaXIgZW5jbG9zZWQgY2hpbGRyZW4gYW5kIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFufSBbaXNUb3BMZXZlbD10cnVlXVxuICogQHBhcmFtIHtPYmplY3R9IFtleGlzdGluZ0Nsb3N1cmVdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBuZXdDbG9zdXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9zdXJlKGVsZW1lbnRzLCBpc1RvcExldmVsLCBjbG9zdXJlKSB7XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGlzVG9wTGV2ZWwpKSB7XG4gICAgaXNUb3BMZXZlbCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXNPYmplY3QoaXNUb3BMZXZlbCkpIHtcbiAgICBjbG9zdXJlID0gaXNUb3BMZXZlbDtcbiAgICBpc1RvcExldmVsID0gdHJ1ZTtcbiAgfVxuXG5cbiAgY2xvc3VyZSA9IGNsb3N1cmUgfHwge307XG5cbiAgdmFyIGFsbFNoYXBlcyA9IGNvcHlPYmplY3QoY2xvc3VyZS5hbGxTaGFwZXMpLFxuICAgICAgYWxsQ29ubmVjdGlvbnMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuYWxsQ29ubmVjdGlvbnMpLFxuICAgICAgZW5jbG9zZWRFbGVtZW50cyA9IGNvcHlPYmplY3QoY2xvc3VyZS5lbmNsb3NlZEVsZW1lbnRzKSxcbiAgICAgIGVuY2xvc2VkQ29ubmVjdGlvbnMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuZW5jbG9zZWRDb25uZWN0aW9ucyk7XG5cbiAgdmFyIHRvcExldmVsID0gY29weU9iamVjdChcbiAgICBjbG9zdXJlLnRvcExldmVsLFxuICAgIGlzVG9wTGV2ZWwgJiYgZ3JvdXBCeShlbGVtZW50cywgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfSlcbiAgKTtcblxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbm5lY3Rpb24oYykge1xuICAgIGlmICh0b3BMZXZlbFtjLnNvdXJjZS5pZF0gJiYgdG9wTGV2ZWxbYy50YXJnZXQuaWRdKSB7XG4gICAgICB0b3BMZXZlbFtjLmlkXSA9IFsgYyBdO1xuICAgIH1cblxuICAgIC8vIG5vdCBlbmNsb3NlZCBhcyBhIGNoaWxkLCBidXQgbWF5YmUgbG9naWNhbGx5XG4gICAgLy8gKGNvbm5lY3RpbmcgdHdvIG1vdmVkIGVsZW1lbnRzPylcbiAgICBpZiAoYWxsU2hhcGVzW2Muc291cmNlLmlkXSAmJiBhbGxTaGFwZXNbYy50YXJnZXQuaWRdKSB7XG4gICAgICBlbmNsb3NlZENvbm5lY3Rpb25zW2MuaWRdID0gZW5jbG9zZWRFbGVtZW50c1tjLmlkXSA9IGM7XG4gICAgfVxuXG4gICAgYWxsQ29ubmVjdGlvbnNbYy5pZF0gPSBjO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRWxlbWVudChlbGVtZW50KSB7XG5cbiAgICBlbmNsb3NlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuXG4gICAgICAvLyByZW1lbWJlciBjb25uZWN0aW9uXG4gICAgICBlbmNsb3NlZENvbm5lY3Rpb25zW2VsZW1lbnQuaWRdID0gYWxsQ29ubmVjdGlvbnNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHJlbWVtYmVyIHNoYXBlXG4gICAgICBhbGxTaGFwZXNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuXG4gICAgICAvLyByZW1lbWJlciBhbGwgY29ubmVjdGlvbnNcbiAgICAgIGZvckVhY2goZWxlbWVudC5pbmNvbWluZywgaGFuZGxlQ29ubmVjdGlvbik7XG5cbiAgICAgIGZvckVhY2goZWxlbWVudC5vdXRnb2luZywgaGFuZGxlQ29ubmVjdGlvbik7XG5cbiAgICAgIC8vIHJlY3Vyc2UgaW50byBjaGlsZHJlblxuICAgICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gICAgfVxuICB9XG5cbiAgZWFjaEVsZW1lbnQoZWxlbWVudHMsIGhhbmRsZUVsZW1lbnQpO1xuXG4gIHJldHVybiB7XG4gICAgYWxsU2hhcGVzOiBhbGxTaGFwZXMsXG4gICAgYWxsQ29ubmVjdGlvbnM6IGFsbENvbm5lY3Rpb25zLFxuICAgIHRvcExldmVsOiB0b3BMZXZlbCxcbiAgICBlbmNsb3NlZENvbm5lY3Rpb25zOiBlbmNsb3NlZENvbm5lY3Rpb25zLFxuICAgIGVuY2xvc2VkRWxlbWVudHM6IGVuY2xvc2VkRWxlbWVudHNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdXJyb3VuZGluZyBiYm94IGZvciBhbGwgZWxlbWVudHMgaW5cbiAqIHRoZSBhcnJheSBvciB0aGUgZWxlbWVudCBwcmltaXRpdmUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fGRqcy5tb2RlbC5TaGFwZX0gZWxlbWVudHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RvcFJlY3Vyc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QkJveChlbGVtZW50cywgc3RvcFJlY3Vyc2lvbikge1xuXG4gIHN0b3BSZWN1cnNpb24gPSAhIXN0b3BSZWN1cnNpb247XG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFtlbGVtZW50c107XG4gIH1cblxuICB2YXIgbWluWCxcbiAgICAgIG1pblksXG4gICAgICBtYXhYLFxuICAgICAgbWF4WTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAvLyBJZiBlbGVtZW50IGlzIGEgY29ubmVjdGlvbiB0aGUgYmJveCBtdXN0IGJlIGNvbXB1dGVkIGZpcnN0XG4gICAgdmFyIGJib3ggPSBlbGVtZW50O1xuICAgIGlmIChlbGVtZW50LndheXBvaW50cyAmJiAhc3RvcFJlY3Vyc2lvbikge1xuICAgICAgYmJveCA9IGdldEJCb3goZWxlbWVudC53YXlwb2ludHMsIHRydWUpO1xuICAgIH1cblxuICAgIHZhciB4ID0gYmJveC54LFxuICAgICAgICB5ID0gYmJveC55LFxuICAgICAgICBoZWlnaHQgPSBiYm94LmhlaWdodCB8fCAwLFxuICAgICAgICB3aWR0aCA9IGJib3gud2lkdGggfHwgMDtcblxuICAgIGlmICh4IDwgbWluWCB8fCBtaW5YID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1pblggPSB4O1xuICAgIH1cbiAgICBpZiAoeSA8IG1pblkgfHwgbWluWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtaW5ZID0geTtcbiAgICB9XG5cbiAgICBpZiAoKHggKyB3aWR0aCkgPiBtYXhYIHx8IG1heFggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4WCA9IHggKyB3aWR0aDtcbiAgICB9XG4gICAgaWYgKCh5ICsgaGVpZ2h0KSA+IG1heFkgfHwgbWF4WSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXhZID0geSArIGhlaWdodDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIGhlaWdodDogbWF4WSAtIG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YXG4gIH07XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBlbmNsb3NlZCBmcm9tIHRoZSBib3VuZGluZyBib3guXG4gKlxuICogICAqIElmIGJib3guKHdpZHRofGhlaWdodCkgaXMgbm90IHNwZWNpZmllZCB0aGUgbWV0aG9kIHJldHVybnNcbiAqICAgICBhbGwgZWxlbWVudHMgd2l0aCBlbGVtZW50LngveSA+IGJib3gueC95XG4gKiAgICogSWYgb25seSBiYm94Lnggb3IgYmJveC55IGlzIHNwZWNpZmllZCwgbWV0aG9kIHJldHVybiBhbGwgZWxlbWVudHMgd2l0aFxuICogICAgIGUueCA+IGJib3gueCBvciBlLnkgPiBiYm94LnlcbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGVsZW1lbnRzIExpc3Qgb2YgRWxlbWVudHMgdG8gc2VhcmNoIHRocm91Z2hcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBiYm94IHRoZSBlbmNsb3NpbmcgYmJveC5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbmNsb3NlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5jbG9zZWRFbGVtZW50cyhlbGVtZW50cywgYmJveCkge1xuXG4gIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0ge307XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIGUgPSBlbGVtZW50O1xuXG4gICAgaWYgKGUud2F5cG9pbnRzKSB7XG4gICAgICBlID0gZ2V0QkJveChlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTnVtYmVyKGJib3gueSkgJiYgKGUueCA+IGJib3gueCkpIHtcbiAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIWlzTnVtYmVyKGJib3gueCkgJiYgKGUueSA+IGJib3gueSkpIHtcbiAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH1cbiAgICBpZiAoZS54ID4gYmJveC54ICYmIGUueSA+IGJib3gueSkge1xuICAgICAgaWYgKGlzTnVtYmVyKGJib3gud2lkdGgpICYmIGlzTnVtYmVyKGJib3guaGVpZ2h0KSAmJlxuICAgICAgICAgIGUud2lkdGggKyBlLnggPCBiYm94LndpZHRoICsgYmJveC54ICYmXG4gICAgICAgICAgZS5oZWlnaHQgKyBlLnkgPCBiYm94LmhlaWdodCArIGJib3gueSkge1xuXG4gICAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgICAgfSBlbHNlIGlmICghaXNOdW1iZXIoYmJveC53aWR0aCkgfHwgIWlzTnVtYmVyKGJib3guaGVpZ2h0KSkge1xuICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlKGVsZW1lbnQpIHtcblxuICBpZiAoJ3dheXBvaW50cycgaW4gZWxlbWVudCkge1xuICAgIHJldHVybiAnY29ubmVjdGlvbic7XG4gIH1cblxuICBpZiAoJ3gnIGluIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gJ3NoYXBlJztcbiAgfVxuXG4gIHJldHVybiAncm9vdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZyYW1lRWxlbWVudChlbGVtZW50KSB7XG5cbiAgcmV0dXJuICEhKGVsZW1lbnQgJiYgZWxlbWVudC5pc0ZyYW1lKTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc3JjMSwgc3JjMikge1xuICByZXR1cm4gYXNzaWduKHt9LCBzcmMxIHx8IHt9LCBzcmMyIHx8IHt9KTtcbn0iLCJleHBvcnQge1xuICBkZWZhdWx0IGFzIGVzY2FwZUNTU1xufSBmcm9tICdjc3MuZXNjYXBlJztcblxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjMzk7J1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUhUTUwoc3RyKSB7XG4gIHN0ciA9ICcnICsgc3RyO1xuXG4gIHJldHVybiBzdHIgJiYgc3RyLnJlcGxhY2UoL1smPD5cIiddL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIEhUTUxfRVNDQVBFX01BUFttYXRjaF07XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gX19zdG9wUHJvcGFnYXRpb24oZXZlbnQpIHtcbiAgaWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQuc3RvcFByb3BhZ2F0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdpbmFsKGV2ZW50KSB7XG4gIHJldHVybiBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50LnNyY0V2ZW50O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZXZlbnQsIGltbWVkaWF0ZSkge1xuICBfX3N0b3BQcm9wYWdhdGlvbihldmVudCwgaW1tZWRpYXRlKTtcbiAgX19zdG9wUHJvcGFnYXRpb24oZ2V0T3JpZ2luYWwoZXZlbnQpLCBpbW1lZGlhdGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BvaW50KGV2ZW50KSB7XG5cbiAgaWYgKGV2ZW50LnBvaW50ZXJzICYmIGV2ZW50LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgIGV2ZW50ID0gZXZlbnQucG9pbnRlcnNbMF07XG4gIH1cblxuICBpZiAoZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCkge1xuICAgIGV2ZW50ID0gZXZlbnQudG91Y2hlc1swXTtcbiAgfVxuXG4gIHJldHVybiBldmVudCA/IHtcbiAgICB4OiBldmVudC5jbGllbnRYLFxuICAgIHk6IGV2ZW50LmNsaWVudFlcbiAgfSA6IG51bGw7XG59IiwiaW1wb3J0IHtcbiAgZXZlcnksXG4gIGlzQXJyYXlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqXG4gKiBAcGFyYW0gIHtQb2ludH0gIHBcbiAqIEBwYXJhbSAge1BvaW50fSAgcVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gIGRpc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludERpc3RhbmNlKGEsIGIpIHtcbiAgaWYgKCFhIHx8ICFiKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc3FydChcbiAgICBNYXRoLnBvdyhhLnggLSBiLngsIDIpICtcbiAgICBNYXRoLnBvdyhhLnkgLSBiLnksIDIpXG4gICk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvaW50IHIgaXMgb24gdGhlIGxpbmUgYmV0d2VlbiBwIGFuZCBxXG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtQb2ludH0gIHFcbiAqIEBwYXJhbSAge1BvaW50fSAgclxuICogQHBhcmFtICB7bnVtYmVyfSBbYWNjdXJhY3k9NV0gYWNjdXJhY3kgZm9yIHBvaW50cyBvbiBsaW5lIGNoZWNrIChsb3dlciBpcyBiZXR0ZXIpXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvaW50c09uTGluZShwLCBxLCByLCBhY2N1cmFjeSkge1xuXG4gIGlmICh0eXBlb2YgYWNjdXJhY3kgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgYWNjdXJhY3kgPSA1O1xuICB9XG5cbiAgaWYgKCFwIHx8ICFxIHx8ICFyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHZhbCA9IChxLnggLSBwLngpICogKHIueSAtIHAueSkgLSAocS55IC0gcC55KSAqIChyLnggLSBwLngpLFxuICAgICAgZGlzdCA9IHBvaW50RGlzdGFuY2UocCwgcSk7XG5cbiAgLy8gQHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85MDc0OTEvNDEyMTkwXG4gIHJldHVybiBNYXRoLmFicyh2YWwgLyBkaXN0KSA8PSBhY2N1cmFjeTtcbn1cblxuXG52YXIgQUxJR05FRF9USFJFU0hPTEQgPSAyO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdHdvIHBvaW50cyBhcmUgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkgYWxpZ25lZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50PnxQb2ludH1cbiAqIEBwYXJhbSB7UG9pbnR9XG4gKlxuICogQHJldHVybiB7c3RyaW5nfGJvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNBbGlnbmVkKGEsIGIpIHtcbiAgdmFyIHBvaW50cztcblxuICBpZiAoaXNBcnJheShhKSkge1xuICAgIHBvaW50cyA9IGE7XG4gIH0gZWxzZSB7XG4gICAgcG9pbnRzID0gWyBhLCBiIF07XG4gIH1cblxuICBpZiAocG9pbnRzQWxpZ25lZEhvcml6b250YWxseShwb2ludHMpKSB7XG4gICAgcmV0dXJuICdoJztcbiAgfVxuXG4gIGlmIChwb2ludHNBbGlnbmVkVmVydGljYWxseShwb2ludHMpKSB7XG4gICAgcmV0dXJuICd2JztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50c0FsaWduZWRIb3Jpem9udGFsbHkoYSwgYikge1xuICB2YXIgcG9pbnRzO1xuXG4gIGlmIChpc0FycmF5KGEpKSB7XG4gICAgcG9pbnRzID0gYTtcbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSBbIGEsIGIgXTtcbiAgfVxuXG4gIHZhciBmaXJzdFBvaW50ID0gcG9pbnRzLnNsaWNlKCkuc2hpZnQoKTtcblxuICByZXR1cm4gZXZlcnkocG9pbnRzLCBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBNYXRoLmFicyhmaXJzdFBvaW50LnkgLSBwb2ludC55KSA8PSBBTElHTkVEX1RIUkVTSE9MRDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNBbGlnbmVkVmVydGljYWxseShhLCBiKSB7XG4gIHZhciBwb2ludHM7XG5cbiAgaWYgKGlzQXJyYXkoYSkpIHtcbiAgICBwb2ludHMgPSBhO1xuICB9IGVsc2Uge1xuICAgIHBvaW50cyA9IFsgYSwgYiBdO1xuICB9XG5cbiAgdmFyIGZpcnN0UG9pbnQgPSBwb2ludHMuc2xpY2UoKS5zaGlmdCgpO1xuXG4gIHJldHVybiBldmVyeShwb2ludHMsIGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKGZpcnN0UG9pbnQueCAtIHBvaW50LngpIDw9IEFMSUdORURfVEhSRVNIT0xEO1xuICB9KTtcbn1cblxuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb2ludCBwIGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlIHJlY3RcbiAqXG4gKiBAcGFyYW0gIHtQb2ludH0gIHBcbiAqIEBwYXJhbSAge1JlY3R9IHJlY3RcbiAqIEBwYXJhbSAge251bWJlcn0gdG9sZXJhbmNlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvaW50SW5SZWN0KHAsIHJlY3QsIHRvbGVyYW5jZSkge1xuICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgfHwgMDtcblxuICByZXR1cm4gcC54ID4gcmVjdC54IC0gdG9sZXJhbmNlICYmXG4gICAgICAgICBwLnkgPiByZWN0LnkgLSB0b2xlcmFuY2UgJiZcbiAgICAgICAgIHAueCA8IHJlY3QueCArIHJlY3Qud2lkdGggKyB0b2xlcmFuY2UgJiZcbiAgICAgICAgIHAueSA8IHJlY3QueSArIHJlY3QuaGVpZ2h0ICsgdG9sZXJhbmNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIHBvaW50cyBwIGFuZCBxXG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtQb2ludH0gIHFcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH0gbWlkZGxlIHBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWRQb2ludChwLCBxKSB7XG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChwLnggKyAoKHEueCAtIHAueCkgLyAyLjApKSxcbiAgICB5OiBNYXRoLnJvdW5kKHAueSArICgocS55IC0gcC55KSAvIDIuMCkpXG4gIH07XG59XG4iLCIvKipcbiAqIFNWR3MgZm9yIGVsZW1lbnRzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIHtAbGluayBHcmFwaGljc0ZhY3Rvcnl9LlxuICpcbiAqIFRoaXMgdXRpbGl0eSBnaXZlcyBxdWljayBhY2Nlc3MgdG8gdGhlIGltcG9ydGFudCBzZW1hbnRpY1xuICogcGFydHMgb2YgYW4gZWxlbWVudC5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpc3VhbCBwYXJ0IG9mIGEgZGlhZ3JhbSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtTbmFwPFNWR0VsZW1lbnQ+fSBnZnhcbiAqXG4gKiBAcmV0dXJuIHtTbmFwPFNWR0VsZW1lbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsKGdmeCkge1xuICByZXR1cm4gZ2Z4LmNoaWxkTm9kZXNbMF07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGRyZW4gZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7U25hcDxTVkdFbGVtZW50Pn0gZ2Z4XG4gKiBAcmV0dXJuIHtTbmFwPFNWR0VsZW1lbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oZ2Z4KSB7XG4gIHJldHVybiBnZngucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzFdO1xufSIsIi8qKlxuICogVXRpbCB0aGF0IHByb3ZpZGVzIHVuaXF1ZSBJRHMuXG4gKlxuICogQGNsYXNzIGRqcy51dGlsLklkR2VuZXJhdG9yXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJPZiBkanMudXRpbFxuICpcbiAqIFRoZSBpZHMgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIGEgZ2l2ZW4gcHJlZml4IGFuZCBjb250YWluIGEgcmFuZG9tIHZhbHVlIHRvIGF2b2lkIGNvbGxpc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCBhIHByZWZpeCB0byBwcmVwZW5kIHRvIGdlbmVyYXRlZCBpZHMgKGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIElkR2VuZXJhdG9yKHByZWZpeCkge1xuXG4gIHRoaXMuX2NvdW50ZXIgPSAwO1xuICB0aGlzLl9wcmVmaXggPSAocHJlZml4ID8gcHJlZml4ICsgJy0nIDogJycpICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMCkgKyAnLSc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG5leHQgdW5pcXVlIElELlxuICpcbiAqIEBtZXRob2QgZGpzLnV0aWwuSWRHZW5lcmF0b3IjbmV4dFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBpZFxuICovXG5JZEdlbmVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcHJlZml4ICsgKCsrdGhpcy5fY291bnRlcik7XG59O1xuIiwiaW1wb3J0IHtcbiAgcG9pbnREaXN0YW5jZVxufSBmcm9tICcuL0dlb21ldHJ5JztcblxuaW1wb3J0IGludGVyc2VjdFBhdGhzIGZyb20gJ3BhdGgtaW50ZXJzZWN0aW9uJztcblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBtYXggPSBNYXRoLm1heDtcblxuXG5mdW5jdGlvbiBjaXJjbGVQYXRoKGNlbnRlciwgcikge1xuICB2YXIgeCA9IGNlbnRlci54LFxuICAgICAgeSA9IGNlbnRlci55O1xuXG4gIHJldHVybiBbXG4gICAgWydNJywgeCwgeV0sXG4gICAgWydtJywgMCwgLXJdLFxuICAgIFsnYScsIHIsIHIsIDAsIDEsIDEsIDAsIDIgKiByXSxcbiAgICBbJ2EnLCByLCByLCAwLCAxLCAxLCAwLCAtMiAqIHJdLFxuICAgIFsneiddXG4gIF07XG59XG5cbmZ1bmN0aW9uIGxpbmVQYXRoKHBvaW50cykge1xuICB2YXIgc2VnbWVudHMgPSBbXTtcblxuICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbihwLCBpZHgpIHtcbiAgICBzZWdtZW50cy5wdXNoKFsgaWR4ID09PSAwID8gJ00nIDogJ0wnLCBwLngsIHAueSBdKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5cbnZhciBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEID0gMTA7XG5cbmZ1bmN0aW9uIGdldEJlbmRwb2ludEludGVyc2VjdGlvbih3YXlwb2ludHMsIHJlZmVyZW5jZSkge1xuXG4gIHZhciBpLCB3O1xuXG4gIGZvciAoaSA9IDA7ICh3ID0gd2F5cG9pbnRzW2ldKTsgaSsrKSB7XG5cbiAgICBpZiAocG9pbnREaXN0YW5jZSh3LCByZWZlcmVuY2UpIDw9IElOVEVSU0VDVElPTl9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvaW50OiB3YXlwb2ludHNbaV0sXG4gICAgICAgIGJlbmRwb2ludDogdHJ1ZSxcbiAgICAgICAgaW5kZXg6IGlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpIHtcblxuICB2YXIgaW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdFBhdGhzKGNpcmNsZVBhdGgocmVmZXJlbmNlLCBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEKSwgbGluZVBhdGgod2F5cG9pbnRzKSk7XG5cbiAgdmFyIGEgPSBpbnRlcnNlY3Rpb25zWzBdLFxuICAgICAgYiA9IGludGVyc2VjdGlvbnNbaW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxXSxcbiAgICAgIGlkeDtcblxuICBpZiAoIWEpIHtcblxuICAgIC8vIG5vIGludGVyc2VjdGlvblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGEgIT09IGIpIHtcblxuICAgIGlmIChhLnNlZ21lbnQyICE9PSBiLnNlZ21lbnQyKSB7XG5cbiAgICAgIC8vIHdlIHVzZSB0aGUgYmVuZHBvaW50IGluIGJldHdlZW4gYm90aCBzZWdtZW50c1xuICAgICAgLy8gYXMgdGhlIGludGVyc2VjdGlvbiBwb2ludFxuXG4gICAgICBpZHggPSBtYXgoYS5zZWdtZW50MiwgYi5zZWdtZW50MikgLSAxO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogd2F5cG9pbnRzW2lkeF0sXG4gICAgICAgIGJlbmRwb2ludDogdHJ1ZSxcbiAgICAgICAgaW5kZXg6IGlkeFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcG9pbnQ6IHtcbiAgICAgICAgeDogKHJvdW5kKGEueCArIGIueCkgLyAyKSxcbiAgICAgICAgeTogKHJvdW5kKGEueSArIGIueSkgLyAyKVxuICAgICAgfSxcbiAgICAgIGluZGV4OiBhLnNlZ21lbnQyXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IHtcbiAgICAgIHg6IHJvdW5kKGEueCksXG4gICAgICB5OiByb3VuZChhLnkpXG4gICAgfSxcbiAgICBpbmRleDogYS5zZWdtZW50MlxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIGNvbm5lY3Rpb24gdG93YXJkcyBhIGdpdmVuIHJlZmVyZW5jZSBwb2ludC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICogQHBhcmFtICB7UG9pbnR9IHJlZmVyZW5jZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gaW50ZXJzZWN0aW9uIGRhdGEgKHNlZ21lbnQsIHBvaW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgcmVmZXJlbmNlKSB7XG4gIHJldHVybiBnZXRCZW5kcG9pbnRJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpIHx8IGdldFBhdGhJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpO1xufVxuIiwiLyoqXG4gKiBHZXQgdGhlIGxvZ2FyaXRobSBvZiB4IHdpdGggYmFzZSAxMFxuICogQHBhcmFtICB7SW50ZWdlcn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5sb2coMTApO1xufVxuXG5leHBvcnQgeyBkZWx0YSBhcyBzdWJzdHJhY3QgfSBmcm9tICcuL1Bvc2l0aW9uVXRpbCc7XG4iLCJpbXBvcnQge1xuICBnZXRPcmlnaW5hbCBhcyBnZXRPcmlnaW5hbEV2ZW50XG59IGZyb20gJy4vRXZlbnQnO1xuXG5pbXBvcnQge1xuICBpc01hY1xufSBmcm9tICcuL1BsYXRmb3JtJztcblxuZXhwb3J0IHtcbiAgaXNNYWNcbn0gZnJvbSAnLi9QbGF0Zm9ybSc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWFyeUJ1dHRvbihldmVudCkge1xuXG4gIC8vIGJ1dHRvbiA9PT0gMCAtPiBsZWZ0IMOha2EgcHJpbWFyeSBtb3VzZSBidXR0b25cbiAgcmV0dXJuICEoZ2V0T3JpZ2luYWxFdmVudChldmVudCkgfHwgZXZlbnQpLmJ1dHRvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByaW1hcnlNb2RpZmllcihldmVudCkge1xuICB2YXIgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHx8IGV2ZW50O1xuXG4gIGlmICghaXNQcmltYXJ5QnV0dG9uKGV2ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFVzZSBhbHQgYXMgcHJpbWFyeSBtb2RpZmllciBrZXkgZm9yIG1hYyBPU1xuICBpZiAoaXNNYWMoKSkge1xuICAgIHJldHVybiBvcmlnaW5hbEV2ZW50Lm1ldGFLZXk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsRXZlbnQuY3RybEtleTtcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTZWNvbmRhcnlNb2RpZmllcihldmVudCkge1xuICB2YXIgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHx8IGV2ZW50O1xuXG4gIHJldHVybiBpc1ByaW1hcnlCdXR0b24oZXZlbnQpICYmIG9yaWdpbmFsRXZlbnQuc2hpZnRLZXk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIGlzTWFjKCkge1xuICByZXR1cm4gKC9tYWMvaSkudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xufSIsImV4cG9ydCBmdW5jdGlvbiBjZW50ZXIoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIC8gMiksXG4gICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCAvIDIpXG4gIH07XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbHRhKGEsIGIpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBhLnggLSBiLngsXG4gICAgeTogYS55IC0gYi55XG4gIH07XG59IiwiLyoqXG4gKiBSZW1vdmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgY29sbGVjdGlvbiB1bnRpbCBpdCBpcyBlbXB0eS5cbiAqXG4gKiBUaGlzIGlzIGEgbnVsbC1zYWZlIG9wZXJhdGlvbiB0aGF0IGVuc3VyZXMgZWxlbWVudHNcbiAqIGFyZSBiZWluZyByZW1vdmVkIGZyb20gdGhlIGdpdmVuIGNvbGxlY3Rpb24gdW50aWwgdGhlXG4gKiBjb2xsZWN0aW9uIGlzIGVtcHR5LlxuICpcbiAqIFRoZSBpbXBsZW1lbnRhdGlvbiBkZWFscyB3aXRoIHRoZSBmYWN0IHRoYXQgYSByZW1vdmUgb3BlcmF0aW9uXG4gKiBtYXkgdG91Y2gsIGkuZS4gcmVtb3ZlIG11bHRpcGxlIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uXG4gKiBhdCBhIHRpbWUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBbY29sbGVjdGlvbl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlbW92ZUZuXG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gdGhlIGNsZWFyZWQgY29sbGVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUNsZWFyKGNvbGxlY3Rpb24sIHJlbW92ZUZuKSB7XG5cbiAgaWYgKHR5cGVvZiByZW1vdmVGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVtb3ZlRm4gaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZTtcblxuICB3aGlsZSAoKGUgPSBjb2xsZWN0aW9uWzBdKSkge1xuICAgIHJlbW92ZUZuKGUpO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG4iLCJpbXBvcnQge1xuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb25lbnRzVG9QYXRoKGVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5qb2luKCcsJykucmVwbGFjZSgvLD8oW0Etel0pLD8vZywgJyQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NWR1BvaW50cyhwb2ludHMpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwLCBwOyAocCA9IHBvaW50c1tpXSk7IGkrKykge1xuICAgIHJlc3VsdCArPSBwLnggKyAnLCcgKyBwLnkgKyAnICc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGluZShwb2ludHMsIGF0dHJzKSB7XG5cbiAgdmFyIGxpbmUgPSBzdmdDcmVhdGUoJ3BvbHlsaW5lJyk7XG4gIHN2Z0F0dHIobGluZSwgeyBwb2ludHM6IHRvU1ZHUG9pbnRzKHBvaW50cykgfSk7XG5cbiAgaWYgKGF0dHJzKSB7XG4gICAgc3ZnQXR0cihsaW5lLCBhdHRycyk7XG4gIH1cblxuICByZXR1cm4gbGluZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmUoZ2Z4LCBwb2ludHMpIHtcbiAgc3ZnQXR0cihnZngsIHsgcG9pbnRzOiB0b1NWR1BvaW50cyhwb2ludHMpIH0pO1xuXG4gIHJldHVybiBnZng7XG59XG4iLCJpbXBvcnQge1xyXG4gIHRyYW5zZm9ybSBhcyBzdmdUcmFuc2Zvcm0sXHJcbiAgY3JlYXRlVHJhbnNmb3JtXHJcbn0gZnJvbSAndGlueS1zdmcnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gezxTVkdFbGVtZW50Pn0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcclxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShnZngsIHgsIHksIGFuZ2xlLCBhbW91bnQpIHtcclxuICB2YXIgdHJhbnNsYXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgdHJhbnNsYXRlLnNldFRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgdmFyIHJvdGF0ZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHJvdGF0ZS5zZXRSb3RhdGUoYW5nbGUgfHwgMCwgMCwgMCk7XHJcblxyXG4gIHZhciBzY2FsZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHNjYWxlLnNldFNjYWxlKGFtb3VudCB8fCAxLCBhbW91bnQgfHwgMSk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIFsgdHJhbnNsYXRlLCByb3RhdGUsIHNjYWxlIF0pO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShnZngsIHgsIHkpIHtcclxuICB2YXIgdHJhbnNsYXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgdHJhbnNsYXRlLnNldFRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgc3ZnVHJhbnNmb3JtKGdmeCwgdHJhbnNsYXRlKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKGdmeCwgYW5nbGUpIHtcclxuICB2YXIgcm90YXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgcm90YXRlLnNldFJvdGF0ZShhbmdsZSwgMCwgMCk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIHJvdGF0ZSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShnZngsIGFtb3VudCkge1xyXG4gIHZhciBzY2FsZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHNjYWxlLnNldFNjYWxlKGFtb3VudCwgYW1vdW50KTtcclxuXHJcbiAgc3ZnVHJhbnNmb3JtKGdmeCwgc2NhbGUpO1xyXG59IiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgcmVkdWNlXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIERFRkFVTFRfQk9YX1BBRERJTkcgPSAwO1xuXG52YXIgREVGQVVMVF9MQUJFTF9TSVpFID0ge1xuICB3aWR0aDogMTUwLFxuICBoZWlnaHQ6IDUwXG59O1xuXG5cbmZ1bmN0aW9uIHBhcnNlQWxpZ24oYWxpZ24pIHtcblxuICB2YXIgcGFydHMgPSBhbGlnbi5zcGxpdCgnLScpO1xuXG4gIHJldHVybiB7XG4gICAgaG9yaXpvbnRhbDogcGFydHNbMF0gfHwgJ2NlbnRlcicsXG4gICAgdmVydGljYWw6IHBhcnRzWzFdIHx8ICd0b3AnXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFkZGluZyhwYWRkaW5nKSB7XG5cbiAgaWYgKGlzT2JqZWN0KHBhZGRpbmcpKSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LCBwYWRkaW5nKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBwYWRkaW5nLFxuICAgICAgbGVmdDogcGFkZGluZyxcbiAgICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgICAgYm90dG9tOiBwYWRkaW5nXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUZXh0QkJveCh0ZXh0LCBmYWtlVGV4dCkge1xuXG4gIGZha2VUZXh0LnRleHRDb250ZW50ID0gdGV4dDtcblxuICB2YXIgdGV4dEJCb3g7XG5cbiAgdHJ5IHtcbiAgICB2YXIgYmJveCxcbiAgICAgICAgZW1wdHlMaW5lID0gdGV4dCA9PT0gJyc7XG5cbiAgICAvLyBhZGQgZHVtbXkgdGV4dCwgd2hlbiBsaW5lIGlzIGVtcHR5IHRvXG4gICAgLy8gZGV0ZXJtaW5lIGNvcnJlY3QgaGVpZ2h0XG4gICAgZmFrZVRleHQudGV4dENvbnRlbnQgPSBlbXB0eUxpbmUgPyAnZHVtbXknIDogdGV4dDtcblxuICAgIHRleHRCQm94ID0gZmFrZVRleHQuZ2V0QkJveCgpO1xuXG4gICAgLy8gdGFrZSB0ZXh0IHJlbmRlcmluZyByZWxhdGVkIGhvcml6b250YWxcbiAgICAvLyBwYWRkaW5nIGludG8gYWNjb3VudFxuICAgIGJib3ggPSB7XG4gICAgICB3aWR0aDogdGV4dEJCb3gud2lkdGggKyB0ZXh0QkJveC54ICogMixcbiAgICAgIGhlaWdodDogdGV4dEJCb3guaGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChlbXB0eUxpbmUpIHtcblxuICAgICAgLy8gY29ycmVjdCB3aWR0aFxuICAgICAgYmJveC53aWR0aCA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJib3g7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIExheW91dCB0aGUgbmV4dCBsaW5lIGFuZCByZXR1cm4gdGhlIGxheW91dGVkIGVsZW1lbnQuXG4gKlxuICogQWx0ZXJzIHRoZSBsaW5lcyBwYXNzZWQuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gbGluZXNcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGxpbmUgZGVzY3JpcHRvciwgYW4gb2JqZWN0IHsgd2lkdGgsIGhlaWdodCwgdGV4dCB9XG4gKi9cbmZ1bmN0aW9uIGxheW91dE5leHQobGluZXMsIG1heFdpZHRoLCBmYWtlVGV4dCkge1xuXG4gIHZhciBvcmlnaW5hbExpbmUgPSBsaW5lcy5zaGlmdCgpLFxuICAgICAgZml0TGluZSA9IG9yaWdpbmFsTGluZTtcblxuICB2YXIgdGV4dEJCb3g7XG5cbiAgZm9yICg7Oykge1xuICAgIHRleHRCQm94ID0gZ2V0VGV4dEJCb3goZml0TGluZSwgZmFrZVRleHQpO1xuXG4gICAgdGV4dEJCb3gud2lkdGggPSBmaXRMaW5lID8gdGV4dEJCb3gud2lkdGggOiAwO1xuXG4gICAgLy8gdHJ5IHRvIGZpdFxuICAgIGlmIChmaXRMaW5lID09PSAnICcgfHwgZml0TGluZSA9PT0gJycgfHwgdGV4dEJCb3gud2lkdGggPCBNYXRoLnJvdW5kKG1heFdpZHRoKSB8fCBmaXRMaW5lLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBmaXQobGluZXMsIGZpdExpbmUsIG9yaWdpbmFsTGluZSwgdGV4dEJCb3gpO1xuICAgIH1cblxuICAgIGZpdExpbmUgPSBzaG9ydGVuTGluZShmaXRMaW5lLCB0ZXh0QkJveC53aWR0aCwgbWF4V2lkdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpdChsaW5lcywgZml0TGluZSwgb3JpZ2luYWxMaW5lLCB0ZXh0QkJveCkge1xuICBpZiAoZml0TGluZS5sZW5ndGggPCBvcmlnaW5hbExpbmUubGVuZ3RoKSB7XG4gICAgdmFyIHJlbWFpbmRlciA9IG9yaWdpbmFsTGluZS5zbGljZShmaXRMaW5lLmxlbmd0aCkudHJpbSgpO1xuXG4gICAgbGluZXMudW5zaGlmdChyZW1haW5kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogdGV4dEJCb3gud2lkdGgsXG4gICAgaGVpZ2h0OiB0ZXh0QkJveC5oZWlnaHQsXG4gICAgdGV4dDogZml0TGluZVxuICB9O1xufVxuXG5cbi8qKlxuICogU2hvcnRlbnMgYSBsaW5lIGJhc2VkIG9uIHNwYWNpbmcgYW5kIGh5cGhlbnMuXG4gKiBSZXR1cm5zIHRoZSBzaG9ydGVuZWQgcmVzdWx0IG9uIHN1Y2Nlc3MuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBsaW5lXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heExlbmd0aCB0aGUgbWF4aW11bSBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHNob3J0ZW5lZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc2VtYW50aWNTaG9ydGVuKGxpbmUsIG1heExlbmd0aCkge1xuICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KC8oXFxzfC0pL2cpLFxuICAgICAgcGFydCxcbiAgICAgIHNob3J0ZW5lZFBhcnRzID0gW10sXG4gICAgICBsZW5ndGggPSAwO1xuXG4gIC8vIHRyeSB0byBzaG9ydGVuIHZpYSBzcGFjZXMgKyBoeXBoZW5zXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgd2hpbGUgKChwYXJ0ID0gcGFydHMuc2hpZnQoKSkpIHtcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCArIGxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgICAgICBzaG9ydGVuZWRQYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICBsZW5ndGggKz0gcGFydC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBwYXJ0LCB0b28gaWYgaHlwaGVuIGRvZXMgbm90IGZpdCBhbnltb3JlXG4gICAgICAgIGlmIChwYXJ0ID09PSAnLScpIHtcbiAgICAgICAgICBzaG9ydGVuZWRQYXJ0cy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydGVuZWRQYXJ0cy5qb2luKCcnKTtcbn1cblxuXG5mdW5jdGlvbiBzaG9ydGVuTGluZShsaW5lLCB3aWR0aCwgbWF4V2lkdGgpIHtcbiAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGxpbmUubGVuZ3RoICogKG1heFdpZHRoIC8gd2lkdGgpLCAxKTtcblxuICAvLyB0cnkgdG8gc2hvcnRlbiBzZW1hbnRpY2FsbHkgKGkuZS4gYmFzZWQgb24gc3BhY2VzIGFuZCBoeXBoZW5zKVxuICB2YXIgc2hvcnRlbmVkTGluZSA9IHNlbWFudGljU2hvcnRlbihsaW5lLCBsZW5ndGgpO1xuXG4gIGlmICghc2hvcnRlbmVkTGluZSkge1xuXG4gICAgLy8gZm9yY2Ugc2hvcnRlbiBieSBjdXR0aW5nIHRoZSBsb25nIHdvcmRcbiAgICBzaG9ydGVuZWRMaW5lID0gbGluZS5zbGljZSgwLCBNYXRoLm1heChNYXRoLnJvdW5kKGxlbmd0aCAtIDEpLCAxKSk7XG4gIH1cblxuICByZXR1cm4gc2hvcnRlbmVkTGluZTtcbn1cblxuXG5mdW5jdGlvbiBnZXRIZWxwZXJTdmcoKSB7XG4gIHZhciBoZWxwZXJTdmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscGVyLXN2ZycpO1xuXG4gIGlmICghaGVscGVyU3ZnKSB7XG4gICAgaGVscGVyU3ZnID0gc3ZnQ3JlYXRlKCdzdmcnKTtcblxuICAgIHN2Z0F0dHIoaGVscGVyU3ZnLCB7XG4gICAgICBpZDogJ2hlbHBlci1zdmcnLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBzdHlsZTogJ3Zpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkJ1xuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoZWxwZXJTdmcpO1xuICB9XG5cbiAgcmV0dXJuIGhlbHBlclN2Zztcbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbGFiZWwgdXRpbGl0eVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RGltZW5zaW9uc30gY29uZmlnLnNpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb25maWcucGFkZGluZ1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZy5zdHlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5hbGlnblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXh0KGNvbmZpZykge1xuXG4gIHRoaXMuX2NvbmZpZyA9IGFzc2lnbih7fSwge1xuICAgIHNpemU6IERFRkFVTFRfTEFCRUxfU0laRSxcbiAgICBwYWRkaW5nOiBERUZBVUxUX0JPWF9QQURESU5HLFxuICAgIHN0eWxlOiB7fSxcbiAgICBhbGlnbjogJ2NlbnRlci10b3AnXG4gIH0sIGNvbmZpZyB8fCB7fSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGF5b3V0ZWQgdGV4dCBhcyBhbiBTVkcgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICovXG5UZXh0LnByb3RvdHlwZS5jcmVhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICByZXR1cm4gdGhpcy5sYXlvdXRUZXh0KHRleHQsIG9wdGlvbnMpLmVsZW1lbnQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBsYWJlbHMgbGF5b3V0ZWQgZGltZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCB0byBsYXlvdXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7RGltZW5zaW9uc31cbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0RGltZW5zaW9ucyA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMubGF5b3V0VGV4dCh0ZXh0LCBvcHRpb25zKS5kaW1lbnNpb25zO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbGFiZWwgYW5kIGl0cyBib3VuZGluZyBib3guXG4gKlxuICogQG1ldGhvZCBUZXh0I2NyZWF0ZVRleHRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCB0aGUgdGV4dCB0byByZW5kZXIgb24gdGhlIGxhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuYWxpZ24gaG93IHRvIGFsaWduIGluIHRoZSBib3VuZGluZyBib3guXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgb2YgeyAnY2VudGVyLW1pZGRsZScsICdjZW50ZXItdG9wJyB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gJ2NlbnRlci10b3AnLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuc3R5bGUgc3R5bGUgdG8gYmUgYXBwbGllZCB0byB0aGUgdGV4dFxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmZpdEJveCBpbmRpY2F0ZXMgaWYgYm94IHdpbGwgYmUgcmVjYWxjdWxhdGVkIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdCB0ZXh0XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB7IGVsZW1lbnQsIGRpbWVuc2lvbnMgfVxuICovXG5UZXh0LnByb3RvdHlwZS5sYXlvdXRUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICB2YXIgYm94ID0gYXNzaWduKHt9LCB0aGlzLl9jb25maWcuc2l6ZSwgb3B0aW9ucy5ib3gpLFxuICAgICAgc3R5bGUgPSBhc3NpZ24oe30sIHRoaXMuX2NvbmZpZy5zdHlsZSwgb3B0aW9ucy5zdHlsZSksXG4gICAgICBhbGlnbiA9IHBhcnNlQWxpZ24ob3B0aW9ucy5hbGlnbiB8fCB0aGlzLl9jb25maWcuYWxpZ24pLFxuICAgICAgcGFkZGluZyA9IHBhcnNlUGFkZGluZyhvcHRpb25zLnBhZGRpbmcgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMucGFkZGluZyA6IHRoaXMuX2NvbmZpZy5wYWRkaW5nKSxcbiAgICAgIGZpdEJveCA9IG9wdGlvbnMuZml0Qm94IHx8IGZhbHNlO1xuXG4gIHZhciBsaW5lSGVpZ2h0ID0gZ2V0TGluZUhlaWdodChzdHlsZSk7XG5cbiAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgvXFxyP1xcbi9nKSxcbiAgICAgIGxheW91dGVkID0gW107XG5cbiAgdmFyIG1heFdpZHRoID0gYm94LndpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcblxuICAvLyBlbnN1cmUgY29ycmVjdCByZW5kZXJpbmcgYnkgYXR0YWNoaW5nIGhlbHBlciB0ZXh0IG5vZGUgdG8gaW52aXNpYmxlIFNWR1xuICB2YXIgaGVscGVyVGV4dCA9IHN2Z0NyZWF0ZSgndGV4dCcpO1xuICBzdmdBdHRyKGhlbHBlclRleHQsIHsgeDogMCwgeTogMCB9KTtcbiAgc3ZnQXR0cihoZWxwZXJUZXh0LCBzdHlsZSk7XG5cbiAgdmFyIGhlbHBlclN2ZyA9IGdldEhlbHBlclN2ZygpO1xuXG4gIHN2Z0FwcGVuZChoZWxwZXJTdmcsIGhlbHBlclRleHQpO1xuXG4gIHdoaWxlIChsaW5lcy5sZW5ndGgpIHtcbiAgICBsYXlvdXRlZC5wdXNoKGxheW91dE5leHQobGluZXMsIG1heFdpZHRoLCBoZWxwZXJUZXh0KSk7XG4gIH1cblxuICBpZiAoYWxpZ24udmVydGljYWwgPT09ICdtaWRkbGUnKSB7XG4gICAgcGFkZGluZy50b3AgPSBwYWRkaW5nLmJvdHRvbSA9IDA7XG4gIH1cblxuICB2YXIgdG90YWxIZWlnaHQgPSByZWR1Y2UobGF5b3V0ZWQsIGZ1bmN0aW9uKHN1bSwgbGluZSwgaWR4KSB7XG4gICAgcmV0dXJuIHN1bSArIChsaW5lSGVpZ2h0IHx8IGxpbmUuaGVpZ2h0KTtcbiAgfSwgMCkgKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuXG4gIHZhciBtYXhMaW5lV2lkdGggPSByZWR1Y2UobGF5b3V0ZWQsIGZ1bmN0aW9uKHN1bSwgbGluZSwgaWR4KSB7XG4gICAgcmV0dXJuIGxpbmUud2lkdGggPiBzdW0gPyBsaW5lLndpZHRoIDogc3VtO1xuICB9LCAwKTtcblxuICAvLyB0aGUgeSBwb3NpdGlvbiBvZiB0aGUgbmV4dCBsaW5lXG4gIHZhciB5ID0gcGFkZGluZy50b3A7XG5cbiAgaWYgKGFsaWduLnZlcnRpY2FsID09PSAnbWlkZGxlJykge1xuICAgIHkgKz0gKGJveC5oZWlnaHQgLSB0b3RhbEhlaWdodCkgLyAyO1xuICB9XG5cbiAgLy8gbWFnaWMgbnVtYmVyIGluaXRpYWwgb2Zmc2V0XG4gIHkgLT0gKGxpbmVIZWlnaHQgfHwgbGF5b3V0ZWRbMF0uaGVpZ2h0KSAvIDQ7XG5cblxuICB2YXIgdGV4dEVsZW1lbnQgPSBzdmdDcmVhdGUoJ3RleHQnKTtcblxuICBzdmdBdHRyKHRleHRFbGVtZW50LCBzdHlsZSk7XG5cbiAgLy8gbGF5b3V0IGVhY2ggbGluZSB0YWtpbmcgaW50byBhY2NvdW50IHRoYXQgcGFyZW50XG4gIC8vIHNoYXBlIG1pZ2h0IHJlc2l6ZSB0byBmaXQgdGV4dCBzaXplXG4gIGZvckVhY2gobGF5b3V0ZWQsIGZ1bmN0aW9uKGxpbmUpIHtcblxuICAgIHZhciB4O1xuXG4gICAgeSArPSAobGluZUhlaWdodCB8fCBsaW5lLmhlaWdodCk7XG5cbiAgICBzd2l0Y2ggKGFsaWduLmhvcml6b250YWwpIHtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHggPSBwYWRkaW5nLmxlZnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHggPSAoKGZpdEJveCA/IG1heExpbmVXaWR0aCA6IG1heFdpZHRoKVxuICAgICAgICAtIHBhZGRpbmcucmlnaHQgLSBsaW5lLndpZHRoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcblxuICAgICAgLy8gYWthIGNlbnRlclxuICAgICAgeCA9IE1hdGgubWF4KCgoKGZpdEJveCA/IG1heExpbmVXaWR0aCA6IG1heFdpZHRoKVxuICAgICAgICAtIGxpbmUud2lkdGgpIC8gMiArIHBhZGRpbmcubGVmdCksIDApO1xuICAgIH1cblxuICAgIHZhciB0c3BhbiA9IHN2Z0NyZWF0ZSgndHNwYW4nKTtcbiAgICBzdmdBdHRyKHRzcGFuLCB7IHg6IHgsIHk6IHkgfSk7XG5cbiAgICB0c3Bhbi50ZXh0Q29udGVudCA9IGxpbmUudGV4dDtcblxuICAgIHN2Z0FwcGVuZCh0ZXh0RWxlbWVudCwgdHNwYW4pO1xuICB9KTtcblxuICBzdmdSZW1vdmUoaGVscGVyVGV4dCk7XG5cbiAgdmFyIGRpbWVuc2lvbnMgPSB7XG4gICAgd2lkdGg6IG1heExpbmVXaWR0aCxcbiAgICBoZWlnaHQ6IHRvdGFsSGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBkaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIGVsZW1lbnQ6IHRleHRFbGVtZW50XG4gIH07XG59O1xuXG5cbmZ1bmN0aW9uIGdldExpbmVIZWlnaHQoc3R5bGUpIHtcbiAgaWYgKCdmb250U2l6ZScgaW4gc3R5bGUgJiYgJ2xpbmVIZWlnaHQnIGluIHN0eWxlKSB7XG4gICAgcmV0dXJuIHN0eWxlLmxpbmVIZWlnaHQgKiBwYXJzZUludChzdHlsZS5mb250U2l6ZSwgMTApO1xuICB9XG59IiwiaW1wb3J0IHsgaXNTdHJpbmcsIGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcbmltcG9ydCB7IE1vZGRsZSB9IGZyb20gJ21vZGRsZSc7XG5pbXBvcnQgeyBSZWFkZXIsIFdyaXRlciB9IGZyb20gJ21vZGRsZS14bWwnO1xuXG4vKipcbiAqIEEgc3ViIGNsYXNzIG9mIHtAbGluayBNb2RkbGV9IHdpdGggc3VwcG9ydCBmb3IgaW1wb3J0IGFuZCBleHBvcnQgb2YgQlBNTiAyLjAgeG1sIGZpbGVzLlxuICpcbiAqIEBjbGFzcyBCcG1uTW9kZGxlXG4gKiBAZXh0ZW5kcyBNb2RkbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gcGFja2FnZXMgdG8gdXNlIGZvciBpbnN0YW50aWF0aW5nIHRoZSBtb2RlbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyBvdmVyXG4gKi9cbmZ1bmN0aW9uIEJwbW5Nb2RkbGUocGFja2FnZXMsIG9wdGlvbnMpIHtcbiAgTW9kZGxlLmNhbGwodGhpcywgcGFja2FnZXMsIG9wdGlvbnMpO1xufVxuXG5CcG1uTW9kZGxlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9kZGxlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSByb290RWxlbWVudFxuICogQHByb3BlcnR5IHtBcnJheTxPYmplY3Q+fSByZWZlcmVuY2VzXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbGVtZW50c0J5SWQgLSBhIG1hcHBpbmcgY29udGFpbmluZyBlYWNoIElEIC0+IE1vZGRsZUVsZW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBmcm9tWE1MIGVycm9yLlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogSW5zdGFudGlhdGVzIGEgQlBNTiBtb2RlbCB0cmVlIGZyb20gYSBnaXZlbiB4bWwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIHhtbFN0clxuICogQHBhcmFtIHtTdHJpbmd9ICAgW3R5cGVOYW1lPSdicG1uOkRlZmluaXRpb25zJ10gbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyByZWFkZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cbkJwbW5Nb2RkbGUucHJvdG90eXBlLmZyb21YTUwgPSBmdW5jdGlvbih4bWxTdHIsIHR5cGVOYW1lLCBvcHRpb25zKSB7XG5cbiAgaWYgKCFpc1N0cmluZyh0eXBlTmFtZSkpIHtcbiAgICBvcHRpb25zID0gdHlwZU5hbWU7XG4gICAgdHlwZU5hbWUgPSAnYnBtbjpEZWZpbml0aW9ucyc7XG4gIH1cblxuICB2YXIgcmVhZGVyID0gbmV3IFJlYWRlcihhc3NpZ24oeyBtb2RlbDogdGhpcywgbGF4OiB0cnVlIH0sIG9wdGlvbnMpKTtcbiAgdmFyIHJvb3RIYW5kbGVyID0gcmVhZGVyLmhhbmRsZXIodHlwZU5hbWUpO1xuXG4gIHJldHVybiByZWFkZXIuZnJvbVhNTCh4bWxTdHIsIHJvb3RIYW5kbGVyKTtcbn07XG5cblxuLyoqXG4gKiBUaGUgdG9YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6YXRpb25SZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge1N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgQlBNTiAyLjAgb2JqZWN0IHRyZWUgdG8gWE1MLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIGVsZW1lbnQgICAgdGhlIHJvb3QgZWxlbWVudCwgdHlwaWNhbGx5IGFuIGluc3RhbmNlIG9mIGBicG1uOkRlZmluaXRpb25zYFxuICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdICB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nIHdyaXRlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlcmlhbGl6YXRpb25SZXN1bHQsIEVycm9yPn1cbiAqL1xuQnBtbk1vZGRsZS5wcm90b3R5cGUudG9YTUwgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XG5cbiAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIob3B0aW9ucyk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgcmVzdWx0ID0gd3JpdGVyLnRvWE1MKGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgIHhtbDogcmVzdWx0XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIG5hbWUgPSBcIkJQTU4yMFwiO1xudmFyIHVyaSA9IFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiO1xudmFyIHByZWZpeCA9IFwiYnBtblwiO1xudmFyIGFzc29jaWF0aW9ucyA9IFtcbl07XG52YXIgdHlwZXMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkludGVyZmFjZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uUmVmXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiT3BlcmF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5NZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRNZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlcnJvclJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkVycm9yXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25SZWZcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFbmRQb2ludFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXVkaXRpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNhbGxhYmxlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTW9uaXRvcmluZ1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUGVyZm9ybWVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSZXNvdXJjZVJvbGVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUHJvY2Vzc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXG5cdFx0XHRcIkNhbGxhYmxlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvY2Vzc1R5cGVcIixcblx0XHRcdFx0dHlwZTogXCJQcm9jZXNzVHlwZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDbG9zZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhdWRpdGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkF1ZGl0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1vbml0b3JpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVTZXRzXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0cmVwbGFjZXM6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyI2xhbmVTZXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVNldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZsb3dFbGVtZW50c1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHJlcGxhY2VzOiBcIkZsb3dFbGVtZW50c0NvbnRhaW5lciNmbG93RWxlbWVudHNcIixcblx0XHRcdFx0dHlwZTogXCJGbG93RWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFydGlmYWN0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFydGlmYWN0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvdXJjZXNcIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZVJvbGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdXBwb3J0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb2Nlc3NcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZpbml0aW9uYWxDb2xsYWJvcmF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzRXhlY3V0YWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYW5lU2V0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZXNcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTGFuZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpdGlvbkVsZW1lbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpdGlvbkVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZsb3dOb2RlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd05vZGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjaGlsZExhbmVTZXRcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lU2V0XCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbE1hbnVhbFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdsb2JhbFRhc2tcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWFudWFsVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJVc2VyVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbmRlcmluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZW5kZXJpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkh1bWFuUGVyZm9ybWVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJQZXJmb3JtZXJcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUG90ZW50aWFsT3duZXJcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkh1bWFuUGVyZm9ybWVyXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbFVzZXJUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHbG9iYWxUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbmRlcmluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdhdGV3YXlcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImdhdGV3YXlEaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJHYXRld2F5RGlyZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIlVuc3BlY2lmaWVkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRCYXNlZEdhdGV3YXlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdhdGV3YXlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluc3RhbnRpYXRlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJldmVudEdhdGV3YXlUeXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnRCYXNlZEdhdGV3YXlUeXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiRXhjbHVzaXZlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbXBsZXhHYXRld2F5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHYXRld2F5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhY3RpdmF0aW9uQ29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRlZmF1bHRcIixcblx0XHRcdFx0dHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXhjbHVzaXZlR2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmYXVsdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbmNsdXNpdmVHYXRld2F5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHYXRld2F5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcmFsbGVsR2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSb290RWxlbWVudFwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZWxhdGlvbnNoaXBcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJSZWxhdGlvbnNoaXBEaXJlY3Rpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJhc2VFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0lkOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRvY3VtZW50YXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25EZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25FbGVtZW50c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkVsZW1lbnRzXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4dGVuc2lvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtdXN0VW5kZXJzdGFuZFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmaW5pdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzUmVmZXJlbmNlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25EZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHRlbnNpb25FbGVtZW50c1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZVJlZlwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZXNcIixcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGV4dFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0JvZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGV4dEZvcm1hdFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIixcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDYXRjaEV2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkludGVybWVkaWF0ZVRocm93RXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRocm93RXZlbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRW5kRXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRocm93RXZlbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3RhcnRFdmVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2F0Y2hFdmVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNJbnRlcnJ1cHRpbmdcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWUsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRocm93RXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFJbnB1dHNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFJbnB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhdGNoRXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcmFsbGVsTXVsdGlwbGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPdXRwdXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJvdW5kYXJ5RXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNhdGNoRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmNlbEFjdGl2aXR5XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiB0cnVlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImF0dGFjaGVkVG9SZWZcIixcblx0XHRcdFx0dHlwZTogXCJBY3Rpdml0eVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FuY2VsRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXJyb3JFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXJyb3JSZWZcIixcblx0XHRcdFx0dHlwZTogXCJFcnJvclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUZXJtaW5hdGVFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImVzY2FsYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJFc2NhbGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVzY2FsYXRpb25cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlc2NhbGF0aW9uQ29kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3YWl0Rm9yQ29tcGxldGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhY3Rpdml0eVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkFjdGl2aXR5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRpbWVEYXRlXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRpbWVDeWNsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0aW1lRHVyYXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiTGlua0V2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZUV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk9wZXJhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb25kaXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzaWduYWxSZWZcIixcblx0XHRcdFx0dHlwZTogXCJTaWduYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2lnbmFsXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUaHJvd0V2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFTdGF0ZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXRlbVN1YmplY3RSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFTdGF0ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFTdGF0ZVwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhQXNzb2NpYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0cmFuc2Zvcm1hdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhc3NpZ25tZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiQXNzaWdubWVudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFJbnB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFdpdGhPcHRpb25hbFwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFdpdGhXaGlsZUV4ZWN1dGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXRTZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFdpdGhPcHRpb25hbFwiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0V2l0aFdoaWxlRXhlY3V0aW5nXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW5wdXRTZXRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YUlucHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3B0aW9uYWxJbnB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3aGlsZUV4ZWN1dGluZ0lucHV0UmVmc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcHRpb25hbE91dHB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwid2hpbGVFeGVjdXRpbmdPdXRwdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQcm9wZXJ0eVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJEYXRhQXNzb2NpYXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU91dHB1dEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJEYXRhQXNzb2NpYXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW5wdXRPdXRwdXRTcGVjaWZpY2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YUlucHV0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dHNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldHNcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFPYmplY3RcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCIsXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIklucHV0T3V0cHV0QmluZGluZ1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dERhdGFSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dERhdGFSZWZcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXNzaWdubWVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZyb21cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidG9cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFTdG9yZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIixcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY2FwYWNpdHlcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1VubGltaXRlZFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YVN0b3JlUmVmZXJlbmNlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhU3RvcmVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhU3RvcmVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU9iamVjdFJlZmVyZW5jZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XCJGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU9iamVjdFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPYmplY3RcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb252ZXJzYXRpb25Bc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlubmVyQ29udmVyc2F0aW9uTm9kZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbk5vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRlckNvbnZlcnNhdGlvbk5vZGVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxDb252ZXJzYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNvbnZlcnNhdGlvbk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZENvbGxhYm9yYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb2xsYWJvcmF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDb252ZXJzYXRpb25Ob2RlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YkNvbnZlcnNhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29udmVyc2F0aW9uTm9kZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29udmVyc2F0aW9uTm9kZXNcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlRmxvd1JlZnNcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uS2V5c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQ29udmVyc2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDb2xsYWJvcmF0aW9uXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRuZXJFbnRpdHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRuZXJSb2xlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5UmV0cmlldmFsRXhwcmVzc2lvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidHlwZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVycm9yXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlcnJvckNvZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4cHJlc3Npb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdGlzQWJzdHJhY3Q6IGZhbHNlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib2R5XCIsXG5cdFx0XHRcdGlzQm9keTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRm9ybWFsRXhwcmVzc2lvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXhwcmVzc2lvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZ3VhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2YWx1YXRlc1RvVHlwZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpdGVtUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpdGVtS2luZFwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1LaW5kXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdHJ1Y3R1cmVSZWZcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wb3J0XCIsXG5cdFx0XHRcdHR5cGU6IFwiSW1wb3J0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZsb3dFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhdWRpdGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkF1ZGl0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1vbml0b3JpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYXRlZ29yeVZhbHVlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0ltbWVkaWF0ZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbmRpdGlvbkV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd05vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJGbG93Tm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJGbG93RWxlbWVudHNDb250YWluZXJcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVTZXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZmxvd0VsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYWxsYWJsZUVsZW1lbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlvU3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwicHJvcGVydHlcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN1cHBvcnRlZEludGVyZmFjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyZmFjZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlvQmluZGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0T3V0cHV0QmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZsb3dOb2RlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbmNvbWluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGdvaW5nXCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZXNcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUGF0aFwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFQYXRoXCIsXG5cdFx0XHRcdHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlc291cmNlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VQYXJhbWV0ZXJzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZVBhcmFtZXRlclwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzUmVxdWlyZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25TdWJzY3JpcHRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvbktleVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VGbG93XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlubmVyTWVzc2FnZUZsb3dSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGVyTWVzc2FnZUZsb3dSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbmNvbWluZ0NvbnZlcnNhdGlvbkxpbmtzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0Z29pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnRlcmZhY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnRlcmZhY2VcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50TXVsdGlwbGljaXR5XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZW5kUG9pbnRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRW5kUG9pbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9jZXNzUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvY2Vzc1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5uZXJQYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0ZXJQYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRpY2lwYW50TXVsdGlwbGljaXR5XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1pbmltdW1cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IDAsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWF4aW11bVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb2xsYWJvcmF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDbG9zZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudHNcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZUZsb3dzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFydGlmYWN0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFydGlmYWN0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb252ZXJzYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29udmVyc2F0aW9uQXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uQXNzb2NpYXRpb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VGbG93QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25LZXlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNob3Jlb2dyYXBoeVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbnZlcnNhdGlvbkxpbmtzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5pdGlhdGluZ1BhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvbktleXNcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcFR5cGVcIixcblx0XHRcdFx0dHlwZTogXCJDaG9yZW9ncmFwaHlMb29wVHlwZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJOb25lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FsbENob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZENob3Jlb2dyYXBoeVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YkNob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIixcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeVRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlRmxvd1JlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VGbG93XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdFx0XCJGbG93RWxlbWVudHNDb250YWluZXJcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQ2hvcmVvZ3JhcGh5VGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbml0aWF0aW5nUGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUZXh0QW5ub3RhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQXJ0aWZhY3RcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRleHRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0ZXh0Rm9ybWF0XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcInRleHQvcGxhaW5cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHcm91cFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQXJ0aWZhY3RcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3J5VmFsdWVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDYXRlZ29yeVZhbHVlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBcnRpZmFjdFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXNzb2NpYXRpb25EaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJBc3NvY2lhdGlvbkRpcmVjdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYXRlZ29yeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3J5VmFsdWVcIixcblx0XHRcdFx0dHlwZTogXCJDYXRlZ29yeVZhbHVlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXJ0aWZhY3RcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3JpemVkRmxvd0VsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQWN0aXZpdHlcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzRm9yQ29tcGVuc2F0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW9TcGVjaWZpY2F0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRPdXRwdXRTcGVjaWZpY2F0aW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm91bmRhcnlFdmVudFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJCb3VuZGFyeUV2ZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvcGVydGllc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RhcnRRdWFudGl0eVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvdXJjZXNcIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZVJvbGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbXBsZXRpb25RdWFudGl0eVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTG9vcENoYXJhY3RlcmlzdGljc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTZXJ2aWNlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk9wZXJhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdWJQcm9jZXNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBY3Rpdml0eVwiLFxuXHRcdFx0XCJGbG93RWxlbWVudHNDb250YWluZXJcIixcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0cmlnZ2VyZWRCeUV2ZW50XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzU2VxdWVudGlhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYmVoYXZpb3JcIixcblx0XHRcdFx0dHlwZTogXCJNdWx0aUluc3RhbmNlQmVoYXZpb3JcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiQWxsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ2FyZGluYWxpdHlcIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcERhdGFJbnB1dFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1Bd2FyZUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcERhdGFPdXRwdXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlucHV0RGF0YUl0ZW1cIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXREYXRhSXRlbVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRcIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29tcGxleEJlaGF2aW9yRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29tcGxldGlvbkNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvbmVCZWhhdmlvckV2ZW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibm9uZUJlaGF2aW9yRXZlbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3RhbmRhcmRMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0ZXN0QmVmb3JlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvb3BNYXhpbXVtXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZWdlclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxBY3Rpdml0eVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQWN0aXZpdHlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZEVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBY3Rpdml0eVwiLFxuXHRcdFx0XCJJbnRlcmFjdGlvbk5vZGVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2VuZFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRhc2tcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZWNlaXZlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluc3RhbnRpYXRlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTY3JpcHRUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzY3JpcHRGb3JtYXRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNjcmlwdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCdXNpbmVzc1J1bGVUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFkSG9jU3ViUHJvY2Vzc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiU3ViUHJvY2Vzc1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29tcGxldGlvbkNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcmRlcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFkSG9jT3JkZXJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmNlbFJlbWFpbmluZ0luc3RhbmNlc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVHJhbnNhY3Rpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlN1YlByb2Nlc3NcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb3RvY29sXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXRob2RcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHbG9iYWxTY3JpcHRUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHbG9iYWxUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzY3JpcHRMYW5ndWFnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2NyaXB0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQnVzaW5lc3NSdWxlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2xvYmFsVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2ZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlc291cmNlUm9sZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlUGFyYW1ldGVyQmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlQXNzaWdubWVudEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFyYW1ldGVyUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW1wb3J0XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcG9ydFR5cGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvY2F0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lc3BhY2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEZWZpbml0aW9uc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldE5hbWVzcGFjZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXhwcmVzc2lvbkxhbmd1YWdlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFBhdGhcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVMYW5ndWFnZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wb3J0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkltcG9ydFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicm9vdEVsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUm9vdEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRpYWdyYW1zXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJicG1uZGk6QlBNTkRpYWdyYW1cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHBvcnRlclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVsYXRpb25zaGlwc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbGF0aW9uc2hpcFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXhwb3J0ZXJWZXJzaW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciBlbnVtZXJhdGlvbnMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIlByb2Nlc3NUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQdWJsaWNcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQcml2YXRlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdhdGV3YXlEaXJlY3Rpb25cIixcblx0XHRsaXRlcmFsVmFsdWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiVW5zcGVjaWZpZWRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJDb252ZXJnaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRGl2ZXJnaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTWl4ZWRcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRCYXNlZEdhdGV3YXlUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlBhcmFsbGVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRXhjbHVzaXZlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRm9yd2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkJhY2t3YXJkXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQm90aFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJdGVtS2luZFwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQaHlzaWNhbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkluZm9ybWF0aW9uXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeUxvb3BUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJTdGFuZGFyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VTZXF1ZW50aWFsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTXVsdGlJbnN0YW5jZVBhcmFsbGVsXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJPbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJCb3RoXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VCZWhhdmlvclwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiT25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQWxsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQ29tcGxleFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJBZEhvY09yZGVyaW5nXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlBhcmFsbGVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiU2VxdWVudGlhbFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIHhtbCA9IHtcblx0dGFnQWxpYXM6IFwibG93ZXJDYXNlXCIsXG5cdHR5cGVQcmVmaXg6IFwidFwiXG59O1xudmFyIEJwbW5QYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lLFxuXHR1cmk6IHVyaSxcblx0cHJlZml4OiBwcmVmaXgsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zLFxuXHR0eXBlczogdHlwZXMsXG5cdGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zLFxuXHR4bWw6IHhtbFxufTtcblxudmFyIG5hbWUkMSA9IFwiQlBNTkRJXCI7XG52YXIgdXJpJDEgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvRElcIjtcbnZhciBwcmVmaXgkMSA9IFwiYnBtbmRpXCI7XG52YXIgdHlwZXMkMSA9IFtcblx0e1xuXHRcdG5hbWU6IFwiQlBNTkRpYWdyYW1cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGxhbmVcIixcblx0XHRcdFx0dHlwZTogXCJCUE1OUGxhbmVcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkRpYWdyYW0jcm9vdEVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsYWJlbFN0eWxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsU3R5bGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOkRpYWdyYW1cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQlBNTlBsYW5lXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJwbW5FbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjbW9kZWxFbGVtZW50XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6UGxhbmVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQlBNTlNoYXBlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJwbW5FbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjbW9kZWxFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNIb3Jpem9udGFsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNFeHBhbmRlZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzTWFya2VyVmlzaWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNNZXNzYWdlVmlzaWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50QmFuZEtpbmRcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudEJhbmRLaW5kXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjaG9yZW9ncmFwaHlBY3Rpdml0eVNoYXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTlNoYXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6TGFiZWxlZFNoYXBlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5FZGdlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYnBtbkVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJicG1uOkJhc2VFbGVtZW50XCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VFbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiZGk6RGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkVkZ2Ujc291cmNlXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0RWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcImRpOkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpFZGdlI3RhcmdldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcImluaXRpYXRpbmdcIlxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJkaTpMYWJlbGVkRWRnZVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCUE1OTGFiZWxcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFiZWxTdHlsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNzdHlsZVwiXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOkxhYmVsXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZvbnRcIixcblx0XHRcdFx0dHlwZTogXCJkYzpGb250XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6U3R5bGVcIlxuXHRcdF1cblx0fVxuXTtcbnZhciBlbnVtZXJhdGlvbnMkMSA9IFtcblx0e1xuXHRcdG5hbWU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0b3BfaW5pdGlhdGluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1pZGRsZV9pbml0aWF0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm90dG9tX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0b3Bfbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtaWRkbGVfbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib3R0b21fbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZVZpc2libGVLaW5kXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJub25faW5pdGlhdGluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQxID0gW1xuXTtcbnZhciBCcG1uRGlQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDEsXG5cdHVyaTogdXJpJDEsXG5cdHByZWZpeDogcHJlZml4JDEsXG5cdHR5cGVzOiB0eXBlcyQxLFxuXHRlbnVtZXJhdGlvbnM6IGVudW1lcmF0aW9ucyQxLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQxXG59O1xuXG52YXIgbmFtZSQyID0gXCJEQ1wiO1xudmFyIHVyaSQyID0gXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiO1xudmFyIHByZWZpeCQyID0gXCJkY1wiO1xudmFyIHR5cGVzJDIgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkJvb2xlYW5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlZ2VyXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVhbFwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN0cmluZ1wiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZvbnRcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2l6ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQm9sZFwiLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzSXRhbGljXCIsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNVbmRlcmxpbmVcIixcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1N0cmlrZVRocm91Z2hcIixcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUG9pbnRcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieVwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJvdW5kc1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ4XCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIwXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ5XCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIwXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3aWR0aFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImhlaWdodFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQyID0gW1xuXTtcbnZhciBEY1BhY2thZ2UgPSB7XG5cdG5hbWU6IG5hbWUkMixcblx0dXJpOiB1cmkkMixcblx0cHJlZml4OiBwcmVmaXgkMixcblx0dHlwZXM6IHR5cGVzJDIsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDJcbn07XG5cbnZhciBuYW1lJDMgPSBcIkRJXCI7XG52YXIgdXJpJDMgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXCI7XG52YXIgcHJlZml4JDMgPSBcImRpXCI7XG52YXIgdHlwZXMkMyA9IFtcblx0e1xuXHRcdG5hbWU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzSWQ6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3duaW5nRGlhZ3JhbVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1cIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25pbmdFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtb2RlbEVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3R5bGVcIixcblx0XHRcdFx0dHlwZTogXCJTdHlsZVwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm93bmVkRWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJOb2RlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkRpYWdyYW1FbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVkZ2VcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRGlhZ3JhbUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3YXlwb2ludFwiLFxuXHRcdFx0XHRpc1VuaXF1ZTogZmFsc2UsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJkYzpQb2ludFwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEaWFncmFtXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc0lkOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJvb3RFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRvY3VtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc29sdXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZFN0eWxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3R5bGVcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNoYXBlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdW5kc1wiLFxuXHRcdFx0XHR0eXBlOiBcImRjOkJvdW5kc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQbGFuZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwbGFuZUVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJEaWFncmFtRWxlbWVudFwiLFxuXHRcdFx0XHRzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYWJlbGVkRWRnZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFZGdlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZExhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFiZWxcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0c3Vic2V0dGVkUHJvcGVydHk6IFwiRGlhZ3JhbUVsZW1lbnQtb3duZWRFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYWJlbGVkU2hhcGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiU2hhcGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm93bmVkTGFiZWxcIixcblx0XHRcdFx0dHlwZTogXCJMYWJlbFwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxhYmVsXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdW5kc1wiLFxuXHRcdFx0XHR0eXBlOiBcImRjOkJvdW5kc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdHlsZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNJZDogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlc1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiRWxlbWVudFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQzID0gW1xuXTtcbnZhciB4bWwkMSA9IHtcblx0dGFnQWxpYXM6IFwibG93ZXJDYXNlXCJcbn07XG52YXIgRGlQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDMsXG5cdHVyaTogdXJpJDMsXG5cdHByZWZpeDogcHJlZml4JDMsXG5cdHR5cGVzOiB0eXBlcyQzLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQzLFxuXHR4bWw6IHhtbCQxXG59O1xuXG52YXIgbmFtZSQ0ID0gXCJicG1uLmlvIGNvbG9ycyBmb3IgQlBNTlwiO1xudmFyIHVyaSQ0ID0gXCJodHRwOi8vYnBtbi5pby9zY2hlbWEvYnBtbi9iaW9jb2xvci8xLjBcIjtcbnZhciBwcmVmaXgkNCA9IFwiYmlvY1wiO1xudmFyIHR5cGVzJDQgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkNvbG9yZWRTaGFwZVwiLFxuXHRcdFwiZXh0ZW5kc1wiOiBbXG5cdFx0XHRcImJwbW5kaTpCUE1OU2hhcGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0cm9rZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZmlsbFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbG9yZWRFZGdlXCIsXG5cdFx0XCJleHRlbmRzXCI6IFtcblx0XHRcdFwiYnBtbmRpOkJQTU5FZGdlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdHJva2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZpbGxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGVudW1lcmF0aW9ucyQyID0gW1xuXTtcbnZhciBhc3NvY2lhdGlvbnMkNCA9IFtcbl07XG52YXIgQmlvY1BhY2thZ2UgPSB7XG5cdG5hbWU6IG5hbWUkNCxcblx0dXJpOiB1cmkkNCxcblx0cHJlZml4OiBwcmVmaXgkNCxcblx0dHlwZXM6IHR5cGVzJDQsXG5cdGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDIsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDRcbn07XG5cbnZhciBwYWNrYWdlcyA9IHtcbiAgYnBtbjogQnBtblBhY2thZ2UsXG4gIGJwbW5kaTogQnBtbkRpUGFja2FnZSxcbiAgZGM6IERjUGFja2FnZSxcbiAgZGk6IERpUGFja2FnZSxcbiAgYmlvYzogQmlvY1BhY2thZ2Vcbn07XG5cbmZ1bmN0aW9uIHNpbXBsZShhZGRpdGlvbmFsUGFja2FnZXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBrcyA9IGFzc2lnbih7fSwgcGFja2FnZXMsIGFkZGl0aW9uYWxQYWNrYWdlcyk7XG5cbiAgcmV0dXJuIG5ldyBCcG1uTW9kZGxlKHBrcywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNpbXBsZTtcbiIsIi8qISBodHRwczovL210aHMuYmUvY3NzZXNjYXBlIHYxLjUuMSBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZC9ibG9iL21hc3Rlci9yZXR1cm5FeHBvcnRzLmpzXG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0Jykge1xuXHRcdC8vIEZvciBOb2RlLmpzLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyb290KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEZvciBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5LmJpbmQocm9vdCwgcm9vdCkpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciBicm93c2VyIGdsb2JhbHMgKG5vdCBleHBvc2luZyB0aGUgZnVuY3Rpb24gc2VwYXJhdGVseSkuXG5cdFx0ZmFjdG9yeShyb290KTtcblx0fVxufSh0eXBlb2YgZ2xvYmFsICE9ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdGhpcywgZnVuY3Rpb24ocm9vdCkge1xuXG5cdGlmIChyb290LkNTUyAmJiByb290LkNTUy5lc2NhcGUpIHtcblx0XHRyZXR1cm4gcm9vdC5DU1MuZXNjYXBlO1xuXHR9XG5cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNzZXJpYWxpemUtYW4taWRlbnRpZmllclxuXHR2YXIgY3NzRXNjYXBlID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgQ1NTLmVzY2FwZWAgcmVxdWlyZXMgYW4gYXJndW1lbnQuJyk7XG5cdFx0fVxuXHRcdHZhciBzdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuXHRcdHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdHZhciBjb2RlVW5pdDtcblx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0dmFyIGZpcnN0Q29kZVVuaXQgPSBzdHJpbmcuY2hhckNvZGVBdCgwKTtcblx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0Y29kZVVuaXQgPSBzdHJpbmcuY2hhckNvZGVBdChpbmRleCk7XG5cdFx0XHQvLyBOb3RlOiB0aGVyZeKAmXMgbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMsIHN1cnJvZ2F0ZVxuXHRcdFx0Ly8gcGFpcnMsIG9yIGxvbmUgc3Vycm9nYXRlcy5cblxuXHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyBOVUxMIChVKzAwMDApLCB0aGVuIHRoZSBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdC8vIChVK0ZGRkQpLlxuXHRcdFx0aWYgKGNvZGVVbml0ID09IDB4MDAwMCkge1xuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcdUZGRkQnO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIGluIHRoZSByYW5nZSBbXFwxLVxcMUZdIChVKzAwMDEgdG8gVSswMDFGKSBvciBpc1xuXHRcdFx0XHQvLyBVKzAwN0YsIFvigKZdXG5cdFx0XHRcdChjb2RlVW5pdCA+PSAweDAwMDEgJiYgY29kZVVuaXQgPD0gMHgwMDFGKSB8fCBjb2RlVW5pdCA9PSAweDAwN0YgfHxcblx0XHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpcyBpbiB0aGUgcmFuZ2UgWzAtOV1cblx0XHRcdFx0Ly8gKFUrMDAzMCB0byBVKzAwMzkpLCBb4oCmXVxuXHRcdFx0XHQoaW5kZXggPT0gMCAmJiBjb2RlVW5pdCA+PSAweDAwMzAgJiYgY29kZVVuaXQgPD0gMHgwMDM5KSB8fFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBzZWNvbmQgY2hhcmFjdGVyIGFuZCBpcyBpbiB0aGUgcmFuZ2UgWzAtOV1cblx0XHRcdFx0Ly8gKFUrMDAzMCB0byBVKzAwMzkpIGFuZCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEgYC1gIChVKzAwMkQpLCBb4oCmXVxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0aW5kZXggPT0gMSAmJlxuXHRcdFx0XHRcdGNvZGVVbml0ID49IDB4MDAzMCAmJiBjb2RlVW5pdCA8PSAweDAwMzkgJiZcblx0XHRcdFx0XHRmaXJzdENvZGVVbml0ID09IDB4MDAyRFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNlc2NhcGUtYS1jaGFyYWN0ZXItYXMtY29kZS1wb2ludFxuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcXFwnICsgY29kZVVuaXQudG9TdHJpbmcoMTYpICsgJyAnO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGlzIGEgYC1gIChVKzAwMkQpLCBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgbm8gc2Vjb25kIGNoYXJhY3RlciwgW+KApl1cblx0XHRcdFx0aW5kZXggPT0gMCAmJlxuXHRcdFx0XHRsZW5ndGggPT0gMSAmJlxuXHRcdFx0XHRjb2RlVW5pdCA9PSAweDAwMkRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcXFwnICsgc3RyaW5nLmNoYXJBdChpbmRleCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIG5vdCBoYW5kbGVkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgcnVsZXMgYW5kIGlzXG5cdFx0XHQvLyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVSswMDgwLCBpcyBgLWAgKFUrMDAyRCkgb3IgYF9gIChVKzAwNUYpLCBvclxuXHRcdFx0Ly8gaXMgaW4gb25lIG9mIHRoZSByYW5nZXMgWzAtOV0gKFUrMDAzMCB0byBVKzAwMzkpLCBbQS1aXSAoVSswMDQxIHRvXG5cdFx0XHQvLyBVKzAwNUEpLCBvciBbYS16XSAoVSswMDYxIHRvIFUrMDA3QSksIFvigKZdXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvZGVVbml0ID49IDB4MDA4MCB8fFxuXHRcdFx0XHRjb2RlVW5pdCA9PSAweDAwMkQgfHxcblx0XHRcdFx0Y29kZVVuaXQgPT0gMHgwMDVGIHx8XG5cdFx0XHRcdGNvZGVVbml0ID49IDB4MDAzMCAmJiBjb2RlVW5pdCA8PSAweDAwMzkgfHxcblx0XHRcdFx0Y29kZVVuaXQgPj0gMHgwMDQxICYmIGNvZGVVbml0IDw9IDB4MDA1QSB8fFxuXHRcdFx0XHRjb2RlVW5pdCA+PSAweDAwNjEgJiYgY29kZVVuaXQgPD0gMHgwMDdBXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gdGhlIGNoYXJhY3RlciBpdHNlbGZcblx0XHRcdFx0cmVzdWx0ICs9IHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG5cdFx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2VzY2FwZS1hLWNoYXJhY3RlclxuXHRcdFx0cmVzdWx0ICs9ICdcXFxcJyArIHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0aWYgKCFyb290LkNTUykge1xuXHRcdHJvb3QuQ1NTID0ge307XG5cdH1cblxuXHRyb290LkNTUy5lc2NhcGUgPSBjc3NFc2NhcGU7XG5cdHJldHVybiBjc3NFc2NhcGU7XG5cbn0pKTtcbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMnO1xuXG5pbXBvcnQgRGlyZWN0RWRpdGluZyBmcm9tICcuL2xpYi9EaXJlY3RFZGl0aW5nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdkaXJlY3RFZGl0aW5nJyBdLFxuICBkaXJlY3RFZGl0aW5nOiBbICd0eXBlJywgRGlyZWN0RWRpdGluZyBdXG59OyIsImltcG9ydCB7XG4gIGJpbmQsXG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgVGV4dEJveCBmcm9tICcuL1RleHRCb3gnO1xuXG5cbi8qKlxuICogQSBkaXJlY3QgZWRpdGluZyBjb21wb25lbnQgdGhhdCBhbGxvd3MgdXNlcnNcbiAqIHRvIGVkaXQgYW4gZWxlbWVudHMgdGV4dCBkaXJlY3RseSBpbiB0aGUgZGlhZ3JhbVxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzIHRoZSBldmVudCBidXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlyZWN0RWRpdGluZyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcblxuICB0aGlzLl9wcm92aWRlcnMgPSBbXTtcbiAgdGhpcy5fdGV4dGJveCA9IG5ldyBUZXh0Qm94KHtcbiAgICBjb250YWluZXI6IGNhbnZhcy5nZXRDb250YWluZXIoKSxcbiAgICBrZXlIYW5kbGVyOiBiaW5kKHRoaXMuX2hhbmRsZUtleSwgdGhpcyksXG4gICAgcmVzaXplSGFuZGxlcjogYmluZCh0aGlzLl9oYW5kbGVSZXNpemUsIHRoaXMpXG4gIH0pO1xufVxuXG5EaXJlY3RFZGl0aW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhIGRpcmVjdCBlZGl0aW5nIHByb3ZpZGVyXG5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm92aWRlciB0aGUgcHJvdmlkZXIsIG11c3QgZXhwb3NlIGFuICNhY3RpdmF0ZShlbGVtZW50KSBtZXRob2QgdGhhdCByZXR1cm5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYWN0aXZhdGlvbiBjb250ZXh0ICh7IGJvdW5kczoge3gsIHksIHdpZHRoLCBoZWlnaHQgfSwgdGV4dCB9KSBpZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdCBlZGl0aW5nIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoZSBwcm92aWRlciBtdXN0IGV4cG9zZSBhICN1cGRhdGUoZWxlbWVudCwgdmFsdWUpIG1ldGhvZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJlY2VpdmUgZGlyZWN0IGVkaXRpbmcgdXBkYXRlcy5cbiAqL1xuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKHByb3ZpZGVyKSB7XG4gIHRoaXMuX3Byb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgZGlyZWN0IGVkaXRpbmcgaXMgY3VycmVudGx5IGFjdGl2ZVxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbn07XG5cblxuLyoqXG4gKiBDYW5jZWwgZGlyZWN0IGVkaXRpbmcsIGlmIGl0IGlzIGN1cnJlbnRseSBhY3RpdmVcbiAqL1xuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZmlyZSgnY2FuY2VsJyk7XG4gIHRoaXMuY2xvc2UoKTtcbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihldmVudCwgY29udGV4dCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdkaXJlY3RFZGl0aW5nLicgKyBldmVudCwgY29udGV4dCB8fCB7IGFjdGl2ZTogdGhpcy5fYWN0aXZlIH0pO1xufTtcblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdGV4dGJveC5kZXN0cm95KCk7XG5cbiAgdGhpcy5fZmlyZSgnZGVhY3RpdmF0ZScpO1xuXG4gIHRoaXMuX2FjdGl2ZSA9IG51bGw7XG5cbiAgdGhpcy5yZXNpemFibGUgPSB1bmRlZmluZWQ7XG59O1xuXG5cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZTtcblxuICBpZiAoIWFjdGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb250YWluZXJCb3VuZHMsXG4gICAgICBwcmV2aW91c0JvdW5kcyA9IGFjdGl2ZS5jb250ZXh0LmJvdW5kcyxcbiAgICAgIG5ld0JvdW5kcyA9IHRoaXMuJHRleHRib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBuZXdUZXh0ID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgcHJldmlvdXNUZXh0ID0gYWN0aXZlLmNvbnRleHQudGV4dDtcblxuICBpZiAoXG4gICAgbmV3VGV4dCAhPT0gcHJldmlvdXNUZXh0IHx8XG4gICAgbmV3Qm91bmRzLmhlaWdodCAhPT0gcHJldmlvdXNCb3VuZHMuaGVpZ2h0IHx8XG4gICAgbmV3Qm91bmRzLndpZHRoICE9PSBwcmV2aW91c0JvdW5kcy53aWR0aFxuICApIHtcbiAgICBjb250YWluZXJCb3VuZHMgPSB0aGlzLl90ZXh0Ym94LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGFjdGl2ZS5wcm92aWRlci51cGRhdGUoYWN0aXZlLmVsZW1lbnQsIG5ld1RleHQsIGFjdGl2ZS5jb250ZXh0LnRleHQsIHtcbiAgICAgIHg6IG5ld0JvdW5kcy5sZWZ0IC0gY29udGFpbmVyQm91bmRzLmxlZnQsXG4gICAgICB5OiBuZXdCb3VuZHMudG9wIC0gY29udGFpbmVyQm91bmRzLnRvcCxcbiAgICAgIHdpZHRoOiBuZXdCb3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IG5ld0JvdW5kcy5oZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX2ZpcmUoJ2NvbXBsZXRlJyk7XG5cbiAgdGhpcy5jbG9zZSgpO1xufTtcblxuXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fdGV4dGJveC5nZXRWYWx1ZSgpO1xufTtcblxuXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZSkge1xuXG4gIC8vIHN0b3AgYnViYmxlXG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgdmFyIGtleSA9IGUua2V5Q29kZSB8fCBlLmNoYXJDb2RlO1xuXG4gIC8vIEVTQ1xuICBpZiAoa2V5ID09PSAyNykge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWwoKTtcbiAgfVxuXG4gIC8vIEVudGVyXG4gIGlmIChrZXkgPT09IDEzICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKCk7XG4gIH1cbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuX2hhbmRsZVJlc2l6ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2ZpcmUoJ3Jlc2l6ZScsIGV2ZW50KTtcbn07XG5cblxuLyoqXG4gKiBBY3RpdmF0ZSBkaXJlY3QgZWRpdGluZyBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBFbGVtZW50RGVzY3JpcHRvciB0aGUgZGVzY3JpcHRvciBmb3IgYSBzaGFwZSBvciBjb25uZWN0aW9uXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhY3RpdmF0aW9uIHdhcyBwb3NzaWJsZVxuICovXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgIHRoaXMuY2FuY2VsKCk7XG4gIH1cblxuICAvLyB0aGUgZGlyZWN0IGVkaXRpbmcgY29udGV4dFxuICB2YXIgY29udGV4dDtcblxuICB2YXIgcHJvdmlkZXIgPSBmaW5kKHRoaXMuX3Byb3ZpZGVycywgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAoY29udGV4dCA9IHAuYWN0aXZhdGUoZWxlbWVudCkpID8gcCA6IG51bGw7XG4gIH0pO1xuXG4gIC8vIGNoZWNrIGlmIGFjdGl2YXRpb24gdG9vayBwbGFjZVxuICBpZiAoY29udGV4dCkge1xuICAgIHRoaXMuJHRleHRib3ggPSB0aGlzLl90ZXh0Ym94LmNyZWF0ZShcbiAgICAgIGNvbnRleHQuYm91bmRzLFxuICAgICAgY29udGV4dC5zdHlsZSxcbiAgICAgIGNvbnRleHQudGV4dCxcbiAgICAgIGNvbnRleHQub3B0aW9uc1xuICAgICk7XG5cbiAgICB0aGlzLl9hY3RpdmUgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIHByb3ZpZGVyOiBwcm92aWRlclxuICAgIH07XG5cbiAgICBpZiAoY29udGV4dC5vcHRpb25zICYmIGNvbnRleHQub3B0aW9ucy5yZXNpemFibGUpIHtcbiAgICAgIHRoaXMucmVzaXphYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9maXJlKCdhY3RpdmF0ZScpO1xuICB9XG5cbiAgcmV0dXJuICEhY29udGV4dDtcbn07XG4iLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGJpbmQsXG4gIHBpY2tcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBldmVudCBhcyBkb21FdmVudCxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZVxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIG1pbiA9IE1hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4O1xuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChlKSB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGUpIHtcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheShub2RlTGlzdCkge1xuICByZXR1cm4gW10uc2xpY2UuY2FsbChub2RlTGlzdCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYSBjb250YWluZXIgZm9yIGEgY29udGVudCBlZGl0YWJsZSBkaXYuXG4gKlxuICogU3RydWN0dXJlOlxuICpcbiAqIGNvbnRhaW5lclxuICogICBwYXJlbnRcbiAqICAgICBjb250ZW50XG4gKiAgICAgcmVzaXplLWhhbmRsZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG9wdGlvbnMuY29udGFpbmVyIFRoZSBET00gZWxlbWVudCB0byBhcHBlbmQgdGhlIGNvbnRlbnRDb250YWluZXIgdG9cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMua2V5SGFuZGxlciBIYW5kbGVyIGZvciBrZXkgZXZlbnRzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnJlc2l6ZUhhbmRsZXIgSGFuZGxlciBmb3IgcmVzaXplIGV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXh0Qm94KG9wdGlvbnMpIHtcbiAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcblxuICB0aGlzLnBhcmVudCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1kaXJlY3QtZWRpdGluZy1wYXJlbnRcIj4nICtcbiAgICAgICc8ZGl2IGNsYXNzPVwiZGpzLWRpcmVjdC1lZGl0aW5nLWNvbnRlbnRcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+PC9kaXY+JyArXG4gICAgJzwvZGl2PidcbiAgKTtcblxuICB0aGlzLmNvbnRlbnQgPSBkb21RdWVyeSgnW2NvbnRlbnRlZGl0YWJsZV0nLCB0aGlzLnBhcmVudCk7XG5cbiAgdGhpcy5rZXlIYW5kbGVyID0gb3B0aW9ucy5rZXlIYW5kbGVyIHx8IGZ1bmN0aW9uKCkge307XG4gIHRoaXMucmVzaXplSGFuZGxlciA9IG9wdGlvbnMucmVzaXplSGFuZGxlciB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIHRoaXMuYXV0b1Jlc2l6ZSA9IGJpbmQodGhpcy5hdXRvUmVzaXplLCB0aGlzKTtcbiAgdGhpcy5oYW5kbGVQYXN0ZSA9IGJpbmQodGhpcy5oYW5kbGVQYXN0ZSwgdGhpcyk7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYSB0ZXh0IGJveCB3aXRoIHRoZSBnaXZlbiBwb3NpdGlvbiwgc2l6ZSwgc3R5bGUgYW5kIHRleHQgY29udGVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBib3VuZHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3VuZHMueCBhYnNvbHV0ZSB4IHBvc2l0aW9uXG4gKiBAcGFyYW0ge051bWJlcn0gYm91bmRzLnkgYWJzb2x1dGUgeSBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMud2lkdGhdIGZpeGVkIHdpZHRoIHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5oZWlnaHRdIGZpeGVkIGhlaWdodCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMubWF4V2lkdGhdIG1heGltdW0gd2lkdGggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLm1heEhlaWdodF0gbWF4aW11bSBoZWlnaHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLm1pbldpZHRoXSBtaW5pbXVtIHdpZHRoIHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5taW5IZWlnaHRdIG1pbmltdW0gaGVpZ2h0IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0eWxlXVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIHRleHQgY29udGVudFxuICpcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSBjcmVhdGVkIGNvbnRlbnQgRE9NIGVsZW1lbnRcbiAqL1xuVGV4dEJveC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oYm91bmRzLCBzdHlsZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQsXG4gICAgICBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjtcblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBzdHlsZSA9IHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICB2YXIgcGFyZW50U3R5bGUgPSBwaWNrKHN0eWxlLCBbXG4gICAgJ3dpZHRoJyxcbiAgICAnaGVpZ2h0JyxcbiAgICAnbWF4V2lkdGgnLFxuICAgICdtYXhIZWlnaHQnLFxuICAgICdtaW5XaWR0aCcsXG4gICAgJ21pbkhlaWdodCcsXG4gICAgJ2xlZnQnLFxuICAgICd0b3AnLFxuICAgICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICdwb3NpdGlvbicsXG4gICAgJ292ZXJmbG93JyxcbiAgICAnYm9yZGVyJyxcbiAgICAnd29yZFdyYXAnLFxuICAgICd0ZXh0QWxpZ24nLFxuICAgICdvdXRsaW5lJyxcbiAgICAndHJhbnNmb3JtJ1xuICBdKTtcblxuICBhc3NpZ24ocGFyZW50LnN0eWxlLCB7XG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCArICdweCcsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0ICsgJ3B4JyxcbiAgICBtYXhXaWR0aDogYm91bmRzLm1heFdpZHRoICsgJ3B4JyxcbiAgICBtYXhIZWlnaHQ6IGJvdW5kcy5tYXhIZWlnaHQgKyAncHgnLFxuICAgIG1pbldpZHRoOiBib3VuZHMubWluV2lkdGggKyAncHgnLFxuICAgIG1pbkhlaWdodDogYm91bmRzLm1pbkhlaWdodCArICdweCcsXG4gICAgbGVmdDogYm91bmRzLnggKyAncHgnLFxuICAgIHRvcDogYm91bmRzLnkgKyAncHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNjY2MnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHdvcmRXcmFwOiAnbm9ybWFsJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJ1xuICB9LCBwYXJlbnRTdHlsZSk7XG5cbiAgdmFyIGNvbnRlbnRTdHlsZSA9IHBpY2soc3R5bGUsIFtcbiAgICAnZm9udEZhbWlseScsXG4gICAgJ2ZvbnRTaXplJyxcbiAgICAnZm9udFdlaWdodCcsXG4gICAgJ2xpbmVIZWlnaHQnLFxuICAgICdwYWRkaW5nJyxcbiAgICAncGFkZGluZ1RvcCcsXG4gICAgJ3BhZGRpbmdSaWdodCcsXG4gICAgJ3BhZGRpbmdCb3R0b20nLFxuICAgICdwYWRkaW5nTGVmdCdcbiAgXSk7XG5cbiAgYXNzaWduKGNvbnRlbnQuc3R5bGUsIHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICB3b3JkV3JhcDogJ2JyZWFrLXdvcmQnXG4gIH0sIGNvbnRlbnRTdHlsZSk7XG5cbiAgaWYgKG9wdGlvbnMuY2VudGVyVmVydGljYWxseSkge1xuICAgIGFzc2lnbihjb250ZW50LnN0eWxlLCB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRvcDogJzUwJScsXG4gICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgLTUwJSknXG4gICAgfSwgY29udGVudFN0eWxlKTtcbiAgfVxuXG4gIGNvbnRlbnQuaW5uZXJUZXh0ID0gdmFsdWU7XG5cbiAgZG9tRXZlbnQuYmluZChjb250ZW50LCAna2V5ZG93bicsIHRoaXMua2V5SGFuZGxlcik7XG4gIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ21vdXNlZG93bicsIHN0b3BQcm9wYWdhdGlvbik7XG4gIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ3Bhc3RlJywgc2VsZi5oYW5kbGVQYXN0ZSk7XG5cbiAgaWYgKG9wdGlvbnMuYXV0b1Jlc2l6ZSkge1xuICAgIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ2lucHV0JywgdGhpcy5hdXRvUmVzaXplKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlc2l6YWJsZSkge1xuICAgIHRoaXMucmVzaXphYmxlKHN0eWxlKTtcbiAgfVxuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwYXJlbnQpO1xuXG4gIC8vIHNldCBzZWxlY3Rpb24gdG8gZW5kIG9mIHRleHRcbiAgdGhpcy5zZXRTZWxlY3Rpb24oY29udGVudC5sYXN0Q2hpbGQsIGNvbnRlbnQubGFzdENoaWxkICYmIGNvbnRlbnQubGFzdENoaWxkLmxlbmd0aCk7XG5cbiAgcmV0dXJuIHBhcmVudDtcbn07XG5cbi8qKlxuICogSW50ZXJjZXB0IHBhc3RlIGV2ZW50cyB0byByZW1vdmUgZm9ybWF0dGluZyBmcm9tIHBhc3RlZCB0ZXh0LlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5oYW5kbGVQYXN0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGU7XG5cbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIHZhciB0ZXh0O1xuXG4gIGlmIChlLmNsaXBib2FyZERhdGEpIHtcblxuICAgIC8vIENocm9tZSwgRmlyZWZveCwgU2FmYXJpXG4gICAgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gIH0gZWxzZSB7XG5cbiAgICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuICAgIHRleHQgPSB3aW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG4gIH1cblxuICB0aGlzLmluc2VydFRleHQodGV4dCk7XG5cbiAgaWYgKG9wdGlvbnMuYXV0b1Jlc2l6ZSkge1xuICAgIHZhciBoYXNSZXNpemVkID0gdGhpcy5hdXRvUmVzaXplKHN0eWxlKTtcblxuICAgIGlmIChoYXNSZXNpemVkKSB7XG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZXIoaGFzUmVzaXplZCk7XG4gICAgfVxuICB9XG59O1xuXG5UZXh0Qm94LnByb3RvdHlwZS5pbnNlcnRUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIC8vIGluc2VydFRleHQgY29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IEludGVybmV0IEV4cGxvcmVyXG4gIHZhciBzdWNjZXNzID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgdGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9pbnNlcnRUZXh0SUUodGV4dCk7XG59O1xuXG5UZXh0Qm94LnByb3RvdHlwZS5faW5zZXJ0VGV4dElFID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyXG4gIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgIGVuZE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldCxcbiAgICAgIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG5cbiAgdmFyIGNoaWxkTm9kZXNBcnJheSA9IHRvQXJyYXkoY29tbW9uQW5jZXN0b3JDb250YWluZXIuY2hpbGROb2Rlcyk7XG5cbiAgdmFyIGNvbnRhaW5lcixcbiAgICAgIG9mZnNldDtcblxuICBpZiAoaXNUZXh0Tm9kZShjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICB2YXIgY29udGFpbmVyVGV4dENvbnRlbnQgPSBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudDtcblxuICAgIHN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50ID1cbiAgICAgIGNvbnRhaW5lclRleHRDb250ZW50LnN1YnN0cmluZygwLCBzdGFydE9mZnNldClcbiAgICAgICsgdGV4dFxuICAgICAgKyBjb250YWluZXJUZXh0Q29udGVudC5zdWJzdHJpbmcoZW5kT2Zmc2V0KTtcblxuICAgIGNvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyO1xuICAgIG9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgdGV4dC5sZW5ndGg7XG5cbiAgfSBlbHNlIGlmIChzdGFydENvbnRhaW5lciA9PT0gdGhpcy5jb250ZW50ICYmIGVuZENvbnRhaW5lciA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cbiAgICB0aGlzLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBjaGlsZE5vZGVzQXJyYXlbc3RhcnRPZmZzZXRdKTtcblxuICAgIGNvbnRhaW5lciA9IHRleHROb2RlO1xuICAgIG9mZnNldCA9IHRleHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3RhcnRDb250YWluZXJDaGlsZEluZGV4ID0gY2hpbGROb2Rlc0FycmF5LmluZGV4T2Yoc3RhcnRDb250YWluZXIpLFxuICAgICAgICBlbmRDb250YWluZXJDaGlsZEluZGV4ID0gY2hpbGROb2Rlc0FycmF5LmluZGV4T2YoZW5kQ29udGFpbmVyKTtcblxuICAgIGNoaWxkTm9kZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkTm9kZSwgaW5kZXgpIHtcblxuICAgICAgaWYgKGluZGV4ID09PSBzdGFydENvbnRhaW5lckNoaWxkSW5kZXgpIHtcbiAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQpICtcbiAgICAgICAgICB0ZXh0ICtcbiAgICAgICAgICBlbmRDb250YWluZXIudGV4dENvbnRlbnQuc3Vic3RyaW5nKGVuZE9mZnNldCk7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4ID4gc3RhcnRDb250YWluZXJDaGlsZEluZGV4ICYmIGluZGV4IDw9IGVuZENvbnRhaW5lckNoaWxkSW5kZXgpIHtcbiAgICAgICAgZG9tUmVtb3ZlKGNoaWxkTm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIgPSBzdGFydENvbnRhaW5lcjtcbiAgICBvZmZzZXQgPSBzdGFydE9mZnNldCArIHRleHQubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lciAmJiBvZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgLy8gaXMgbmVjZXNzYXJ5IGluIEludGVybmV0IEV4cGxvcmVyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2V0U2VsZWN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHJlc2l6ZSBlbGVtZW50IHZlcnRpY2FsbHkgdG8gZml0IGl0cyBjb250ZW50LlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5hdXRvUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cbiAgdmFyIGZvbnRTaXplID0gcGFyc2VJbnQodGhpcy5zdHlsZS5mb250U2l6ZSkgfHwgMTI7XG5cbiAgaWYgKGNvbnRlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50Lm9mZnNldEhlaWdodCB8fFxuICAgICAgY29udGVudC5zY3JvbGxIZWlnaHQgPCBwYXJlbnQub2Zmc2V0SGVpZ2h0IC0gZm9udFNpemUpIHtcbiAgICB2YXIgYm91bmRzID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhlaWdodCA9IGNvbnRlbnQuc2Nyb2xsSGVpZ2h0O1xuICAgIHBhcmVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuXG4gICAgdGhpcy5yZXNpemVIYW5kbGVyKHtcbiAgICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQsXG4gICAgICBkeDogMCxcbiAgICAgIGR5OiBoZWlnaHQgLSBib3VuZHMuaGVpZ2h0XG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogTWFrZSBhbiBlbGVtZW50IHJlc2l6YWJsZSBieSBhZGRpbmcgYSByZXNpemUgaGFuZGxlLlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5yZXNpemFibGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIHJlc2l6ZUhhbmRsZSA9IHRoaXMucmVzaXplSGFuZGxlO1xuXG4gIHZhciBtaW5XaWR0aCA9IHBhcnNlSW50KHRoaXMuc3R5bGUubWluV2lkdGgpIHx8IDAsXG4gICAgICBtaW5IZWlnaHQgPSBwYXJzZUludCh0aGlzLnN0eWxlLm1pbkhlaWdodCkgfHwgMCxcbiAgICAgIG1heFdpZHRoID0gcGFyc2VJbnQodGhpcy5zdHlsZS5tYXhXaWR0aCkgfHwgSW5maW5pdHksXG4gICAgICBtYXhIZWlnaHQgPSBwYXJzZUludCh0aGlzLnN0eWxlLm1heEhlaWdodCkgfHwgSW5maW5pdHk7XG5cbiAgaWYgKCFyZXNpemVIYW5kbGUpIHtcbiAgICByZXNpemVIYW5kbGUgPSB0aGlzLnJlc2l6ZUhhbmRsZSA9IGRvbWlmeShcbiAgICAgICc8ZGl2IGNsYXNzPVwiZGpzLWRpcmVjdC1lZGl0aW5nLXJlc2l6ZS1oYW5kbGVcIj48L2Rpdj4nXG4gICAgKTtcblxuICAgIHZhciBzdGFydFgsIHN0YXJ0WSwgc3RhcnRXaWR0aCwgc3RhcnRIZWlnaHQ7XG5cbiAgICB2YXIgb25Nb3VzZURvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcblxuICAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuXG4gICAgICB2YXIgYm91bmRzID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBzdGFydFdpZHRoID0gYm91bmRzLndpZHRoO1xuICAgICAgc3RhcnRIZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xuXG4gICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB2YXIgb25Nb3VzZU1vdmUgPSBmdW5jdGlvbihlKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcblxuICAgICAgdmFyIG5ld1dpZHRoID0gbWluKG1heChzdGFydFdpZHRoICsgZS5jbGllbnRYIC0gc3RhcnRYLCBtaW5XaWR0aCksIG1heFdpZHRoKTtcbiAgICAgIHZhciBuZXdIZWlnaHQgPSBtaW4obWF4KHN0YXJ0SGVpZ2h0ICsgZS5jbGllbnRZIC0gc3RhcnRZLCBtaW5IZWlnaHQpLCBtYXhIZWlnaHQpO1xuXG4gICAgICBwYXJlbnQuc3R5bGUud2lkdGggPSBuZXdXaWR0aCArICdweCc7XG4gICAgICBwYXJlbnQuc3R5bGUuaGVpZ2h0ID0gbmV3SGVpZ2h0ICsgJ3B4JztcblxuICAgICAgc2VsZi5yZXNpemVIYW5kbGVyKHtcbiAgICAgICAgd2lkdGg6IHN0YXJ0V2lkdGgsXG4gICAgICAgIGhlaWdodDogc3RhcnRIZWlnaHQsXG4gICAgICAgIGR4OiBlLmNsaWVudFggLSBzdGFydFgsXG4gICAgICAgIGR5OiBlLmNsaWVudFkgLSBzdGFydFlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgb25Nb3VzZVVwID0gZnVuY3Rpb24oZSkge1xuICAgICAgcHJldmVudERlZmF1bHQoZSk7XG4gICAgICBzdG9wUHJvcGFnYXRpb24oZSk7XG5cbiAgICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBvbk1vdXNlVXAsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgZG9tRXZlbnQuYmluZChyZXNpemVIYW5kbGUsICdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gIH1cblxuICBhc3NpZ24ocmVzaXplSGFuZGxlLnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYm90dG9tOiAnMHB4JyxcbiAgICByaWdodDogJzBweCcsXG4gICAgY3Vyc29yOiAnbndzZS1yZXNpemUnLFxuICAgIHdpZHRoOiAnMCcsXG4gICAgaGVpZ2h0OiAnMCcsXG4gICAgYm9yZGVyVG9wOiAocGFyc2VJbnQodGhpcy5zdHlsZS5mb250U2l6ZSkgLyA0IHx8IDMpICsgJ3B4IHNvbGlkIHRyYW5zcGFyZW50JyxcbiAgICBib3JkZXJSaWdodDogKHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIC8gNCB8fCAzKSArICdweCBzb2xpZCAjY2NjJyxcbiAgICBib3JkZXJCb3R0b206IChwYXJzZUludCh0aGlzLnN0eWxlLmZvbnRTaXplKSAvIDQgfHwgMykgKyAncHggc29saWQgI2NjYycsXG4gICAgYm9yZGVyTGVmdDogKHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIC8gNCB8fCAzKSArICdweCBzb2xpZCB0cmFuc3BhcmVudCdcbiAgfSk7XG5cbiAgcGFyZW50LmFwcGVuZENoaWxkKHJlc2l6ZUhhbmRsZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXIgY29udGVudCBhbmQgc3R5bGUgb2YgdGhlIHRleHRib3gsIHVuYmluZCBsaXN0ZW5lcnMgYW5kXG4gKiByZXNldCBDU1Mgc3R5bGUuXG4gKi9cblRleHRCb3gucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50LFxuICAgICAgY29udGVudCA9IHRoaXMuY29udGVudCxcbiAgICAgIHJlc2l6ZUhhbmRsZSA9IHRoaXMucmVzaXplSGFuZGxlO1xuXG4gIC8vIGNsZWFyIGNvbnRlbnRcbiAgY29udGVudC5pbm5lclRleHQgPSAnJztcblxuICAvLyBjbGVhciBzdHlsZXNcbiAgcGFyZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgY29udGVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdrZXlkb3duJywgdGhpcy5rZXlIYW5kbGVyKTtcbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdtb3VzZWRvd24nLCBzdG9wUHJvcGFnYXRpb24pO1xuICBkb21FdmVudC51bmJpbmQoY29udGVudCwgJ2lucHV0JywgdGhpcy5hdXRvUmVzaXplKTtcbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdwYXN0ZScsIHRoaXMuaGFuZGxlUGFzdGUpO1xuXG4gIGlmIChyZXNpemVIYW5kbGUpIHtcbiAgICByZXNpemVIYW5kbGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgZG9tUmVtb3ZlKHJlc2l6ZUhhbmRsZSk7XG4gIH1cblxuICBkb21SZW1vdmUocGFyZW50KTtcbn07XG5cblxuVGV4dEJveC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY29udGVudC5pbm5lclRleHQudHJpbSgpO1xufTtcblxuXG5UZXh0Qm94LnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgcmV0dXJuIHJhbmdlO1xufTtcblxuXG5UZXh0Qm94LnByb3RvdHlwZS5zZXRTZWxlY3Rpb24gPSBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkge1xuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gIGlmIChjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5jb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByYW5nZS5zZXRTdGFydChjb250YWluZXIsIG9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGRlbGVnYXRlIGFzIGRvbURlbGVnYXRlLFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgcXVlcnlBbGwgYXMgZG9tUXVlcnlBbGxcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7IGlzUHJpbWFyeUJ1dHRvbiB9IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVMaW5lLFxuICB1cGRhdGVMaW5lXG59IGZyb20gJy4uLy4uL3V0aWwvUmVuZGVyVXRpbCc7XG5cbmZ1bmN0aW9uIGFsbG93QWxsKGUpIHsgcmV0dXJuIHRydWU7IH1cblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIEEgcGx1Z2luIHRoYXQgcHJvdmlkZXMgaW50ZXJhY3Rpb24gZXZlbnRzIGZvciBkaWFncmFtIGVsZW1lbnRzLlxuICpcbiAqIEl0IGVtaXRzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICpcbiAqICAgKiBlbGVtZW50LmNsaWNrXG4gKiAgICogZWxlbWVudC5jb250ZXh0bWVudVxuICogICAqIGVsZW1lbnQuZGJsY2xpY2tcbiAqICAgKiBlbGVtZW50LmhvdmVyXG4gKiAgICogZWxlbWVudC5tb3VzZWRvd25cbiAqICAgKiBlbGVtZW50Lm1vdXNlbW92ZVxuICogICAqIGVsZW1lbnQubW91c2V1cFxuICogICAqIGVsZW1lbnQub3V0XG4gKlxuICogRWFjaCBldmVudCBpcyBhIHR1cGxlIHsgZWxlbWVudCwgZ2Z4LCBvcmlnaW5hbEV2ZW50IH0uXG4gKlxuICogQ2FuY2VsaW5nIHRoZSBldmVudCB2aWEgRXZlbnQjcHJldmVudERlZmF1bHQoKVxuICogcHJldmVudHMgdGhlIG9yaWdpbmFsIERPTSBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSW50ZXJhY3Rpb25FdmVudHMoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgc3R5bGVzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8qKlxuICAgKiBGaXJlIGFuIGludGVyYWN0aW9uIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBsb2NhbCBldmVudCBuYW1lLCBlLmcuIGVsZW1lbnQuY2xpY2suXG4gICAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50IG5hdGl2ZSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbZWxlbWVudF0gdGhlIGRpYWdyYW0gZWxlbWVudCB0byBlbWl0IHRoZSBldmVudCBvbjtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBldmVudCB0YXJnZXRcbiAgICovXG4gIGZ1bmN0aW9uIGZpcmUodHlwZSwgZXZlbnQsIGVsZW1lbnQpIHtcblxuICAgIGlmIChpc0lnbm9yZWQodHlwZSwgZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldCwgZ2Z4LCByZXR1cm5WYWx1ZTtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgdGFyZ2V0ID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGdmeCA9IHRhcmdldDtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICghZ2Z4IHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuVmFsdWUgPSBldmVudEJ1cy5maXJlKHR5cGUsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBnZng6IGdmeCxcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgfSk7XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyhuaWtrdSk6IGRvY3VtZW50IHRoaXNcbiAgdmFyIGhhbmRsZXJzID0ge307XG5cbiAgZnVuY3Rpb24gbW91c2VIYW5kbGVyKGxvY2FsRXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIGhhbmRsZXJzW2xvY2FsRXZlbnROYW1lXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSWdub3JlZChsb2NhbEV2ZW50TmFtZSwgZXZlbnQpIHtcblxuICAgIHZhciBmaWx0ZXIgPSBpZ25vcmVkRmlsdGVyc1tsb2NhbEV2ZW50TmFtZV0gfHwgaXNQcmltYXJ5QnV0dG9uO1xuXG4gICAgLy8gb25seSByZWFjdCBvbiBsZWZ0IG1vdXNlIGJ1dHRvbiBpbnRlcmFjdGlvbnNcbiAgICAvLyBleGNlcHQgZm9yIGludGVyYWN0aW9uIGV2ZW50cyB0aGF0IGFyZSBlbmFibGVkXG4gICAgLy8gZm9yIHNlY3VuZGFyeSBtb3VzZSBidXR0b25cbiAgICByZXR1cm4gIWZpbHRlcihldmVudCk7XG4gIH1cblxuICB2YXIgYmluZGluZ3MgPSB7XG4gICAgY2xpY2s6ICdlbGVtZW50LmNsaWNrJyxcbiAgICBjb250ZXh0bWVudTogJ2VsZW1lbnQuY29udGV4dG1lbnUnLFxuICAgIGRibGNsaWNrOiAnZWxlbWVudC5kYmxjbGljaycsXG4gICAgbW91c2Vkb3duOiAnZWxlbWVudC5tb3VzZWRvd24nLFxuICAgIG1vdXNlbW92ZTogJ2VsZW1lbnQubW91c2Vtb3ZlJyxcbiAgICBtb3VzZW92ZXI6ICdlbGVtZW50LmhvdmVyJyxcbiAgICBtb3VzZW91dDogJ2VsZW1lbnQub3V0JyxcbiAgICBtb3VzZXVwOiAnZWxlbWVudC5tb3VzZXVwJyxcbiAgfTtcblxuICB2YXIgaWdub3JlZEZpbHRlcnMgPSB7XG4gICAgJ2VsZW1lbnQuY29udGV4dG1lbnUnOiBhbGxvd0FsbFxuICB9O1xuXG5cbiAgLy8gbWFudWFsIGV2ZW50IHRyaWdnZXIgLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGludGVyYWN0aW9uIGV2ZW50IChiYXNlZCBvbiBhIG5hdGl2ZSBkb20gZXZlbnQpXG4gICAqIG9uIHRoZSB0YXJnZXQgc2hhcGUgb3IgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgdHJpZ2dlcmVkIERPTSBldmVudFxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHRhcmdldEVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHRyaWdnZXJNb3VzZUV2ZW50KGV2ZW50TmFtZSwgZXZlbnQsIHRhcmdldEVsZW1lbnQpIHtcblxuICAgIC8vIGkuZS4gZWxlbWVudC5tb3VzZWRvd24uLi5cbiAgICB2YXIgbG9jYWxFdmVudE5hbWUgPSBiaW5kaW5nc1tldmVudE5hbWVdO1xuXG4gICAgaWYgKCFsb2NhbEV2ZW50TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bm1hcHBlZCBET00gZXZlbnQgbmFtZSA8JyArIGV2ZW50TmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcmUobG9jYWxFdmVudE5hbWUsIGV2ZW50LCB0YXJnZXRFbGVtZW50KTtcbiAgfVxuXG5cbiAgdmFyIEVMRU1FTlRfU0VMRUNUT1IgPSAnc3ZnLCAuZGpzLWVsZW1lbnQnO1xuXG4gIC8vIGV2ZW50IGhhbmRsaW5nIC8vLy8vLy9cblxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50KG5vZGUsIGV2ZW50LCBsb2NhbEV2ZW50LCBpZ25vcmVkRmlsdGVyKSB7XG5cbiAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2xvY2FsRXZlbnRdID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGZpcmUobG9jYWxFdmVudCwgZXZlbnQpO1xuICAgIH07XG5cbiAgICBpZiAoaWdub3JlZEZpbHRlcikge1xuICAgICAgaWdub3JlZEZpbHRlcnNbbG9jYWxFdmVudF0gPSBpZ25vcmVkRmlsdGVyO1xuICAgIH1cblxuICAgIGhhbmRsZXIuJGRlbGVnYXRlID0gZG9tRGVsZWdhdGUuYmluZChub2RlLCBFTEVNRU5UX1NFTEVDVE9SLCBldmVudCwgaGFuZGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyRXZlbnQobm9kZSwgZXZlbnQsIGxvY2FsRXZlbnQpIHtcblxuICAgIHZhciBoYW5kbGVyID0gbW91c2VIYW5kbGVyKGxvY2FsRXZlbnQpO1xuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZG9tRGVsZWdhdGUudW5iaW5kKG5vZGUsIGV2ZW50LCBoYW5kbGVyLiRkZWxlZ2F0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50cyhzdmcpIHtcbiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgcmVnaXN0ZXJFdmVudChzdmcsIGtleSwgdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJFdmVudHMoc3ZnKSB7XG4gICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHVucmVnaXN0ZXJFdmVudChzdmcsIGtleSwgdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuZGVzdHJveScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdW5yZWdpc3RlckV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHJlZ2lzdGVyRXZlbnRzKGV2ZW50LnN2Zyk7XG4gIH0pO1xuXG5cbiAgLy8gaGl0IGJveCB1cGRhdGluZyAvLy8vLy8vLy8vLy8vLy8vXG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAnY29ubmVjdGlvbi5hZGRlZCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZUhpdCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG4gIH0pO1xuXG4gIC8vIFVwZGF0ZSBkanMtaGl0IG9uIGNoYW5nZS5cbiAgLy8gQSBsb3cgcHJpb3J0aXR5IGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSBkanMtaGl0IG9mIGxhYmVscyBoYXMgdG8gYmUgdXBkYXRlZFxuICAvLyBhZnRlciB0aGUgbGFiZWwgYm91bmRzIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSByZW5kZXJlci5cbiAgZXZlbnRCdXMub24oW1xuICAgICdzaGFwZS5jaGFuZ2VkJyxcbiAgICAnY29ubmVjdGlvbi5jaGFuZ2VkJ1xuICBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2ludGVyYWN0aW9uRXZlbnRzLnVwZGF0ZUhpdCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBzZWxmLmNyZWF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2ludGVyYWN0aW9uRXZlbnRzLnVwZGF0ZUhpdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBzZWxmLnVwZGF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgfSk7XG5cblxuICAvLyBoaXQgc3R5bGVzIC8vLy8vLy8vLy8vL1xuXG4gIHZhciBTVFJPS0VfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1zdHJva2UnKTtcblxuICB2YXIgQ0xJQ0tfU1RST0tFX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtY2xpY2stc3Ryb2tlJyk7XG5cbiAgdmFyIEFMTF9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LWFsbCcpO1xuXG4gIHZhciBISVRfVFlQRVMgPSB7XG4gICAgJ2FsbCc6IEFMTF9ISVRfU1RZTEUsXG4gICAgJ2NsaWNrLXN0cm9rZSc6IENMSUNLX1NUUk9LRV9ISVRfU1RZTEUsXG4gICAgJ3N0cm9rZSc6IFNUUk9LRV9ISVRfU1RZTEVcbiAgfTtcblxuICBmdW5jdGlvbiBjcmVhdGVIaXRTdHlsZShjbGFzc05hbWVzLCBhdHRycykge1xuXG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgc3Ryb2tlV2lkdGg6IDE1XG4gICAgfSwgYXR0cnMgfHwge30pO1xuXG4gICAgcmV0dXJuIHN0eWxlcy5jbHMoY2xhc3NOYW1lcywgWyAnbm8tZmlsbCcsICduby1ib3JkZXInIF0sIGF0dHJzKTtcbiAgfVxuXG5cbiAgLy8gc3R5bGUgaGVscGVycyAvLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBhcHBseVN0eWxlKGhpdCwgdHlwZSkge1xuXG4gICAgdmFyIGF0dHJzID0gSElUX1RZUEVTW3R5cGVdO1xuXG4gICAgaWYgKCFhdHRycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGhpdCB0eXBlIDwnICsgdHlwZSArICc+Jyk7XG4gICAgfVxuXG4gICAgc3ZnQXR0cihoaXQsIGF0dHJzKTtcblxuICAgIHJldHVybiBoaXQ7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRIaXQoZ2Z4LCBoaXQpIHtcbiAgICBzdmdBcHBlbmQoZ2Z4LCBoaXQpO1xuICB9XG5cblxuICAvLyBBUElcblxuICAvKipcbiAgICogUmVtb3ZlIGhpbnRzIG9uIHRoZSBnaXZlbiBncmFwaGljcy5cbiAgICpcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICovXG4gIHRoaXMucmVtb3ZlSGl0cyA9IGZ1bmN0aW9uKGdmeCkge1xuICAgIHZhciBoaXRzID0gZG9tUXVlcnlBbGwoJy5kanMtaGl0JywgZ2Z4KTtcblxuICAgIGZvckVhY2goaGl0cywgc3ZnUmVtb3ZlKTtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGRlZmF1bHQgaGl0IGZvciB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fSBjcmVhdGVkIGhpdFxuICAgKi9cbiAgdGhpcy5jcmVhdGVEZWZhdWx0SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGVsZW1lbnQud2F5cG9pbnRzLFxuICAgICAgICBpc0ZyYW1lID0gZWxlbWVudC5pc0ZyYW1lLFxuICAgICAgICBib3hUeXBlO1xuXG4gICAgaWYgKHdheXBvaW50cykge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2F5cG9pbnRzSGl0KGdmeCwgd2F5cG9pbnRzKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBib3hUeXBlID0gaXNGcmFtZSA/ICdzdHJva2UnIDogJ2FsbCc7XG5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUJveEhpdChnZngsIGJveFR5cGUsIHtcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGhpdHMgZm9yIHRoZSBnaXZlbiB3YXlwb2ludHMuXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAgICovXG4gIHRoaXMuY3JlYXRlV2F5cG9pbnRzSGl0ID0gZnVuY3Rpb24oZ2Z4LCB3YXlwb2ludHMpIHtcblxuICAgIHZhciBoaXQgPSBjcmVhdGVMaW5lKHdheXBvaW50cyk7XG5cbiAgICBhcHBseVN0eWxlKGhpdCwgJ3N0cm9rZScpO1xuXG4gICAgYXBwZW5kSGl0KGdmeCwgaGl0KTtcblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBoaXRzIGZvciBhIGJveC5cbiAgICpcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGhpdFR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJzXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gICAqL1xuICB0aGlzLmNyZWF0ZUJveEhpdCA9IGZ1bmN0aW9uKGdmeCwgdHlwZSwgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSwgYXR0cnMpO1xuXG4gICAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuXG4gICAgYXBwbHlTdHlsZShoaXQsIHR5cGUpO1xuXG4gICAgc3ZnQXR0cihoaXQsIGF0dHJzKTtcblxuICAgIGFwcGVuZEhpdChnZngsIGhpdCk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgZGVmYXVsdCBoaXQgb2YgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IGdmeFxuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB1cGRhdGVkIGhpdFxuICAgKi9cbiAgdGhpcy51cGRhdGVEZWZhdWx0SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG5cbiAgICB2YXIgaGl0ID0gZG9tUXVlcnkoJy5kanMtaGl0JywgZ2Z4KTtcblxuICAgIGlmICghaGl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICB1cGRhdGVMaW5lKGhpdCwgZWxlbWVudC53YXlwb2ludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmdBdHRyKGhpdCwge1xuICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICB0aGlzLmZpcmUgPSBmaXJlO1xuXG4gIHRoaXMudHJpZ2dlck1vdXNlRXZlbnQgPSB0cmlnZ2VyTW91c2VFdmVudDtcblxuICB0aGlzLm1vdXNlSGFuZGxlciA9IG1vdXNlSGFuZGxlcjtcblxuICB0aGlzLnJlZ2lzdGVyRXZlbnQgPSByZWdpc3RlckV2ZW50O1xuICB0aGlzLnVucmVnaXN0ZXJFdmVudCA9IHVucmVnaXN0ZXJFdmVudDtcbn1cblxuXG5JbnRlcmFjdGlvbkV2ZW50cy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ3N0eWxlcydcbl07XG5cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhvdmVyZWQgb3ZlciBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuaG92ZXJcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGxlZnQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50Lm91dFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgY2xpY2tlZCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuY2xpY2tcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGRvdWJsZSBjbGlja2VkIGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5kYmxjbGlja1xuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZ29uZSBkb3duIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogQGV2ZW50IGVsZW1lbnQubW91c2Vkb3duXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBnb25lIHVwIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogQGV2ZW50IGVsZW1lbnQubW91c2V1cFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgYWN0aW9uIGlzIHRyaWdnZXJlZFxuICogdmlhIG1vdXNlIG9yIHRvdWNoIGNvbnRyb2xzLlxuICpcbiAqIEBldmVudCBlbGVtZW50LmNvbnRleHRtZW51XG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi8iLCIvKipcbiAqIEEgc2ltcGxlIHRyYW5zbGF0aW9uIHN0dWIgdG8gYmUgdXNlZCBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogaW4gZGlhZ3JhbXMuIENhbiBiZSBlYXNpbHkgcmVwbGFjZWQgd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZFxuICogc29sdXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyB1c2UgaXQgaW5zaWRlIGFueSBkaWFncmFtIGNvbXBvbmVudCBieSBpbmplY3RpbmcgYHRyYW5zbGF0ZWAuXG4gKlxuICogZnVuY3Rpb24gTXlTZXJ2aWNlKHRyYW5zbGF0ZSkge1xuICogICBhbGVydCh0cmFuc2xhdGUoJ0hFTExPIHt5b3V9JywgeyB5b3U6ICdZb3UhJyB9KSk7XG4gKiB9XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlIHRvIGludGVycG9sYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcGxhY2VtZW50c10gYSBtYXAgd2l0aCBzdWJzdGl0dXRlc1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zbGF0ZSh0ZW1wbGF0ZSwgcmVwbGFjZW1lbnRzKSB7XG5cbiAgcmVwbGFjZW1lbnRzID0gcmVwbGFjZW1lbnRzIHx8IHt9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC97KFtefV0rKX0vZywgZnVuY3Rpb24oXywga2V5KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50c1trZXldIHx8ICd7JyArIGtleSArICd9JztcbiAgfSk7XG59IiwiLyoqXG4gKiBGYWlsc2FmZSByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGEgY29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IFtjb2xsZWN0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSBbZWxlbWVudF1cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBwcmV2aW91cyBpbmRleCBvZiB0aGUgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlKGNvbGxlY3Rpb24sIGVsZW1lbnQpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChpZHggIT09IC0xKSB7XG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuXG4gIHJldHVybiBpZHg7XG59XG5cbi8qKlxuICogRmFpbCBzYXZlIGFkZCBhbiBlbGVtZW50IHRvIHRoZSBnaXZlbiBjb25uZWN0aW9uLCBlbnN1cmluZ1xuICogaXQgZG9lcyBub3QgeWV0IGV4aXN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChjb2xsZWN0aW9uLCBlbGVtZW50LCBpZHgpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGlkeCAhPT0gJ251bWJlcicpIHtcbiAgICBpZHggPSAtMTtcbiAgfVxuXG4gIHZhciBjdXJyZW50SWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChjdXJyZW50SWR4ICE9PSAtMSkge1xuXG4gICAgaWYgKGN1cnJlbnRJZHggPT09IGlkeCkge1xuXG4gICAgICAvLyBub3RoaW5nIHRvIGRvLCBwb3NpdGlvbiBoYXMgbm90IGNoYW5nZWRcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgY29sbGVjdGlvbi5zcGxpY2UoY3VycmVudElkeCwgMSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIGFscmVhZHkgZXhpc3RzIGluIGNvbGxlY3Rpb25cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChpZHggIT09IC0xKSB7XG5cbiAgICAvLyBpbnNlcnQgYXQgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIHB1c2ggdG8gZW5kXG4gICAgY29sbGVjdGlvbi5wdXNoKGVsZW1lbnQpO1xuICB9XG59XG5cblxuLyoqXG4gKiBGYWlsIHNhdmUgZ2V0IHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TnVtYmVyfSB0aGUgaW5kZXggb3IgLTEgaWYgY29sbGVjdGlvbiBvciBlbGVtZW50IGRvXG4gKiAgICAgICAgICAgICAgICAgIG5vdCBleGlzdCBvciB0aGUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbGVtZW50KSB7XG5cbiAgaWYgKCFjb2xsZWN0aW9uIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbGVtZW50KTtcbn1cbiIsInZhciBDTEFTU19QQVRURVJOID0gL15jbGFzcyAvO1xuXG5mdW5jdGlvbiBpc0NsYXNzKGZuKSB7XG4gIHJldHVybiBDTEFTU19QQVRURVJOLnRlc3QoZm4udG9TdHJpbmcoKSk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGUoKSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShhcmdzWzBdKSkge1xuICAgIGFyZ3MgPSBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIGZuID0gYXJncy5wb3AoKTtcblxuICBmbi4kaW5qZWN0ID0gYXJncztcblxuICByZXR1cm4gZm47XG59XG5cbi8vIEN1cnJlbnQgbGltaXRhdGlvbnM6XG4vLyAtIGNhbid0IHB1dCBpbnRvIFwiZnVuY3Rpb24gYXJnXCIgY29tbWVudHNcbi8vIGZ1bmN0aW9uIC8qIChubyBwYXJlbnRoZXNpcyBsaWtlIHRoaXMpICovICgpe31cbi8vIGZ1bmN0aW9uIGFiYyggLyogeHggKG5vIHBhcmVudGhlc2lzIGxpa2UgdGhpcykgKi8gYSwgYikge31cbi8vXG4vLyBKdXN0IHB1dCB0aGUgY29tbWVudCBiZWZvcmUgZnVuY3Rpb24gb3IgaW5zaWRlOlxuLy8gLyogKCgodGhpcyBpcyBmaW5lKSkpICovIGZ1bmN0aW9uKGEsIGIpIHt9XG4vLyBmdW5jdGlvbiBhYmMoYSkgeyAvKiAoKCh0aGlzIGlzIGZpbmUpKSkgKi99XG4vL1xuLy8gLSBjYW4ndCByZWxpYWJseSBhdXRvLWFubm90YXRlIGNvbnN0cnVjdG9yOyB3ZSdsbCBtYXRjaCB0aGVcbi8vIGZpcnN0IGNvbnN0cnVjdG9yKC4uLikgcGF0dGVybiBmb3VuZCB3aGljaCBtYXkgYmUgdGhlIG9uZVxuLy8gb2YgYSBuZXN0ZWQgY2xhc3MsIHRvby5cblxudmFyIENPTlNUUlVDVE9SX0FSR1MgPSAvY29uc3RydWN0b3JcXHMqW14oXSpcXChcXHMqKFteKV0qKVxcKS9tO1xudmFyIEZOX0FSR1MgPSAvXmZ1bmN0aW9uXFxzKlteKF0qXFwoXFxzKihbXildKilcXCkvbTtcbnZhciBGTl9BUkcgPSAvXFwvXFwqKFteKl0qKVxcKlxcLy9tO1xuXG5mdW5jdGlvbiBwYXJzZShmbikge1xuXG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhbm5vdGF0ZSBcIicgKyBmbiArICdcIi4gRXhwZWN0ZWQgYSBmdW5jdGlvbiEnKTtcbiAgfVxuXG4gIHZhciBtYXRjaCA9IGZuLnRvU3RyaW5nKCkubWF0Y2goaXNDbGFzcyhmbikgPyBDT05TVFJVQ1RPUl9BUkdTIDogRk5fQVJHUyk7XG5cbiAgLy8gbWF5IHBhcnNlIGNsYXNzIHdpdGhvdXQgY29uc3RydWN0b3JcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaFsxXSAmJiBtYXRjaFsxXS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgbWF0Y2ggPSBhcmcubWF0Y2goRk5fQVJHKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBhcmcudHJpbSgpO1xuICB9KSB8fCBbXTtcbn1cblxuZnVuY3Rpb24gTW9kdWxlKCkge1xuICB2YXIgcHJvdmlkZXJzID0gW107XG5cbiAgdGhpcy5mYWN0b3J5ID0gZnVuY3Rpb24gKG5hbWUsIGZhY3RvcnkpIHtcbiAgICBwcm92aWRlcnMucHVzaChbbmFtZSwgJ2ZhY3RvcnknLCBmYWN0b3J5XSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy52YWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKFtuYW1lLCAndmFsdWUnLCB2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMudHlwZSA9IGZ1bmN0aW9uIChuYW1lLCB0eXBlKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goW25hbWUsICd0eXBlJywgdHlwZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMuZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgIHByb3ZpZGVycy5mb3JFYWNoKGl0ZXJhdG9yKTtcbiAgfTtcbn1cblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxuZnVuY3Rpb24gSW5qZWN0b3IobW9kdWxlcywgcGFyZW50KSB7XG4gIHBhcmVudCA9IHBhcmVudCB8fCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQobmFtZSwgc3RyaWN0KSB7XG4gICAgICBjdXJyZW50bHlSZXNvbHZpbmcucHVzaChuYW1lKTtcblxuICAgICAgaWYgKHN0cmljdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcignTm8gcHJvdmlkZXIgZm9yIFwiJyArIG5hbWUgKyAnXCIhJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBjdXJyZW50bHlSZXNvbHZpbmcgPSBbXTtcbiAgdmFyIHByb3ZpZGVycyA9IHRoaXMuX3Byb3ZpZGVycyA9IE9iamVjdC5jcmVhdGUocGFyZW50Ll9wcm92aWRlcnMgfHwgbnVsbCk7XG4gIHZhciBpbnN0YW5jZXMgPSB0aGlzLl9pbnN0YW5jZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHZhciBzZWxmID0gaW5zdGFuY2VzLmluamVjdG9yID0gdGhpcztcblxuICB2YXIgZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgICB2YXIgc3RhY2sgPSBjdXJyZW50bHlSZXNvbHZpbmcuam9pbignIC0+ICcpO1xuICAgIGN1cnJlbnRseVJlc29sdmluZy5sZW5ndGggPSAwO1xuICAgIHJldHVybiBuZXcgRXJyb3Ioc3RhY2sgPyBtc2cgKyAnIChSZXNvbHZpbmc6ICcgKyBzdGFjayArICcpJyA6IG1zZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG5hbWVkIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3N0cmljdD10cnVlXSBpZiBmYWxzZSwgcmVzb2x2ZSBtaXNzaW5nIHNlcnZpY2VzIHRvIG51bGxcbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChuYW1lLCBzdHJpY3QpIHtcbiAgICBpZiAoIXByb3ZpZGVyc1tuYW1lXSAmJiBuYW1lLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcbiAgICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgIHZhciBwaXZvdCA9IGdldChwYXJ0cy5zaGlmdCgpKTtcblxuICAgICAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgICAgICBwaXZvdCA9IHBpdm90W3BhcnRzLnNoaWZ0KCldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGl2b3Q7XG4gICAgfVxuXG4gICAgaWYgKGhhc1Byb3AoaW5zdGFuY2VzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlc1tuYW1lXTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUHJvcChwcm92aWRlcnMsIG5hbWUpKSB7XG4gICAgICBpZiAoY3VycmVudGx5UmVzb2x2aW5nLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgIGN1cnJlbnRseVJlc29sdmluZy5wdXNoKG5hbWUpO1xuICAgICAgICB0aHJvdyBlcnJvcignQ2Fubm90IHJlc29sdmUgY2lyY3VsYXIgZGVwZW5kZW5jeSEnKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudGx5UmVzb2x2aW5nLnB1c2gobmFtZSk7XG4gICAgICBpbnN0YW5jZXNbbmFtZV0gPSBwcm92aWRlcnNbbmFtZV1bMF0ocHJvdmlkZXJzW25hbWVdWzFdKTtcbiAgICAgIGN1cnJlbnRseVJlc29sdmluZy5wb3AoKTtcblxuICAgICAgcmV0dXJuIGluc3RhbmNlc1tuYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50LmdldChuYW1lLCBzdHJpY3QpO1xuICB9O1xuXG4gIHZhciBmbkRlZiA9IGZ1bmN0aW9uIGZuRGVmKGZuKSB7XG4gICAgdmFyIGxvY2FscyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoaXNBcnJheShmbikpIHtcbiAgICAgICAgZm4gPSBhbm5vdGF0ZShmbi5zbGljZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBcIicgKyBmbiArICdcIi4gRXhwZWN0ZWQgYSBmdW5jdGlvbiEnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaW5qZWN0ID0gZm4uJGluamVjdCB8fCBwYXJzZShmbik7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IGluamVjdC5tYXAoZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKGhhc1Byb3AobG9jYWxzLCBkZXApKSB7XG4gICAgICAgIHJldHVybiBsb2NhbHNbZGVwXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXQoZGVwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBmbjogZm4sXG4gICAgICBkZXBlbmRlbmNpZXM6IGRlcGVuZGVuY2llc1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGluc3RhbnRpYXRlID0gZnVuY3Rpb24gaW5zdGFudGlhdGUoVHlwZSkge1xuICAgIHZhciBfZm5EZWYgPSBmbkRlZihUeXBlKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gX2ZuRGVmLmRlcGVuZGVuY2llcyxcbiAgICAgICAgZm4gPSBfZm5EZWYuZm47XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShmbiwgW251bGxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGVwZW5kZW5jaWVzKSkpKSgpO1xuICB9O1xuXG4gIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UoZnVuYywgY29udGV4dCwgbG9jYWxzKSB7XG4gICAgdmFyIF9mbkRlZjIgPSBmbkRlZihmdW5jLCBsb2NhbHMpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSBfZm5EZWYyLmRlcGVuZGVuY2llcyxcbiAgICAgICAgZm4gPSBfZm5EZWYyLmZuO1xuXG4gICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIFtjb250ZXh0XS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGRlcGVuZGVuY2llcykpKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlUHJpdmF0ZUluamVjdG9yRmFjdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZVByaXZhdGVJbmplY3RvckZhY3RvcnkocHJpdmF0ZUNoaWxkSW5qZWN0b3IpIHtcbiAgICByZXR1cm4gYW5ub3RhdGUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHByaXZhdGVDaGlsZEluamVjdG9yLmdldChrZXkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBjcmVhdGVDaGlsZCA9IGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKG1vZHVsZXMsIGZvcmNlTmV3SW5zdGFuY2VzKSB7XG4gICAgaWYgKGZvcmNlTmV3SW5zdGFuY2VzICYmIGZvcmNlTmV3SW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgdmFyIGZyb21QYXJlbnRNb2R1bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdmFyIG1hdGNoZWRTY29wZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICB2YXIgcHJpdmF0ZUluamVjdG9yc0NhY2hlID0gW107XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzID0gW107XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkRmFjdG9yaWVzID0gW107XG5cbiAgICAgIHZhciBwcm92aWRlcjtcbiAgICAgIHZhciBjYWNoZUlkeDtcbiAgICAgIHZhciBwcml2YXRlQ2hpbGRJbmplY3RvcjtcbiAgICAgIHZhciBwcml2YXRlQ2hpbGRJbmplY3RvckZhY3Rvcnk7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIHByb3ZpZGVycykge1xuICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVyc1tuYW1lXTtcblxuICAgICAgICBpZiAoZm9yY2VOZXdJbnN0YW5jZXMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAocHJvdmlkZXJbMl0gPT09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgY2FjaGVJZHggPSBwcml2YXRlSW5qZWN0b3JzQ2FjaGUuaW5kZXhPZihwcm92aWRlclszXSk7XG4gICAgICAgICAgICBpZiAoY2FjaGVJZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHByaXZhdGVDaGlsZEluamVjdG9yID0gcHJvdmlkZXJbM10uY3JlYXRlQ2hpbGQoW10sIGZvcmNlTmV3SW5zdGFuY2VzKTtcbiAgICAgICAgICAgICAgcHJpdmF0ZUNoaWxkSW5qZWN0b3JGYWN0b3J5ID0gY3JlYXRlUHJpdmF0ZUluamVjdG9yRmFjdG9yeShwcml2YXRlQ2hpbGRJbmplY3Rvcik7XG4gICAgICAgICAgICAgIHByaXZhdGVJbmplY3RvcnNDYWNoZS5wdXNoKHByb3ZpZGVyWzNdKTtcbiAgICAgICAgICAgICAgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzLnB1c2gocHJpdmF0ZUNoaWxkSW5qZWN0b3IpO1xuICAgICAgICAgICAgICBwcml2YXRlQ2hpbGRGYWN0b3JpZXMucHVzaChwcml2YXRlQ2hpbGRJbmplY3RvckZhY3RvcnkpO1xuICAgICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3ByaXZhdGVDaGlsZEluamVjdG9yRmFjdG9yeSwgbmFtZSwgJ3ByaXZhdGUnLCBwcml2YXRlQ2hpbGRJbmplY3Rvcl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3ByaXZhdGVDaGlsZEZhY3Rvcmllc1tjYWNoZUlkeF0sIG5hbWUsICdwcml2YXRlJywgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzW2NhY2hlSWR4XV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21QYXJlbnRNb2R1bGVbbmFtZV0gPSBbcHJvdmlkZXJbMl0sIHByb3ZpZGVyWzFdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF0Y2hlZFNjb3Blc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHByb3ZpZGVyWzJdID09PSAnZmFjdG9yeScgfHwgcHJvdmlkZXJbMl0gPT09ICd0eXBlJykgJiYgcHJvdmlkZXJbMV0uJHNjb3BlKSB7XG4gICAgICAgICAgLyoganNoaW50IC1XMDgzICovXG4gICAgICAgICAgZm9yY2VOZXdJbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlclsxXS4kc2NvcGUuaW5kZXhPZihzY29wZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIGZyb21QYXJlbnRNb2R1bGVbbmFtZV0gPSBbcHJvdmlkZXJbMl0sIHByb3ZpZGVyWzFdXTtcbiAgICAgICAgICAgICAgbWF0Y2hlZFNjb3Blc1tzY29wZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcmNlTmV3SW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgIGlmICghbWF0Y2hlZFNjb3Blc1tzY29wZV0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHByb3ZpZGVyIGZvciBcIicgKyBzY29wZSArICdcIi4gQ2Fubm90IHVzZSBwcm92aWRlciBmcm9tIHRoZSBwYXJlbnQhJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBtb2R1bGVzLnVuc2hpZnQoZnJvbVBhcmVudE1vZHVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbmplY3Rvcihtb2R1bGVzLCBzZWxmKTtcbiAgfTtcblxuICB2YXIgZmFjdG9yeU1hcCA9IHtcbiAgICBmYWN0b3J5OiBpbnZva2UsXG4gICAgdHlwZTogaW5zdGFudGlhdGUsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgbW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGUpIHtcblxuICAgIGZ1bmN0aW9uIGFycmF5VW53cmFwKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZSAhPT0gJ3ZhbHVlJyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IGFubm90YXRlKHZhbHVlLnNsaWNlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVE9ETyh2b2p0YSk6IGhhbmRsZSB3cm9uZyBpbnB1dHMgKG1vZHVsZXMpXG4gICAgaWYgKG1vZHVsZSBpbnN0YW5jZW9mIE1vZHVsZSkge1xuICAgICAgbW9kdWxlLmZvckVhY2goZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBuYW1lID0gcHJvdmlkZXJbMF07XG4gICAgICAgIHZhciB0eXBlID0gcHJvdmlkZXJbMV07XG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3ZpZGVyWzJdO1xuXG4gICAgICAgIHByb3ZpZGVyc1tuYW1lXSA9IFtmYWN0b3J5TWFwW3R5cGVdLCBhcnJheVVud3JhcCh0eXBlLCB2YWx1ZSksIHR5cGVdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YobW9kdWxlKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAobW9kdWxlLl9fZXhwb3J0c19fKSB7XG4gICAgICAgIHZhciBjbG9uZWRNb2R1bGUgPSBPYmplY3Qua2V5cyhtb2R1bGUpLnJlZHVjZShmdW5jdGlvbiAobSwga2V5KSB7XG4gICAgICAgICAgaWYgKGtleS5zdWJzdHJpbmcoMCwgMikgIT09ICdfXycpIHtcbiAgICAgICAgICAgIG1ba2V5XSA9IG1vZHVsZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbiAgICAgICAgdmFyIHByaXZhdGVJbmplY3RvciA9IG5ldyBJbmplY3RvcigobW9kdWxlLl9fbW9kdWxlc19fIHx8IFtdKS5jb25jYXQoW2Nsb25lZE1vZHVsZV0pLCBzZWxmKTtcbiAgICAgICAgdmFyIGdldEZyb21Qcml2YXRlSW5qZWN0b3IgPSBhbm5vdGF0ZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHByaXZhdGVJbmplY3Rvci5nZXQoa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZHVsZS5fX2V4cG9ydHNfXy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBwcm92aWRlcnNba2V5XSA9IFtnZXRGcm9tUHJpdmF0ZUluamVjdG9yLCBrZXksICdwcml2YXRlJywgcHJpdmF0ZUluamVjdG9yXTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyhtb2R1bGUpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICBpZiAobW9kdWxlW25hbWVdWzJdID09PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyc1tuYW1lXSA9IG1vZHVsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgdHlwZSA9IG1vZHVsZVtuYW1lXVswXTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBtb2R1bGVbbmFtZV1bMV07XG5cbiAgICAgICAgICBwcm92aWRlcnNbbmFtZV0gPSBbZmFjdG9yeU1hcFt0eXBlXSwgYXJyYXlVbndyYXAodHlwZSwgdmFsdWUpLCB0eXBlXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBwdWJsaWMgQVBJXG4gIHRoaXMuZ2V0ID0gZ2V0O1xuICB0aGlzLmludm9rZSA9IGludm9rZTtcbiAgdGhpcy5pbnN0YW50aWF0ZSA9IGluc3RhbnRpYXRlO1xuICB0aGlzLmNyZWF0ZUNoaWxkID0gY3JlYXRlQ2hpbGQ7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbmV4cG9ydCB7IGFubm90YXRlLCBNb2R1bGUsIEluamVjdG9yIH07XG4iLCIvKiEgSGFtbWVyLkpTIC0gdjIuMC43IC0gMjAxNi0wNC0yMlxuICogaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSm9yaWsgVGFuZ2VsZGVyO1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgZXhwb3J0TmFtZSwgdW5kZWZpbmVkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogc2V0IGEgdGltZW91dCB3aXRoIGEgZ2l2ZW4gc2NvcGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gdGltZW91dFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNldFRpbWVvdXRDb250ZXh0KGZuLCB0aW1lb3V0LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYmluZEZuKGZuLCBjb250ZXh0KSwgdGltZW91dCk7XG59XG5cbi8qKlxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciBpO1xuXG4gICAgaWYgKCFvYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvYmouZm9yRWFjaCkge1xuICAgICAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gJ0RFUFJFQ0FURUQgTUVUSE9EOiAnICsgbmFtZSArICdcXG4nICsgbWVzc2FnZSArICcgQVQgXFxuJztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICAgICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG5cbiAgICAgICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG59IGVsc2Uge1xuICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbi8qKlxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbWVyZ2UgfHwgKG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIG1lcmdlKGRlc3QsIHNyYykge1xuICAgIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGUsXG4gICAgICAgIGNoaWxkUDtcblxuICAgIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICAgIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICAgIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGFzc2lnbihjaGlsZFAsIHByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiB1c2UgdGhlIHZhbDIgd2hlbiB2YWwxIGlzIHVuZGVmaW5lZFxuICogQHBhcmFtIHsqfSB2YWwxXG4gKiBAcGFyYW0geyp9IHZhbDJcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBpZlVuZGVmaW5lZCh2YWwxLCB2YWwyKSB7XG4gICAgcmV0dXJuICh2YWwxID09PSB1bmRlZmluZWQpID8gdmFsMiA6IHZhbDE7XG59XG5cbi8qKlxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICAgIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICAgIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCkgfHwgKCFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5cbi8qKlxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG4gICAgICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIHNvcnRVbmlxdWVBcnJheShhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICAgIHZhciBwcmVmaXgsIHByb3A7XG4gICAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgICAgICBwcm9wID0gKHByZWZpeCkgPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgICAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICAgIHJldHVybiAoZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93KTtcbn1cblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcblxudmFyIFNVUFBPUlRfVE9VQ0ggPSAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KTtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luZG93LCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xuXG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xuXG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcblxudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG5cbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcblxudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0O1xuXG4gICAgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuXG59XG5cbklucHV0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gICAgdmFyIFR5cGU7XG4gICAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICAgIGlmIChpbnB1dENsYXNzKSB7XG4gICAgICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICAgIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgICAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gICAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICAgICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gICAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgICAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IChUeXBlKShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gICAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBpc0ZpcnN0ID0gKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuICAgIHZhciBpc0ZpbmFsID0gKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuXG4gICAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gICAgfVxuXG4gICAgLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcbiAgICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7XG5cbiAgICAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcbiAgICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTtcblxuICAgIC8vIGVtaXQgc2VjcmV0IGV2ZW50XG4gICAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG5cbiAgICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gICAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICAgIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICAgIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cbiAgICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfVxuXG4gICAgLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuICAgIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dDtcbiAgICB2YXIgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG5cbiAgICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcblxuICAgIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuXG4gICAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICAgIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG5cbiAgICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gICAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICAgIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSAoYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcblxuICAgIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gICAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcblxuICAgIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogKChpbnB1dC5wb2ludGVycy5sZW5ndGggPlxuICAgICAgICBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycykgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyk7XG5cbiAgICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpO1xuXG4gICAgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIGlmIChoYXNQYXJlbnQoaW5wdXQuc3JjRXZlbnQudGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgICAgIHRhcmdldCA9IGlucHV0LnNyY0V2ZW50LnRhcmdldDtcbiAgICB9XG4gICAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG4gICAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gICAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICAgIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgICAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgICAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgICAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgICAgICB9O1xuXG4gICAgICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICAgICAgICB4OiBjZW50ZXIueCxcbiAgICAgICAgICAgIHk6IGNlbnRlci55XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gICAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQsXG4gICAgICAgIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wLFxuICAgICAgICB2ZWxvY2l0eSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVksIGRpcmVjdGlvbjtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgICAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG5cbiAgICAgICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgICAgdmVsb2NpdHlYID0gdi54O1xuICAgICAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgICAgIHZlbG9jaXR5ID0gKGFicyh2LngpID4gYWJzKHYueSkpID8gdi54IDogdi55O1xuICAgICAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuXG4gICAgICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgICAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgICAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICAgICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gICAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAgIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAgIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICAgIHZhciBwb2ludGVycyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgICAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICAgICAgfTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICAgICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgICAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICAgICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgICB9O1xufVxuXG4vKipcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG4gICAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgICAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHggPSAwLCB5ID0gMCwgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgICAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgICB9O1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICAgIH07XG59XG5cbi8qKlxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICAgIH1cblxuICAgIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cbiAgICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBwcm9wcyA9IFBST1BTX1hZO1xuICAgIH1cbiAgICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXSxcbiAgICAgICAgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQoKHggKiB4KSArICh5ICogeSkpO1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgIHByb3BzID0gUFJPUFNfWFk7XG4gICAgfVxuICAgIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dLFxuICAgICAgICB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICAgIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gICAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gICAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xuXG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcblxuLyoqXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB0aGlzLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcblxuICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoTW91c2VJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTUVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gICAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gICAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gICAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICAgIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTtcblxuLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAgIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgMzogSU5QVVRfVFlQRV9QRU4sXG4gICAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcbn07XG5cbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnO1xuXG4vLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcbmlmICh3aW5kb3cuTVNQb2ludGVyRXZlbnQgJiYgIXdpbmRvdy5Qb2ludGVyRXZlbnQpIHtcbiAgICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICAgIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG5cbi8qKlxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc3RvcmUgPSAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdKTtcbn1cblxuaW5oZXJpdChQb2ludGVyRXZlbnRJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gUEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICAgICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG5cbiAgICAgICAgdmFyIGlzVG91Y2ggPSAocG9pbnRlclR5cGUgPT0gSU5QVVRfVFlQRV9UT1VDSCk7XG5cbiAgICAgICAgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcbiAgICAgICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTtcblxuICAgICAgICAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICAgICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcbiAgICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuICAgICAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICAgICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcblxuLyoqXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB0aGlzLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTaW5nbGVUb3VjaElucHV0LCBJbnB1dCwge1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRFaGFuZGxlcihldikge1xuICAgICAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuICAgICAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgICAgIC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcbiAgICAgICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEB0aGlzIHtUb3VjaElucHV0fVxuICogQHBhcmFtIHtPYmplY3R9IGV2XG4gKiBAcGFyYW0ge051bWJlcn0gdHlwZSBmbGFnXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfEFycmF5fSBbYWxsLCBjaGFuZ2VkXVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gICAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuXG4vKipcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cbmZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy50YXJnZXRJZHMgPSB7fTtcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoVG91Y2hJbnB1dCwgSW5wdXQsIHtcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBNVEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG4gICAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQHRoaXMge1RvdWNoSW5wdXR9XG4gKiBAcGFyYW0ge09iamVjdH0gZXZcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8QXJyYXl9IFthbGwsIGNoYW5nZWRdXG4gKi9cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzO1xuXG4gICAgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcbiAgICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgICB9XG5cbiAgICB2YXIgaSxcbiAgICAgICAgdGFyZ2V0VG91Y2hlcyxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXSxcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG5cbiAgICAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG4gICAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uKHRvdWNoKSB7XG4gICAgICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICAgIH0pO1xuXG4gICAgLy8gY29sbGVjdCB0b3VjaGVzXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICAgIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuICAgICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gICAgICAgIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXNcbiAgICBdO1xufVxuXG4vKipcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KCkge1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgaGFuZGxlciA9IGJpbmRGbih0aGlzLmhhbmRsZXIsIHRoaXMpO1xuICAgIHRoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuICAgIHRoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuXG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFRvdWNoZXMgPSBbXTtcbn1cblxuaW5oZXJpdChUb3VjaE1vdXNlSW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRNRWhhbmRsZXIobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gKGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PSBJTlBVVF9UWVBFX1RPVUNIKSxcbiAgICAgICAgICAgIGlzTW91c2UgPSAoaW5wdXREYXRhLnBvaW50ZXJUeXBlID09IElOUFVUX1RZUEVfTU9VU0UpO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKHRoaXMsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgaW5wdXREYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gICAgdmFyIHRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXTtcblxuICAgIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgICAgICB2YXIgbGFzdFRvdWNoID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuICAgICAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcbiAgICAgICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICAgIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFgsIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgICAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KSwgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcbiAgICAgICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcblxuLy8gbWFnaWNhbCB0b3VjaEFjdGlvbiB2YWx1ZVxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbi8qKlxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xufVxuXG5Ub3VjaEFjdGlvbi5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgICBpZiAodmFsdWUgPT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgY29tcHV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgICAgICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHRzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjtcblxuICAgICAgICAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cbiAgICAgICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgICAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgICAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgICAgICAgLy9kbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcblxuICAgICAgICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICAgICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAgICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTm9uZSB8fFxuICAgICAgICAgICAgKGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHx8XG4gICAgICAgICAgICAoaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICAgKi9cbiAgICBwcmV2ZW50U3JjOiBmdW5jdGlvbihzcmNFdmVudCkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICAvLyBub25lXG4gICAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcblxuICAgIC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAgIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAgIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAgIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgLy8gcGFuLXggT1IgcGFuLXlcbiAgICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICAgIH1cblxuICAgIC8vIG1hbmlwdWxhdGlvblxuICAgIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgICB9XG5cbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gICAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHRvdWNoTWFwID0ge307XG4gICAgdmFyIGNzc1N1cHBvcnRzID0gd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLnN1cHBvcnRzO1xuICAgIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24odmFsKSB7XG5cbiAgICAgICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICAgICAgdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luZG93LkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG4vKipcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG5cbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xuXG4gICAgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuICAgIHRoaXMub3B0aW9ucy5lbmFibGUgPSBpZlVuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW5hYmxlLCB0cnVlKTtcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcblxuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xufVxuXG5SZWNvZ25pemVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAdmlydHVhbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgZGVmYXVsdHM6IHt9LFxuXG4gICAgLyoqXG4gICAgICogc2V0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG4gICAgICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgICAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBkcm9wUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVxdWlyZUZhaWx1cmU6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIGRyb3BSZXF1aXJlRmFpbHVyZTogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGhhc1JlcXVpcmVGYWlsdXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgICAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcbiAgICAgICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHsgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICAgICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuICAgICAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKi9cbiAgICB0cnlFbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2FuIHdlIGVtaXQ/XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuRW1pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAgICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICAgICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduKHt9LCBpbnB1dERhdGEpO1xuXG4gICAgICAgIC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuICAgICAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpO1xuXG4gICAgICAgIC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgICAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICogQHJldHVybnMge0NvbnN0fSBTVEFURVxuICAgICAqL1xuICAgIHByb2Nlc3M6IGZ1bmN0aW9uKGlucHV0RGF0YSkgeyB9LCAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgICAqIEB2aXJ0dWFsXG4gICAgICogQHJldHVybnMge0FycmF5fVxuICAgICAqL1xuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgICAqIEB2aXJ0dWFsXG4gICAgICovXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkgeyB9XG59O1xuXG4vKipcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtDb25zdH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgcmV0dXJuICdlbmQnO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgICAgIHJldHVybiAnbW92ZSc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgICAgIHJldHVybiAnc3RhcnQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge0NvbnN0fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgICBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgICAgIHJldHVybiAnZG93bic7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1VQKSB7XG4gICAgICAgIHJldHVybiAndXAnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICAgIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBBdHRyUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoQXR0clJlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICAgICAqIEBkZWZhdWx0IDFcbiAgICAgICAgICovXG4gICAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgICAqL1xuICAgIGF0dHJUZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICAgKi9cbiAgICBwcm9jZXNzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuXG4gICAgICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgICAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpO1xuXG4gICAgICAgIC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcbiAgICAgICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfVxufSk7XG5cbi8qKlxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQYW5SZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnBYID0gbnVsbDtcbiAgICB0aGlzLnBZID0gbnVsbDtcbn1cblxuaW5oZXJpdChQYW5SZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGFuUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH0sXG5cbiAgICBkaXJlY3Rpb25UZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTtcblxuICAgICAgICAvLyBsb2NrIHRvIGF4aXM/XG4gICAgICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAoeCA9PT0gMCkgPyBESVJFQ1RJT05fTk9ORSA6ICh4IDwgMCkgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgICAgICAgICBoYXNNb3ZlZCA9IHggIT0gdGhpcy5wWDtcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICh5ID09PSAwKSA/IERJUkVDVElPTl9OT05FIDogKHkgPCAwKSA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICAgICAgICAgIGhhc01vdmVkID0geSAhPSB0aGlzLnBZO1xuICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJlxuICAgICAgICAgICAgKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAoISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcblxuICAgICAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VwZXIuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChQaW5jaFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICAgICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdXBlci5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbn1cblxuaW5oZXJpdChQcmVzc1JlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFByZXNzUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgICBwb2ludGVyczogMSxcbiAgICAgICAgdGltZTogMjUxLCAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgICB0aHJlc2hvbGQ6IDkgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgICAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCAoaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0Q29udGV4dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZSwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH0sXG5cbiAgICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgfSxcblxuICAgIGVtaXQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5wdXQgJiYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArICd1cCcsIGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cbmZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChSb3RhdGVSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUm90YXRlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTd2lwZVJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBTd2lwZVJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICB9LFxuXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgICAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiZcbiAgICAgICAgICAgIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJlxuICAgICAgICAgICAgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmXG4gICAgICAgICAgICBpbnB1dC5tYXhQb2ludGVycyA9PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiZcbiAgICAgICAgICAgIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG4gICAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQSB0YXAgaXMgZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gVGFwUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG4gICAgdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIHRoaXMucENlbnRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbn1cblxuaW5oZXJpdChUYXBSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3RhcCcsXG4gICAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgICB0YXBzOiAxLFxuICAgICAgICBpbnRlcnZhbDogMzAwLCAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgICB0aW1lOiAyNTAsIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICAgIHRocmVzaG9sZDogOSwgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgICAgcG9zVGhyZXNob2xkOiAxMCAvLyBhIG11bHRpLXRhcCBjYW4gYmUgYSBiaXQgb2ZmIHRoZSBpbml0aWFsIHBvc2l0aW9uXG4gICAgfSxcblxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICAgICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICBpZiAoKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSAmJiAodGhpcy5jb3VudCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gKGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsKSA6IHRydWU7XG4gICAgICAgICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG5cbiAgICAgICAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICAgICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgICAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgICAgIC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgICAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG4gICAgICAgICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuICAgICAgICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAgICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgZmFpbFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5yZWNvZ25pemVycyA9IGlmVW5kZWZpbmVkKG9wdGlvbnMucmVjb2duaXplcnMsIEhhbW1lci5kZWZhdWx0cy5wcmVzZXQpO1xuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAY29uc3Qge3N0cmluZ31cbiAqL1xuSGFtbWVyLlZFUlNJT04gPSAnMi4wLjcnO1xuXG4vKipcbiAqIGRlZmF1bHQgc2V0dGluZ3NcbiAqIEBuYW1lc3BhY2VcbiAqL1xuSGFtbWVyLmRlZmF1bHRzID0ge1xuICAgIC8qKlxuICAgICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICAgKi9cbiAgICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgaW5wdXRDbGFzczogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICAgICAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIHByZXNldDogW1xuICAgICAgICAvLyBSZWNvZ25pemVyQ2xhc3MsIG9wdGlvbnMsIFtyZWNvZ25pemVXaXRoLCAuLi5dLCBbcmVxdWlyZUZhaWx1cmUsIC4uLl1cbiAgICAgICAgW1JvdGF0ZVJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfV0sXG4gICAgICAgIFtQaW5jaFJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfSwgWydyb3RhdGUnXV0sXG4gICAgICAgIFtTd2lwZVJlY29nbml6ZXIsIHtkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMfV0sXG4gICAgICAgIFtQYW5SZWNvZ25pemVyLCB7ZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTH0sIFsnc3dpcGUnXV0sXG4gICAgICAgIFtUYXBSZWNvZ25pemVyXSxcbiAgICAgICAgW1RhcFJlY29nbml6ZXIsIHtldmVudDogJ2RvdWJsZXRhcCcsIHRhcHM6IDJ9LCBbJ3RhcCddXSxcbiAgICAgICAgW1ByZXNzUmVjb2duaXplcl1cbiAgICBdLFxuXG4gICAgLyoqXG4gICAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqL1xuICAgIGNzc1Byb3BzOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgdXNlclNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaFNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaENhbGxvdXQ6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgY29udGVudFpvb21pbmc6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAgICovXG4gICAgICAgIHVzZXJEcmFnOiAnbm9uZScsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICAgICAqL1xuICAgICAgICB0YXBIaWdobGlnaHRDb2xvcjogJ3JnYmEoMCwwLDAsMCknXG4gICAgfVxufTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcblxuLyoqXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduKHt9LCBIYW1tZXIuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuXG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG5cbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICB2YXIgcmVjb2duaXplciA9IHRoaXMuYWRkKG5ldyAoaXRlbVswXSkoaXRlbVsxXSkpO1xuICAgICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xufVxuXG5NYW5hZ2VyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzZXQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcbiAgICAgICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICAgICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXI7XG4gICAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICAgICAgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAgICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuICAgICAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjtcblxuICAgICAgICAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgICAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cbiAgICAgICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IChjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSkge1xuICAgICAgICAgICAgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07XG5cbiAgICAgICAgICAgIC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgICAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAgICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgICAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICAgICAgICAgICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkgeyAvLyAzXG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG4gICAgICAgICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgICAgICAgICBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT0gcmVjb2duaXplcikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgICAqL1xuICAgIGFkZDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ2FkZCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlbW92ZSBleGlzdGluZ1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICAgICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcblxuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ3JlbW92ZScsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTtcblxuICAgICAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuICAgICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHJlY29nbml6ZXIpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgZXZlbnRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvZmY6IGZ1bmN0aW9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbihldmVudCwgZGF0YSkge1xuICAgICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG4gICAgICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS50eXBlID0gZXZlbnQ7XG4gICAgICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHByb3A7XG4gICAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcbiAgICAgICAgaWYgKGFkZCkge1xuICAgICAgICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCAnJztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghYWRkKSB7XG4gICAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB9XG59XG5cbi8qKlxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICAgIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG5cbmFzc2lnbihIYW1tZXIsIHtcbiAgICBJTlBVVF9TVEFSVDogSU5QVVRfU1RBUlQsXG4gICAgSU5QVVRfTU9WRTogSU5QVVRfTU9WRSxcbiAgICBJTlBVVF9FTkQ6IElOUFVUX0VORCxcbiAgICBJTlBVVF9DQU5DRUw6IElOUFVUX0NBTkNFTCxcblxuICAgIFNUQVRFX1BPU1NJQkxFOiBTVEFURV9QT1NTSUJMRSxcbiAgICBTVEFURV9CRUdBTjogU1RBVEVfQkVHQU4sXG4gICAgU1RBVEVfQ0hBTkdFRDogU1RBVEVfQ0hBTkdFRCxcbiAgICBTVEFURV9FTkRFRDogU1RBVEVfRU5ERUQsXG4gICAgU1RBVEVfUkVDT0dOSVpFRDogU1RBVEVfUkVDT0dOSVpFRCxcbiAgICBTVEFURV9DQU5DRUxMRUQ6IFNUQVRFX0NBTkNFTExFRCxcbiAgICBTVEFURV9GQUlMRUQ6IFNUQVRFX0ZBSUxFRCxcblxuICAgIERJUkVDVElPTl9OT05FOiBESVJFQ1RJT05fTk9ORSxcbiAgICBESVJFQ1RJT05fTEVGVDogRElSRUNUSU9OX0xFRlQsXG4gICAgRElSRUNUSU9OX1JJR0hUOiBESVJFQ1RJT05fUklHSFQsXG4gICAgRElSRUNUSU9OX1VQOiBESVJFQ1RJT05fVVAsXG4gICAgRElSRUNUSU9OX0RPV046IERJUkVDVElPTl9ET1dOLFxuICAgIERJUkVDVElPTl9IT1JJWk9OVEFMOiBESVJFQ1RJT05fSE9SSVpPTlRBTCxcbiAgICBESVJFQ1RJT05fVkVSVElDQUw6IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICBESVJFQ1RJT05fQUxMOiBESVJFQ1RJT05fQUxMLFxuXG4gICAgTWFuYWdlcjogTWFuYWdlcixcbiAgICBJbnB1dDogSW5wdXQsXG4gICAgVG91Y2hBY3Rpb246IFRvdWNoQWN0aW9uLFxuXG4gICAgVG91Y2hJbnB1dDogVG91Y2hJbnB1dCxcbiAgICBNb3VzZUlucHV0OiBNb3VzZUlucHV0LFxuICAgIFBvaW50ZXJFdmVudElucHV0OiBQb2ludGVyRXZlbnRJbnB1dCxcbiAgICBUb3VjaE1vdXNlSW5wdXQ6IFRvdWNoTW91c2VJbnB1dCxcbiAgICBTaW5nbGVUb3VjaElucHV0OiBTaW5nbGVUb3VjaElucHV0LFxuXG4gICAgUmVjb2duaXplcjogUmVjb2duaXplcixcbiAgICBBdHRyUmVjb2duaXplcjogQXR0clJlY29nbml6ZXIsXG4gICAgVGFwOiBUYXBSZWNvZ25pemVyLFxuICAgIFBhbjogUGFuUmVjb2duaXplcixcbiAgICBTd2lwZTogU3dpcGVSZWNvZ25pemVyLFxuICAgIFBpbmNoOiBQaW5jaFJlY29nbml6ZXIsXG4gICAgUm90YXRlOiBSb3RhdGVSZWNvZ25pemVyLFxuICAgIFByZXNzOiBQcmVzc1JlY29nbml6ZXIsXG5cbiAgICBvbjogYWRkRXZlbnRMaXN0ZW5lcnMsXG4gICAgb2ZmOiByZW1vdmVFdmVudExpc3RlbmVycyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIG1lcmdlOiBtZXJnZSxcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBpbmhlcml0OiBpbmhlcml0LFxuICAgIGJpbmRGbjogYmluZEZuLFxuICAgIHByZWZpeGVkOiBwcmVmaXhlZFxufSk7XG5cbi8vIHRoaXMgcHJldmVudHMgZXJyb3JzIHdoZW4gSGFtbWVyIGlzIGxvYWRlZCBpbiB0aGUgcHJlc2VuY2Ugb2YgYW4gQU1EXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cbnZhciBmcmVlR2xvYmFsID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmZyZWVHbG9iYWwuSGFtbWVyID0gSGFtbWVyO1xuXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSGFtbWVyO1xuICAgIH0pO1xufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBIYW1tZXI7XG59IGVsc2Uge1xuICAgIHdpbmRvd1tleHBvcnROYW1lXSA9IEhhbW1lcjtcbn1cblxufSkod2luZG93LCBkb2N1bWVudCwgJ0hhbW1lcicpO1xuIiwidmFyIGhhdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdHMsIGJhc2UpIHtcbiAgICBpZiAoIWJhc2UpIGJhc2UgPSAxNjtcbiAgICBpZiAoYml0cyA9PT0gdW5kZWZpbmVkKSBiaXRzID0gMTI4O1xuICAgIGlmIChiaXRzIDw9IDApIHJldHVybiAnMCc7XG4gICAgXG4gICAgdmFyIGRpZ2l0cyA9IE1hdGgubG9nKE1hdGgucG93KDIsIGJpdHMpKSAvIE1hdGgubG9nKGJhc2UpO1xuICAgIGZvciAodmFyIGkgPSAyOyBkaWdpdHMgPT09IEluZmluaXR5OyBpICo9IDIpIHtcbiAgICAgICAgZGlnaXRzID0gTWF0aC5sb2coTWF0aC5wb3coMiwgYml0cyAvIGkpKSAvIE1hdGgubG9nKGJhc2UpICogaTtcbiAgICB9XG4gICAgXG4gICAgdmFyIHJlbSA9IGRpZ2l0cyAtIE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgICBcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBNYXRoLmZsb29yKGRpZ2l0cyk7IGkrKykge1xuICAgICAgICB2YXIgeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJhc2UpLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICByZXMgPSB4ICsgcmVzO1xuICAgIH1cbiAgICBcbiAgICBpZiAocmVtKSB7XG4gICAgICAgIHZhciBiID0gTWF0aC5wb3coYmFzZSwgcmVtKTtcbiAgICAgICAgdmFyIHggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBiKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgcmVzID0geCArIHJlcztcbiAgICB9XG4gICAgXG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHJlcywgYmFzZSk7XG4gICAgaWYgKHBhcnNlZCAhPT0gSW5maW5pdHkgJiYgcGFyc2VkID49IE1hdGgucG93KDIsIGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBoYXQoYml0cywgYmFzZSlcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gcmVzO1xufTtcblxuaGF0LnJhY2sgPSBmdW5jdGlvbiAoYml0cywgYmFzZSwgZXhwYW5kQnkpIHtcbiAgICB2YXIgZm4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgaXRlcnMgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoaXRlcnMgKysgPiAxMCkge1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRCeSkgYml0cyArPSBleHBhbmRCeTtcbiAgICAgICAgICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkgSUQgY29sbGlzaW9ucywgdXNlIG1vcmUgYml0cycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGhhdChiaXRzLCBiYXNlKTtcbiAgICAgICAgfSB3aGlsZSAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoaGF0cywgaWQpKTtcbiAgICAgICAgXG4gICAgICAgIGhhdHNbaWRdID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG4gICAgdmFyIGhhdHMgPSBmbi5oYXRzID0ge307XG4gICAgXG4gICAgZm4uZ2V0ID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHJldHVybiBmbi5oYXRzW2lkXTtcbiAgICB9O1xuICAgIFxuICAgIGZuLnNldCA9IGZ1bmN0aW9uIChpZCwgdmFsdWUpIHtcbiAgICAgICAgZm4uaGF0c1tpZF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgXG4gICAgZm4uYml0cyA9IGJpdHMgfHwgMTI4O1xuICAgIGZuLmJhc2UgPSBiYXNlIHx8IDE2O1xuICAgIHJldHVybiBmbjtcbn07XG4iLCJpbXBvcnQgaGF0IGZyb20gJ2hhdCc7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaWQgZ2VuZXJhdG9yIC8gY2FjaGUgaW5zdGFuY2UuXG4gKlxuICogWW91IG1heSBvcHRpb25hbGx5IHByb3ZpZGUgYSBzZWVkIHRoYXQgaXMgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBwYXJhbSB7U2VlZH0gc2VlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJZHMoc2VlZCkge1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJZHMpKSB7XG4gICAgcmV0dXJuIG5ldyBJZHMoc2VlZCk7XG4gIH1cblxuICBzZWVkID0gc2VlZCB8fCBbIDEyOCwgMzYsIDEgXTtcbiAgdGhpcy5fc2VlZCA9IHNlZWQubGVuZ3RoID8gaGF0LnJhY2soc2VlZFswXSwgc2VlZFsxXSwgc2VlZFsyXSkgOiBzZWVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV4dCBpZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2VsZW1lbnRdIGVsZW1lbnQgdG8gYmluZCB0aGUgaWQgdG9cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGlkXG4gKi9cbklkcy5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuX3NlZWQoZWxlbWVudCB8fCB0cnVlKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYSBuZXh0IGlkIHdpdGggYSBnaXZlbiBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtlbGVtZW50XSBlbGVtZW50IHRvIGJpbmQgdGhlIGlkIHRvXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBpZFxuICovXG5JZHMucHJvdG90eXBlLm5leHRQcmVmaXhlZCA9IGZ1bmN0aW9uKHByZWZpeCwgZWxlbWVudCkge1xuICB2YXIgaWQ7XG5cbiAgZG8ge1xuICAgIGlkID0gcHJlZml4ICsgdGhpcy5uZXh0KHRydWUpO1xuICB9IHdoaWxlICh0aGlzLmFzc2lnbmVkKGlkKSk7XG5cbiAgLy8gY2xhaW0ge3ByZWZpeH17cmFuZG9tfVxuICB0aGlzLmNsYWltKGlkLCBlbGVtZW50KTtcblxuICAvLyByZXR1cm5cbiAgcmV0dXJuIGlkO1xufTtcblxuLyoqXG4gKiBNYW51YWxseSBjbGFpbSBhbiBleGlzdGluZyBpZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZWxlbWVudF0gZWxlbWVudCB0aGUgaWQgaXMgY2xhaW1lZCBieVxuICovXG5JZHMucHJvdG90eXBlLmNsYWltID0gZnVuY3Rpb24oaWQsIGVsZW1lbnQpIHtcbiAgdGhpcy5fc2VlZC5zZXQoaWQsIGVsZW1lbnQgfHwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGlkXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5JZHMucHJvdG90eXBlLmFzc2lnbmVkID0gZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHRoaXMuX3NlZWQuZ2V0KGlkKSB8fCBmYWxzZTtcbn07XG5cbi8qKlxuICogVW5jbGFpbSBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGlkIHRoZSBpZCB0byB1bmNsYWltXG4gKi9cbklkcy5wcm90b3R5cGUudW5jbGFpbSA9IGZ1bmN0aW9uKGlkKSB7XG4gIGRlbGV0ZSB0aGlzLl9zZWVkLmhhdHNbaWRdO1xufTtcblxuXG4vKipcbiAqIENsZWFyIGFsbCBjbGFpbWVkIGlkcy5cbiAqL1xuSWRzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBoYXRzID0gdGhpcy5fc2VlZC5oYXRzLFxuICAgICAgaWQ7XG5cbiAgZm9yIChpZCBpbiBoYXRzKSB7XG4gICAgdGhpcy51bmNsYWltKGlkKTtcbiAgfVxufTsiLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNS4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMC0wNS0wNFQyMjo0OVpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuICAgICAgLy8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG4gICAgICAvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiO1xuICB9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy41LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjVcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMjAtMDMtMTRcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93ICkge1xudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKCB7fSApLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaE5hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFsgaSBdID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58XCIgK1xuXHRcdFwiaXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV1cblx0XHQvLyBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdHJldHVybiBub25IZXggP1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdG5vbkhleCA6XG5cblx0XHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICtcblx0XHRcdFx0Y2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAoIHRhcmdldFsgaisrIF0gPSBlbHNbIGkrKyBdICkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQoIG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmNvbWJpbmF0b3JzLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT09IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KCBcInxcIiApLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyWyBpIF0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIubmV4dFNpYmxpbmcgKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAoIG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBtYXN0ZXIudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXN0ZXIucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSwgZG9jICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4XCI7XG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0ICkgPiAzO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgIzEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRyY3VzdG9tUHJvcCA9IC9eLS0vLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveC5cblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDEwIC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBpbiBzb21lIGNhc2VzIElFIDkgZG9lc24ndCBzdWZmZXIgZnJvbSB0aGlzIGlzc3VlLlxuXHRcdCFzdXBwb3J0LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkgJiYgbm9kZU5hbWUoIGVsZW0sIFwidHJcIiApIHx8XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0XHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdFx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cblx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZFxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBfaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IChcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBIYW5kbGU6IHJlZ3VsYXIgbm9kZXMgKHZpYSBgdGhpcy5vd25lckRvY3VtZW50YCksIHdpbmRvd1xuXHRcdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSB7IGd1aWQ6IERhdGUubm93KCkgfTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHRcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJiBqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMudG9wID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRwcm9wcy50b3AgKz0gXCJweFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMubGVmdCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0cHJvcHMubGVmdCArPSBcInB4XCI7XG5cdFx0XHR9XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblxuXHRcdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdFx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdFx0fTtcblx0fSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fZGlyX18gPSAxO1xuICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICB0aGlzLl9faXRlcmF0ZWVzX18gPSBbXTtcbiAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbn1cblxuLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXp5V3JhcHBlcjtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvZGFzaFdyYXBwZXI7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQWdncmVnYXRvcmAgZm9yIGFycmF5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlBZ2dyZWdhdG9yKGFycmF5LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUFnZ3JlZ2F0b3I7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFnZ3JlZ2F0b3I7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iLCJ2YXIgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbHRlcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCJ2YXIgY3JlYXRlQmFzZUZvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VGb3InKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGb3I7XG4iLCJ2YXIgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yT3duO1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlTWF0Y2hlcyA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzJyksXG4gICAgYmFzZU1hdGNoZXNQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgcHJvcGVydHkgPSByZXF1aXJlKCcuL3Byb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUl0ZXJhdGVlO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKipcbiAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUxvZGFzaDtcbiIsInZhciBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hcDtcbiIsInZhciBiYXNlSXNNYXRjaCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hdGNoJyksXG4gICAgZ2V0TWF0Y2hEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWF0Y2hEYXRhJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlcztcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnLi9nZXQnKSxcbiAgICBoYXNJbiA9IHJlcXVpcmUoJy4vaGFzSW4nKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzUHJvcGVydHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldERhdGFgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0RGF0YSA9ICFtZXRhTWFwID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBkYXRhKSB7XG4gIG1ldGFNYXAuc2V0KGZ1bmMsIGRhdGEpO1xuICByZXR1cm4gZnVuYztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldERhdGE7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVZhbHVlcztcbiIsInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VVbmlxID0gcmVxdWlyZSgnLi9fYmFzZVVuaXEnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgYXJyYXkgPSBhcnJheXNbaW5kZXhdLFxuICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChvdGhJbmRleCAhPSBpbmRleCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VYb3I7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGBpZGVudGl0eWAgaWYgaXQncyBub3QgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBjYXN0IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nID8gdmFsdWUgOiBpZGVudGl0eTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0RnVuY3Rpb247XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJncztcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5T2JqZWN0O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsIi8qKlxuICogR2V0cyB0aGUgbnVtYmVyIG9mIGBwbGFjZWhvbGRlcmAgb2NjdXJyZW5jZXMgaW4gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgY291bnQuXG4gKi9cbmZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IDA7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGFycmF5W2xlbmd0aF0gPT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICArK3Jlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3VudEhvbGRlcnM7XG4iLCJ2YXIgYXJyYXlBZ2dyZWdhdG9yID0gcmVxdWlyZSgnLi9fYXJyYXlBZ2dyZWdhdG9yJyksXG4gICAgYmFzZUFnZ3JlZ2F0b3IgPSByZXF1aXJlKCcuL19iYXNlQWdncmVnYXRvcicpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWdncmVnYXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgc2V0dGVyLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQWdncmVnYXRvcjtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VFYWNoO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCaW5kO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3RvcjtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwidmFyIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYF8uZmluZGAgb3IgYF8uZmluZExhc3RgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5kSW5kZXhGdW5jIFRoZSBmdW5jdGlvbiB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGluZGV4LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmluZChmaW5kSW5kZXhGdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgIGNvbGxlY3Rpb24gPSBrZXlzKGNvbGxlY3Rpb24pO1xuICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCk7XG4gICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUZpbmQ7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgY291bnRIb2xkZXJzID0gcmVxdWlyZSgnLi9fY291bnRIb2xkZXJzJyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlb3JkZXIgPSByZXF1aXJlKCcuL19yZW9yZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUh5YnJpZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZ1xuICogb2YgYHRoaXNBcmdgIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZWZ0TGVuZ3RoICsgYXJnc0xlbmd0aCksXG4gICAgICAgIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcblxuICAgIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICAgIGFyZ3NbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgfVxuICAgIHdoaWxlIChhcmdzTGVuZ3RoLS0pIHtcbiAgICAgIGFyZ3NbbGVmdEluZGV4KytdID0gYXJndW1lbnRzWysrYXJnc0luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5KGZuLCBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUGFydGlhbDtcbiIsInZhciBpc0xhemlhYmxlID0gcmVxdWlyZSgnLi9faXNMYXppYWJsZScpLFxuICAgIHNldERhdGEgPSByZXF1aXJlKCcuL19zZXREYXRhJyksXG4gICAgc2V0V3JhcFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0V3JhcFRvU3RyaW5nJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGBmdW5jYCB3cmFwcGVyLlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQ3VycnkgPSBiaXRtYXNrICYgV1JBUF9DVVJSWV9GTEFHLFxuICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICBuZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBwYXJ0aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICBiaXRtYXNrICY9IH4oaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHIDogV1JBUF9QQVJUSUFMX0ZMQUcpO1xuXG4gIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgfVxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICBuZXdIb2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgfVxuICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlY3Vycnk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBjcmVhdGVCaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlQmluZCcpLFxuICAgIGNyZWF0ZUN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3VycnknKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVQYXJ0aWFsID0gcmVxdWlyZSgnLi9fY3JlYXRlUGFydGlhbCcpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgbWVyZ2VEYXRhID0gcmVxdWlyZSgnLi9fbWVyZ2VEYXRhJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgICAxIC0gYF8uYmluZGBcbiAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gKiAgICA4IC0gYF8uY3VycnlgXG4gKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAqICAxMjggLSBgXy5yZWFyZ2BcbiAqICAyNTYgLSBgXy5hcnlgXG4gKiAgNTEyIC0gYF8uZmxpcGBcbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICBpZiAoZGF0YSkge1xuICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgfVxuICBmdW5jID0gbmV3RGF0YVswXTtcbiAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgfVxuICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgfVxuICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlV3JhcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKTtcblxuLyoqXG4gKiBHZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKi9cbnZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykge1xuICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldERhdGE7XG4iLCJ2YXIgcmVhbE5hbWVzID0gcmVxdWlyZSgnLi9fcmVhbE5hbWVzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gKGZ1bmMubmFtZSArICcnKSxcbiAgICAgIGFycmF5ID0gcmVhbE5hbWVzW3Jlc3VsdF0sXG4gICAgICBsZW5ndGggPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcywgcmVzdWx0KSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGRhdGEgPSBhcnJheVtsZW5ndGhdLFxuICAgICAgICBvdGhlckZ1bmMgPSBkYXRhLmZ1bmM7XG4gICAgaWYgKG90aGVyRnVuYyA9PSBudWxsIHx8IG90aGVyRnVuYyA9PSBmdW5jKSB7XG4gICAgICByZXR1cm4gZGF0YS5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEZ1bmNOYW1lO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRIb2xkZXIoZnVuYykge1xuICB2YXIgb2JqZWN0ID0gZnVuYztcbiAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRIb2xkZXI7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWF0Y2hEYXRhO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbi8qKlxuICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0V3JhcERldGFpbHM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LztcblxuLyoqXG4gKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRXcmFwRGV0YWlscztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIGdldEZ1bmNOYW1lID0gcmVxdWlyZSgnLi9fZ2V0RnVuY05hbWUnKSxcbiAgICBsb2Rhc2ggPSByZXF1aXJlKCcuL3dyYXBwZXJMb2Rhc2gnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGF6aWFibGU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAqXG4gKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICB2YXIgaXNDb21ibyA9XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgdmFsdWUgPSBzb3VyY2VbNV07XG4gIGlmICh2YWx1ZSkge1xuICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgdmFsdWUgPSBzb3VyY2VbN107XG4gIGlmICh2YWx1ZSkge1xuICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlRGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogUmVvcmRlciBgYXJyYXlgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGVsZW1lbnQgYXRcbiAqIHRoZSBmaXJzdCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIGVsZW1lbnQgYXRcbiAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJyYXkgaW5kZXhlcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiByZW9yZGVyKGFycmF5LCBpbmRleGVzKSB7XG4gIHZhciBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICBvbGRBcnJheSA9IGNvcHlBcnJheShhcnJheSk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgIGFycmF5W2xlbmd0aF0gPSBpc0luZGV4KGluZGV4LCBhcnJMZW5ndGgpID8gb2xkQXJyYXlbaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW9yZGVyO1xuIiwiLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXBsYWNlSG9sZGVycztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICpcbiAqICoqTm90ZToqKiBJZiB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgaG90LCBpLmUuIGlzIGludm9rZWQgYSBsb3QgaW4gYSBzaG9ydFxuICogcGVyaW9kIG9mIHRpbWUsIGl0IHdpbGwgdHJpcCBpdHMgYnJlYWtlciBhbmQgdHJhbnNpdGlvbiB0byBhbiBpZGVudGl0eVxuICogZnVuY3Rpb24gdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlXG4gKiBbVjggaXNzdWUgMjA3MF0oaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXREYXRhID0gc2hvcnRPdXQoYmFzZVNldERhdGEpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldERhdGE7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGdldFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fZ2V0V3JhcERldGFpbHMnKSxcbiAgICBpbnNlcnRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2luc2VydFdyYXBEZXRhaWxzJyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpLFxuICAgIHVwZGF0ZVdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fdXBkYXRlV3JhcERldGFpbHMnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICovXG5mdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFdyYXBUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB3cmFwcGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZXIgVGhlIHdyYXBwZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci5cbiAqL1xuZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpIHtcbiAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgIHJldHVybiB3cmFwcGVyLmNsb25lKCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZXIuX19jaGFpbl9fKTtcbiAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHdyYXBwZXIuX19hY3Rpb25zX18pO1xuICByZXN1bHQuX19pbmRleF9fICA9IHdyYXBwZXIuX19pbmRleF9fO1xuICByZXN1bHQuX192YWx1ZXNfXyA9IHdyYXBwZXIuX192YWx1ZXNfXztcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyQ2xvbmU7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3JlYXRlQXNzaWduZXIgPSByZXF1aXJlKCcuL19jcmVhdGVBc3NpZ25lcicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH1cbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIG5vdyA9IHJlcXVpcmUoJy4vbm93JyksXG4gICAgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIGJhc2VGaWx0ZXIgPSByZXF1aXJlKCcuL19iYXNlRmlsdGVyJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgYWxsIGVsZW1lbnRzXG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnJlbW92ZWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICogQHNlZSBfLnJlamVjdFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAqIF07XG4gKlxuICogXy5maWx0ZXIodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBDb21iaW5pbmcgc2V2ZXJhbCBwcmVkaWNhdGVzIHVzaW5nIGBfLm92ZXJFdmVyeWAgb3IgYF8ub3ZlclNvbWVgLlxuICogXy5maWx0ZXIodXNlcnMsIF8ub3ZlclNvbWUoW3sgJ2FnZSc6IDM2IH0sIFsnYWdlJywgNDBdXSkpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ2Jhcm5leSddXG4gKi9cbmZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyO1xuIiwidmFyIGNyZWF0ZUZpbmQgPSByZXF1aXJlKCcuL19jcmVhdGVGaW5kJyksXG4gICAgZmluZEluZGV4ID0gcmVxdWlyZSgnLi9maW5kSW5kZXgnKTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ3BlYmJsZXMnXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKi9cbnZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmQ7XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IDJcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRJbmRleDtcbiIsInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW5EZWVwKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgMywgNCwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIElORklOSVRZKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5EZWVwO1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKSxcbiAgICBjYXN0RnVuY3Rpb24gPSByZXF1aXJlKCcuL19jYXN0RnVuY3Rpb24nKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBlbGVtZW50LlxuICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiAqKk5vdGU6KiogQXMgd2l0aCBvdGhlciBcIkNvbGxlY3Rpb25zXCIgbWV0aG9kcywgb2JqZWN0cyB3aXRoIGEgXCJsZW5ndGhcIlxuICogcHJvcGVydHkgYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzZSBgXy5mb3JJbmBcbiAqIG9yIGBfLmZvck93bmAgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGFsaWFzIGVhY2hcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICogQHNlZSBfLmZvckVhY2hSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZvckVhY2goWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgYDFgIHRoZW4gYDJgLlxuICpcbiAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoIDogYmFzZUVhY2g7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGNhc3RGdW5jdGlvbihpdGVyYXRlZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBjcmVhdGVBZ2dyZWdhdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQWdncmVnYXRvcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFtcbiAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gKiAgIHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH1cbiAqIF07XG4gKlxuICogXy5rZXlCeShhcnJheSwgZnVuY3Rpb24obykge1xuICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICogfSk7XG4gKiAvLyA9PiB7ICdhJzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdkJzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gKlxuICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICogLy8gPT4geyAnbGVmdCc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAncmlnaHQnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAqL1xudmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCB2YWx1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlCeTtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgYmFzZU1hcCA9IHJlcXVpcmUoJy4vX2Jhc2VNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gKlxuICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gKiBgc2FtcGxlU2l6ZWAsIGBzbGljZWAsIGBzb21lYCwgYHNvcnRCeWAsIGBzcGxpdGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF1cbiAqXG4gKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gKi9cbmZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbm93O1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKlxuICogQW4gYWx0ZXJuYXRpdmUgdG8gYF8ucmVkdWNlYDsgdGhpcyBtZXRob2QgdHJhbnNmb3JtcyBgb2JqZWN0YCB0byBhIG5ld1xuICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gKiBwb3RlbnRpYWxseSBtdXRhdGluZyB0aGUgYGFjY3VtdWxhdG9yYCBvYmplY3QuIElmIGBhY2N1bXVsYXRvcmAgaXMgbm90XG4gKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50cmFuc2Zvcm0oWzIsIDMsIDRdLCBmdW5jdGlvbihyZXN1bHQsIG4pIHtcbiAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9LCBbXSk7XG4gKiAvLyA9PiBbNCwgOV1cbiAqXG4gKiBfLnRyYW5zZm9ybSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHtcbiAgICB2YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpc0FyciA/IG5ldyBDdG9yIDogW107XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXNGdW5jdGlvbihDdG9yKSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICB9XG4gIH1cbiAgKGlzQXJyTGlrZSA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmFuc2Zvcm07XG4iLCJ2YXIgYmFzZVZhbHVlcyA9IHJlcXVpcmUoJy4vX2Jhc2VWYWx1ZXMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy52YWx1ZXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLnZhbHVlcygnaGknKTtcbiAqIC8vID0+IFsnaCcsICdpJ11cbiAqL1xuZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGJhc2VYb3IgPSByZXF1aXJlKCcuL19iYXNlWG9yJyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgaXMgdGhlXG4gKiBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKVxuICogb2YgdGhlIGdpdmVuIGFycmF5cy4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXJcbiAqIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLndpdGhvdXRcbiAqIEBleGFtcGxlXG4gKlxuICogXy54b3IoWzIsIDFdLCBbMiwgM10pO1xuICogLy8gPT4gWzEsIDNdXG4gKi9cbnZhciB4b3IgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCkpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0geG9yO1xuIiwiLyoqXG4gKiBGbGF0dGVuIGFycmF5LCBvbmUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PD8+fSBhcnJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTw/Pn1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycik7XG59XG5cbnZhciBuYXRpdmVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgbmF0aXZlSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXNOaWwob2JqKSB7XG4gIHJldHVybiBvYmogPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBpc051bWJlcihvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICB2YXIgdGFnID0gbmF0aXZlVG9TdHJpbmcuY2FsbChvYmopO1xuICByZXR1cm4gdGFnID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8IHRhZyA9PT0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nIHx8IHRhZyA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IFByb3h5XSc7XG59XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG4vKipcbiAqIEVuc3VyZSBjb2xsZWN0aW9uIGlzIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5mdW5jdGlvbiBlbnN1cmVBcnJheShvYmopIHtcbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignbXVzdCBzdXBwbHkgYXJyYXknKTtcbn1cbi8qKlxuICogUmV0dXJuIHRydWUsIGlmIHRhcmdldCBvd25zIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGhhcyh0YXJnZXQsIGtleSkge1xuICByZXR1cm4gbmF0aXZlSGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSk7XG59XG5cbi8qKlxuICogRmluZCBlbGVtZW50IGluIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbnxPYmplY3R9IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZmluZChjb2xsZWN0aW9uLCBtYXRjaGVyKSB7XG4gIG1hdGNoZXIgPSB0b01hdGNoZXIobWF0Y2hlcik7XG4gIHZhciBtYXRjaDtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICBpZiAobWF0Y2hlcih2YWwsIGtleSkpIHtcbiAgICAgIG1hdGNoID0gdmFsO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogRmluZCBlbGVtZW50IGluZGV4IGluIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBmaW5kSW5kZXgoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuICBtYXRjaGVyID0gdG9NYXRjaGVyKG1hdGNoZXIpO1xuICB2YXIgaWR4ID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IC0xIDogdW5kZWZpbmVkO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgIGlmIChtYXRjaGVyKHZhbCwga2V5KSkge1xuICAgICAgaWR4ID0ga2V5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG4vKipcbiAqIEZpbmQgZWxlbWVudCBpbiBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdH0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheX0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgIGlmIChtYXRjaGVyKHZhbCwga2V5KSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgY29sbGVjdGlvbjsgcmV0dXJuaW5nIHNvbWV0aGluZ1xuICogKG5vbi11bmRlZmluZWQpIHdpbGwgc3RvcCBpdGVyYXRpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJldHVybiByZXN1bHQgdGhhdCBzdG9wcGVkIHRoZSBpdGVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdG9yKSB7XG4gIHZhciB2YWwsIHJlc3VsdDtcblxuICBpZiAoaXNVbmRlZmluZWQoY29sbGVjdGlvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udmVydEtleSA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyB0b051bSA6IGlkZW50aXR5O1xuXG4gIGZvciAodmFyIGtleSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgaWYgKGhhcyhjb2xsZWN0aW9uLCBrZXkpKSB7XG4gICAgICB2YWwgPSBjb2xsZWN0aW9uW2tleV07XG4gICAgICByZXN1bHQgPSBpdGVyYXRvcih2YWwsIGNvbnZlcnRLZXkoa2V5KSk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFJldHVybiBjb2xsZWN0aW9uIHdpdGhvdXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gYXJyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIHdpdGhvdXQoYXJyLCBtYXRjaGVyKSB7XG4gIGlmIChpc1VuZGVmaW5lZChhcnIpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZW5zdXJlQXJyYXkoYXJyKTtcbiAgbWF0Y2hlciA9IHRvTWF0Y2hlcihtYXRjaGVyKTtcbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGVsLCBpZHgpIHtcbiAgICByZXR1cm4gIW1hdGNoZXIoZWwsIGlkeCk7XG4gIH0pO1xufVxuLyoqXG4gKiBSZWR1Y2UgY29sbGVjdGlvbiwgcmV0dXJuaW5nIGEgc2luZ2xlIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtICB7QW55fSByZXN1bHRcbiAqXG4gKiBAcmV0dXJuIHtBbnl9IHJlc3VsdCByZXR1cm5lZCBmcm9tIGxhc3QgaXRlcmF0b3JcbiAqL1xuXG5mdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0b3IsIHJlc3VsdCkge1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWx1ZSwgaWR4KSB7XG4gICAgcmVzdWx0ID0gaXRlcmF0b3IocmVzdWx0LCB2YWx1ZSwgaWR4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb25cbiAqIG1hdGNoZXMgdGhlIGNyaXRlcmlhLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGV2ZXJ5KGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgcmV0dXJuICEhcmVkdWNlKGNvbGxlY3Rpb24sIGZ1bmN0aW9uIChtYXRjaGVzLCB2YWwsIGtleSkge1xuICAgIHJldHVybiBtYXRjaGVzICYmIG1hdGNoZXIodmFsLCBrZXkpO1xuICB9LCB0cnVlKTtcbn1cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgc29tZSBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvblxuICogbWF0Y2ggdGhlIGNyaXRlcmlhLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuICByZXR1cm4gISFmaW5kKGNvbGxlY3Rpb24sIG1hdGNoZXIpO1xufVxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBjb2xsZWN0aW9uIGludG8gYW5vdGhlciBjb2xsZWN0aW9uXG4gKiBieSBwaXBpbmcgZWFjaCBtZW1iZXIgdGhyb3VnaCB0aGUgZ2l2ZW4gZm4uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICpcbiAqIEByZXR1cm4ge0FycmF5fSB0cmFuc2Zvcm1lZCBjb2xsZWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGZuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICByZXN1bHQucHVzaChmbih2YWwsIGtleSkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogR2V0IHRoZSBjb2xsZWN0aW9ucyBrZXlzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIGtleXMoY29sbGVjdGlvbikge1xuICByZXR1cm4gY29sbGVjdGlvbiAmJiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKSB8fCBbXTtcbn1cbi8qKlxuICogU2hvcnRoYW5kIGZvciBga2V5cyhvKS5sZW5ndGhgLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIGtleXMoY29sbGVjdGlvbikubGVuZ3RoO1xufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlcyBpbiB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiB2YWx1ZXMoY29sbGVjdGlvbikge1xuICByZXR1cm4gbWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9KTtcbn1cbi8qKlxuICogR3JvdXAgY29sbGVjdGlvbiBtZW1iZXJzIGJ5IGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBleHRyYWN0b3JcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG1hcCB3aXRoIHsgYXR0clZhbHVlID0+IFsgYSwgYiwgYyBdIH1cbiAqL1xuXG5mdW5jdGlvbiBncm91cEJ5KGNvbGxlY3Rpb24sIGV4dHJhY3Rvcikge1xuICB2YXIgZ3JvdXBlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIGV4dHJhY3RvciA9IHRvRXh0cmFjdG9yKGV4dHJhY3Rvcik7XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBkaXNjcmltaW5hdG9yID0gZXh0cmFjdG9yKHZhbCkgfHwgJ18nO1xuICAgIHZhciBncm91cCA9IGdyb3VwZWRbZGlzY3JpbWluYXRvcl07XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICBncm91cCA9IGdyb3VwZWRbZGlzY3JpbWluYXRvcl0gPSBbXTtcbiAgICB9XG5cbiAgICBncm91cC5wdXNoKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gZ3JvdXBlZDtcbn1cbmZ1bmN0aW9uIHVuaXF1ZUJ5KGV4dHJhY3Rvcikge1xuICBleHRyYWN0b3IgPSB0b0V4dHJhY3RvcihleHRyYWN0b3IpO1xuICB2YXIgZ3JvdXBlZCA9IHt9O1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBjb2xsZWN0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY29sbGVjdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgZm9yRWFjaChjb2xsZWN0aW9ucywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gZ3JvdXBCeShjLCBleHRyYWN0b3IsIGdyb3VwZWQpO1xuICB9KTtcbiAgdmFyIHJlc3VsdCA9IG1hcChncm91cGVkLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICByZXR1cm4gdmFsWzBdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbnZhciB1bmlvbkJ5ID0gdW5pcXVlQnk7XG4vKipcbiAqIFNvcnQgY29sbGVjdGlvbiBieSBjcml0ZXJpYS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge1N0cmluZ3xGdW5jdGlvbn0gZXh0cmFjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cblxuZnVuY3Rpb24gc29ydEJ5KGNvbGxlY3Rpb24sIGV4dHJhY3Rvcikge1xuICBleHRyYWN0b3IgPSB0b0V4dHJhY3RvcihleHRyYWN0b3IpO1xuICB2YXIgc29ydGVkID0gW107XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICB2YXIgZGlzYyA9IGV4dHJhY3Rvcih2YWx1ZSwga2V5KTtcbiAgICB2YXIgZW50cnkgPSB7XG4gICAgICBkOiBkaXNjLFxuICAgICAgdjogdmFsdWVcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgc29ydGVkLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIHZhciBkID0gc29ydGVkW2lkeF0uZDtcblxuICAgICAgaWYgKGRpc2MgPCBkKSB7XG4gICAgICAgIHNvcnRlZC5zcGxpY2UoaWR4LCAwLCBlbnRyeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IC8vIG5vdCBpbnNlcnRlZCwgYXBwZW5kICghKVxuXG5cbiAgICBzb3J0ZWQucHVzaChlbnRyeSk7XG4gIH0pO1xuICByZXR1cm4gbWFwKHNvcnRlZCwgZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZS52O1xuICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBwYXR0ZXJuIG1hdGNoZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBtYXRjaGVyID0gbWF0Y2hQYXR0ZXJuKHsgaWQ6IDEgfSk7XG4gKlxuICogdmFyIGVsZW1lbnQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaGVyKTtcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBhdHRlcm5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gbWF0Y2hlckZuXG4gKi9cblxuZnVuY3Rpb24gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBldmVyeShwYXR0ZXJuLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICAgIHJldHVybiBlbFtrZXldID09PSB2YWw7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvRXh0cmFjdG9yKGV4dHJhY3Rvcikge1xuICByZXR1cm4gaXNGdW5jdGlvbihleHRyYWN0b3IpID8gZXh0cmFjdG9yIDogZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZVtleHRyYWN0b3JdO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0b01hdGNoZXIobWF0Y2hlcikge1xuICByZXR1cm4gaXNGdW5jdGlvbihtYXRjaGVyKSA/IG1hdGNoZXIgOiBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBlID09PSBtYXRjaGVyO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eShhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn1cblxuZnVuY3Rpb24gdG9OdW0oYXJnKSB7XG4gIHJldHVybiBOdW1iZXIoYXJnKTtcbn1cblxuLyoqXG4gKiBEZWJvdW5jZSBmbiwgY2FsbGluZyBpdCBvbmx5IG9uY2UgaWZcbiAqIHRoZSBnaXZlbiB0aW1lIGVsYXBzZWQgYmV0d2VlbiBjYWxscy5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSAge051bWJlcn0gdGltZW91dFxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZm4sIHRpbWVvdXQpIHtcbiAgdmFyIHRpbWVyO1xuICB2YXIgbGFzdEFyZ3M7XG4gIHZhciBsYXN0VGhpcztcbiAgdmFyIGxhc3ROb3c7XG5cbiAgZnVuY3Rpb24gZmlyZSgpIHtcbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgc2NoZWR1bGVkRGlmZiA9IGxhc3ROb3cgKyB0aW1lb3V0IC0gbm93O1xuXG4gICAgaWYgKHNjaGVkdWxlZERpZmYgPiAwKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGUoc2NoZWR1bGVkRGlmZik7XG4gICAgfVxuXG4gICAgZm4uYXBwbHkobGFzdFRoaXMsIGxhc3RBcmdzKTtcbiAgICB0aW1lciA9IGxhc3ROb3cgPSBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUodGltZW91dCkge1xuICAgIHRpbWVyID0gc2V0VGltZW91dChmaXJlLCB0aW1lb3V0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbGFzdE5vdyA9IERhdGUubm93KCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGxhc3RUaGlzID0gdGhpczsgLy8gZW5zdXJlIGFuIGV4ZWN1dGlvbiBpcyBzY2hlZHVsZWRcblxuICAgIGlmICghdGltZXIpIHtcbiAgICAgIHNjaGVkdWxlKHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogVGhyb3R0bGUgZm4sIGNhbGxpbmcgYXQgbW9zdCBvbmNlXG4gKiBpbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGludGVydmFsXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IHRocm90dGxlZCBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBpbnRlcnZhbCkge1xuICB2YXIgdGhyb3R0bGluZyA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aHJvdHRsaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgIHRocm90dGxpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3R0bGluZyA9IGZhbHNlO1xuICAgIH0sIGludGVydmFsKTtcbiAgfTtcbn1cbi8qKlxuICogQmluZCBmdW5jdGlvbiBhZ2FpbnN0IHRhcmdldCA8dGhpcz4uXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgdGFyZ2V0XG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IGJvdW5kIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gYmluZChmbiwgdGFyZ2V0KSB7XG4gIHJldHVybiBmbi5iaW5kKHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYE9iamVjdC5hc3NpZ25gLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBvdGhlcnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvdGhlcnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG90aGVyc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodm9pZCAwLCBbdGFyZ2V0XS5jb25jYXQob3RoZXJzKSk7XG59XG4vKipcbiAqIFBpY2sgZ2l2ZW4gcHJvcGVydGllcyBmcm9tIHRoZSB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BlcnRpZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRhcmdldFxuICovXG5cbmZ1bmN0aW9uIHBpY2sodGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIG9iaiA9IE9iamVjdCh0YXJnZXQpO1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSB0YXJnZXRbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUGljayBhbGwgdGFyZ2V0IHByb3BlcnRpZXMsIGV4Y2x1ZGluZyB0aGUgZ2l2ZW4gb25lcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wZXJ0aWVzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBvbWl0KHRhcmdldCwgcHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciBvYmogPSBPYmplY3QodGFyZ2V0KTtcbiAgZm9yRWFjaChvYmosIGZ1bmN0aW9uIChwcm9wLCBrZXkpIHtcbiAgICBpZiAocHJvcGVydGllcy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHByb3A7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgbWVyZ2UgYC4uLnNvdXJjZXNgIGludG8gZ2l2ZW4gdGFyZ2V0LlxuICpcbiAqIERvZXMgc3VwcG9ydCBtZXJnaW5nIG9iamVjdHM7IGRvZXMgbm90IHN1cHBvcnQgbWVyZ2luZyBhcnJheXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBtZXJnZSh0YXJnZXQpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBzb3VyY2VzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBzb3VyY2VzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgaWYgKCFzb3VyY2VzLmxlbmd0aCkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmb3JFYWNoKHNvdXJjZXMsIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAvLyBza2lwIG5vbi1vYmogc291cmNlcywgaS5lLiBudWxsXG4gICAgaWYgKCFzb3VyY2UgfHwgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHNvdXJjZSwgZnVuY3Rpb24gKHNvdXJjZVZhbCwga2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XTtcblxuICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVZhbCkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRWYWwpKSB7XG4gICAgICAgICAgLy8gb3ZlcnJpZGUgdGFyZ2V0W2tleV0gd2l0aCBvYmplY3RcbiAgICAgICAgICB0YXJnZXRWYWwgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2UodGFyZ2V0VmFsLCBzb3VyY2VWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2VWYWw7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgeyBmbGF0dGVuLCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlciwgZm9yRWFjaCwgd2l0aG91dCwgcmVkdWNlLCBldmVyeSwgc29tZSwgbWFwLCBrZXlzLCBzaXplLCB2YWx1ZXMsIGdyb3VwQnksIHVuaXF1ZUJ5LCB1bmlvbkJ5LCBzb3J0QnksIG1hdGNoUGF0dGVybiwgZGVib3VuY2UsIHRocm90dGxlLCBiaW5kLCBpc1VuZGVmaW5lZCwgaXNEZWZpbmVkLCBpc05pbCwgaXNBcnJheSwgaXNPYmplY3QsIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgZW5zdXJlQXJyYXksIGhhcywgYXNzaWduLCBwaWNrLCBvbWl0LCBtZXJnZSB9O1xuIiwiLyoqXG4gKiBTZXQgYXR0cmlidXRlIGBuYW1lYCB0byBgdmFsYCwgb3IgZ2V0IGF0dHIgYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gW3ZhbF1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbCkge1xuICAvLyBnZXRcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xuICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIH1cblxuICAvLyByZW1vdmVcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH1cblxuICAvLyBzZXRcbiAgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbCk7XG5cbiAgcmV0dXJuIGVsO1xufVxuXG52YXIgaW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbnZhciBpbmRleG9mID0gZnVuY3Rpb24oYXJyLCBvYmope1xuICBpZiAoaW5kZXhPZikgcmV0dXJuIGFyci5pbmRleE9mKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFycltpXSA9PT0gb2JqKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59O1xuXG4vKipcbiAqIFRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2NvbXBvbmVudC9jbGFzc2VzXG4gKlxuICogV2l0aG91dCB0aGUgY29tcG9uZW50IGJpdHMuXG4gKi9cblxuLyoqXG4gKiBXaGl0ZXNwYWNlIHJlZ2V4cC5cbiAqL1xuXG52YXIgcmUgPSAvXFxzKy87XG5cbi8qKlxuICogdG9TdHJpbmcgcmVmZXJlbmNlLlxuICovXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogV3JhcCBgZWxgIGluIGEgYENsYXNzTGlzdGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjbGFzc2VzKGVsKSB7XG4gIHJldHVybiBuZXcgQ2xhc3NMaXN0KGVsKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IENsYXNzTGlzdCBmb3IgYGVsYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBDbGFzc0xpc3QoZWwpIHtcbiAgaWYgKCFlbCB8fCAhZWwubm9kZVR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgRE9NIGVsZW1lbnQgcmVmZXJlbmNlIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgdGhpcy5lbCA9IGVsO1xuICB0aGlzLmxpc3QgPSBlbC5jbGFzc0xpc3Q7XG59XG5cbi8qKlxuICogQWRkIGNsYXNzIGBuYW1lYCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgLy8gY2xhc3NMaXN0XG4gIGlmICh0aGlzLmxpc3QpIHtcbiAgICB0aGlzLmxpc3QuYWRkKG5hbWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgdmFyIGFyciA9IHRoaXMuYXJyYXkoKTtcbiAgdmFyIGkgPSBpbmRleG9mKGFyciwgbmFtZSk7XG4gIGlmICghfmkpIGFyci5wdXNoKG5hbWUpO1xuICB0aGlzLmVsLmNsYXNzTmFtZSA9IGFyci5qb2luKCcgJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgY2xhc3MgYG5hbWVgIHdoZW4gcHJlc2VudCwgb3JcbiAqIHBhc3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVtb3ZlXG4gKiBhbnkgd2hpY2ggbWF0Y2guXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBuYW1lXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCdbb2JqZWN0IFJlZ0V4cF0nID09IHRvU3RyaW5nLmNhbGwobmFtZSkpIHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVNYXRjaGluZyhuYW1lKTtcbiAgfVxuXG4gIC8vIGNsYXNzTGlzdFxuICBpZiAodGhpcy5saXN0KSB7XG4gICAgdGhpcy5saXN0LnJlbW92ZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGZhbGxiYWNrXG4gIHZhciBhcnIgPSB0aGlzLmFycmF5KCk7XG4gIHZhciBpID0gaW5kZXhvZihhcnIsIG5hbWUpO1xuICBpZiAofmkpIGFyci5zcGxpY2UoaSwgMSk7XG4gIHRoaXMuZWwuY2xhc3NOYW1lID0gYXJyLmpvaW4oJyAnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgY2xhc3NlcyBtYXRjaGluZyBgcmVgLlxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSByZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5yZW1vdmVNYXRjaGluZyA9IGZ1bmN0aW9uIChyZSkge1xuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZS50ZXN0KGFycltpXSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUb2dnbGUgY2xhc3MgYG5hbWVgLCBjYW4gZm9yY2Ugc3RhdGUgdmlhIGBmb3JjZWAuXG4gKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBjbGFzc0xpc3QsIGJ1dCBkbyBub3Qgc3VwcG9ydCBgZm9yY2VgIHlldCxcbiAqIHRoZSBtaXN0YWtlIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kIGNvcnJlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtCb29sZWFufSBmb3JjZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5DbGFzc0xpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lLCBmb3JjZSkge1xuICAvLyBjbGFzc0xpc3RcbiAgaWYgKHRoaXMubGlzdCkge1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZvcmNlKSB7XG4gICAgICBpZiAoZm9yY2UgIT09IHRoaXMubGlzdC50b2dnbGUobmFtZSwgZm9yY2UpKSB7XG4gICAgICAgIHRoaXMubGlzdC50b2dnbGUobmFtZSk7IC8vIHRvZ2dsZSBhZ2FpbiB0byBjb3JyZWN0XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdC50b2dnbGUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgZm9yY2UpIHtcbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICB0aGlzLnJlbW92ZShuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGQobmFtZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5hcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnO1xuICB2YXIgc3RyID0gY2xhc3NOYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgdmFyIGFyciA9IHN0ci5zcGxpdChyZSk7XG4gIGlmICgnJyA9PT0gYXJyWzBdKSBhcnIuc2hpZnQoKTtcbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgY2xhc3MgYG5hbWVgIGlzIHByZXNlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5oYXMgPSBDbGFzc0xpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubGlzdCA/IHRoaXMubGlzdC5jb250YWlucyhuYW1lKSA6ICEhfmluZGV4b2YodGhpcy5hcnJheSgpLCBuYW1lKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBnaXZlbiBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBjbGVhcihlbCkge1xuXG4gIHZhciBjO1xuXG4gIHdoaWxlIChlbC5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgIGMgPSBlbC5jaGlsZE5vZGVzWzBdO1xuICAgIGVsLnJlbW92ZUNoaWxkKGMpO1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufVxuXG52YXIgcHJvdG8gPSB0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBFbGVtZW50LnByb3RvdHlwZSA6IHt9O1xudmFyIHZlbmRvciA9IHByb3RvLm1hdGNoZXNcbiAgfHwgcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLndlYmtpdE1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ub01hdGNoZXNTZWxlY3RvcjtcblxudmFyIG1hdGNoZXNTZWxlY3RvciA9IG1hdGNoO1xuXG4vKipcbiAqIE1hdGNoIGBlbGAgdG8gYHNlbGVjdG9yYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2ZW5kb3IpIHJldHVybiB2ZW5kb3IuY2FsbChlbCwgc2VsZWN0b3IpO1xuICB2YXIgbm9kZXMgPSBlbC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldID09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2xvc2VzdFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtCb29sZWFufSBjaGVja1lvdXJTZWxmIChvcHRpb25hbClcbiAqL1xuZnVuY3Rpb24gY2xvc2VzdCAoZWxlbWVudCwgc2VsZWN0b3IsIGNoZWNrWW91clNlbGYpIHtcbiAgdmFyIGN1cnJlbnRFbGVtID0gY2hlY2tZb3VyU2VsZiA/IGVsZW1lbnQgOiBlbGVtZW50LnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKGN1cnJlbnRFbGVtICYmIGN1cnJlbnRFbGVtLm5vZGVUeXBlICE9PSBkb2N1bWVudC5ET0NVTUVOVF9OT0RFICYmIGN1cnJlbnRFbGVtLm5vZGVUeXBlICE9PSBkb2N1bWVudC5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG5cbiAgICBpZiAobWF0Y2hlc1NlbGVjdG9yKGN1cnJlbnRFbGVtLCBzZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RWxlbTtcbiAgICB9XG5cbiAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlc1NlbGVjdG9yKGN1cnJlbnRFbGVtLCBzZWxlY3RvcikgPyBjdXJyZW50RWxlbSA6IG51bGw7XG59XG5cbnZhciBiaW5kID0gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPyAnYWRkRXZlbnRMaXN0ZW5lcicgOiAnYXR0YWNoRXZlbnQnLFxuICAgIHVuYmluZCA9IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyID8gJ3JlbW92ZUV2ZW50TGlzdGVuZXInIDogJ2RldGFjaEV2ZW50JyxcbiAgICBwcmVmaXggPSBiaW5kICE9PSAnYWRkRXZlbnRMaXN0ZW5lcicgPyAnb24nIDogJyc7XG5cbi8qKlxuICogQmluZCBgZWxgIGV2ZW50IGB0eXBlYCB0byBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIGJpbmRfMSA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW2JpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYGVsYCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIHVuYmluZF8xID0gZnVuY3Rpb24oZWwsIHR5cGUsIGZuLCBjYXB0dXJlKXtcbiAgZWxbdW5iaW5kXShwcmVmaXggKyB0eXBlLCBmbiwgY2FwdHVyZSB8fCBmYWxzZSk7XG4gIHJldHVybiBmbjtcbn07XG5cbnZhciBjb21wb25lbnRFdmVudCA9IHtcblx0YmluZDogYmluZF8xLFxuXHR1bmJpbmQ6IHVuYmluZF8xXG59O1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuLyoqXG4gKiBEZWxlZ2F0ZSBldmVudCBgdHlwZWAgdG8gYHNlbGVjdG9yYFxuICogYW5kIGludm9rZSBgZm4oZSlgLiBBIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBpcyByZXR1cm5lZCB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIGAudW5iaW5kKClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUsIHNvIHdlIHdhbnQgdG8gYmluZCB0byB0aGUgY2FwdHVyZSBwaGFzZSBpbnN0ZWFkXG4vLyB3aGVuIGRlbGVnYXRpbmcuXG52YXIgZm9yY2VDYXB0dXJlRXZlbnRzID0gWydmb2N1cycsICdibHVyJ107XG5cbmZ1bmN0aW9uIGJpbmQkMShlbCwgc2VsZWN0b3IsIHR5cGUsIGZuLCBjYXB0dXJlKSB7XG4gIGlmIChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZih0eXBlKSAhPT0gLTEpIHtcbiAgICBjYXB0dXJlID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRFdmVudC5iaW5kKGVsLCB0eXBlLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgZS5kZWxlZ2F0ZVRhcmdldCA9IGNsb3Nlc3QodGFyZ2V0LCBzZWxlY3RvciwgdHJ1ZSwgZWwpO1xuICAgIGlmIChlLmRlbGVnYXRlVGFyZ2V0KSB7XG4gICAgICBmbi5jYWxsKGVsLCBlKTtcbiAgICB9XG4gIH0sIGNhcHR1cmUpO1xufVxuXG4vKipcbiAqIFVuYmluZCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiB1bmJpbmQkMShlbCwgdHlwZSwgZm4sIGNhcHR1cmUpIHtcbiAgaWYgKGZvcmNlQ2FwdHVyZUV2ZW50cy5pbmRleE9mKHR5cGUpICE9PSAtMSkge1xuICAgIGNhcHR1cmUgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudEV2ZW50LnVuYmluZChlbCwgdHlwZSwgZm4sIGNhcHR1cmUpO1xufVxuXG52YXIgZGVsZWdhdGUgPSB7XG4gIGJpbmQ6IGJpbmQkMSxcbiAgdW5iaW5kOiB1bmJpbmQkMVxufTtcblxuLyoqXG4gKiBFeHBvc2UgYHBhcnNlYC5cbiAqL1xuXG52YXIgZG9taWZ5ID0gcGFyc2U7XG5cbi8qKlxuICogVGVzdHMgZm9yIGJyb3dzZXIgc3VwcG9ydC5cbiAqL1xuXG52YXIgaW5uZXJIVE1MQnVnID0gZmFsc2U7XG52YXIgYnVnVGVzdERpdjtcbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIGJ1Z1Rlc3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgLy8gU2V0dXBcbiAgYnVnVGVzdERpdi5pbm5lckhUTUwgPSAnICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj1cIi9hXCI+YTwvYT48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIvPic7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTFxuICAvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFXG4gIGlubmVySFRNTEJ1ZyA9ICFidWdUZXN0RGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJykubGVuZ3RoO1xuICBidWdUZXN0RGl2ID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyYXAgbWFwIGZyb20ganF1ZXJ5LlxuICovXG5cbnZhciBtYXAgPSB7XG4gIGxlZ2VuZDogWzEsICc8ZmllbGRzZXQ+JywgJzwvZmllbGRzZXQ+J10sXG4gIHRyOiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcbiAgY29sOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgLy8gZm9yIHNjcmlwdC9saW5rL3N0eWxlIHRhZ3MgdG8gd29yayBpbiBJRTYtOCwgeW91IGhhdmUgdG8gd3JhcFxuICAvLyBpbiBhIGRpdiB3aXRoIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIGZyb250LCBoYSFcbiAgX2RlZmF1bHQ6IGlubmVySFRNTEJ1ZyA/IFsxLCAnWDxkaXY+JywgJzwvZGl2PiddIDogWzAsICcnLCAnJ11cbn07XG5cbm1hcC50ZCA9XG5tYXAudGggPSBbMywgJzx0YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXTtcblxubWFwLm9wdGlvbiA9XG5tYXAub3B0Z3JvdXAgPSBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJtdWx0aXBsZVwiPicsICc8L3NlbGVjdD4nXTtcblxubWFwLnRoZWFkID1cbm1hcC50Ym9keSA9XG5tYXAuY29sZ3JvdXAgPVxubWFwLmNhcHRpb24gPVxubWFwLnRmb290ID0gWzEsICc8dGFibGU+JywgJzwvdGFibGU+J107XG5cbm1hcC5wb2x5bGluZSA9XG5tYXAuZWxsaXBzZSA9XG5tYXAucG9seWdvbiA9XG5tYXAuY2lyY2xlID1cbm1hcC50ZXh0ID1cbm1hcC5saW5lID1cbm1hcC5wYXRoID1cbm1hcC5yZWN0ID1cbm1hcC5nID0gWzEsICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2ZXJzaW9uPVwiMS4xXCI+JywnPC9zdmc+J107XG5cbi8qKlxuICogUGFyc2UgYGh0bWxgIGFuZCByZXR1cm4gYSBET00gTm9kZSBpbnN0YW5jZSwgd2hpY2ggY291bGQgYmUgYSBUZXh0Tm9kZSxcbiAqIEhUTUwgRE9NIE5vZGUgb2Ygc29tZSBraW5kICg8ZGl2PiBmb3IgZXhhbXBsZSksIG9yIGEgRG9jdW1lbnRGcmFnbWVudFxuICogaW5zdGFuY2UsIGRlcGVuZGluZyBvbiB0aGUgY29udGVudHMgb2YgdGhlIGBodG1sYCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBIVE1MIHN0cmluZyB0byBcImRvbWlmeVwiXG4gKiBAcGFyYW0ge0RvY3VtZW50fSBkb2MgLSBUaGUgYGRvY3VtZW50YCBpbnN0YW5jZSB0byBjcmVhdGUgdGhlIE5vZGUgZm9yXG4gKiBAcmV0dXJuIHtET01Ob2RlfSB0aGUgVGV4dE5vZGUsIERPTSBOb2RlLCBvciBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShodG1sLCBkb2MpIHtcbiAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiBodG1sKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQnKTtcblxuICAvLyBkZWZhdWx0IHRvIHRoZSBnbG9iYWwgYGRvY3VtZW50YCBvYmplY3RcbiAgaWYgKCFkb2MpIGRvYyA9IGRvY3VtZW50O1xuXG4gIC8vIHRhZyBuYW1lXG4gIHZhciBtID0gLzwoW1xcdzpdKykvLmV4ZWMoaHRtbCk7XG4gIGlmICghbSkgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShodG1sKTtcblxuICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7IC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcblxuICB2YXIgdGFnID0gbVsxXTtcblxuICAvLyBib2R5IHN1cHBvcnRcbiAgaWYgKHRhZyA9PSAnYm9keScpIHtcbiAgICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnaHRtbCcpO1xuICAgIGVsLmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIGVsLnJlbW92ZUNoaWxkKGVsLmxhc3RDaGlsZCk7XG4gIH1cblxuICAvLyB3cmFwIG1hcFxuICB2YXIgd3JhcCA9IG1hcFt0YWddIHx8IG1hcC5fZGVmYXVsdDtcbiAgdmFyIGRlcHRoID0gd3JhcFswXTtcbiAgdmFyIHByZWZpeCA9IHdyYXBbMV07XG4gIHZhciBzdWZmaXggPSB3cmFwWzJdO1xuICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGVsLmlubmVySFRNTCA9IHByZWZpeCArIGh0bWwgKyBzdWZmaXg7XG4gIHdoaWxlIChkZXB0aC0tKSBlbCA9IGVsLmxhc3RDaGlsZDtcblxuICAvLyBvbmUgZWxlbWVudFxuICBpZiAoZWwuZmlyc3RDaGlsZCA9PSBlbC5sYXN0Q2hpbGQpIHtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7XG4gIH1cblxuICAvLyBzZXZlcmFsIGVsZW1lbnRzXG4gIHZhciBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIHdoaWxlIChlbC5maXJzdENoaWxkKSB7XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCkpO1xuICB9XG5cbiAgcmV0dXJuIGZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBxdWVyeShzZWxlY3RvciwgZWwpIHtcbiAgZWwgPSBlbCB8fCBkb2N1bWVudDtcblxuICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIGFsbChzZWxlY3RvciwgZWwpIHtcbiAgZWwgPSBlbCB8fCBkb2N1bWVudDtcblxuICByZXR1cm4gZWwucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShlbCkge1xuICBlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xufVxuXG5leHBvcnQgeyBhdHRyLCBjbGFzc2VzLCBjbGVhciwgY2xvc2VzdCwgZGVsZWdhdGUsIGRvbWlmeSwgY29tcG9uZW50RXZlbnQgYXMgZXZlbnQsIG1hdGNoZXNTZWxlY3RvciBhcyBtYXRjaGVzLCBxdWVyeSwgYWxsIGFzIHF1ZXJ5QWxsLCByZW1vdmUgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vLyAgICAgIFxuLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdGFrZSBhbiBvcHRpb25hbCBldmVudCBhcmd1bWVudFxuLy8gYW5kIHNob3VsZCBub3QgcmV0dXJuIGEgdmFsdWVcbi8vIEFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBldmVudCBoYW5kbGVycyBmb3IgYSB0eXBlXG4vLyBBIG1hcCBvZiBldmVudCB0eXBlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBldmVudCBoYW5kbGVycy5cblxuLyoqIE1pdHQ6IFRpbnkgKH4yMDBiKSBmdW5jdGlvbmFsIGV2ZW50IGVtaXR0ZXIgLyBwdWJzdWIuXG4gKiAgQG5hbWUgbWl0dFxuICogIEByZXR1cm5zIHtNaXR0fVxuICovXG5mdW5jdGlvbiBtaXR0KGFsbCkge1xuICBhbGwgPSBhbGwgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gdHlwZVx0VHlwZSBvZiBldmVudCB0byBsaXN0ZW4gZm9yLCBvciBgXCIqXCJgIGZvciBhbGwgZXZlbnRzXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGhhbmRsZXIgRnVuY3Rpb24gdG8gY2FsbCBpbiByZXNwb25zZSB0byBnaXZlbiBldmVudFxuICAgICAqIEBtZW1iZXJPZiBtaXR0XG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uIG9uKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIChhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIHVucmVnaXN0ZXIgYGhhbmRsZXJgIGZyb20sIG9yIGBcIipcImBcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlbW92ZVxuICAgICAqIEBtZW1iZXJPZiBtaXR0XG4gICAgICovXG4gICAgb2ZmOiBmdW5jdGlvbiBvZmYodHlwZSwgaGFuZGxlcikge1xuICAgICAgaWYgKGFsbFt0eXBlXSkge1xuICAgICAgICBhbGxbdHlwZV0uc3BsaWNlKGFsbFt0eXBlXS5pbmRleE9mKGhhbmRsZXIpID4+PiAwLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52b2tlIGFsbCBoYW5kbGVycyBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gICAgICogSWYgcHJlc2VudCwgYFwiKlwiYCBoYW5kbGVycyBhcmUgaW52b2tlZCBhZnRlciB0eXBlLW1hdGNoZWQgaGFuZGxlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAgVGhlIGV2ZW50IHR5cGUgdG8gaW52b2tlXG4gICAgICogQHBhcmFtIHtBbnl9IFtldnRdICBBbnkgdmFsdWUgKG9iamVjdCBpcyByZWNvbW1lbmRlZCBhbmQgcG93ZXJmdWwpLCBwYXNzZWQgdG8gZWFjaCBoYW5kbGVyXG4gICAgICogQG1lbWJlck9mIG1pdHRcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KHR5cGUsIGV2dCkge1xuICAgICAgKGFsbFt0eXBlXSB8fCBbXSkuc2xpY2UoKS5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcihldnQpO1xuICAgICAgfSk7XG4gICAgICAoYWxsWycqJ10gfHwgW10pLnNsaWNlKCkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIodHlwZSwgZXZ0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWl0dDtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJaUo5IiwiaW1wb3J0IHsgZm9yRWFjaCwgYXNzaWduLCBmaW5kLCBmaWx0ZXIsIGlzU3RyaW5nLCBtYXAgfSBmcm9tICdtaW4tZGFzaCc7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdzYXhlbic7XG5pbXBvcnQgeyBjb2VyY2VUeXBlLCBwYXJzZU5hbWVOUywgaXNTaW1wbGVUeXBlLCBNb2RkbGUgfSBmcm9tICdtb2RkbGUnO1xuXG5mdW5jdGlvbiBoYXNMb3dlckNhc2VBbGlhcyhwa2cpIHtcbiAgcmV0dXJuIHBrZy54bWwgJiYgcGtnLnhtbC50YWdBbGlhcyA9PT0gJ2xvd2VyQ2FzZSc7XG59XG5cbnZhciBERUZBVUxUX05TX01BUCA9IHtcbiAgJ3hzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG4gICd4bWwnOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xufTtcblxudmFyIFhTSV9UWVBFID0gJ3hzaTp0eXBlJztcblxuZnVuY3Rpb24gc2VyaWFsaXplRm9ybWF0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQueG1sICYmIGVsZW1lbnQueG1sLnNlcmlhbGl6ZTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplQXNUeXBlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1hdChlbGVtZW50KSA9PT0gWFNJX1RZUEU7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFzUHJvcGVydHkoZWxlbWVudCkge1xuICByZXR1cm4gc2VyaWFsaXplRm9ybWF0KGVsZW1lbnQpID09PSAncHJvcGVydHknO1xufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiBhbGlhc1RvTmFtZShhbGlhc05zLCBwa2cpIHtcblxuICBpZiAoIWhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcbiAgICByZXR1cm4gYWxpYXNOcy5uYW1lO1xuICB9XG5cbiAgcmV0dXJuIGFsaWFzTnMucHJlZml4ICsgJzonICsgY2FwaXRhbGl6ZShhbGlhc05zLmxvY2FsTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKSB7XG5cbiAgdmFyIG5hbWUgPSBuYW1lTnMubmFtZSxcbiAgICAgIGxvY2FsTmFtZSA9IG5hbWVOcy5sb2NhbE5hbWU7XG5cbiAgdmFyIHR5cGVQcmVmaXggPSBwa2cueG1sICYmIHBrZy54bWwudHlwZVByZWZpeDtcblxuICBpZiAodHlwZVByZWZpeCAmJiBsb2NhbE5hbWUuaW5kZXhPZih0eXBlUHJlZml4KSA9PT0gMCkge1xuICAgIHJldHVybiBuYW1lTnMucHJlZml4ICsgJzonICsgbG9jYWxOYW1lLnNsaWNlKHR5cGVQcmVmaXgubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVYc2lUeXBlTmFtZShuYW1lLCBtb2RlbCkge1xuXG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcbiAgdmFyIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCk7XG5cbiAgcmV0dXJuIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKTtcbn1cblxuZnVuY3Rpb24gZXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbW9kZGxlIGRlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gaW5zdGFuY2Ugb3IgdHlwZS5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fEZ1bmN0aW9ufSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgbW9kZGxlIGRlc2NyaXB0b3JcbiAqL1xuZnVuY3Rpb24gZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LiRkZXNjcmlwdG9yO1xufVxuXG5cbi8qKlxuICogQSBwYXJzZSBjb250ZXh0LlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0VsZW1lbnRIYW5kbGVyfSBvcHRpb25zLnJvb3RIYW5kbGVyIHRoZSByb290IGhhbmRsZXIgZm9yIHBhcnNpbmcgYSBkb2N1bWVudFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sYXg9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSBpbnZhbGlkIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHQob3B0aW9ucykge1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0VsZW1lbnRIYW5kbGVyfSByb290SGFuZGxlclxuICAgKi9cblxuICAvKipcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBsYXhcbiAgICovXG5cbiAgYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuZWxlbWVudHNCeUlkID0ge307XG4gIHRoaXMucmVmZXJlbmNlcyA9IFtdO1xuICB0aGlzLndhcm5pbmdzID0gW107XG5cbiAgLyoqXG4gICAqIEFkZCBhbiB1bnJlc29sdmVkIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZVxuICAgKi9cbiAgdGhpcy5hZGRSZWZlcmVuY2UgPSBmdW5jdGlvbihyZWZlcmVuY2UpIHtcbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9jZXNzZWQgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICB0aGlzLmFkZEVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHRocm93IGVycm9yKCdleHBlY3RlZCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IHRoaXMuZWxlbWVudHNCeUlkO1xuXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpO1xuXG4gICAgdmFyIGlkUHJvcGVydHkgPSBkZXNjcmlwdG9yLmlkUHJvcGVydHksXG4gICAgICAgIGlkO1xuXG4gICAgaWYgKGlkUHJvcGVydHkpIHtcbiAgICAgIGlkID0gZWxlbWVudC5nZXQoaWRQcm9wZXJ0eS5uYW1lKTtcblxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIC8vIGZvciBRTmFtZSB2YWxpZGF0aW9uIGFzIHBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lQ2hhclxuICAgICAgICBpZiAoIS9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaS50ZXN0KGlkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50c0J5SWRbaWRdKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3IoJ2R1cGxpY2F0ZSBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnRzQnlJZFtpZF0gPSBlbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIGltcG9ydCB3YXJuaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gd2FybmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gd2FybmluZy5tZXNzYWdlXG4gICAqIEBwYXJhbSB7RXJyb3J9IFt3YXJuaW5nLmVycm9yXVxuICAgKi9cbiAgdGhpcy5hZGRXYXJuaW5nID0gZnVuY3Rpb24od2FybmluZykge1xuICAgIHRoaXMud2FybmluZ3MucHVzaCh3YXJuaW5nKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gQmFzZUhhbmRsZXIoKSB7fVxuXG5CYXNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24oKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7fTtcblxuXG4vKipcbiAqIEEgc2ltcGxlIHBhc3MgdGhyb3VnaCBoYW5kbGVyIHRoYXQgZG9lcyBub3RoaW5nIGV4Y2VwdCBmb3JcbiAqIGlnbm9yaW5nIGFsbCBpbnB1dCBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgdG8gaWdub3JlIHVua25vd24gZWxlbWVudHMgYW5kXG4gKiBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiBOb29wSGFuZGxlcigpIHsgfVxuXG5Ob29wSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5cbk5vb3BIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gQm9keUhhbmRsZXIoKSB7fVxuXG5Cb2R5SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5cbkJvZHlIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuICB0aGlzLmJvZHkgPSAodGhpcy5ib2R5IHx8ICcnKSArIHRleHQ7XG59O1xuXG5mdW5jdGlvbiBSZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5LCBjb250ZXh0KSB7XG4gIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJvZHlIYW5kbGVyLnByb3RvdHlwZSk7XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgIHRocm93IGVycm9yKCdleHBlY3RlZCBubyBzdWIgbm9kZXMnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmNyZWF0ZVJlZmVyZW5jZShub2RlKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZWxlbWVudC5pZCA9IHRoaXMuYm9keTtcbn07XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZVJlZmVyZW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0eTogdGhpcy5wcm9wZXJ0eS5ucy5uYW1lLFxuICAgIGlkOiAnJ1xuICB9O1xufTtcblxuZnVuY3Rpb24gVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICB0aGlzLnByb3BlcnR5RGVzYyA9IHByb3BlcnR5RGVzYztcbn1cblxuVmFsdWVIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQm9keUhhbmRsZXIucHJvdG90eXBlKTtcblxuVmFsdWVIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgdmFsdWUgPSB0aGlzLmJvZHkgfHwgJycsXG4gICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgcHJvcGVydHlEZXNjID0gdGhpcy5wcm9wZXJ0eURlc2M7XG5cbiAgdmFsdWUgPSBjb2VyY2VUeXBlKHByb3BlcnR5RGVzYy50eXBlLCB2YWx1ZSk7XG5cbiAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICBlbGVtZW50LmdldChwcm9wZXJ0eURlc2MubmFtZSkucHVzaCh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXQocHJvcGVydHlEZXNjLm5hbWUsIHZhbHVlKTtcbiAgfVxufTtcblxuXG5mdW5jdGlvbiBCYXNlRWxlbWVudEhhbmRsZXIoKSB7fVxuXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBwYXJzZXIgPSB0aGlzLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KG5vZGUpO1xuXG4gICAgdGhpcy5jb250ZXh0LmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VyID0gdGhpcy5oYW5kbGVDaGlsZChub2RlKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZXI7XG59O1xuXG4vKipcbiAqIEBjbGFzcyBSZWFkZXIuRWxlbWVudEhhbmRsZXJcbiAqXG4gKi9cbmZ1bmN0aW9uIEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMudHlwZSA9IG1vZGVsLmdldFR5cGUodHlwZU5hbWUpO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuYWRkUmVmZXJlbmNlID0gZnVuY3Rpb24ocmVmZXJlbmNlKSB7XG4gIHRoaXMuY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgICBib2R5UHJvcGVydHkgPSBkZXNjcmlwdG9yLmJvZHlQcm9wZXJ0eTtcblxuICBpZiAoIWJvZHlQcm9wZXJ0eSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGJvZHkgdGV4dCA8JyArIHRleHQgKyAnPicpO1xuICB9XG5cbiAgQm9keUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZVRleHQuY2FsbCh0aGlzLCB0ZXh0KTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgdmFsdWUgPSB0aGlzLmJvZHksXG4gICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgICBib2R5UHJvcGVydHkgPSBkZXNjcmlwdG9yLmJvZHlQcm9wZXJ0eTtcblxuICBpZiAoYm9keVByb3BlcnR5ICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGNvZXJjZVR5cGUoYm9keVByb3BlcnR5LnR5cGUsIHZhbHVlKTtcbiAgICBlbGVtZW50LnNldChib2R5UHJvcGVydHkubmFtZSwgdmFsdWUpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZnJvbSB0aGUgZ2l2ZW4gbm9kZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlIHRoZSB4bWwgbm9kZVxuICovXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXMsXG4gICAgICBUeXBlID0gdGhpcy50eXBlLFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoVHlwZSksXG4gICAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgaW5zdGFuY2UgPSBuZXcgVHlwZSh7fSksXG4gICAgICBtb2RlbCA9IHRoaXMubW9kZWwsXG4gICAgICBwcm9wTmFtZU5zO1xuXG4gIGZvckVhY2goYXR0cmlidXRlcywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcblxuICAgIHZhciBwcm9wID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdLFxuICAgICAgICB2YWx1ZXM7XG5cbiAgICBpZiAocHJvcCAmJiBwcm9wLmlzUmVmZXJlbmNlKSB7XG5cbiAgICAgIGlmICghcHJvcC5pc01hbnkpIHtcbiAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2Uoe1xuICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXG4gICAgICAgICAgaWQ6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSURSRUZTOiBwYXJzZSByZWZlcmVuY2VzIGFzIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3RcbiAgICAgICAgdmFsdWVzID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICBmb3JFYWNoKHZhbHVlcywgZnVuY3Rpb24odikge1xuICAgICAgICAgIGNvbnRleHQuYWRkUmVmZXJlbmNlKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3AubnMubmFtZSxcbiAgICAgICAgICAgIGlkOiB2XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHZhbHVlID0gY29lcmNlVHlwZShwcm9wLnR5cGUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZVxuICAgICAgaWYgKG5hbWUgIT09ICd4bWxucycpIHtcbiAgICAgICAgcHJvcE5hbWVOcyA9IHBhcnNlTmFtZU5TKG5hbWUsIGRlc2NyaXB0b3IubnMucHJlZml4KTtcblxuICAgICAgICAvLyBjaGVjayB3aGV0aGVyIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGluIGEgd2VsbC1rbm93biBuYW1lc3BhY2VcbiAgICAgICAgLy8gaWYgdGhhdCBpcyB0aGUgY2FzZSB3ZSBlbWl0IGEgd2FybmluZyB0byBpbmRpY2F0ZSBwb3RlbnRpYWwgbWlzdXNlXG4gICAgICAgIGlmIChtb2RlbC5nZXRQYWNrYWdlKHByb3BOYW1lTnMucHJlZml4KSkge1xuXG4gICAgICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICd1bmtub3duIGF0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPicsXG4gICAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcbiAgICAgICAgICAgIHByb3BlcnR5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2Uuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUZvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcblxuICB2YXIgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKHR5cGUpO1xuXG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBuYW1lTnMubmFtZSxcbiAgICAgIHByb3BlcnR5ID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5TmFtZV0sXG4gICAgICBlbGVtZW50VHlwZU5hbWUsXG4gICAgICBlbGVtZW50VHlwZTtcblxuICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuXG4gIGlmIChwcm9wZXJ0eSAmJiAhcHJvcGVydHkuaXNBdHRyKSB7XG5cbiAgICBpZiAoc2VyaWFsaXplQXNUeXBlKHByb3BlcnR5KSkge1xuICAgICAgZWxlbWVudFR5cGVOYW1lID0gbm9kZS5hdHRyaWJ1dGVzW1hTSV9UWVBFXTtcblxuICAgICAgLy8geHNpIHR5cGUgaXMgb3B0aW9uYWwsIGlmIGl0IGRvZXMgbm90IGV4aXN0cyB0aGVcbiAgICAgIC8vIGRlZmF1bHQgdHlwZSBpcyBhc3N1bWVkXG4gICAgICBpZiAoZWxlbWVudFR5cGVOYW1lKSB7XG5cbiAgICAgICAgLy8gdGFrZSBwb3NzaWJsZSB0eXBlIHByZWZpeGVzIGZyb20gWE1MXG4gICAgICAgIC8vIGludG8gYWNjb3VudCwgaS5lLjogeHNpOnR5cGU9XCJ0e0FjdHVhbFR5cGV9XCJcbiAgICAgICAgZWxlbWVudFR5cGVOYW1lID0gbm9ybWFsaXplWHNpVHlwZU5hbWUoZWxlbWVudFR5cGVOYW1lLCBtb2RlbCk7XG5cbiAgICAgICAgZWxlbWVudFR5cGUgPSBtb2RlbC5nZXRUeXBlKGVsZW1lbnRUeXBlTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcbiAgICAgICAgICBlZmZlY3RpdmVUeXBlOiBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnRUeXBlKS5uYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNlYXJjaCBmb3IgcHJvcGVydGllcyBieSBuYW1lIGZpcnN0XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgdmFyIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCk7XG5cbiAgaWYgKHBrZykge1xuICAgIGVsZW1lbnRUeXBlTmFtZSA9IGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKTtcbiAgICBlbGVtZW50VHlwZSA9IG1vZGVsLmdldFR5cGUoZWxlbWVudFR5cGVOYW1lKTtcblxuICAgIC8vIHNlYXJjaCBmb3IgY29sbGVjdGlvbiBtZW1iZXJzIGxhdGVyXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuICFwLmlzVmlydHVhbCAmJiAhcC5pc1JlZmVyZW5jZSAmJiAhcC5pc0F0dHJpYnV0ZSAmJiBlbGVtZW50VHlwZS5oYXNUeXBlKHAudHlwZSk7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oe30sIHByb3BlcnR5LCB7XG4gICAgICAgIGVmZmVjdGl2ZVR5cGU6IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudFR5cGUpLm5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJzZSB1bmtub3duIGVsZW1lbnQgKG1heWJlIGV4dGVuc2lvbilcbiAgICBwcm9wZXJ0eSA9IGZpbmQoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgcC50eXBlID09PSAnRWxlbWVudCc7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBlcnJvcigndW5yZWNvZ25pemVkIGVsZW1lbnQgPCcgKyBuYW1lTnMubmFtZSArICc+Jyk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdFbGVtZW50RGVzY3JpcHRvclsnICsgZ2V0TW9kZGxlRGVzY3JpcHRvcih0aGlzLnR5cGUpLm5hbWUgKyAnXSc7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudmFsdWVIYW5kbGVyID0gZnVuY3Rpb24ocHJvcGVydHlEZXNjLCBlbGVtZW50KSB7XG4gIHJldHVybiBuZXcgVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUucmVmZXJlbmNlSGFuZGxlciA9IGZ1bmN0aW9uKHByb3BlcnR5RGVzYykge1xuICByZXR1cm4gbmV3IFJlZmVyZW5jZUhhbmRsZXIocHJvcGVydHlEZXNjLCB0aGlzLmNvbnRleHQpO1xufTtcblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbih0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnRWxlbWVudCcpIHtcbiAgICByZXR1cm4gbmV3IEdlbmVyaWNFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCB0eXBlLCB0aGlzLmNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRWxlbWVudEhhbmRsZXIodGhpcy5tb2RlbCwgdHlwZSwgdGhpcy5jb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGUgdGhlIGNoaWxkIGVsZW1lbnQgcGFyc2luZ1xuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IG5vZGUgdGhlIHhtbCBub2RlXG4gKi9cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVDaGlsZCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHByb3BlcnR5RGVzYywgdHlwZSwgZWxlbWVudCwgY2hpbGRIYW5kbGVyO1xuXG4gIHByb3BlcnR5RGVzYyA9IHRoaXMuZ2V0UHJvcGVydHlGb3JOb2RlKG5vZGUpO1xuICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuXG4gIHR5cGUgPSBwcm9wZXJ0eURlc2MuZWZmZWN0aXZlVHlwZSB8fCBwcm9wZXJ0eURlc2MudHlwZTtcblxuICBpZiAoaXNTaW1wbGVUeXBlKHR5cGUpKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG4gIH1cblxuICBpZiAocHJvcGVydHlEZXNjLmlzUmVmZXJlbmNlKSB7XG4gICAgY2hpbGRIYW5kbGVyID0gdGhpcy5yZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5RGVzYykuaGFuZGxlTm9kZShub2RlKTtcbiAgfSBlbHNlIHtcbiAgICBjaGlsZEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIodHlwZSkuaGFuZGxlTm9kZShub2RlKTtcbiAgfVxuXG4gIHZhciBuZXdFbGVtZW50ID0gY2hpbGRIYW5kbGVyLmVsZW1lbnQ7XG5cbiAgLy8gY2hpbGQgaGFuZGxlcyBtYXkgZGVjaWRlIHRvIHNraXAgZWxlbWVudHNcbiAgLy8gYnkgbm90IHJldHVybmluZyBhbnl0aGluZ1xuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICBpZiAocHJvcGVydHlEZXNjLmlzTWFueSkge1xuICAgICAgZWxlbWVudC5nZXQocHJvcGVydHlEZXNjLm5hbWUpLnB1c2gobmV3RWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5RGVzYy5uYW1lLCBuZXdFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlEZXNjLmlzUmVmZXJlbmNlKSB7XG4gICAgICBhc3NpZ24obmV3RWxlbWVudCwge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0LmFkZFJlZmVyZW5jZShuZXdFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXN0YWJsaXNoIGNoaWxkIC0+IHBhcmVudCByZWxhdGlvbnNoaXBcbiAgICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkSGFuZGxlcjtcbn07XG5cbi8qKlxuICogQW4gZWxlbWVudCBoYW5kbGVyIHRoYXQgcGVyZm9ybXMgc3BlY2lhbCB2YWxpZGF0aW9uXG4gKiB0byBlbnN1cmUgdGhlIG5vZGUgaXQgZ2V0cyBpbml0aWFsaXplZCB3aXRoIG1hdGNoZXNcbiAqIHRoZSBoYW5kbGVycyB0eXBlIChuYW1lc3BhY2Ugd2lzZSkuXG4gKlxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZU5hbWVcbiAqIEBwYXJhbSB7Q29udGV4dH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBSb290RWxlbWVudEhhbmRsZXIobW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KSB7XG4gIEVsZW1lbnRIYW5kbGVyLmNhbGwodGhpcywgbW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KTtcbn1cblxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKTtcblxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lLFxuICAgICAgbmFtZU5zID0gcGFyc2VOYW1lTlMobmFtZSksXG4gICAgICBtb2RlbCA9IHRoaXMubW9kZWwsXG4gICAgICB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgcGtnID0gbW9kZWwuZ2V0UGFja2FnZShuYW1lTnMucHJlZml4KSxcbiAgICAgIHR5cGVOYW1lID0gcGtnICYmIGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKSB8fCBuYW1lO1xuXG4gIC8vIHZlcmlmeSB0aGUgY29ycmVjdCBuYW1lc3BhY2UgaWYgd2UgcGFyc2VcbiAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGhhbmRsZXIgdHJlZVxuICAvL1xuICAvLyB0aGlzIGVuc3VyZXMgd2UgZG9uJ3QgbWlzdGFrZW5seSBpbXBvcnQgd3JvbmcgbmFtZXNwYWNlIGVsZW1lbnRzXG4gIGlmICghdHlwZS5oYXNUeXBlKHR5cGVOYW1lKSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGVsZW1lbnQgPCcgKyBub2RlLm9yaWdpbmFsTmFtZSArICc+Jyk7XG4gIH1cblxuICByZXR1cm4gRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlKTtcbn07XG5cblxuZnVuY3Rpb24gR2VuZXJpY0VsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWUsXG4gICAgICBucyA9IHBhcnNlTmFtZU5TKG5hbWUpLFxuICAgICAgcHJlZml4ID0gbnMucHJlZml4LFxuICAgICAgdXJpID0gbm9kZS5uc1twcmVmaXggKyAnJHVyaSddLFxuICAgICAgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcztcblxuICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdGVBbnkobmFtZSwgdXJpLCBhdHRyaWJ1dGVzKTtcbn07XG5cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlQ2hpbGQgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIGhhbmRsZXIgPSBuZXcgR2VuZXJpY0VsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsICdFbGVtZW50JywgdGhpcy5jb250ZXh0KS5oYW5kbGVOb2RlKG5vZGUpLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICB2YXIgbmV3RWxlbWVudCA9IGhhbmRsZXIuZWxlbWVudCxcbiAgICAgIGNoaWxkcmVuO1xuXG4gIGlmIChuZXdFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuID0gZWxlbWVudC4kY2hpbGRyZW4gfHwgW107XG4gICAgY2hpbGRyZW4ucHVzaChuZXdFbGVtZW50KTtcblxuICAgIC8vIGVzdGFibGlzaCBjaGlsZCAtPiBwYXJlbnQgcmVsYXRpb25zaGlwXG4gICAgbmV3RWxlbWVudC4kcGFyZW50ID0gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVyO1xufTtcblxuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuYm9keSkge1xuICAgIHRoaXMuZWxlbWVudC4kYm9keSA9IHRoaXMuYm9keTtcbiAgfVxufTtcblxuLyoqXG4gKiBBIHJlYWRlciBmb3IgYSBtZXRhLW1vZGVsXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7TW9kZWx9IG9wdGlvbnMubW9kZWwgdXNlZCB0byByZWFkIHhtbCBmaWxlc1xuICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25zLmxheCB3aGV0aGVyIHRvIG1ha2UgcGFyc2UgZXJyb3JzIHdhcm5pbmdzXG4gKi9cbmZ1bmN0aW9uIFJlYWRlcihvcHRpb25zKSB7XG5cbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBNb2RkbGUpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbW9kZWw6IG9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgYXNzaWduKHRoaXMsIHsgbGF4OiBmYWxzZSB9LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBUaGUgZnJvbVhNTCByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFyc2VSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge01vZGRsZUVsZW1lbnR9IHJvb3RFbGVtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PE9iamVjdD59IHJlZmVyZW5jZXNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGVsZW1lbnRzQnlJZCAtIGEgbWFwcGluZyBjb250YWluaW5nIGVhY2ggSUQgLT4gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIFhNTCBpbnRvIGEgbW9kZGxlIGRvY3VtZW50IHRyZWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHhtbFxuICogQHBhcmFtIHtFbGVtZW50SGFuZGxlcnxPYmplY3R9IG9wdGlvbnMgb3Igcm9vdEhhbmRsZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cblJlYWRlci5wcm90b3R5cGUuZnJvbVhNTCA9IGZ1bmN0aW9uKHhtbCwgb3B0aW9ucywgZG9uZSkge1xuXG4gIHZhciByb290SGFuZGxlciA9IG9wdGlvbnMucm9vdEhhbmRsZXI7XG5cbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBFbGVtZW50SGFuZGxlcikge1xuICAgIC8vIHJvb3QgaGFuZGxlciBwYXNzZWQgdmlhICh4bWwsIHsgcm9vdEhhbmRsZXI6IEVsZW1lbnRIYW5kbGVyIH0sIC4uLilcbiAgICByb290SGFuZGxlciA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHJvb3RIYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgJ3NvbWVTdHJpbmcnLCAuLi4pXG4gICAgICByb290SGFuZGxlciA9IHRoaXMuaGFuZGxlcihvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByb290SGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHJvb3RIYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgeyByb290SGFuZGxlcjogJ3NvbWVTdHJpbmcnIH0sIC4uLilcbiAgICAgIHJvb3RIYW5kbGVyID0gdGhpcy5oYW5kbGVyKHJvb3RIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgICAgbGF4ID0gdGhpcy5sYXg7XG5cbiAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dChhc3NpZ24oe30sIG9wdGlvbnMsIHsgcm9vdEhhbmRsZXI6IHJvb3RIYW5kbGVyIH0pKSxcbiAgICAgIHBhcnNlciA9IG5ldyBQYXJzZXIoeyBwcm94eTogdHJ1ZSB9KSxcbiAgICAgIHN0YWNrID0gY3JlYXRlU3RhY2soKTtcblxuICByb290SGFuZGxlci5jb250ZXh0ID0gY29udGV4dDtcblxuICAvLyBwdXNoIHJvb3QgaGFuZGxlclxuICBzdGFjay5wdXNoKHJvb3RIYW5kbGVyKTtcblxuXG4gIC8qKlxuICAgKiBIYW5kbGUgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGdldENvbnRleHRcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gbGF4XG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgaGFuZGxlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCBnZXRDb250ZXh0LCBsYXgpIHtcblxuICAgIHZhciBjdHggPSBnZXRDb250ZXh0KCk7XG5cbiAgICB2YXIgbGluZSA9IGN0eC5saW5lLFxuICAgICAgICBjb2x1bW4gPSBjdHguY29sdW1uLFxuICAgICAgICBkYXRhID0gY3R4LmRhdGE7XG5cbiAgICAvLyB3ZSByZWNlaXZlIHRoZSBmdWxsIGNvbnRleHQgZGF0YSBoZXJlLFxuICAgIC8vIGZvciBlbGVtZW50cyB0cmltIGRvd24gdGhlIGluZm9ybWF0aW9uXG4gICAgLy8gdG8gdGhlIHRhZyBuYW1lLCBvbmx5XG4gICAgaWYgKGRhdGEuY2hhckF0KDApID09PSAnPCcgJiYgZGF0YS5pbmRleE9mKCcgJykgIT09IC0xKSB7XG4gICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCBkYXRhLmluZGV4T2YoJyAnKSkgKyAnPic7XG4gICAgfVxuXG4gICAgdmFyIG1lc3NhZ2UgPVxuICAgICAgJ3VucGFyc2FibGUgY29udGVudCAnICsgKGRhdGEgPyBkYXRhICsgJyAnIDogJycpICsgJ2RldGVjdGVkXFxuXFx0JyArXG4gICAgICAgICdsaW5lOiAnICsgbGluZSArICdcXG5cXHQnICtcbiAgICAgICAgJ2NvbHVtbjogJyArIGNvbHVtbiArICdcXG5cXHQnICtcbiAgICAgICAgJ25lc3RlZCBlcnJvcjogJyArIGVyci5tZXNzYWdlO1xuXG4gICAgaWYgKGxheCkge1xuICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVXYXJuaW5nKGVyciwgZ2V0Q29udGV4dCkge1xuICAgIC8vIGp1c3QgbGlrZSBoYW5kbGluZyBlcnJvcnMgaW4gPGxheD10cnVlPiBtb2RlXG4gICAgcmV0dXJuIGhhbmRsZUVycm9yKGVyciwgZ2V0Q29udGV4dCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBjb2xsZWN0ZWQgcmVmZXJlbmNlcyBvbiBwYXJzZSBlbmQuXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlcygpIHtcblxuICAgIHZhciBlbGVtZW50c0J5SWQgPSBjb250ZXh0LmVsZW1lbnRzQnlJZDtcbiAgICB2YXIgcmVmZXJlbmNlcyA9IGNvbnRleHQucmVmZXJlbmNlcztcblxuICAgIHZhciBpLCByO1xuXG4gICAgZm9yIChpID0gMDsgKHIgPSByZWZlcmVuY2VzW2ldKTsgaSsrKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHIuZWxlbWVudDtcbiAgICAgIHZhciByZWZlcmVuY2UgPSBlbGVtZW50c0J5SWRbci5pZF07XG4gICAgICB2YXIgcHJvcGVydHkgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpLnByb3BlcnRpZXNCeU5hbWVbci5wcm9wZXJ0eV07XG5cbiAgICAgIGlmICghcmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnRleHQuYWRkV2FybmluZyh7XG4gICAgICAgICAgbWVzc2FnZTogJ3VucmVzb2x2ZWQgcmVmZXJlbmNlIDwnICsgci5pZCArICc+JyxcbiAgICAgICAgICBlbGVtZW50OiByLmVsZW1lbnQsXG4gICAgICAgICAgcHJvcGVydHk6IHIucHJvcGVydHksXG4gICAgICAgICAgdmFsdWU6IHIuaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eS5pc01hbnkpIHtcbiAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBlbGVtZW50LmdldChwcm9wZXJ0eS5uYW1lKSxcbiAgICAgICAgICAgIGlkeCA9IGNvbGxlY3Rpb24uaW5kZXhPZihyKTtcblxuICAgICAgICAvLyB3ZSByZXBsYWNlIGFuIGV4aXN0aW5nIHBsYWNlIGhvbGRlciAoaWR4ICE9IC0xKSBvclxuICAgICAgICAvLyBhcHBlbmQgdG8gdGhlIGNvbGxlY3Rpb24gaW5zdGVhZFxuICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgIGlkeCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdW5yZXNvbHZhYmxlIHJlZmVyZW5jZVxuICAgICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIG9yIHVwZGF0ZSByZWZlcmVuY2UgaW4gY29sbGVjdGlvblxuICAgICAgICAgIGNvbGxlY3Rpb25baWR4XSA9IHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXQocHJvcGVydHkubmFtZSwgcmVmZXJlbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICBzdGFjay5wb3AoKS5oYW5kbGVFbmQoKTtcbiAgfVxuXG4gIHZhciBQUkVBTUJMRV9TVEFSVF9QQVRURVJOID0gL148XFw/eG1sIC9pO1xuXG4gIHZhciBFTkNPRElOR19QQVRURVJOID0gLyBlbmNvZGluZz1cIihbXlwiXSspXCIvaTtcblxuICB2YXIgVVRGXzhfUEFUVEVSTiA9IC9edXRmLTgkL2k7XG5cbiAgZnVuY3Rpb24gaGFuZGxlUXVlc3Rpb24ocXVlc3Rpb24pIHtcblxuICAgIGlmICghUFJFQU1CTEVfU1RBUlRfUEFUVEVSTi50ZXN0KHF1ZXN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IEVOQ09ESU5HX1BBVFRFUk4uZXhlYyhxdWVzdGlvbik7XG4gICAgdmFyIGVuY29kaW5nID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG5cbiAgICBpZiAoIWVuY29kaW5nIHx8IFVURl84X1BBVFRFUk4udGVzdChlbmNvZGluZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ3Vuc3VwcG9ydGVkIGRvY3VtZW50IGVuY29kaW5nIDwnICsgZW5jb2RpbmcgKyAnPiwgJyArXG4gICAgICAgICdmYWxsaW5nIGJhY2sgdG8gVVRGLTgnXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpIHtcbiAgICB2YXIgaGFuZGxlciA9IHN0YWNrLnBlZWsoKTtcblxuICAgIHRyeSB7XG4gICAgICBzdGFjay5wdXNoKGhhbmRsZXIuaGFuZGxlTm9kZShub2RlKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG5cbiAgICAgIGlmIChoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIGxheCkpIHtcbiAgICAgICAgc3RhY2sucHVzaChuZXcgTm9vcEhhbmRsZXIoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ0RhdGEodGV4dCwgZ2V0Q29udGV4dCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIHN0YWNrLnBlZWsoKS5oYW5kbGVUZXh0KHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFuZGxlV2FybmluZyhlcnIsIGdldENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVRleHQodGV4dCwgZ2V0Q29udGV4dCkge1xuICAgIC8vIHN0cmlwIHdoaXRlc3BhY2Ugb25seSBub2RlcywgaS5lLiBiZWZvcmVcbiAgICAvLyA8IUNEQVRBWyAuLi4gXT4gc2VjdGlvbnMgYW5kIGluIGJldHdlZW4gdGFnc1xuICAgIHRleHQgPSB0ZXh0LnRyaW0oKTtcblxuICAgIGlmICghdGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGhhbmRsZUNEYXRhKHRleHQsIGdldENvbnRleHQpO1xuICB9XG5cbiAgdmFyIHVyaU1hcCA9IG1vZGVsLmdldFBhY2thZ2VzKCkucmVkdWNlKGZ1bmN0aW9uKHVyaU1hcCwgcCkge1xuICAgIHVyaU1hcFtwLnVyaV0gPSBwLnByZWZpeDtcblxuICAgIHJldHVybiB1cmlNYXA7XG4gIH0sIHtcbiAgICAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJzogJ3htbCcgLy8gYWRkIGRlZmF1bHQgeG1sIG5zXG4gIH0pO1xuICBwYXJzZXJcbiAgICAubnModXJpTWFwKVxuICAgIC5vbignb3BlblRhZycsIGZ1bmN0aW9uKG9iaiwgZGVjb2RlU3RyLCBzZWxmQ2xvc2luZywgZ2V0Q29udGV4dCkge1xuXG4gICAgICAvLyBncmFjZWZ1bGx5IGhhbmRsZSB1bnBhcnNhYmxlIGF0dHJpYnV0ZXMgKGF0dHJzPWZhbHNlKVxuICAgICAgdmFyIGF0dHJzID0gb2JqLmF0dHJzIHx8IHt9O1xuXG4gICAgICB2YXIgZGVjb2RlZEF0dHJzID0gT2JqZWN0LmtleXMoYXR0cnMpLnJlZHVjZShmdW5jdGlvbihkLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZGVjb2RlU3RyKGF0dHJzW2tleV0pO1xuXG4gICAgICAgIGRba2V5XSA9IHZhbHVlO1xuXG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSwge30pO1xuXG4gICAgICB2YXIgbm9kZSA9IHtcbiAgICAgICAgbmFtZTogb2JqLm5hbWUsXG4gICAgICAgIG9yaWdpbmFsTmFtZTogb2JqLm9yaWdpbmFsTmFtZSxcbiAgICAgICAgYXR0cmlidXRlczogZGVjb2RlZEF0dHJzLFxuICAgICAgICBuczogb2JqLm5zXG4gICAgICB9O1xuXG4gICAgICBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpO1xuICAgIH0pXG4gICAgLm9uKCdxdWVzdGlvbicsIGhhbmRsZVF1ZXN0aW9uKVxuICAgIC5vbignY2xvc2VUYWcnLCBoYW5kbGVDbG9zZSlcbiAgICAub24oJ2NkYXRhJywgaGFuZGxlQ0RhdGEpXG4gICAgLm9uKCd0ZXh0JywgZnVuY3Rpb24odGV4dCwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpIHtcbiAgICAgIGhhbmRsZVRleHQoZGVjb2RlRW50aXRpZXModGV4dCksIGdldENvbnRleHQpO1xuICAgIH0pXG4gICAgLm9uKCdlcnJvcicsIGhhbmRsZUVycm9yKVxuICAgIC5vbignd2FybicsIGhhbmRsZVdhcm5pbmcpO1xuXG4gIC8vIGFzeW5jIFhNTCBwYXJzaW5nIHRvIG1ha2Ugc3VyZSB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50XG4gIC8vIChub2RlIG9yIGJyb3dlcikgaXMga2VwdCByZXNwb25zaXZlIGFuZCB0aGF0IGNlcnRhaW4gb3B0aW1pemF0aW9uXG4gIC8vIHN0cmF0ZWdpZXMgY2FuIGtpY2sgaW4uXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgIHZhciBlcnI7XG5cbiAgICB0cnkge1xuICAgICAgcGFyc2VyLnBhcnNlKHhtbCk7XG5cbiAgICAgIHJlc29sdmVSZWZlcmVuY2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyID0gZTtcbiAgICB9XG5cbiAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290SGFuZGxlci5lbGVtZW50O1xuXG4gICAgaWYgKCFlcnIgJiYgIXJvb3RFbGVtZW50KSB7XG4gICAgICBlcnIgPSBlcnJvcignZmFpbGVkIHRvIHBhcnNlIGRvY3VtZW50IGFzIDwnICsgcm9vdEhhbmRsZXIudHlwZS4kZGVzY3JpcHRvci5uYW1lICsgJz4nKTtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3MgPSBjb250ZXh0Lndhcm5pbmdzO1xuICAgIHZhciByZWZlcmVuY2VzID0gY29udGV4dC5yZWZlcmVuY2VzO1xuICAgIHZhciBlbGVtZW50c0J5SWQgPSBjb250ZXh0LmVsZW1lbnRzQnlJZDtcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci53YXJuaW5ncyA9IHdhcm5pbmdzO1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgcm9vdEVsZW1lbnQ6IHJvb3RFbGVtZW50LFxuICAgICAgICBlbGVtZW50c0J5SWQ6IGVsZW1lbnRzQnlJZCxcbiAgICAgICAgcmVmZXJlbmNlczogcmVmZXJlbmNlcyxcbiAgICAgICAgd2FybmluZ3M6IHdhcm5pbmdzXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuUmVhZGVyLnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gbmV3IFJvb3RFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCBuYW1lKTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVTdGFjaygpIHtcbiAgdmFyIHN0YWNrID0gW107XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0YWNrLCAncGVlaycsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG52YXIgWE1MX1BSRUFNQkxFID0gJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/Plxcbic7XG5cbnZhciBFU0NBUEVfQVRUUl9DSEFSUyA9IC88fD58J3xcInwmfFxcblxccnxcXG4vZztcbnZhciBFU0NBUEVfQ0hBUlMgPSAvPHw+fCYvZztcblxuXG5mdW5jdGlvbiBOYW1lc3BhY2VzKHBhcmVudCkge1xuXG4gIHZhciBwcmVmaXhNYXAgPSB7fTtcbiAgdmFyIHVyaU1hcCA9IHt9O1xuICB2YXIgdXNlZCA9IHt9O1xuXG4gIHZhciB3ZWxsa25vd24gPSBbXTtcbiAgdmFyIGN1c3RvbSA9IFtdO1xuXG4gIC8vIEFQSVxuXG4gIHRoaXMuYnlVcmkgPSBmdW5jdGlvbih1cmkpIHtcbiAgICByZXR1cm4gdXJpTWFwW3VyaV0gfHwgKFxuICAgICAgcGFyZW50ICYmIHBhcmVudC5ieVVyaSh1cmkpXG4gICAgKTtcbiAgfTtcblxuICB0aGlzLmFkZCA9IGZ1bmN0aW9uKG5zLCBpc1dlbGxrbm93bikge1xuXG4gICAgdXJpTWFwW25zLnVyaV0gPSBucztcblxuICAgIGlmIChpc1dlbGxrbm93bikge1xuICAgICAgd2VsbGtub3duLnB1c2gobnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXN0b20ucHVzaChucyk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXBQcmVmaXgobnMucHJlZml4LCBucy51cmkpO1xuICB9O1xuXG4gIHRoaXMudXJpQnlQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICByZXR1cm4gcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXTtcbiAgfTtcblxuICB0aGlzLm1hcFByZWZpeCA9IGZ1bmN0aW9uKHByZWZpeCwgdXJpKSB7XG4gICAgcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXSA9IHVyaTtcbiAgfTtcblxuICB0aGlzLmdldE5TS2V5ID0gZnVuY3Rpb24obnMpIHtcbiAgICByZXR1cm4gKG5zLnByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IChucy51cmkgKyAnfCcgKyBucy5wcmVmaXgpIDogbnMudXJpO1xuICB9O1xuXG4gIHRoaXMubG9nVXNlZCA9IGZ1bmN0aW9uKG5zKSB7XG5cbiAgICB2YXIgdXJpID0gbnMudXJpO1xuICAgIHZhciBuc0tleSA9IHRoaXMuZ2V0TlNLZXkobnMpO1xuXG4gICAgdXNlZFtuc0tleV0gPSB0aGlzLmJ5VXJpKHVyaSk7XG5cbiAgICAvLyBJbmZvcm0gcGFyZW50IHJlY3Vyc2l2ZWx5IGFib3V0IHRoZSB1c2FnZSBvZiB0aGlzIE5TXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LmxvZ1VzZWQobnMpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmdldFVzZWQgPSBmdW5jdGlvbihucykge1xuXG4gICAgZnVuY3Rpb24gaXNVc2VkKG5zKSB7XG4gICAgICB2YXIgbnNLZXkgPSBzZWxmLmdldE5TS2V5KG5zKTtcblxuICAgICAgcmV0dXJuIHVzZWRbbnNLZXldO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBhbGxOcyA9IFtdLmNvbmNhdCh3ZWxsa25vd24sIGN1c3RvbSk7XG5cbiAgICByZXR1cm4gYWxsTnMuZmlsdGVyKGlzVXNlZCk7XG4gIH07XG5cbn1cblxuZnVuY3Rpb24gbG93ZXIoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5cbmZ1bmN0aW9uIG5hbWVUb0FsaWFzKG5hbWUsIHBrZykge1xuICBpZiAoaGFzTG93ZXJDYXNlQWxpYXMocGtnKSkge1xuICAgIHJldHVybiBsb3dlcihuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5zTmFtZShucykge1xuICBpZiAoaXNTdHJpbmcobnMpKSB7XG4gICAgcmV0dXJuIG5zO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAobnMucHJlZml4ID8gbnMucHJlZml4ICsgJzonIDogJycpICsgbnMubG9jYWxOYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5zQXR0cnMobmFtZXNwYWNlcykge1xuXG4gIHJldHVybiBtYXAobmFtZXNwYWNlcy5nZXRVc2VkKCksIGZ1bmN0aW9uKG5zKSB7XG4gICAgdmFyIG5hbWUgPSAneG1sbnMnICsgKG5zLnByZWZpeCA/ICc6JyArIG5zLnByZWZpeCA6ICcnKTtcbiAgICByZXR1cm4geyBuYW1lOiBuYW1lLCB2YWx1ZTogbnMudXJpIH07XG4gIH0pO1xuXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnROcyhucywgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWMpIHtcbiAgICByZXR1cm4gYXNzaWduKHsgbG9jYWxOYW1lOiBkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSB9LCBucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogbmFtZVRvQWxpYXMoZGVzY3JpcHRvci5ucy5sb2NhbE5hbWUsIGRlc2NyaXB0b3IuJHBrZykgfSwgbnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TnMobnMsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogZGVzY3JpcHRvci5ucy5sb2NhbE5hbWUgfSwgbnMpO1xufVxuXG5mdW5jdGlvbiBnZXRTZXJpYWxpemFibGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRkZXNjcmlwdG9yO1xuXG4gIHJldHVybiBmaWx0ZXIoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgdmFyIG5hbWUgPSBwLm5hbWU7XG5cbiAgICBpZiAocC5pc1ZpcnR1YWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIGRlZmF1bHRzXG4gICAgaWYgKCFlbGVtZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gZWxlbWVudFtuYW1lXTtcblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgZGVmYXVsdCBlcXVhbHNcbiAgICBpZiAodmFsdWUgPT09IHAuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgbnVsbCBwcm9wZXJ0aWVzXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAuaXNNYW55ID8gdmFsdWUubGVuZ3RoIDogdHJ1ZTtcbiAgfSk7XG59XG5cbnZhciBFU0NBUEVfQVRUUl9NQVAgPSB7XG4gICdcXG4nOiAnIzEwJyxcbiAgJ1xcblxccic6ICcjMTAnLFxuICAnXCInOiAnIzM0JyxcbiAgJ1xcJyc6ICcjMzknLFxuICAnPCc6ICcjNjAnLFxuICAnPic6ICcjNjInLFxuICAnJic6ICcjMzgnXG59O1xuXG52YXIgRVNDQVBFX01BUCA9IHtcbiAgJzwnOiAnbHQnLFxuICAnPic6ICdndCcsXG4gICcmJzogJ2FtcCdcbn07XG5cbmZ1bmN0aW9uIGVzY2FwZShzdHIsIGNoYXJQYXR0ZXJuLCByZXBsYWNlTWFwKSB7XG5cbiAgLy8gZW5zdXJlIHdlIGFyZSBoYW5kbGluZyBzdHJpbmdzIGhlcmVcbiAgc3RyID0gaXNTdHJpbmcoc3RyKSA/IHN0ciA6ICcnICsgc3RyO1xuXG4gIHJldHVybiBzdHIucmVwbGFjZShjaGFyUGF0dGVybiwgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiAnJicgKyByZXBsYWNlTWFwW3NdICsgJzsnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgYXR0cmlidXRlIHRvIG5vdCBjb250YWluIGFueSBiYWQgdmFsdWVzIChsaW5lIGJyZWFrcywgJ1wiJywgLi4uKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBlc2NhcGVcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUF0dHIoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQVRUUl9DSEFSUywgRVNDQVBFX0FUVFJfTUFQKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQm9keShzdHIpIHtcbiAgcmV0dXJuIGVzY2FwZShzdHIsIEVTQ0FQRV9DSEFSUywgRVNDQVBFX01BUCk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckF0dHJpYnV0ZXMocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkgeyByZXR1cm4gcC5pc0F0dHI7IH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250YWluZWQocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkgeyByZXR1cm4gIXAuaXNBdHRyOyB9KTtcbn1cblxuXG5mdW5jdGlvbiBSZWZlcmVuY2VTZXJpYWxpemVyKHRhZ05hbWUpIHtcbiAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTtcbn1cblxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG8gPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicgKyB0aGlzLmVsZW1lbnQuaWQgKyAnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKVxuICAgIC5hcHBlbmROZXdMaW5lKCk7XG59O1xuXG5mdW5jdGlvbiBCb2R5U2VyaWFsaXplcigpIHt9XG5cbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVWYWx1ZSA9XG5Cb2R5U2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG8gPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgd3JpdGVyLmFwcGVuZChcbiAgICB0aGlzLmVzY2FwZVxuICAgICAgPyBlc2NhcGVCb2R5KHRoaXMudmFsdWUpXG4gICAgICA6IHRoaXMudmFsdWVcbiAgKTtcbn07XG5cbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICBpZiAocHJvcC50eXBlID09PSAnU3RyaW5nJyAmJiB2YWx1ZS5zZWFyY2goRVNDQVBFX0NIQVJTKSAhPT0gLTEpIHtcbiAgICB0aGlzLmVzY2FwZSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIFZhbHVlU2VyaWFsaXplcih0YWdOYW1lKSB7XG4gIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7XG59XG5cbmluaGVyaXRzKFZhbHVlU2VyaWFsaXplciwgQm9keVNlcmlhbGl6ZXIpO1xuXG5WYWx1ZVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24od3JpdGVyKSB7XG5cbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicpO1xuXG4gIHRoaXMuc2VyaWFsaXplVmFsdWUod3JpdGVyKTtcblxuICB3cml0ZXJcbiAgICAuYXBwZW5kKCc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPicpXG4gICAgLmFwcGVuZE5ld0xpbmUoKTtcbn07XG5cbmZ1bmN0aW9uIEVsZW1lbnRTZXJpYWxpemVyKHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIHRoaXMuYm9keSA9IFtdO1xuICB0aGlzLmF0dHJzID0gW107XG5cbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMucHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yO1xufVxuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgdmFyIGVsZW1lbnREZXNjcmlwdG9yID0gZWxlbWVudC4kZGVzY3JpcHRvcixcbiAgICAgIHByb3BlcnR5RGVzY3JpcHRvciA9IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yO1xuXG4gIHZhciBvdGhlckF0dHJzLFxuICAgICAgcHJvcGVydGllcztcblxuICB2YXIgaXNHZW5lcmljID0gZWxlbWVudERlc2NyaXB0b3IuaXNHZW5lcmljO1xuXG4gIGlmIChpc0dlbmVyaWMpIHtcbiAgICBvdGhlckF0dHJzID0gdGhpcy5wYXJzZUdlbmVyaWMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgb3RoZXJBdHRycyA9IHRoaXMucGFyc2VOc0F0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH1cblxuICBpZiAocHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5ucyA9IHRoaXMubnNQcm9wZXJ0eVRhZ05hbWUocHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5zID0gdGhpcy5uc1RhZ05hbWUoZWxlbWVudERlc2NyaXB0b3IpO1xuICB9XG5cbiAgLy8gY29tcHV0ZSB0YWcgbmFtZVxuICB0aGlzLnRhZ05hbWUgPSB0aGlzLmFkZFRhZ05hbWUodGhpcy5ucyk7XG5cbiAgaWYgKCFpc0dlbmVyaWMpIHtcbiAgICBwcm9wZXJ0aWVzID0gZ2V0U2VyaWFsaXphYmxlUHJvcGVydGllcyhlbGVtZW50KTtcblxuICAgIHRoaXMucGFyc2VBdHRyaWJ1dGVzKGZpbHRlckF0dHJpYnV0ZXMocHJvcGVydGllcykpO1xuICAgIHRoaXMucGFyc2VDb250YWlubWVudHMoZmlsdGVyQ29udGFpbmVkKHByb3BlcnRpZXMpKTtcbiAgfVxuXG4gIHRoaXMucGFyc2VHZW5lcmljQXR0cmlidXRlcyhlbGVtZW50LCBvdGhlckF0dHJzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc1RhZ05hbWUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldEVsZW1lbnROcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcik7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubnNQcm9wZXJ0eVRhZ05hbWUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldFByb3BlcnR5TnMoZWZmZWN0aXZlTnMsIGRlc2NyaXB0b3IpO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmlzTG9jYWxOcyA9IGZ1bmN0aW9uKG5zKSB7XG4gIHJldHVybiBucy51cmkgPT09IHRoaXMubnMudXJpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGFjdHVhbCBucyBhdHRyaWJ1dGUgbmFtZSBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2VsZW1lbnQuaW5oZXJpdGVkPWZhbHNlXVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gbnNOYW1lXG4gKi9cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc0F0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIG5zO1xuXG4gIGlmIChpc1N0cmluZyhlbGVtZW50KSkge1xuICAgIG5zID0gcGFyc2VOYW1lTlMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgbnMgPSBlbGVtZW50Lm5zO1xuICB9XG5cbiAgLy8gcmV0dXJuIGp1c3QgbG9jYWwgbmFtZSBmb3IgaW5oZXJpdGVkIGF0dHJpYnV0ZXNcbiAgaWYgKGVsZW1lbnQuaW5oZXJpdGVkKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfTtcbiAgfVxuXG4gIC8vIHBhcnNlICsgbG9nIGVmZmVjdGl2ZSBuc1xuICB2YXIgZWZmZWN0aXZlTnMgPSB0aGlzLmxvZ05hbWVzcGFjZVVzZWQobnMpO1xuXG4gIC8vIExPRyBBQ1RVQUwgbmFtZXNwYWNlIHVzZVxuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGVmZmVjdGl2ZU5zKTtcblxuICAvLyBzdHJpcCBwcmVmaXggaWYgc2FtZSBuYW1lc3BhY2UgbGlrZSBwYXJlbnRcbiAgaWYgKHRoaXMuaXNMb2NhbE5zKGVmZmVjdGl2ZU5zKSkge1xuICAgIHJldHVybiB7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH0sIGVmZmVjdGl2ZU5zKTtcbiAgfVxufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlR2VuZXJpYyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBib2R5ID0gdGhpcy5ib2R5O1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gW107XG5cbiAgZm9yRWFjaChlbGVtZW50LCBmdW5jdGlvbih2YWwsIGtleSkge1xuXG4gICAgdmFyIG5vbk5zQXR0cjtcblxuICAgIGlmIChrZXkgPT09ICckYm9keScpIHtcbiAgICAgIGJvZHkucHVzaChuZXcgQm9keVNlcmlhbGl6ZXIoKS5idWlsZCh7IHR5cGU6ICdTdHJpbmcnIH0sIHZhbCkpO1xuICAgIH0gZWxzZVxuICAgIGlmIChrZXkgPT09ICckY2hpbGRyZW4nKSB7XG4gICAgICBmb3JFYWNoKHZhbCwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgYm9keS5wdXNoKG5ldyBFbGVtZW50U2VyaWFsaXplcihzZWxmKS5idWlsZChjaGlsZCkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlXG4gICAgaWYgKGtleS5pbmRleE9mKCckJykgIT09IDApIHtcbiAgICAgIG5vbk5zQXR0ciA9IHNlbGYucGFyc2VOc0F0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbCk7XG5cbiAgICAgIGlmIChub25Oc0F0dHIpIHtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBtb2RlbCA9IGVsZW1lbnQuJG1vZGVsO1xuXG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcblxuICB2YXIgbnM7XG5cbiAgLy8gcGFyc2UgeG1sbnM6Zm9vPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAobmFtZU5zLnByZWZpeCA9PT0gJ3htbG5zJykge1xuICAgIG5zID0geyBwcmVmaXg6IG5hbWVOcy5sb2NhbE5hbWUsIHVyaTogdmFsdWUgfTtcbiAgfVxuXG4gIC8vIHBhcnNlIHhtbG5zPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAoIW5hbWVOcy5wcmVmaXggJiYgbmFtZU5zLmxvY2FsTmFtZSA9PT0gJ3htbG5zJykge1xuICAgIG5zID0geyB1cmk6IHZhbHVlIH07XG4gIH1cblxuICBpZiAoIW5zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9O1xuICB9XG5cbiAgaWYgKG1vZGVsICYmIG1vZGVsLmdldFBhY2thZ2UodmFsdWUpKSB7XG4gICAgLy8gcmVnaXN0ZXIgd2VsbCBrbm93biBuYW1lc3BhY2VcbiAgICB0aGlzLmxvZ05hbWVzcGFjZShucywgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbG9nIGN1c3RvbSBuYW1lc3BhY2UgZGlyZWN0bHkgYXMgdXNlZFxuICAgIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucywgdHJ1ZSk7XG5cbiAgICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGFjdHVhbE5zKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFBhcnNlIG5hbWVzcGFjZXMgYW5kIHJldHVybiBhIGxpc3Qgb2YgbGVmdCBvdmVyIGdlbmVyaWMgYXR0cmlidXRlc1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn1cbiAqL1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBnZW5lcmljQXR0cnMgPSBlbGVtZW50LiRhdHRycztcblxuICB2YXIgYXR0cmlidXRlcyA9IFtdO1xuXG4gIC8vIHBhcnNlIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGZpcnN0XG4gIC8vIGFuZCBsb2cgdGhlbS4gcHVzaCBub24gbmFtZXNwYWNlIGF0dHJpYnV0ZXMgdG8gYSBsaXN0XG4gIC8vIGFuZCBwcm9jZXNzIHRoZW0gbGF0ZXJcbiAgZm9yRWFjaChnZW5lcmljQXR0cnMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG5cbiAgICB2YXIgbm9uTnNBdHRyID0gc2VsZi5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcblxuICAgIGlmIChub25Oc0F0dHIpIHtcbiAgICAgIGF0dHJpYnV0ZXMucHVzaChub25Oc0F0dHIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VHZW5lcmljQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChhdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHhzaTp0eXBlIGF0dHJpYnV0ZVxuICAgIC8vIGl0IGlzIHNldCBtYW51YWxseSBiYXNlZCBvbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHR5cGVcbiAgICBpZiAoYXR0ci5uYW1lID09PSBYU0lfVFlQRSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzZWxmLmFkZEF0dHJpYnV0ZShzZWxmLm5zQXR0cmlidXRlTmFtZShhdHRyLm5hbWUpLCBhdHRyLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdtaXNzaW5nIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBmb3IgJyxcbiAgICAgICAgYXR0ci5uYW1lLCAnPScsIGF0dHIudmFsdWUsICdvbicsIGVsZW1lbnQsXG4gICAgICAgIGUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VDb250YWlubWVudHMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYm9keSA9IHRoaXMuYm9keSxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKSxcbiAgICAgICAgaXNSZWZlcmVuY2UgPSBwLmlzUmVmZXJlbmNlLFxuICAgICAgICBpc01hbnkgPSBwLmlzTWFueTtcblxuICAgIGlmICghaXNNYW55KSB7XG4gICAgICB2YWx1ZSA9IFsgdmFsdWUgXTtcbiAgICB9XG5cbiAgICBpZiAocC5pc0JvZHkpIHtcbiAgICAgIGJvZHkucHVzaChuZXcgQm9keVNlcmlhbGl6ZXIoKS5idWlsZChwLCB2YWx1ZVswXSkpO1xuICAgIH0gZWxzZVxuICAgIGlmIChpc1NpbXBsZVR5cGUocC50eXBlKSkge1xuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFZhbHVlU2VyaWFsaXplcihzZWxmLmFkZFRhZ05hbWUoc2VsZi5uc1Byb3BlcnR5VGFnTmFtZShwKSkpLmJ1aWxkKHAsIHYpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZVxuICAgIGlmIChpc1JlZmVyZW5jZSkge1xuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFJlZmVyZW5jZVNlcmlhbGl6ZXIoc2VsZi5hZGRUYWdOYW1lKHNlbGYubnNQcm9wZXJ0eVRhZ05hbWUocCkpKS5idWlsZCh2KSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWxsb3cgc2VyaWFsaXphdGlvbiB2aWEgdHlwZVxuICAgICAgLy8gcmF0aGVyIHRoYW4gZWxlbWVudCBuYW1lXG4gICAgICB2YXIgYXNUeXBlID0gc2VyaWFsaXplQXNUeXBlKHApLFxuICAgICAgICAgIGFzUHJvcGVydHkgPSBzZXJpYWxpemVBc1Byb3BlcnR5KHApO1xuXG4gICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgIHZhciBzZXJpYWxpemVyO1xuXG4gICAgICAgIGlmIChhc1R5cGUpIHtcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IFR5cGVTZXJpYWxpemVyKHNlbGYsIHApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgaWYgKGFzUHJvcGVydHkpIHtcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IEVsZW1lbnRTZXJpYWxpemVyKHNlbGYsIHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZik7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5LnB1c2goc2VyaWFsaXplci5idWlsZCh2KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmdldE5hbWVzcGFjZXMgPSBmdW5jdGlvbihsb2NhbCkge1xuXG4gIHZhciBuYW1lc3BhY2VzID0gdGhpcy5uYW1lc3BhY2VzLFxuICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICBwYXJlbnROYW1lc3BhY2VzO1xuXG4gIGlmICghbmFtZXNwYWNlcykge1xuICAgIHBhcmVudE5hbWVzcGFjZXMgPSBwYXJlbnQgJiYgcGFyZW50LmdldE5hbWVzcGFjZXMoKTtcblxuICAgIGlmIChsb2NhbCB8fCAhcGFyZW50TmFtZXNwYWNlcykge1xuICAgICAgdGhpcy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcyA9IG5ldyBOYW1lc3BhY2VzKHBhcmVudE5hbWVzcGFjZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lc3BhY2VzID0gcGFyZW50TmFtZXNwYWNlcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZXNwYWNlcztcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5sb2dOYW1lc3BhY2UgPSBmdW5jdGlvbihucywgd2VsbGtub3duLCBsb2NhbCkge1xuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMuZ2V0TmFtZXNwYWNlcyhsb2NhbCk7XG5cbiAgdmFyIG5zVXJpID0gbnMudXJpLFxuICAgICAgbnNQcmVmaXggPSBucy5wcmVmaXg7XG5cbiAgdmFyIGV4aXN0aW5nID0gbmFtZXNwYWNlcy5ieVVyaShuc1VyaSk7XG5cbiAgaWYgKG5zUHJlZml4ICE9PSAneG1sJyAmJiAoIWV4aXN0aW5nIHx8IGxvY2FsKSkge1xuICAgIG5hbWVzcGFjZXMuYWRkKG5zLCB3ZWxsa25vd24pO1xuICB9XG5cbiAgbmFtZXNwYWNlcy5tYXBQcmVmaXgobnNQcmVmaXgsIG5zVXJpKTtcblxuICByZXR1cm4gbnM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlVXNlZCA9IGZ1bmN0aW9uKG5zLCBsb2NhbCkge1xuICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCxcbiAgICAgIG1vZGVsID0gZWxlbWVudC4kbW9kZWwsXG4gICAgICBuYW1lc3BhY2VzID0gdGhpcy5nZXROYW1lc3BhY2VzKGxvY2FsKTtcblxuICAvLyBucyBtYXkgYmVcbiAgLy9cbiAgLy8gICAqIHByZWZpeCBvbmx5XG4gIC8vICAgKiBwcmVmaXg6dXJpXG4gIC8vICAgKiBsb2NhbE5hbWUgb25seVxuXG4gIHZhciBwcmVmaXggPSBucy5wcmVmaXgsXG4gICAgICB1cmkgPSBucy51cmksXG4gICAgICBuZXdQcmVmaXgsIGlkeCxcbiAgICAgIHdlbGxrbm93blVyaTtcblxuICAvLyBoYW5kbGUgYW5vbnltb3VzIG5hbWVzcGFjZXMgKGVsZW1lbnRGb3JtPXVucXVhbGlmaWVkKSwgY2YuICMyM1xuICBpZiAoIXByZWZpeCAmJiAhdXJpKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfTtcbiAgfVxuXG4gIHdlbGxrbm93blVyaSA9IERFRkFVTFRfTlNfTUFQW3ByZWZpeF0gfHwgbW9kZWwgJiYgKG1vZGVsLmdldFBhY2thZ2UocHJlZml4KSB8fCB7fSkudXJpO1xuXG4gIHVyaSA9IHVyaSB8fCB3ZWxsa25vd25VcmkgfHwgbmFtZXNwYWNlcy51cmlCeVByZWZpeChwcmVmaXgpO1xuXG4gIGlmICghdXJpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBuYW1lc3BhY2UgdXJpIGdpdmVuIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPicpO1xuICB9XG5cbiAgbnMgPSBuYW1lc3BhY2VzLmJ5VXJpKHVyaSk7XG5cbiAgaWYgKCFucykge1xuICAgIG5ld1ByZWZpeCA9IHByZWZpeDtcbiAgICBpZHggPSAxO1xuXG4gICAgLy8gZmluZCBhIHByZWZpeCB0aGF0IGlzIG5vdCBtYXBwZWQgeWV0XG4gICAgd2hpbGUgKG5hbWVzcGFjZXMudXJpQnlQcmVmaXgobmV3UHJlZml4KSkge1xuICAgICAgbmV3UHJlZml4ID0gcHJlZml4ICsgJ18nICsgaWR4Kys7XG4gICAgfVxuXG4gICAgbnMgPSB0aGlzLmxvZ05hbWVzcGFjZSh7IHByZWZpeDogbmV3UHJlZml4LCB1cmk6IHVyaSB9LCB3ZWxsa25vd25VcmkgPT09IHVyaSk7XG4gIH1cblxuICBpZiAocHJlZml4KSB7XG4gICAgbmFtZXNwYWNlcy5tYXBQcmVmaXgocHJlZml4LCB1cmkpO1xuICB9XG5cbiAgcmV0dXJuIG5zO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlQXR0cmlidXRlcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHApIHtcblxuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0KHAubmFtZSk7XG5cbiAgICBpZiAocC5pc1JlZmVyZW5jZSkge1xuXG4gICAgICBpZiAoIXAuaXNNYW55KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuaWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2godi5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJRFJFRlMgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHJlZmVyZW5jZXMuXG4gICAgICAgIHZhbHVlID0gdmFsdWVzLmpvaW4oJyAnKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHNlbGYuYWRkQXR0cmlidXRlKHNlbGYubnNBdHRyaWJ1dGVOYW1lKHApLCB2YWx1ZSk7XG4gIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZFRhZ05hbWUgPSBmdW5jdGlvbihuc1RhZ05hbWUpIHtcbiAgdmFyIGFjdHVhbE5zID0gdGhpcy5sb2dOYW1lc3BhY2VVc2VkKG5zVGFnTmFtZSk7XG5cbiAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChhY3R1YWxOcyk7XG5cbiAgcmV0dXJuIG5zTmFtZShuc1RhZ05hbWUpO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBhdHRycyA9IHRoaXMuYXR0cnM7XG5cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZXNjYXBlQXR0cih2YWx1ZSk7XG4gIH1cblxuICBhdHRycy5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgdmFyIGF0dHJzID0gdGhpcy5hdHRycyxcbiAgICAgIG5hbWVzcGFjZXMgPSB0aGlzLm5hbWVzcGFjZXM7XG5cbiAgaWYgKG5hbWVzcGFjZXMpIHtcbiAgICBhdHRycyA9IGdldE5zQXR0cnMobmFtZXNwYWNlcykuY29uY2F0KGF0dHJzKTtcbiAgfVxuXG4gIGZvckVhY2goYXR0cnMsIGZ1bmN0aW9uKGEpIHtcbiAgICB3cml0ZXJcbiAgICAgIC5hcHBlbmQoJyAnKVxuICAgICAgLmFwcGVuZChuc05hbWUoYS5uYW1lKSkuYXBwZW5kKCc9XCInKS5hcHBlbmQoYS52YWx1ZSkuYXBwZW5kKCdcIicpO1xuICB9KTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uKHdyaXRlcikge1xuICB2YXIgZmlyc3RCb2R5ID0gdGhpcy5ib2R5WzBdLFxuICAgICAgaW5kZW50ID0gZmlyc3RCb2R5ICYmIGZpcnN0Qm9keS5jb25zdHJ1Y3RvciAhPT0gQm9keVNlcmlhbGl6ZXI7XG5cbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUpO1xuXG4gIHRoaXMuc2VyaWFsaXplQXR0cmlidXRlcyh3cml0ZXIpO1xuXG4gIHdyaXRlci5hcHBlbmQoZmlyc3RCb2R5ID8gJz4nIDogJyAvPicpO1xuXG4gIGlmIChmaXJzdEJvZHkpIHtcblxuICAgIGlmIChpbmRlbnQpIHtcbiAgICAgIHdyaXRlclxuICAgICAgICAuYXBwZW5kTmV3TGluZSgpXG4gICAgICAgIC5pbmRlbnQoKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHRoaXMuYm9keSwgZnVuY3Rpb24oYikge1xuICAgICAgYi5zZXJpYWxpemVUbyh3cml0ZXIpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluZGVudCkge1xuICAgICAgd3JpdGVyXG4gICAgICAgIC51bmluZGVudCgpXG4gICAgICAgIC5hcHBlbmRJbmRlbnQoKTtcbiAgICB9XG5cbiAgICB3cml0ZXIuYXBwZW5kKCc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPicpO1xuICB9XG5cbiAgd3JpdGVyLmFwcGVuZE5ld0xpbmUoKTtcbn07XG5cbi8qKlxuICogQSBzZXJpYWxpemVyIGZvciB0eXBlcyB0aGF0IGhhbmRsZXMgc2VyaWFsaXphdGlvbiBvZiBkYXRhIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIFR5cGVTZXJpYWxpemVyKHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIEVsZW1lbnRTZXJpYWxpemVyLmNhbGwodGhpcywgcGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IpO1xufVxuXG5pbmhlcml0cyhUeXBlU2VyaWFsaXplciwgRWxlbWVudFNlcmlhbGl6ZXIpO1xuXG5UeXBlU2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgLy8gZXh0cmFjdGVkIGF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZXMgPSBFbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMuY2FsbCh0aGlzLCBlbGVtZW50KTtcblxuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3I7XG5cbiAgLy8gb25seSBzZXJpYWxpemUgeHNpOnR5cGUgaWYgbmVjZXNzYXJ5XG4gIGlmIChkZXNjcmlwdG9yLm5hbWUgPT09IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yLnR5cGUpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfVxuXG4gIHZhciB0eXBlTnMgPSB0aGlzLnR5cGVOcyA9IHRoaXMubnNUYWdOYW1lKGRlc2NyaXB0b3IpO1xuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKHRoaXMudHlwZU5zKTtcblxuICAvLyBhZGQgeHNpOnR5cGUgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgZWxlbWVudHNcbiAgLy8gYWN0dWFsIHR5cGVcblxuICB2YXIgcGtnID0gZWxlbWVudC4kbW9kZWwuZ2V0UGFja2FnZSh0eXBlTnMudXJpKSxcbiAgICAgIHR5cGVQcmVmaXggPSAocGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXgpIHx8ICcnO1xuXG4gIHRoaXMuYWRkQXR0cmlidXRlKFxuICAgIHRoaXMubnNBdHRyaWJ1dGVOYW1lKFhTSV9UWVBFKSxcbiAgICAodHlwZU5zLnByZWZpeCA/IHR5cGVOcy5wcmVmaXggKyAnOicgOiAnJykgKyB0eXBlUHJlZml4ICsgZGVzY3JpcHRvci5ucy5sb2NhbE5hbWVcbiAgKTtcblxuICByZXR1cm4gYXR0cmlidXRlcztcbn07XG5cblR5cGVTZXJpYWxpemVyLnByb3RvdHlwZS5pc0xvY2FsTnMgPSBmdW5jdGlvbihucykge1xuICByZXR1cm4gbnMudXJpID09PSAodGhpcy50eXBlTnMgfHwgdGhpcy5ucykudXJpO1xufTtcblxuZnVuY3Rpb24gU2F2aW5nV3JpdGVyKCkge1xuICB0aGlzLnZhbHVlID0gJyc7XG5cbiAgdGhpcy53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHRoaXMudmFsdWUgKz0gc3RyO1xuICB9O1xufVxuXG5mdW5jdGlvbiBGb3JtYXRpbmdXcml0ZXIob3V0LCBmb3JtYXQpIHtcblxuICB2YXIgaW5kZW50ID0gWycnXTtcblxuICB0aGlzLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIG91dC53cml0ZShzdHIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy5hcHBlbmROZXdMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgb3V0LndyaXRlKCdcXG4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB0aGlzLmFwcGVuZEluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIG91dC53cml0ZShpbmRlbnQuam9pbignICAnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy5pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgICBpbmRlbnQucHVzaCgnJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy51bmluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGluZGVudC5wb3AoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHdyaXRlciBmb3IgbWV0YS1tb2RlbCBiYWNrZWQgZG9jdW1lbnQgdHJlZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvdXRwdXQgb3B0aW9ucyB0byBwYXNzIGludG8gdGhlIHdyaXRlclxuICovXG5mdW5jdGlvbiBXcml0ZXIob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBhc3NpZ24oeyBmb3JtYXQ6IGZhbHNlLCBwcmVhbWJsZTogdHJ1ZSB9LCBvcHRpb25zIHx8IHt9KTtcblxuICBmdW5jdGlvbiB0b1hNTCh0cmVlLCB3cml0ZXIpIHtcbiAgICB2YXIgaW50ZXJuYWxXcml0ZXIgPSB3cml0ZXIgfHwgbmV3IFNhdmluZ1dyaXRlcigpO1xuICAgIHZhciBmb3JtYXRpbmdXcml0ZXIgPSBuZXcgRm9ybWF0aW5nV3JpdGVyKGludGVybmFsV3JpdGVyLCBvcHRpb25zLmZvcm1hdCk7XG5cbiAgICBpZiAob3B0aW9ucy5wcmVhbWJsZSkge1xuICAgICAgZm9ybWF0aW5nV3JpdGVyLmFwcGVuZChYTUxfUFJFQU1CTEUpO1xuICAgIH1cblxuICAgIG5ldyBFbGVtZW50U2VyaWFsaXplcigpLmJ1aWxkKHRyZWUpLnNlcmlhbGl6ZVRvKGZvcm1hdGluZ1dyaXRlcik7XG5cbiAgICBpZiAoIXdyaXRlcikge1xuICAgICAgcmV0dXJuIGludGVybmFsV3JpdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9YTUw6IHRvWE1MXG4gIH07XG59XG5cbmV4cG9ydCB7IFJlYWRlciwgV3JpdGVyIH07XG4iLCJpbXBvcnQgeyBmb3JFYWNoLCBiaW5kLCBwaWNrLCBhc3NpZ24sIGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBNb2RkbGUgYmFzZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBCYXNlKCkgeyB9XG5cbkJhc2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuJG1vZGVsLnByb3BlcnRpZXMuZ2V0KHRoaXMsIG5hbWUpO1xufTtcblxuQmFzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy4kbW9kZWwucHJvcGVydGllcy5zZXQodGhpcywgbmFtZSwgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBBIG1vZGVsIGVsZW1lbnQgZmFjdG9yeS5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZX0gbW9kZWxcbiAqIEBwYXJhbSB7UHJvcGVydGllc30gcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBGYWN0b3J5KG1vZGVsLCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbn1cblxuXG5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVUeXBlID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG5cbiAgdmFyIHByb3BzID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlLnByb3RvdHlwZSk7XG5cbiAgLy8gaW5pdGlhbGl6ZSBkZWZhdWx0IHZhbHVlc1xuICBmb3JFYWNoKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgIGlmICghcC5pc01hbnkgJiYgcC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3RvdHlwZVtwLm5hbWVdID0gcC5kZWZhdWx0O1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvcHMuZGVmaW5lTW9kZWwocHJvdG90eXBlLCBtb2RlbCk7XG4gIHByb3BzLmRlZmluZURlc2NyaXB0b3IocHJvdG90eXBlLCBkZXNjcmlwdG9yKTtcblxuICB2YXIgbmFtZSA9IGRlc2NyaXB0b3IubnMubmFtZTtcblxuICAvKipcbiAgICogVGhlIG5ldyB0eXBlIGNvbnN0cnVjdG9yXG4gICAqL1xuICBmdW5jdGlvbiBNb2RkbGVFbGVtZW50KGF0dHJzKSB7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckdHlwZScsIHsgdmFsdWU6IG5hbWUsIGVudW1lcmFibGU6IHRydWUgfSk7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckYXR0cnMnLCB7IHZhbHVlOiB7fSB9KTtcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyRwYXJlbnQnLCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXG4gICAgZm9yRWFjaChhdHRycywgYmluZChmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgdGhpcy5zZXQoa2V5LCB2YWwpO1xuICAgIH0sIHRoaXMpKTtcbiAgfVxuXG4gIE1vZGRsZUVsZW1lbnQucHJvdG90eXBlID0gcHJvdG90eXBlO1xuXG4gIE1vZGRsZUVsZW1lbnQuaGFzVHlwZSA9IHByb3RvdHlwZS4kaW5zdGFuY2VPZiA9IHRoaXMubW9kZWwuaGFzVHlwZTtcblxuICAvLyBzdGF0aWMgbGlua3NcbiAgcHJvcHMuZGVmaW5lTW9kZWwoTW9kZGxlRWxlbWVudCwgbW9kZWwpO1xuICBwcm9wcy5kZWZpbmVEZXNjcmlwdG9yKE1vZGRsZUVsZW1lbnQsIGRlc2NyaXB0b3IpO1xuXG4gIHJldHVybiBNb2RkbGVFbGVtZW50O1xufTtcblxuLyoqXG4gKiBCdWlsdC1pbiBtb2RkbGUgdHlwZXNcbiAqL1xudmFyIEJVSUxUSU5TID0ge1xuICBTdHJpbmc6IHRydWUsXG4gIEJvb2xlYW46IHRydWUsXG4gIEludGVnZXI6IHRydWUsXG4gIFJlYWw6IHRydWUsXG4gIEVsZW1lbnQ6IHRydWVcbn07XG5cbi8qKlxuICogQ29udmVydGVycyBmb3IgYnVpbHQgaW4gdHlwZXMgZnJvbSBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4gKi9cbnZhciBUWVBFX0NPTlZFUlRFUlMgPSB7XG4gIFN0cmluZzogZnVuY3Rpb24ocykgeyByZXR1cm4gczsgfSxcbiAgQm9vbGVhbjogZnVuY3Rpb24ocykgeyByZXR1cm4gcyA9PT0gJ3RydWUnOyB9LFxuICBJbnRlZ2VyOiBmdW5jdGlvbihzKSB7IHJldHVybiBwYXJzZUludChzLCAxMCk7IH0sXG4gIFJlYWw6IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHBhcnNlRmxvYXQocywgMTApOyB9XG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSB0eXBlIHRvIGl0cyByZWFsIHJlcHJlc2VudGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVR5cGUodHlwZSwgdmFsdWUpIHtcblxuICB2YXIgY29udmVydGVyID0gVFlQRV9DT05WRVJURVJTW3R5cGVdO1xuXG4gIGlmIChjb252ZXJ0ZXIpIHtcbiAgICByZXR1cm4gY29udmVydGVyKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBidWlsdC1pblxuICovXG5mdW5jdGlvbiBpc0J1aWx0SW4odHlwZSkge1xuICByZXR1cm4gISFCVUlMVElOU1t0eXBlXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBzaW1wbGVcbiAqL1xuZnVuY3Rpb24gaXNTaW1wbGUodHlwZSkge1xuICByZXR1cm4gISFUWVBFX0NPTlZFUlRFUlNbdHlwZV07XG59XG5cbi8qKlxuICogUGFyc2VzIGEgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgZm9ybSAobnM6KWxvY2FsTmFtZSB0byBhbiBvYmplY3QsXG4gKiBnaXZlbiBhIGRlZmF1bHQgcHJlZml4IHRvIGFzc3VtZSBpbiBjYXNlIG5vIGV4cGxpY2l0IG5hbWVzcGFjZSBpcyBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IFtkZWZhdWx0UHJlZml4XSB0aGUgZGVmYXVsdCBwcmVmaXggdG8gdGFrZSwgaWYgbm9uZSBpcyBwcmVzZW50LlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhcnNlZCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTmFtZShuYW1lLCBkZWZhdWx0UHJlZml4KSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoLzovKSxcbiAgICAgIGxvY2FsTmFtZSwgcHJlZml4O1xuXG4gIC8vIG5vIHByZWZpeCAoaS5lLiBvbmx5IGxvY2FsIG5hbWUpXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBsb2NhbE5hbWUgPSBuYW1lO1xuICAgIHByZWZpeCA9IGRlZmF1bHRQcmVmaXg7XG4gIH0gZWxzZVxuICAvLyBwcmVmaXggKyBsb2NhbCBuYW1lXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICBsb2NhbE5hbWUgPSBwYXJ0c1sxXTtcbiAgICBwcmVmaXggPSBwYXJ0c1swXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDxwcmVmaXg6bG9jYWxOYW1lPiBvciA8bG9jYWxOYW1lPiwgZ290ICcgKyBuYW1lKTtcbiAgfVxuXG4gIG5hbWUgPSAocHJlZml4ID8gcHJlZml4ICsgJzonIDogJycpICsgbG9jYWxOYW1lO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBsb2NhbE5hbWU6IGxvY2FsTmFtZVxuICB9O1xufVxuXG4vKipcbiAqIEEgdXRpbGl0eSB0byBidWlsZCBlbGVtZW50IGRlc2NyaXB0b3JzLlxuICovXG5mdW5jdGlvbiBEZXNjcmlwdG9yQnVpbGRlcihuYW1lTnMpIHtcbiAgdGhpcy5ucyA9IG5hbWVOcztcbiAgdGhpcy5uYW1lID0gbmFtZU5zLm5hbWU7XG4gIHRoaXMuYWxsVHlwZXMgPSBbXTtcbiAgdGhpcy5hbGxUeXBlc0J5TmFtZSA9IHt9O1xuICB0aGlzLnByb3BlcnRpZXMgPSBbXTtcbiAgdGhpcy5wcm9wZXJ0aWVzQnlOYW1lID0ge307XG59XG5cblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwaWNrKHRoaXMsIFtcbiAgICAnbnMnLFxuICAgICduYW1lJyxcbiAgICAnYWxsVHlwZXMnLFxuICAgICdhbGxUeXBlc0J5TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMnLFxuICAgICdwcm9wZXJ0aWVzQnlOYW1lJyxcbiAgICAnYm9keVByb3BlcnR5JyxcbiAgICAnaWRQcm9wZXJ0eSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIEFkZCBwcm9wZXJ0eSBhdCBnaXZlbiBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcFxuICogQHBhcmFtIHtOdW1iZXJ9IFtpZHhdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt2YWxpZGF0ZT10cnVlXVxuICovXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkUHJvcGVydHkgPSBmdW5jdGlvbihwLCBpZHgsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHR5cGVvZiBpZHggPT09ICdib29sZWFuJykge1xuICAgIHZhbGlkYXRlID0gaWR4O1xuICAgIGlkeCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRoaXMuYWRkTmFtZWRQcm9wZXJ0eShwLCB2YWxpZGF0ZSAhPT0gZmFsc2UpO1xuXG4gIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpZHggIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMuc3BsaWNlKGlkeCwgMCwgcCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy5wdXNoKHApO1xuICB9XG59O1xuXG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZXBsYWNlUHJvcGVydHkgPSBmdW5jdGlvbihvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHksIHJlcGxhY2UpIHtcbiAgdmFyIG9sZE5hbWVOcyA9IG9sZFByb3BlcnR5Lm5zO1xuXG4gIHZhciBwcm9wcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgIHByb3BlcnRpZXNCeU5hbWUgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWUsXG4gICAgICByZW5hbWUgPSBvbGRQcm9wZXJ0eS5uYW1lICE9PSBuZXdQcm9wZXJ0eS5uYW1lO1xuXG4gIGlmIChvbGRQcm9wZXJ0eS5pc0lkKSB7XG4gICAgaWYgKCFuZXdQcm9wZXJ0eS5pc0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdwcm9wZXJ0eSA8JyArIG5ld1Byb3BlcnR5Lm5zLm5hbWUgKyAnPiBtdXN0IGJlIGlkIHByb3BlcnR5ICcgK1xuICAgICAgICAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJZFByb3BlcnR5KG5ld1Byb3BlcnR5LCBmYWxzZSk7XG4gIH1cblxuICBpZiAob2xkUHJvcGVydHkuaXNCb2R5KSB7XG5cbiAgICBpZiAoIW5ld1Byb3BlcnR5LmlzQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAncHJvcGVydHkgPCcgKyBuZXdQcm9wZXJ0eS5ucy5uYW1lICsgJz4gbXVzdCBiZSBib2R5IHByb3BlcnR5ICcgK1xuICAgICAgICAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuc2V0Qm9keVByb3BlcnR5KG5ld1Byb3BlcnR5LCBmYWxzZSk7XG4gIH1cblxuICAvLyB2YWxpZGF0ZSBleGlzdGVuY2UgYW5kIGdldCBsb2NhdGlvbiBvZiBvbGQgcHJvcGVydHlcbiAgdmFyIGlkeCA9IHByb3BzLmluZGV4T2Yob2xkUHJvcGVydHkpO1xuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvcGVydHkgPCcgKyBvbGROYW1lTnMubmFtZSArICc+IG5vdCBmb3VuZCBpbiBwcm9wZXJ0eSBsaXN0Jyk7XG4gIH1cblxuICAvLyByZW1vdmUgb2xkIHByb3BlcnR5XG4gIHByb3BzLnNwbGljZShpZHgsIDEpO1xuXG4gIC8vIHJlcGxhY2luZyB0aGUgbmFtZWQgcHJvcGVydHkgaXMgaW50ZW50aW9uYWxcbiAgLy9cbiAgLy8gICogdmFsaWRhdGUgb25seSBpZiB0aGlzIGlzIGEgXCJyZW5hbWVcIiBvcGVyYXRpb25cbiAgLy8gICogYWRkIGF0IHNwZWNpZmljIGluZGV4IHVubGVzcyB3ZSBcInJlcGxhY2VcIlxuICAvL1xuICB0aGlzLmFkZFByb3BlcnR5KG5ld1Byb3BlcnR5LCByZXBsYWNlID8gdW5kZWZpbmVkIDogaWR4LCByZW5hbWUpO1xuXG4gIC8vIG1ha2UgbmV3IHByb3BlcnR5IGF2YWlsYWJsZSB1bmRlciBvbGQgbmFtZVxuICBwcm9wZXJ0aWVzQnlOYW1lW29sZE5hbWVOcy5uYW1lXSA9IHByb3BlcnRpZXNCeU5hbWVbb2xkTmFtZU5zLmxvY2FsTmFtZV0gPSBuZXdQcm9wZXJ0eTtcbn07XG5cblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbihwLCB0YXJnZXRQcm9wZXJ0eU5hbWUsIHJlcGxhY2UpIHtcblxuICB2YXIgbnNQcmVmaXggPSBwLm5zLnByZWZpeDtcbiAgdmFyIHBhcnRzID0gdGFyZ2V0UHJvcGVydHlOYW1lLnNwbGl0KCcjJyk7XG5cbiAgdmFyIG5hbWUgPSBwYXJzZU5hbWUocGFydHNbMF0sIG5zUHJlZml4KTtcbiAgdmFyIGF0dHJOYW1lID0gcGFyc2VOYW1lKHBhcnRzWzFdLCBuYW1lLnByZWZpeCkubmFtZTtcblxuICB2YXIgcmVkZWZpbmVkUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVbYXR0ck5hbWVdO1xuICBpZiAoIXJlZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWZpbmVkIHByb3BlcnR5IDwnICsgYXR0ck5hbWUgKyAnPiBub3QgZm91bmQnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlcGxhY2VQcm9wZXJ0eShyZWRlZmluZWRQcm9wZXJ0eSwgcCwgcmVwbGFjZSk7XG4gIH1cblxuICBkZWxldGUgcC5yZWRlZmluZXM7XG59O1xuXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkTmFtZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG4gIHZhciBucyA9IHAubnMsXG4gICAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aGlzLmFzc2VydE5vdERlZmluZWQocCwgbnMubmFtZSk7XG4gICAgdGhpcy5hc3NlcnROb3REZWZpbmVkKHAsIG5zLmxvY2FsTmFtZSk7XG4gIH1cblxuICBwcm9wc0J5TmFtZVtucy5uYW1lXSA9IHByb3BzQnlOYW1lW25zLmxvY2FsTmFtZV0gPSBwO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlbW92ZU5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbihwKSB7XG4gIHZhciBucyA9IHAubnMsXG4gICAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcblxuICBkZWxldGUgcHJvcHNCeU5hbWVbbnMubmFtZV07XG4gIGRlbGV0ZSBwcm9wc0J5TmFtZVtucy5sb2NhbE5hbWVdO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnNldEJvZHlQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuYm9keVByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2JvZHkgcHJvcGVydHkgZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyAnICtcbiAgICAgICcoPCcgKyB0aGlzLmJvZHlQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cblxuICB0aGlzLmJvZHlQcm9wZXJ0eSA9IHA7XG59O1xuXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuc2V0SWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuaWRQcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdpZCBwcm9wZXJ0eSBkZWZpbmVkIG11bHRpcGxlIHRpbWVzICcgK1xuICAgICAgJyg8JyArIHRoaXMuaWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cblxuICB0aGlzLmlkUHJvcGVydHkgPSBwO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFzc2VydE5vdERlZmluZWQgPSBmdW5jdGlvbihwLCBuYW1lKSB7XG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwLm5hbWUsXG4gICAgICBkZWZpbmVkUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHlOYW1lXTtcblxuICBpZiAoZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3Byb3BlcnR5IDwnICsgcHJvcGVydHlOYW1lICsgJz4gYWxyZWFkeSBkZWZpbmVkOyAnICtcbiAgICAgICdvdmVycmlkZSBvZiA8JyArIGRlZmluZWRQcm9wZXJ0eS5kZWZpbmVkQnkubnMubmFtZSArICcjJyArIGRlZmluZWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4gYnkgJyArXG4gICAgICAnPCcgKyBwLmRlZmluZWRCeS5ucy5uYW1lICsgJyMnICsgcC5ucy5uYW1lICsgJz4gbm90IGFsbG93ZWQgd2l0aG91dCByZWRlZmluZXMnKTtcbiAgfVxufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmhhc1Byb3BlcnR5ID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZFRyYWl0ID0gZnVuY3Rpb24odCwgaW5oZXJpdGVkKSB7XG5cbiAgdmFyIHR5cGVzQnlOYW1lID0gdGhpcy5hbGxUeXBlc0J5TmFtZSxcbiAgICAgIHR5cGVzID0gdGhpcy5hbGxUeXBlcztcblxuICB2YXIgdHlwZU5hbWUgPSB0Lm5hbWU7XG5cbiAgaWYgKHR5cGVOYW1lIGluIHR5cGVzQnlOYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaCh0LnByb3BlcnRpZXMsIGJpbmQoZnVuY3Rpb24ocCkge1xuXG4gICAgLy8gY2xvbmUgcHJvcGVydHkgdG8gYWxsb3cgZXh0ZW5zaW9uc1xuICAgIHAgPSBhc3NpZ24oe30sIHAsIHtcbiAgICAgIG5hbWU6IHAubnMubG9jYWxOYW1lLFxuICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWRcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCAnZGVmaW5lZEJ5Jywge1xuICAgICAgdmFsdWU6IHRcbiAgICB9KTtcblxuICAgIHZhciByZXBsYWNlcyA9IHAucmVwbGFjZXMsXG4gICAgICAgIHJlZGVmaW5lcyA9IHAucmVkZWZpbmVzO1xuXG4gICAgLy8gYWRkIHJlcGxhY2UvcmVkZWZpbmUgc3VwcG9ydFxuICAgIGlmIChyZXBsYWNlcyB8fCByZWRlZmluZXMpIHtcbiAgICAgIHRoaXMucmVkZWZpbmVQcm9wZXJ0eShwLCByZXBsYWNlcyB8fCByZWRlZmluZXMsIHJlcGxhY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHAuaXNCb2R5KSB7XG4gICAgICAgIHRoaXMuc2V0Qm9keVByb3BlcnR5KHApO1xuICAgICAgfVxuICAgICAgaWYgKHAuaXNJZCkge1xuICAgICAgICB0aGlzLnNldElkUHJvcGVydHkocCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZFByb3BlcnR5KHApO1xuICAgIH1cbiAgfSwgdGhpcykpO1xuXG4gIHR5cGVzLnB1c2godCk7XG4gIHR5cGVzQnlOYW1lW3R5cGVOYW1lXSA9IHQ7XG59O1xuXG4vKipcbiAqIEEgcmVnaXN0cnkgb2YgTW9kZGxlIHBhY2thZ2VzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8UGFja2FnZT59IHBhY2thZ2VzXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXN9IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gUmVnaXN0cnkocGFja2FnZXMsIHByb3BlcnRpZXMpIHtcbiAgdGhpcy5wYWNrYWdlTWFwID0ge307XG4gIHRoaXMudHlwZU1hcCA9IHt9O1xuXG4gIHRoaXMucGFja2FnZXMgPSBbXTtcblxuICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuXG4gIGZvckVhY2gocGFja2FnZXMsIGJpbmQodGhpcy5yZWdpc3RlclBhY2thZ2UsIHRoaXMpKTtcbn1cblxuXG5SZWdpc3RyeS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uKHVyaU9yUHJlZml4KSB7XG4gIHJldHVybiB0aGlzLnBhY2thZ2VNYXBbdXJpT3JQcmVmaXhdO1xufTtcblxuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnBhY2thZ2VzO1xufTtcblxuXG5SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJQYWNrYWdlID0gZnVuY3Rpb24ocGtnKSB7XG5cbiAgLy8gY29weSBwYWNrYWdlXG4gIHBrZyA9IGFzc2lnbih7fSwgcGtnKTtcblxuICB2YXIgcGtnTWFwID0gdGhpcy5wYWNrYWdlTWFwO1xuXG4gIGVuc3VyZUF2YWlsYWJsZShwa2dNYXAsIHBrZywgJ3ByZWZpeCcpO1xuICBlbnN1cmVBdmFpbGFibGUocGtnTWFwLCBwa2csICd1cmknKTtcblxuICAvLyByZWdpc3RlciB0eXBlc1xuICBmb3JFYWNoKHBrZy50eXBlcywgYmluZChmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5yZWdpc3RlclR5cGUoZGVzY3JpcHRvciwgcGtnKTtcbiAgfSwgdGhpcykpO1xuXG4gIHBrZ01hcFtwa2cudXJpXSA9IHBrZ01hcFtwa2cucHJlZml4XSA9IHBrZztcbiAgdGhpcy5wYWNrYWdlcy5wdXNoKHBrZyk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSB0eXBlIGZyb20gYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGggdXNcbiAqL1xuUmVnaXN0cnkucHJvdG90eXBlLnJlZ2lzdGVyVHlwZSA9IGZ1bmN0aW9uKHR5cGUsIHBrZykge1xuXG4gIHR5cGUgPSBhc3NpZ24oe30sIHR5cGUsIHtcbiAgICBzdXBlckNsYXNzOiAodHlwZS5zdXBlckNsYXNzIHx8IFtdKS5zbGljZSgpLFxuICAgIGV4dGVuZHM6ICh0eXBlLmV4dGVuZHMgfHwgW10pLnNsaWNlKCksXG4gICAgcHJvcGVydGllczogKHR5cGUucHJvcGVydGllcyB8fCBbXSkuc2xpY2UoKSxcbiAgICBtZXRhOiBhc3NpZ24oKHR5cGUubWV0YSB8fCB7fSkpXG4gIH0pO1xuXG4gIHZhciBucyA9IHBhcnNlTmFtZSh0eXBlLm5hbWUsIHBrZy5wcmVmaXgpLFxuICAgICAgbmFtZSA9IG5zLm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzQnlOYW1lID0ge307XG5cbiAgLy8gcGFyc2UgcHJvcGVydGllc1xuICBmb3JFYWNoKHR5cGUucHJvcGVydGllcywgYmluZChmdW5jdGlvbihwKSB7XG5cbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgbmFtZXNcbiAgICB2YXIgcHJvcGVydHlOcyA9IHBhcnNlTmFtZShwLm5hbWUsIG5zLnByZWZpeCksXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TnMubmFtZTtcblxuICAgIC8vIG5hbWVzcGFjZSBwcm9wZXJ0eSB0eXBlc1xuICAgIGlmICghaXNCdWlsdEluKHAudHlwZSkpIHtcbiAgICAgIHAudHlwZSA9IHBhcnNlTmFtZShwLnR5cGUsIHByb3BlcnR5TnMucHJlZml4KS5uYW1lO1xuICAgIH1cblxuICAgIGFzc2lnbihwLCB7XG4gICAgICBuczogcHJvcGVydHlOcyxcbiAgICAgIG5hbWU6IHByb3BlcnR5TmFtZVxuICAgIH0pO1xuXG4gICAgcHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdID0gcDtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIHVwZGF0ZSBucyArIG5hbWVcbiAgYXNzaWduKHR5cGUsIHtcbiAgICBuczogbnMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwcm9wZXJ0aWVzQnlOYW1lOiBwcm9wZXJ0aWVzQnlOYW1lXG4gIH0pO1xuXG4gIGZvckVhY2godHlwZS5leHRlbmRzLCBiaW5kKGZ1bmN0aW9uKGV4dGVuZHNOYW1lKSB7XG4gICAgdmFyIGV4dGVuZGVkID0gdGhpcy50eXBlTWFwW2V4dGVuZHNOYW1lXTtcblxuICAgIGV4dGVuZGVkLnRyYWl0cyA9IGV4dGVuZGVkLnRyYWl0cyB8fCBbXTtcbiAgICBleHRlbmRlZC50cmFpdHMucHVzaChuYW1lKTtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIGxpbmsgdG8gcGFja2FnZVxuICB0aGlzLmRlZmluZVBhY2thZ2UodHlwZSwgcGtnKTtcblxuICAvLyByZWdpc3RlclxuICB0aGlzLnR5cGVNYXBbbmFtZV0gPSB0eXBlO1xufTtcblxuXG4vKipcbiAqIFRyYXZlcnNlIHRoZSB0eXBlIGhpZXJhcmNoeSBmcm9tIGJvdHRvbSB0byB0b3AsXG4gKiBjYWxsaW5nIGl0ZXJhdG9yIHdpdGggKHR5cGUsIGluaGVyaXRlZCkgZm9yIGFsbCBlbGVtZW50cyBpblxuICogdGhlIGluaGVyaXRhbmNlIGNoYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBuc05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt0cmFpdD1mYWxzZV1cbiAqL1xuUmVnaXN0cnkucHJvdG90eXBlLm1hcFR5cGVzID0gZnVuY3Rpb24obnNOYW1lLCBpdGVyYXRvciwgdHJhaXQpIHtcblxuICB2YXIgdHlwZSA9IGlzQnVpbHRJbihuc05hbWUubmFtZSkgPyB7IG5hbWU6IG5zTmFtZS5uYW1lIH0gOiB0aGlzLnR5cGVNYXBbbnNOYW1lLm5hbWVdO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHRyYWl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2xzXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZVRyYWl0KGNscykge1xuICAgIHJldHVybiB0cmF2ZXJzZVN1cGVyKGNscywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHN1cGVyIHR5cGUgb3IgdHJhaXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNsc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFt0cmFpdD1mYWxzZV1cbiAgICovXG4gIGZ1bmN0aW9uIHRyYXZlcnNlU3VwZXIoY2xzLCB0cmFpdCkge1xuICAgIHZhciBwYXJlbnROcyA9IHBhcnNlTmFtZShjbHMsIGlzQnVpbHRJbihjbHMpID8gJycgOiBuc05hbWUucHJlZml4KTtcbiAgICBzZWxmLm1hcFR5cGVzKHBhcmVudE5zLCBpdGVyYXRvciwgdHJhaXQpO1xuICB9XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGUgPCcgKyBuc05hbWUubmFtZSArICc+Jyk7XG4gIH1cblxuICBmb3JFYWNoKHR5cGUuc3VwZXJDbGFzcywgdHJhaXQgPyB0cmF2ZXJzZVRyYWl0IDogdHJhdmVyc2VTdXBlcik7XG5cbiAgLy8gY2FsbCBpdGVyYXRvciB3aXRoICh0eXBlLCBpbmhlcml0ZWQ9IXRyYWl0KVxuICBpdGVyYXRvcih0eXBlLCAhdHJhaXQpO1xuXG4gIGZvckVhY2godHlwZS50cmFpdHMsIHRyYXZlcnNlVHJhaXQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVmZmVjdGl2ZSBkZXNjcmlwdG9yIGZvciBhIHR5cGUuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSB0eXBlIHRoZSBuYW1lc3BhY2VkIG5hbWUgKG5zOmxvY2FsTmFtZSkgb2YgdGhlIHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtEZXNjcmlwdG9yfSB0aGUgcmVzdWx0aW5nIGVmZmVjdGl2ZSBkZXNjcmlwdG9yXG4gKi9cblJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRFZmZlY3RpdmVEZXNjcmlwdG9yID0gZnVuY3Rpb24obmFtZSkge1xuXG4gIHZhciBuc05hbWUgPSBwYXJzZU5hbWUobmFtZSk7XG5cbiAgdmFyIGJ1aWxkZXIgPSBuZXcgRGVzY3JpcHRvckJ1aWxkZXIobnNOYW1lKTtcblxuICB0aGlzLm1hcFR5cGVzKG5zTmFtZSwgZnVuY3Rpb24odHlwZSwgaW5oZXJpdGVkKSB7XG4gICAgYnVpbGRlci5hZGRUcmFpdCh0eXBlLCBpbmhlcml0ZWQpO1xuICB9KTtcblxuICB2YXIgZGVzY3JpcHRvciA9IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAvLyBkZWZpbmUgcGFja2FnZSBsaW5rXG4gIHRoaXMuZGVmaW5lUGFja2FnZShkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmFsbFR5cGVzW2Rlc2NyaXB0b3IuYWxsVHlwZXMubGVuZ3RoIC0gMV0uJHBrZyk7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG5cblJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmVQYWNrYWdlID0gZnVuY3Rpb24odGFyZ2V0LCBwa2cpIHtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZSh0YXJnZXQsICckcGtnJywgeyB2YWx1ZTogcGtnIH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlQXZhaWxhYmxlKHBhY2thZ2VNYXAsIHBrZywgaWRlbnRpZmllcktleSkge1xuXG4gIHZhciB2YWx1ZSA9IHBrZ1tpZGVudGlmaWVyS2V5XTtcblxuICBpZiAodmFsdWUgaW4gcGFja2FnZU1hcCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFja2FnZSB3aXRoICcgKyBpZGVudGlmaWVyS2V5ICsgJyA8JyArIHZhbHVlICsgJz4gYWxyZWFkeSBkZWZpbmVkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgdGhhdCBnZXRzIGFuZCBzZXRzIHByb3BlcnRpZXMgb2YgbW9kZWwgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtNb2RlbH0gbW9kZWxcbiAqL1xuZnVuY3Rpb24gUHJvcGVydGllcyhtb2RlbCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG59XG5cblxuLyoqXG4gKiBTZXRzIGEgbmFtZWQgcHJvcGVydHkgb24gdGhlIHRhcmdldCBlbGVtZW50LlxuICogSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlIHByb3BlcnR5IGdldHMgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcblxuICB2YXIgcHJvcGVydHkgPSB0aGlzLm1vZGVsLmdldFByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIG5hbWUpO1xuXG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5uYW1lO1xuXG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAvLyB1bnNldCB0aGUgcHJvcGVydHksIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgdW5kZWZpbmVkO1xuICAgIC8vIGRlbGV0ZSBmcm9tICRhdHRycyAoZm9yIGV4dGVuc2lvbnMpIG9yIHRoZSB0YXJnZXQgaXRzZWxmXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXQuJGF0dHJzW25hbWVdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBzZXQgdGhlIHByb3BlcnR5LCBkZWZpbmluZyB3ZWxsIGRlZmluZWQgcHJvcGVydGllcyBvbiB0aGUgZmx5XG4gICAgLy8gb3Igc2ltcGx5IHVwZGF0aW5nIHRoZW0gaW4gdGFyZ2V0LiRhdHRycyAoZm9yIGV4dGVuc2lvbnMpXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXRbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuJGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVkIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lKSB7XG5cbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5tb2RlbC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBuYW1lKTtcblxuICBpZiAoIXByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHRhcmdldC4kYXR0cnNbbmFtZV07XG4gIH1cblxuICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkubmFtZTtcblxuICAvLyBjaGVjayBpZiBhY2Nlc3MgdG8gY29sbGVjdGlvbiBwcm9wZXJ0eSBhbmQgbGF6aWx5IGluaXRpYWxpemUgaXRcbiAgaWYgKCF0YXJnZXRbcHJvcGVydHlOYW1lXSAmJiBwcm9wZXJ0eS5pc01hbnkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBbXSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG59O1xuXG5cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkgb24gdGhlIHRhcmdldCBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgb3B0aW9ucykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCBvcHRpb25zKTtcbn07XG5cblxuLyoqXG4gKiBEZWZpbmUgdGhlIGRlc2NyaXB0b3IgZm9yIGFuIGVsZW1lbnRcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lRGVzY3JpcHRvciA9IGZ1bmN0aW9uKHRhcmdldCwgZGVzY3JpcHRvcikge1xuICB0aGlzLmRlZmluZSh0YXJnZXQsICckZGVzY3JpcHRvcicsIHsgdmFsdWU6IGRlc2NyaXB0b3IgfSk7XG59O1xuXG4vKipcbiAqIERlZmluZSB0aGUgbW9kZWwgZm9yIGFuIGVsZW1lbnRcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lTW9kZWwgPSBmdW5jdGlvbih0YXJnZXQsIG1vZGVsKSB7XG4gIHRoaXMuZGVmaW5lKHRhcmdldCwgJyRtb2RlbCcsIHsgdmFsdWU6IG1vZGVsIH0pO1xufTtcblxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eS5uYW1lLCB7XG4gICAgZW51bWVyYWJsZTogIXByb3BlcnR5LmlzUmVmZXJlbmNlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8vLy8gTW9kZGxlIGltcGxlbWVudGF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBAY2xhc3MgTW9kZGxlXG4gKlxuICogQSBtb2RlbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBlbGVtZW50cyBvZiBhIHNwZWNpZmljIHR5cGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgTW9kZGxlID0gcmVxdWlyZSgnbW9kZGxlJyk7XG4gKlxuICogdmFyIHBrZyA9IHtcbiAqICAgbmFtZTogJ215cGFja2FnZScsXG4gKiAgIHByZWZpeDogJ215JyxcbiAqICAgdHlwZXM6IFtcbiAqICAgICB7IG5hbWU6ICdSb290JyB9XG4gKiAgIF1cbiAqIH07XG4gKlxuICogdmFyIG1vZGRsZSA9IG5ldyBNb2RkbGUoW3BrZ10pO1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8UGFja2FnZT59IHBhY2thZ2VzIHRoZSBwYWNrYWdlcyB0byBjb250YWluXG4gKi9cbmZ1bmN0aW9uIE1vZGRsZShwYWNrYWdlcykge1xuXG4gIHRoaXMucHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKHRoaXMpO1xuXG4gIHRoaXMuZmFjdG9yeSA9IG5ldyBGYWN0b3J5KHRoaXMsIHRoaXMucHJvcGVydGllcyk7XG4gIHRoaXMucmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkocGFja2FnZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgdGhpcy50eXBlQ2FjaGUgPSB7fTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjY3JlYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgZm9vID0gbW9kZGxlLmNyZWF0ZSgnbXk6Rm9vJyk7XG4gKiB2YXIgYmFyID0gbW9kZGxlLmNyZWF0ZSgnbXk6QmFyJywgeyBpZDogJ0JBUl8xJyB9KTtcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fSBkZXNjcmlwdG9yIHRoZSB0eXBlIGRlc2NyaXB0b3Igb3IgbmFtZSBrbm93IHRvIHRoZSBtb2RlbFxuICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyAgIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kZWwgaW5zdGFuY2Ugd2l0aFxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgIG1vZGVsIGluc3RhbmNlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oZGVzY3JpcHRvciwgYXR0cnMpIHtcbiAgdmFyIFR5cGUgPSB0aGlzLmdldFR5cGUoZGVzY3JpcHRvcik7XG5cbiAgaWYgKCFUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGUgPCcgKyBkZXNjcmlwdG9yICsgJz4nKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShhdHRycyk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHlwZSByZXByZXNlbnRpbmcgYSBnaXZlbiBkZXNjcmlwdG9yXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjZ2V0VHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIEZvbyA9IG1vZGRsZS5nZXRUeXBlKCdteTpGb28nKTtcbiAqIHZhciBmb28gPSBuZXcgRm9vKHsgJ2lkJyA6ICdGT09fMScgfSk7XG4gKlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICB0aGUgdHlwZSByZXByZXNlbnRpbmcgdGhlIGRlc2NyaXB0b3JcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gIHZhciBjYWNoZSA9IHRoaXMudHlwZUNhY2hlO1xuXG4gIHZhciBuYW1lID0gaXNTdHJpbmcoZGVzY3JpcHRvcikgPyBkZXNjcmlwdG9yIDogZGVzY3JpcHRvci5ucy5uYW1lO1xuXG4gIHZhciB0eXBlID0gY2FjaGVbbmFtZV07XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgZGVzY3JpcHRvciA9IHRoaXMucmVnaXN0cnkuZ2V0RWZmZWN0aXZlRGVzY3JpcHRvcihuYW1lKTtcbiAgICB0eXBlID0gY2FjaGVbbmFtZV0gPSB0aGlzLmZhY3RvcnkuY3JlYXRlVHlwZShkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYW55LWVsZW1lbnQgdHlwZSB0byBiZSB1c2VkIHdpdGhpbiBtb2RlbCBpbnN0YW5jZXMuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgY3VzdG9tIGVsZW1lbnRzIHRoYXQgbGllIG91dHNpZGUgdGhlIG1ldGEtbW9kZWwuXG4gKiBUaGUgY3JlYXRlZCBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgbWV0YS1kYXRhIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBpdFxuICogYXMgcGFydCBvZiBtZXRhLW1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEBtZXRob2QgTW9kZGxlI2NyZWF0ZUFueVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZvbyA9IG1vZGRsZS5jcmVhdGVBbnkoJ3ZlbmRvcjpGb28nLCAnaHR0cDovL3ZlbmRvcicsIHtcbiAqICAgdmFsdWU6ICdiYXInXG4gKiB9KTtcbiAqXG4gKiB2YXIgY29udGFpbmVyID0gbW9kZGxlLmNyZWF0ZSgnbXk6Q29udGFpbmVyJywgJ2h0dHA6Ly9teScsIHtcbiAqICAgYW55OiBbIGZvbyBdXG4gKiB9KTtcbiAqXG4gKiAvLyBnbyBhaGVhZCBhbmQgc2VyaWFsaXplIHRoZSBzdHVmZlxuICpcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5zVXJpIHRoZSBuYW1lc3BhY2UgdXJpIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgdGhlIGluc3RhbmNlIHdpdGhcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGFueSB0eXBlIGluc3RhbmNlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuY3JlYXRlQW55ID0gZnVuY3Rpb24obmFtZSwgbnNVcmksIHByb3BlcnRpZXMpIHtcblxuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpO1xuXG4gIHZhciBlbGVtZW50ID0ge1xuICAgICR0eXBlOiBuYW1lLFxuICAgICRpbnN0YW5jZU9mOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gdGhpcy4kdHlwZTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpc0dlbmVyaWM6IHRydWUsXG4gICAgbnM6IHtcbiAgICAgIHByZWZpeDogbmFtZU5zLnByZWZpeCxcbiAgICAgIGxvY2FsTmFtZTogbmFtZU5zLmxvY2FsTmFtZSxcbiAgICAgIHVyaTogbnNVcmlcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZURlc2NyaXB0b3IoZWxlbWVudCwgZGVzY3JpcHRvcik7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmVNb2RlbChlbGVtZW50LCB0aGlzKTtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZShlbGVtZW50LCAnJHBhcmVudCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlIH0pO1xuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24oYSwga2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGEpICYmIGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxlbWVudFthLm5hbWVdID0gYS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudFtrZXldID0gYTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcmVnaXN0ZXJlZCBwYWNrYWdlIGJ5IHVyaSBvciBwcmVmaXhcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYWNrYWdlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uKHVyaU9yUHJlZml4KSB7XG4gIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldFBhY2thZ2UodXJpT3JQcmVmaXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc25hcHNob3Qgb2YgYWxsIGtub3duIHBhY2thZ2VzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgcGFja2FnZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldFBhY2thZ2VzKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIGFuIGVsZW1lbnRcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRFbGVtZW50RGVzY3JpcHRvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3I7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBvciBpbnN0YW5jZVxuICogcmVwcmVzZW50cyB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBNYXkgYmUgYXBwbGllZCB0byB0aGlzLCBpZiBlbGVtZW50IGlzIG9taXR0ZWQuXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuaGFzVHlwZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHR5cGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnQgPSB0aGlzO1xuICB9XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRtb2RlbC5nZXRFbGVtZW50RGVzY3JpcHRvcihlbGVtZW50KTtcblxuICByZXR1cm4gKHR5cGUgaW4gZGVzY3JpcHRvci5hbGxUeXBlc0J5TmFtZSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3Igb2YgYW4gZWxlbWVudHMgbmFtZWQgcHJvcGVydHlcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSkge1xuICByZXR1cm4gdGhpcy5nZXRFbGVtZW50RGVzY3JpcHRvcihlbGVtZW50KS5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5XTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIG1hcHBlZCB0eXBlJ3MgZGVzY3JpcHRvclxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldFR5cGVEZXNjcmlwdG9yID0gZnVuY3Rpb24odHlwZSkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS50eXBlTWFwW3R5cGVdO1xufTtcblxuZXhwb3J0IHsgTW9kZGxlLCBjb2VyY2VUeXBlLCBpc0J1aWx0SW4gYXMgaXNCdWlsdEluVHlwZSwgaXNTaW1wbGUgYXMgaXNTaW1wbGVUeXBlLCBwYXJzZU5hbWUgYXMgcGFyc2VOYW1lTlMgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvcmVmcycpO1xuXG5tb2R1bGUuZXhwb3J0cy5Db2xsZWN0aW9uID0gcmVxdWlyZSgnLi9saWIvY29sbGVjdGlvbicpOyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBbiBlbXB0eSBjb2xsZWN0aW9uIHN0dWIuIFVzZSB7QGxpbmsgUmVmc0NvbGxlY3Rpb24uZXh0ZW5kfSB0byBleHRlbmQgYVxuICogY29sbGVjdGlvbiB3aXRoIHJlZiBzZW1hbnRpY3MuXG4gKlxuICogQGNsYXNzIFJlZnNDb2xsZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBFeHRlbmRzIGEgY29sbGVjdGlvbiB3aXRoIHtAbGluayBSZWZzfSBhd2FyZSBtZXRob2RzXG4gKlxuICogQG1lbWJlcm9mIFJlZnNDb2xsZWN0aW9uXG4gKiBAc3RhdGljXG4gKlxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtICB7UmVmc30gcmVmcyBpbnN0YW5jZVxuICogQHBhcmFtICB7T2JqZWN0fSBwcm9wZXJ0eSByZXByZXNlbnRlZCBieSB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXQgb2JqZWN0IHRoZSBjb2xsZWN0aW9uIGlzIGF0dGFjaGVkIHRvXG4gKlxuICogQHJldHVybiB7UmVmc0NvbGxlY3Rpb248T2JqZWN0Pn0gdGhlIGV4dGVuZGVkIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChjb2xsZWN0aW9uLCByZWZzLCBwcm9wZXJ0eSwgdGFyZ2V0KSB7XG5cbiAgdmFyIGludmVyc2VQcm9wZXJ0eSA9IHByb3BlcnR5LmludmVyc2U7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdpdmVuIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybnMgaXQuXG4gICAqXG4gICAqIEBtZXRob2QgUmVmc0NvbGxlY3Rpb24jcmVtb3ZlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHJlbW92ZVxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbGxlY3Rpb24sICdyZW1vdmUnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBpZHggPSB0aGlzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnNwbGljZShpZHgsIDEpO1xuXG4gICAgICAgIC8vIHVuc2V0IGludmVyc2VcbiAgICAgICAgcmVmcy51bnNldChlbGVtZW50LCBpbnZlcnNlUHJvcGVydHksIHRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sbGVjdGlvbiBjb250YWlucyB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgKlxuICAgKiBAbWV0aG9kIFJlZnNDb2xsZWN0aW9uI2NvbnRhaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGNoZWNrIGZvclxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbGxlY3Rpb24sICdjb250YWlucycsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBhcnJheSwgdW5sZXNzIGl0IGV4aXN0cyBhbHJlYWR5IChzZXQgc2VtYW50aWNzKS5cbiAgICpcbiAgICogQG1ldGhvZCBSZWZzQ29sbGVjdGlvbiNhZGRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gYWRkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25hbCBpbmRleCB0byBhZGQgZWxlbWVudCB0b1xuICAgKiAgICAgICAgICAgICAgICAgKHBvc3NpYmx5IG1vdmluZyBvdGhlciBlbGVtZW50cyBhcm91bmQpXG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29sbGVjdGlvbiwgJ2FkZCcsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgaWR4KSB7XG5cbiAgICAgIHZhciBjdXJyZW50SWR4ID0gdGhpcy5pbmRleE9mKGVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIGlkeCA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICBpZiAoY3VycmVudElkeCAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBlbGVtZW50IGFscmVhZHkgaW4gY29sbGVjdGlvbiAoISlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgdG8gZW5kIG9mIGFycmF5LCBhcyBubyBpZHggaXMgc3BlY2lmaWVkXG4gICAgICAgIGlkeCA9IHRoaXMubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgYWxyZWFkeSBpbiBjb2xsZWN0aW9uXG4gICAgICBpZiAoY3VycmVudElkeCAhPT0gLTEpIHtcblxuICAgICAgICAvLyByZW1vdmUgZWxlbWVudCBmcm9tIGN1cnJlbnRJZHhcbiAgICAgICAgdGhpcy5zcGxpY2UoY3VycmVudElkeCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBlbGVtZW50IGF0IGlkeFxuICAgICAgdGhpcy5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcblxuICAgICAgaWYgKGN1cnJlbnRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIHNldCBpbnZlcnNlLCB1bmxlc3MgZWxlbWVudCB3YXNcbiAgICAgICAgLy8gaW4gY29sbGVjdGlvbiBhbHJlYWR5XG4gICAgICAgIHJlZnMuc2V0KGVsZW1lbnQsIGludmVyc2VQcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIGEgc2ltcGxlIG1hcmtlciwgaWRlbnRpZnlpbmcgdGhpcyBlbGVtZW50XG4gIC8vIGFzIGJlaW5nIGEgcmVmcyBjb2xsZWN0aW9uXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb2xsZWN0aW9uLCAnX19yZWZzX2NvbGxlY3Rpb24nLCB7XG4gICAgdmFsdWU6IHRydWVcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cblxuZnVuY3Rpb24gaXNFeHRlbmRlZChjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBjb2xsZWN0aW9uLl9fcmVmc19jb2xsZWN0aW9uID09PSB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5leHRlbmQgPSBleHRlbmQ7XG5cbm1vZHVsZS5leHBvcnRzLmlzRXh0ZW5kZWQgPSBpc0V4dGVuZGVkOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCcuL2NvbGxlY3Rpb24nKTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkoZSwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCBwcm9wZXJ0eS5uYW1lIHx8IHByb3BlcnR5KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29sbGVjdGlvblByb3BlcnR5KHJlZiwgcHJvcGVydHksIHRhcmdldCkge1xuXG4gIHZhciBjb2xsZWN0aW9uID0gQ29sbGVjdGlvbi5leHRlbmQodGFyZ2V0W3Byb3BlcnR5Lm5hbWVdIHx8IFtdLCByZWYsIHByb3BlcnR5LCB0YXJnZXQpO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5Lm5hbWUsIHtcbiAgICBlbnVtZXJhYmxlOiBwcm9wZXJ0eS5lbnVtZXJhYmxlLFxuICAgIHZhbHVlOiBjb2xsZWN0aW9uXG4gIH0pO1xuXG4gIGlmIChjb2xsZWN0aW9uLmxlbmd0aCkge1xuXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJlZi5zZXQobywgcHJvcGVydHkuaW52ZXJzZSwgdGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHJlZiwgcHJvcGVydHksIHRhcmdldCkge1xuXG4gIHZhciBpbnZlcnNlUHJvcGVydHkgPSBwcm9wZXJ0eS5pbnZlcnNlO1xuXG4gIHZhciBfdmFsdWUgPSB0YXJnZXRbcHJvcGVydHkubmFtZV07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkubmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogcHJvcGVydHkuY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGU6IHByb3BlcnR5LmVudW1lcmFibGUsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuXG4gICAgICAvLyByZXR1cm4gaWYgd2UgYWxyZWFkeSBwZXJmb3JtZWQgYWxsIGNoYW5nZXNcbiAgICAgIGlmICh2YWx1ZSA9PT0gX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9sZCA9IF92YWx1ZTtcblxuICAgICAgLy8gdGVtcG9yYXJ5IHNldCBudWxsXG4gICAgICBfdmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAob2xkKSB7XG4gICAgICAgIHJlZi51bnNldChvbGQsIGludmVyc2VQcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgIC8vIHNldCBpbnZlcnNlIHZhbHVlXG4gICAgICByZWYuc2V0KF92YWx1ZSwgaW52ZXJzZVByb3BlcnR5LCB0YXJnZXQpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJlZmVyZW5jZXMgb2JqZWN0IGRlZmluaW5nIHR3byBpbnZlcnNseSByZWxhdGVkXG4gKiBhdHRyaWJ1dGUgZGVzY3JpcHRvcnMgYSBhbmQgYi5cbiAqXG4gKiA8cD5cbiAqICAgV2hlbiBib3VuZCB0byBhbiBvYmplY3QgdXNpbmcge0BsaW5rIFJlZnMjYmluZH0gdGhlIHJlZmVyZW5jZXNcbiAqICAgZ2V0IGFjdGl2YXRlZCBhbmQgZW5zdXJlIHRoYXQgYWRkIGFuZCByZW1vdmUgb3BlcmF0aW9ucyBhcmUgYXBwbGllZFxuICogICByZXZlcnNlbHksIHRvby5cbiAqIDwvcD5cbiAqXG4gKiA8cD5cbiAqICAgRm9yIGF0dHJpYnV0ZXMgcmVwcmVzZW50ZWQgYXMgY29sbGVjdGlvbnMge0BsaW5rIFJlZnN9IHByb3ZpZGVzIHRoZVxuICogICB7QGxpbmsgUmVmc0NvbGxlY3Rpb24jYWRkfSwge0BsaW5rIFJlZnNDb2xsZWN0aW9uI3JlbW92ZX0gYW5kIHtAbGluayBSZWZzQ29sbGVjdGlvbiNjb250YWluc30gZXh0ZW5zaW9uc1xuICogICB0aGF0IG11c3QgYmUgdXNlZCB0byBwcm9wZXJseSBob29rIGludG8gdGhlIGludmVyc2UgY2hhbmdlIG1lY2hhbmlzbS5cbiAqIDwvcD5cbiAqXG4gKiBAY2xhc3MgUmVmc1xuICpcbiAqIEBjbGFzc2Rlc2MgQSBiaS1kaXJlY3Rpb25hbCByZWZlcmVuY2UgYmV0d2VlbiB0d28gYXR0cmlidXRlcy5cbiAqXG4gKiBAcGFyYW0ge1JlZnMuQXR0cmlidXRlRGVzY3JpcHRvcn0gYSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKiBAcGFyYW0ge1JlZnMuQXR0cmlidXRlRGVzY3JpcHRvcn0gYiBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgcmVmcyA9IFJlZnMoeyBuYW1lOiAnd2hlZWxzJywgY29sbGVjdGlvbjogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9LCB7IG5hbWU6ICdjYXInIH0pO1xuICpcbiAqIHZhciBjYXIgPSB7IG5hbWU6ICd0b3lvdGEnIH07XG4gKiB2YXIgd2hlZWxzID0gW3sgcG9zOiAnZnJvbnQtbGVmdCcgfSwgeyBwb3M6ICdmcm9udC1yaWdodCcgfV07XG4gKlxuICogcmVmcy5iaW5kKGNhciwgJ3doZWVscycpO1xuICpcbiAqIGNhci53aGVlbHMgLy8gW11cbiAqIGNhci53aGVlbHMuYWRkKHdoZWVsc1swXSk7XG4gKiBjYXIud2hlZWxzLmFkZCh3aGVlbHNbMV0pO1xuICpcbiAqIGNhci53aGVlbHMgLy8gW3sgcG9zOiAnZnJvbnQtbGVmdCcgfSwgeyBwb3M6ICdmcm9udC1yaWdodCcgfV1cbiAqXG4gKiB3aGVlbHNbMF0uY2FyIC8vIHsgbmFtZTogJ3RveW90YScgfTtcbiAqIGNhci53aGVlbHMucmVtb3ZlKHdoZWVsc1swXSk7XG4gKlxuICogd2hlZWxzWzBdLmNhciAvLyB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gUmVmcyhhLCBiKSB7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlZnMpKSB7XG4gICAgcmV0dXJuIG5ldyBSZWZzKGEsIGIpO1xuICB9XG5cbiAgLy8gbGlua1xuICBhLmludmVyc2UgPSBiO1xuICBiLmludmVyc2UgPSBhO1xuXG4gIHRoaXMucHJvcHMgPSB7fTtcbiAgdGhpcy5wcm9wc1thLm5hbWVdID0gYTtcbiAgdGhpcy5wcm9wc1tiLm5hbWVdID0gYjtcbn1cblxuLyoqXG4gKiBCaW5kcyBvbmUgc2lkZSBvZiBhIGJpLWRpcmVjdGlvbmFsIHJlZmVyZW5jZSB0byBhXG4gKiB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJPZiBSZWZzXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuUmVmcy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXRoaXMucHJvcHNbcHJvcGVydHldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByb3BlcnR5IDwnICsgcHJvcGVydHkgKyAnPiBpbiByZWYnKTtcbiAgICB9XG4gICAgcHJvcGVydHkgPSB0aGlzLnByb3BzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eS5jb2xsZWN0aW9uKSB7XG4gICAgZGVmaW5lQ29sbGVjdGlvblByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB0YXJnZXQpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB0YXJnZXQpO1xuICB9XG59O1xuXG5SZWZzLnByb3RvdHlwZS5lbnN1cmVSZWZzQ29sbGVjdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHkpIHtcblxuICB2YXIgY29sbGVjdGlvbiA9IHRhcmdldFtwcm9wZXJ0eS5uYW1lXTtcblxuICBpZiAoIUNvbGxlY3Rpb24uaXNFeHRlbmRlZChjb2xsZWN0aW9uKSkge1xuICAgIGRlZmluZUNvbGxlY3Rpb25Qcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uO1xufTtcblxuUmVmcy5wcm90b3R5cGUuZW5zdXJlQm91bmQgPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5KSB7XG4gIGlmICghaGFzT3duUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSkpIHtcbiAgICB0aGlzLmJpbmQodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIH1cbn07XG5cblJlZnMucHJvdG90eXBlLnVuc2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcblxuICBpZiAodGFyZ2V0KSB7XG4gICAgdGhpcy5lbnN1cmVCb3VuZCh0YXJnZXQsIHByb3BlcnR5KTtcblxuICAgIGlmIChwcm9wZXJ0eS5jb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLmVuc3VyZVJlZnNDb2xsZWN0aW9uKHRhcmdldCwgcHJvcGVydHkpLnJlbW92ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtwcm9wZXJ0eS5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn07XG5cblJlZnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG5cbiAgaWYgKHRhcmdldCkge1xuICAgIHRoaXMuZW5zdXJlQm91bmQodGFyZ2V0LCBwcm9wZXJ0eSk7XG5cbiAgICBpZiAocHJvcGVydHkuY29sbGVjdGlvbikge1xuICAgICAgdGhpcy5lbnN1cmVSZWZzQ29sbGVjdGlvbih0YXJnZXQsIHByb3BlcnR5KS5hZGQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVmcztcblxuXG4vKipcbiAqIEFuIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIHRvIGJlIHVzZWQgc3BlY2lmeSBhbiBhdHRyaWJ1dGUgaW4gYSB7QGxpbmsgUmVmc30gaW5zdGFuY2VcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWZzLkF0dHJpYnV0ZURlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb2xsZWN0aW9uPWZhbHNlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW51bWVyYWJsZT1mYWxzZV1cbiAqLyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgc291cmNlIGNvZGUgYWRhcHRlZCBmcm9tIFNuYXAuc3ZnIChsaWNlbnNlZCBBcGFjaGUtMi4wKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hZG9iZS13ZWJwbGF0Zm9ybS9TbmFwLnN2Zy9ibG9iL21hc3Rlci9zcmMvcGF0aC5qc1xuICovXG5cbi8qIGVzbGludCBuby1mYWxsdGhyb3VnaDogXCJvZmZcIiAqL1xuXG52YXIgcDJzID0gLyw/KFthLXpdKSw/L2dpLFxuICAgIHRvRmxvYXQgPSBwYXJzZUZsb2F0LFxuICAgIG1hdGggPSBNYXRoLFxuICAgIFBJID0gbWF0aC5QSSxcbiAgICBtbWluID0gbWF0aC5taW4sXG4gICAgbW1heCA9IG1hdGgubWF4LFxuICAgIHBvdyA9IG1hdGgucG93LFxuICAgIGFicyA9IG1hdGguYWJzLFxuICAgIHBhdGhDb21tYW5kID0gLyhbYS16XSlbXFxzLF0qKCgtP1xcZCpcXC4/XFxkKig/OmVbLStdP1xcZCspP1tcXHNdKiw/W1xcc10qKSspL2lnLFxuICAgIHBhdGhWYWx1ZXMgPSAvKC0/XFxkKlxcLj9cXGQqKD86ZVstK10/XFxcXGQrKT8pW1xcc10qLD9bXFxzXSovaWc7XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihvKSB7IHJldHVybiBvIGluc3RhbmNlb2YgQXJyYXk7IH07XG5cbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iaiwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BlcnR5KTtcbn1cblxuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cbiAgaWYgKHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBPYmplY3Qob2JqKSAhPT0gb2JqKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZXMgPSBuZXcgb2JqLmNvbnN0cnVjdG9yO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzUHJvcGVydHkob2JqLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGNsb25lKG9ialtrZXldKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiByZXB1c2goYXJyYXksIGl0ZW0pIHtcbiAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKGFycmF5W2ldID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGFycmF5LnB1c2goYXJyYXkuc3BsaWNlKGksIDEpWzBdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZXIoZikge1xuXG4gIGZ1bmN0aW9uIG5ld2YoKSB7XG5cbiAgICB2YXIgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSxcbiAgICAgICAgYXJncyA9IGFyZy5qb2luKCdcXHUyNDAwJyksXG4gICAgICAgIGNhY2hlID0gbmV3Zi5jYWNoZSA9IG5ld2YuY2FjaGUgfHwge30sXG4gICAgICAgIGNvdW50ID0gbmV3Zi5jb3VudCA9IG5ld2YuY291bnQgfHwgW107XG5cbiAgICBpZiAoaGFzUHJvcGVydHkoY2FjaGUsIGFyZ3MpKSB7XG4gICAgICByZXB1c2goY291bnQsIGFyZ3MpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FyZ3NdO1xuICAgIH1cblxuICAgIGNvdW50Lmxlbmd0aCA+PSAxZTMgJiYgZGVsZXRlIGNhY2hlW2NvdW50LnNoaWZ0KCldO1xuICAgIGNvdW50LnB1c2goYXJncyk7XG4gICAgY2FjaGVbYXJnc10gPSBmLmFwcGx5KDAsIGFyZyk7XG5cbiAgICByZXR1cm4gY2FjaGVbYXJnc107XG4gIH1cbiAgcmV0dXJuIG5ld2Y7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aFN0cmluZyhwYXRoU3RyaW5nKSB7XG5cbiAgaWYgKCFwYXRoU3RyaW5nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcHRoID0gcGF0aHMocGF0aFN0cmluZyk7XG5cbiAgaWYgKHB0aC5hcnIpIHtcbiAgICByZXR1cm4gY2xvbmUocHRoLmFycik7XG4gIH1cblxuICB2YXIgcGFyYW1Db3VudHMgPSB7IGE6IDcsIGM6IDYsIGg6IDEsIGw6IDIsIG06IDIsIHE6IDQsIHM6IDQsIHQ6IDIsIHY6IDEsIHo6IDAgfSxcbiAgICAgIGRhdGEgPSBbXTtcblxuICBpZiAoaXNBcnJheShwYXRoU3RyaW5nKSAmJiBpc0FycmF5KHBhdGhTdHJpbmdbMF0pKSB7IC8vIHJvdWdoIGFzc3VtcHRpb25cbiAgICBkYXRhID0gY2xvbmUocGF0aFN0cmluZyk7XG4gIH1cblxuICBpZiAoIWRhdGEubGVuZ3RoKSB7XG5cbiAgICBTdHJpbmcocGF0aFN0cmluZykucmVwbGFjZShwYXRoQ29tbWFuZCwgZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdLFxuICAgICAgICAgIG5hbWUgPSBiLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGMucmVwbGFjZShwYXRoVmFsdWVzLCBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIGIgJiYgcGFyYW1zLnB1c2goK2IpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChuYW1lID09ICdtJyAmJiBwYXJhbXMubGVuZ3RoID4gMikge1xuICAgICAgICBkYXRhLnB1c2goW2JdLmNvbmNhdChwYXJhbXMuc3BsaWNlKDAsIDIpKSk7XG4gICAgICAgIG5hbWUgPSAnbCc7XG4gICAgICAgIGIgPSBiID09ICdtJyA/ICdsJyA6ICdMJztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHBhcmFtcy5sZW5ndGggPj0gcGFyYW1Db3VudHNbbmFtZV0pIHtcbiAgICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zLnNwbGljZSgwLCBwYXJhbUNvdW50c1tuYW1lXSkpKTtcbiAgICAgICAgaWYgKCFwYXJhbUNvdW50c1tuYW1lXSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBkYXRhLnRvU3RyaW5nID0gcGF0aHMudG9TdHJpbmc7XG4gIHB0aC5hcnIgPSBjbG9uZShkYXRhKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gcGF0aHMocHMpIHtcbiAgdmFyIHAgPSBwYXRocy5wcyA9IHBhdGhzLnBzIHx8IHt9O1xuXG4gIGlmIChwW3BzXSkge1xuICAgIHBbcHNdLnNsZWVwID0gMTAwO1xuICB9IGVsc2Uge1xuICAgIHBbcHNdID0ge1xuICAgICAgc2xlZXA6IDEwMFxuICAgIH07XG4gIH1cblxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGtleSBpbiBwKSB7XG4gICAgICBpZiAoaGFzUHJvcGVydHkocCwga2V5KSAmJiBrZXkgIT0gcHMpIHtcbiAgICAgICAgcFtrZXldLnNsZWVwLS07XG4gICAgICAgICFwW2tleV0uc2xlZXAgJiYgZGVsZXRlIHBba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwW3BzXTtcbn1cblxuZnVuY3Rpb24gcmVjdEJCb3goeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgeSA9IHgueTtcbiAgICB3aWR0aCA9IHgud2lkdGg7XG4gICAgaGVpZ2h0ID0geC5oZWlnaHQ7XG4gICAgeCA9IHgueDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogeCxcbiAgICB5OiB5LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4MjogeCArIHdpZHRoLFxuICAgIHkyOiB5ICsgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhdGhUb1N0cmluZygpIHtcbiAgcmV0dXJuIHRoaXMuam9pbignLCcpLnJlcGxhY2UocDJzLCAnJDEnKTtcbn1cblxuZnVuY3Rpb24gcGF0aENsb25lKHBhdGhBcnJheSkge1xuICB2YXIgcmVzID0gY2xvbmUocGF0aEFycmF5KTtcbiAgcmVzLnRvU3RyaW5nID0gcGF0aFRvU3RyaW5nO1xuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmaW5kRG90c0F0U2VnbWVudChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeSwgdCkge1xuICB2YXIgdDEgPSAxIC0gdCxcbiAgICAgIHQxMyA9IHBvdyh0MSwgMyksXG4gICAgICB0MTIgPSBwb3codDEsIDIpLFxuICAgICAgdDIgPSB0ICogdCxcbiAgICAgIHQzID0gdDIgKiB0LFxuICAgICAgeCA9IHQxMyAqIHAxeCArIHQxMiAqIDMgKiB0ICogYzF4ICsgdDEgKiAzICogdCAqIHQgKiBjMnggKyB0MyAqIHAyeCxcbiAgICAgIHkgPSB0MTMgKiBwMXkgKyB0MTIgKiAzICogdCAqIGMxeSArIHQxICogMyAqIHQgKiB0ICogYzJ5ICsgdDMgKiBwMnk7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBmaXhFcnJvcih4KSxcbiAgICB5OiBmaXhFcnJvcih5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBiZXppZXJCQm94KHBvaW50cykge1xuXG4gIHZhciBiYm94ID0gY3VydmVCQm94LmFwcGx5KG51bGwsIHBvaW50cyk7XG5cbiAgcmV0dXJuIHJlY3RCQm94KFxuICAgIGJib3gueDAsXG4gICAgYmJveC55MCxcbiAgICBiYm94LngxIC0gYmJveC54MCxcbiAgICBiYm94LnkxIC0gYmJveC55MFxuICApO1xufVxuXG5mdW5jdGlvbiBpc1BvaW50SW5zaWRlQkJveChiYm94LCB4LCB5KSB7XG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gaXNCQm94SW50ZXJzZWN0KGJib3gxLCBiYm94Mikge1xuICBiYm94MSA9IHJlY3RCQm94KGJib3gxKTtcbiAgYmJveDIgPSByZWN0QkJveChiYm94Mik7XG4gIHJldHVybiBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueCwgYmJveDEueSlcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueDIsIGJib3gxLnkpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJib3gxLngsIGJib3gxLnkyKVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54MiwgYmJveDEueTIpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngsIGJib3gyLnkpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngyLCBiYm94Mi55KVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54LCBiYm94Mi55MilcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIueDIsIGJib3gyLnkyKVxuICAgIHx8IChiYm94MS54IDwgYmJveDIueDIgJiYgYmJveDEueCA+IGJib3gyLnhcbiAgICAgICAgfHwgYmJveDIueCA8IGJib3gxLngyICYmIGJib3gyLnggPiBiYm94MS54KVxuICAgICYmIChiYm94MS55IDwgYmJveDIueTIgJiYgYmJveDEueSA+IGJib3gyLnlcbiAgICAgICAgfHwgYmJveDIueSA8IGJib3gxLnkyICYmIGJib3gyLnkgPiBiYm94MS55KTtcbn1cblxuZnVuY3Rpb24gYmFzZTModCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgdmFyIHQxID0gLTMgKiBwMSArIDkgKiBwMiAtIDkgKiBwMyArIDMgKiBwNCxcbiAgICAgIHQyID0gdCAqIHQxICsgNiAqIHAxIC0gMTIgKiBwMiArIDYgKiBwMztcbiAgcmV0dXJuIHQgKiB0MiAtIDMgKiBwMSArIDMgKiBwMjtcbn1cblxuZnVuY3Rpb24gYmV6bGVuKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgeikge1xuXG4gIGlmICh6ID09IG51bGwpIHtcbiAgICB6ID0gMTtcbiAgfVxuXG4gIHogPSB6ID4gMSA/IDEgOiB6IDwgMCA/IDAgOiB6O1xuXG4gIHZhciB6MiA9IHogLyAyLFxuICAgICAgbiA9IDEyLFxuICAgICAgVHZhbHVlcyA9IFstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3MywtLjc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sXG4gICAgICBDdmFsdWVzID0gWzAuMjQ5MSwwLjI0OTEsMC4yMzM1LDAuMjMzNSwwLjIwMzIsMC4yMDMyLDAuMTYwMSwwLjE2MDEsMC4xMDY5LDAuMTA2OSwwLjA0NzIsMC4wNDcyXSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICB2YXIgY3QgPSB6MiAqIFR2YWx1ZXNbaV0gKyB6MixcbiAgICAgICAgeGJhc2UgPSBiYXNlMyhjdCwgeDEsIHgyLCB4MywgeDQpLFxuICAgICAgICB5YmFzZSA9IGJhc2UzKGN0LCB5MSwgeTIsIHkzLCB5NCksXG4gICAgICAgIGNvbWIgPSB4YmFzZSAqIHhiYXNlICsgeWJhc2UgKiB5YmFzZTtcblxuICAgIHN1bSArPSBDdmFsdWVzW2ldICogbWF0aC5zcXJ0KGNvbWIpO1xuICB9XG5cbiAgcmV0dXJuIHoyICogc3VtO1xufVxuXG5cbmZ1bmN0aW9uIGludGVyc2VjdExpbmVzKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCkge1xuXG4gIGlmIChcbiAgICBtbWF4KHgxLCB4MikgPCBtbWluKHgzLCB4NCkgfHxcbiAgICAgIG1taW4oeDEsIHgyKSA+IG1tYXgoeDMsIHg0KSB8fFxuICAgICAgbW1heCh5MSwgeTIpIDwgbW1pbih5MywgeTQpIHx8XG4gICAgICBtbWluKHkxLCB5MikgPiBtbWF4KHkzLCB5NClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG54ID0gKHgxICogeTIgLSB5MSAqIHgyKSAqICh4MyAtIHg0KSAtICh4MSAtIHgyKSAqICh4MyAqIHk0IC0geTMgKiB4NCksXG4gICAgICBueSA9ICh4MSAqIHkyIC0geTEgKiB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgKiB5NCAtIHkzICogeDQpLFxuICAgICAgZGVub21pbmF0b3IgPSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4NCk7XG5cbiAgaWYgKCFkZW5vbWluYXRvcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBweCA9IGZpeEVycm9yKG54IC8gZGVub21pbmF0b3IpLFxuICAgICAgcHkgPSBmaXhFcnJvcihueSAvIGRlbm9taW5hdG9yKSxcbiAgICAgIHB4MiA9ICtweC50b0ZpeGVkKDIpLFxuICAgICAgcHkyID0gK3B5LnRvRml4ZWQoMik7XG5cbiAgaWYgKFxuICAgIHB4MiA8ICttbWluKHgxLCB4MikudG9GaXhlZCgyKSB8fFxuICAgICAgcHgyID4gK21tYXgoeDEsIHgyKS50b0ZpeGVkKDIpIHx8XG4gICAgICBweDIgPCArbW1pbih4MywgeDQpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB4MiA+ICttbWF4KHgzLCB4NCkudG9GaXhlZCgyKSB8fFxuICAgICAgcHkyIDwgK21taW4oeTEsIHkyKS50b0ZpeGVkKDIpIHx8XG4gICAgICBweTIgPiArbW1heCh5MSwgeTIpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB5MiA8ICttbWluKHkzLCB5NCkudG9GaXhlZCgyKSB8fFxuICAgICAgcHkyID4gK21tYXgoeTMsIHk0KS50b0ZpeGVkKDIpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHB4LCB5OiBweSB9O1xufVxuXG5mdW5jdGlvbiBmaXhFcnJvcihudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogMTAwMDAwMDAwMDAwKSAvIDEwMDAwMDAwMDAwMDtcbn1cblxuZnVuY3Rpb24gZmluZEJlemllckludGVyc2VjdGlvbnMoYmV6MSwgYmV6MiwganVzdENvdW50KSB7XG4gIHZhciBiYm94MSA9IGJlemllckJCb3goYmV6MSksXG4gICAgICBiYm94MiA9IGJlemllckJCb3goYmV6Mik7XG5cbiAgaWYgKCFpc0JCb3hJbnRlcnNlY3QoYmJveDEsIGJib3gyKSkge1xuICAgIHJldHVybiBqdXN0Q291bnQgPyAwIDogW107XG4gIH1cblxuICAvLyBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmVzIHdpbGwgaGF2ZSBvbmx5IDEgc2VnbWVudFxuXG4gIHZhciBsMSA9IGJlemxlbi5hcHBseSgwLCBiZXoxKSxcbiAgICAgIGwyID0gYmV6bGVuLmFwcGx5KDAsIGJlejIpLFxuICAgICAgbjEgPSBpc0xpbmUoYmV6MSkgPyAxIDogfn4obDEgLyA1KSB8fCAxLFxuICAgICAgbjIgPSBpc0xpbmUoYmV6MikgPyAxIDogfn4obDIgLyA1KSB8fCAxLFxuICAgICAgZG90czEgPSBbXSxcbiAgICAgIGRvdHMyID0gW10sXG4gICAgICB4eSA9IHt9LFxuICAgICAgcmVzID0ganVzdENvdW50ID8gMCA6IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjEgKyAxOyBpKyspIHtcbiAgICB2YXIgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejEuY29uY2F0KGkgLyBuMSkpO1xuICAgIGRvdHMxLnB1c2goeyB4OiBwLngsIHk6IHAueSwgdDogaSAvIG4xIH0pO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG4yICsgMTsgaSsrKSB7XG4gICAgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejIuY29uY2F0KGkgLyBuMikpO1xuICAgIGRvdHMyLnB1c2goeyB4OiBwLngsIHk6IHAueSwgdDogaSAvIG4yIH0pO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG4xOyBpKyspIHtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjI7IGorKykge1xuICAgICAgdmFyIGRpID0gZG90czFbaV0sXG4gICAgICAgICAgZGkxID0gZG90czFbaSArIDFdLFxuICAgICAgICAgIGRqID0gZG90czJbal0sXG4gICAgICAgICAgZGoxID0gZG90czJbaiArIDFdLFxuICAgICAgICAgIGNpID0gYWJzKGRpMS54IC0gZGkueCkgPCAuMDEgPyAneScgOiAneCcsXG4gICAgICAgICAgY2ogPSBhYnMoZGoxLnggLSBkai54KSA8IC4wMSA/ICd5JyA6ICd4JyxcbiAgICAgICAgICBpcyA9IGludGVyc2VjdExpbmVzKGRpLngsIGRpLnksIGRpMS54LCBkaTEueSwgZGoueCwgZGoueSwgZGoxLngsIGRqMS55KSxcbiAgICAgICAgICBrZXk7XG5cbiAgICAgIGlmIChpcykge1xuICAgICAgICBrZXkgPSBpcy54LnRvRml4ZWQoOSkgKyAnIycgKyBpcy55LnRvRml4ZWQoOSk7XG5cbiAgICAgICAgaWYgKHh5W2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHh5W2tleV0gPSB0cnVlO1xuXG4gICAgICAgIHZhciB0MSA9IGRpLnQgKyBhYnMoKGlzW2NpXSAtIGRpW2NpXSkgLyAoZGkxW2NpXSAtIGRpW2NpXSkpICogKGRpMS50IC0gZGkudCksXG4gICAgICAgICAgICB0MiA9IGRqLnQgKyBhYnMoKGlzW2NqXSAtIGRqW2NqXSkgLyAoZGoxW2NqXSAtIGRqW2NqXSkpICogKGRqMS50IC0gZGoudCk7XG5cbiAgICAgICAgaWYgKHQxID49IDAgJiYgdDEgPD0gMSAmJiB0MiA+PSAwICYmIHQyIDw9IDEpIHtcblxuICAgICAgICAgIGlmIChqdXN0Q291bnQpIHtcbiAgICAgICAgICAgIHJlcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgIHg6IGlzLngsXG4gICAgICAgICAgICAgIHk6IGlzLnksXG4gICAgICAgICAgICAgIHQxOiB0MSxcbiAgICAgICAgICAgICAgdDI6IHQyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5cbi8qKlxuICogRmluZCBvciBjb3VudHMgdGhlIGludGVyc2VjdGlvbnMgYmV0d2VlbiB0d28gU1ZHIHBhdGhzLlxuICpcbiAqIFJldHVybnMgYSBudW1iZXIgaW4gY291bnRpbmcgbW9kZSBhbmQgYSBsaXN0IG9mIGludGVyc2VjdGlvbnMgb3RoZXJ3aXNlLlxuICpcbiAqIEEgc2luZ2xlIGludGVyc2VjdGlvbiBlbnRyeSBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIGNvb3JkaW5hdGVzICh4LCB5KVxuICogYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgaW50ZXJzZWN0aW5nIHNlZ21lbnRzXG4gKiBvbiBlYWNoIHBhdGggKHNlZ21lbnQxLCBzZWdtZW50MikgYW5kIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiB0aGVcbiAqIGludGVyc2VjdGlvbiBvbiB0aGVzZSBzZWdtZW50cyAodDEsIHQyKS5cbiAqXG4gKiBUaGUgcGF0aCBtYXkgYmUgYW4gU1ZHIHBhdGggc3RyaW5nIG9yIGEgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHNcbiAqIHN1Y2ggYXMgYFsgWyAnTScsIDAsIDEwIF0sIFsgJ0wnLCAyMCwgMCBdIF1gLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGludGVyc2VjdGlvbnMgPSBmaW5kUGF0aEludGVyc2VjdGlvbnMoXG4gKiAgICdNMCwwTDEwMCwxMDAnLFxuICogICBbIFsgJ00nLCAwLCAxMDAgXSwgWyAnTCcsIDEwMCwgMCBdIF1cbiAqICk7XG4gKlxuICogLy8gaW50ZXJzZWN0aW9ucyA9IFtcbiAqIC8vICAgeyB4OiA1MCwgeTogNTAsIHNlZ21lbnQxOiAxLCBzZWdtZW50MjogMSwgdDE6IDAuNSwgdDI6IDAuNSB9XG4gKiAvLyBdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8UGF0aERlZj59IHBhdGgxXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxQYXRoRGVmPn0gcGF0aDJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2p1c3RDb3VudD1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxJbnRlcnNlY3Rpb24+fE51bWJlcn1cbiAqL1xuZnVuY3Rpb24gZmluZFBhdGhJbnRlcnNlY3Rpb25zKHBhdGgxLCBwYXRoMiwganVzdENvdW50KSB7XG4gIHBhdGgxID0gcGF0aFRvQ3VydmUocGF0aDEpO1xuICBwYXRoMiA9IHBhdGhUb0N1cnZlKHBhdGgyKTtcblxuICB2YXIgeDEsIHkxLCB4MiwgeTIsIHgxbSwgeTFtLCB4Mm0sIHkybSwgYmV6MSwgYmV6MixcbiAgICAgIHJlcyA9IGp1c3RDb3VudCA/IDAgOiBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoMS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgdmFyIHBpID0gcGF0aDFbaV07XG5cbiAgICBpZiAocGlbMF0gPT0gJ00nKSB7XG4gICAgICB4MSA9IHgxbSA9IHBpWzFdO1xuICAgICAgeTEgPSB5MW0gPSBwaVsyXTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAocGlbMF0gPT0gJ0MnKSB7XG4gICAgICAgIGJlejEgPSBbeDEsIHkxXS5jb25jYXQocGkuc2xpY2UoMSkpO1xuICAgICAgICB4MSA9IGJlejFbNl07XG4gICAgICAgIHkxID0gYmV6MVs3XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlejEgPSBbeDEsIHkxLCB4MSwgeTEsIHgxbSwgeTFtLCB4MW0sIHkxbV07XG4gICAgICAgIHgxID0geDFtO1xuICAgICAgICB5MSA9IHkxbTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcGF0aDIubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICB2YXIgcGogPSBwYXRoMltqXTtcblxuICAgICAgICBpZiAocGpbMF0gPT0gJ00nKSB7XG4gICAgICAgICAgeDIgPSB4Mm0gPSBwalsxXTtcbiAgICAgICAgICB5MiA9IHkybSA9IHBqWzJdO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgaWYgKHBqWzBdID09ICdDJykge1xuICAgICAgICAgICAgYmV6MiA9IFt4MiwgeTJdLmNvbmNhdChwai5zbGljZSgxKSk7XG4gICAgICAgICAgICB4MiA9IGJlejJbNl07XG4gICAgICAgICAgICB5MiA9IGJlejJbN107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJlejIgPSBbeDIsIHkyLCB4MiwgeTIsIHgybSwgeTJtLCB4Mm0sIHkybV07XG4gICAgICAgICAgICB4MiA9IHgybTtcbiAgICAgICAgICAgIHkyID0geTJtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbnRyID0gZmluZEJlemllckludGVyc2VjdGlvbnMoYmV6MSwgYmV6MiwganVzdENvdW50KTtcblxuICAgICAgICAgIGlmIChqdXN0Q291bnQpIHtcbiAgICAgICAgICAgIHJlcyArPSBpbnRyO1xuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IGludHIubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgICAgICAgICBpbnRyW2tdLnNlZ21lbnQxID0gaTtcbiAgICAgICAgICAgICAgaW50cltrXS5zZWdtZW50MiA9IGo7XG4gICAgICAgICAgICAgIGludHJba10uYmV6MSA9IGJlejE7XG4gICAgICAgICAgICAgIGludHJba10uYmV6MiA9IGJlejI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoaW50cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuXG5mdW5jdGlvbiBwYXRoVG9BYnNvbHV0ZShwYXRoQXJyYXkpIHtcbiAgdmFyIHB0aCA9IHBhdGhzKHBhdGhBcnJheSk7XG5cbiAgaWYgKHB0aC5hYnMpIHtcbiAgICByZXR1cm4gcGF0aENsb25lKHB0aC5hYnMpO1xuICB9XG5cbiAgaWYgKCFpc0FycmF5KHBhdGhBcnJheSkgfHwgIWlzQXJyYXkocGF0aEFycmF5ICYmIHBhdGhBcnJheVswXSkpIHsgLy8gcm91Z2ggYXNzdW1wdGlvblxuICAgIHBhdGhBcnJheSA9IHBhcnNlUGF0aFN0cmluZyhwYXRoQXJyYXkpO1xuICB9XG5cbiAgaWYgKCFwYXRoQXJyYXkgfHwgIXBhdGhBcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW1snTScsIDAsIDBdXTtcbiAgfVxuXG4gIHZhciByZXMgPSBbXSxcbiAgICAgIHggPSAwLFxuICAgICAgeSA9IDAsXG4gICAgICBteCA9IDAsXG4gICAgICBteSA9IDAsXG4gICAgICBzdGFydCA9IDAsXG4gICAgICBwYTA7XG5cbiAgaWYgKHBhdGhBcnJheVswXVswXSA9PSAnTScpIHtcbiAgICB4ID0gK3BhdGhBcnJheVswXVsxXTtcbiAgICB5ID0gK3BhdGhBcnJheVswXVsyXTtcbiAgICBteCA9IHg7XG4gICAgbXkgPSB5O1xuICAgIHN0YXJ0Kys7XG4gICAgcmVzWzBdID0gWydNJywgeCwgeV07XG4gIH1cblxuICBmb3IgKHZhciByLCBwYSwgaSA9IHN0YXJ0LCBpaSA9IHBhdGhBcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcmVzLnB1c2gociA9IFtdKTtcbiAgICBwYSA9IHBhdGhBcnJheVtpXTtcbiAgICBwYTAgPSBwYVswXTtcblxuICAgIGlmIChwYTAgIT0gcGEwLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIHJbMF0gPSBwYTAudG9VcHBlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChyWzBdKSB7XG4gICAgICBjYXNlICdBJzpcbiAgICAgICAgclsxXSA9IHBhWzFdO1xuICAgICAgICByWzJdID0gcGFbMl07XG4gICAgICAgIHJbM10gPSBwYVszXTtcbiAgICAgICAgcls0XSA9IHBhWzRdO1xuICAgICAgICByWzVdID0gcGFbNV07XG4gICAgICAgIHJbNl0gPSArcGFbNl0gKyB4O1xuICAgICAgICByWzddID0gK3BhWzddICsgeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdWJzpcbiAgICAgICAgclsxXSA9ICtwYVsxXSArIHk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSCc6XG4gICAgICAgIHJbMV0gPSArcGFbMV0gKyB4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgICBteCA9ICtwYVsxXSArIHg7XG4gICAgICAgIG15ID0gK3BhWzJdICsgeTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZvciAodmFyIGogPSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICByW2pdID0gK3BhW2pdICsgKChqICUgMikgPyB4IDogeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gcGEubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgICByW2tdID0gcGFba107XG4gICAgICB9XG4gICAgfVxuICAgIHBhMCA9IHBhMC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChyWzBdKSB7XG4gICAgY2FzZSAnWic6XG4gICAgICB4ID0gK214O1xuICAgICAgeSA9ICtteTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0gnOlxuICAgICAgeCA9IHJbMV07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdWJzpcbiAgICAgIHkgPSByWzFdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTSc6XG4gICAgICBteCA9IHJbci5sZW5ndGggLSAyXTtcbiAgICAgIG15ID0gcltyLmxlbmd0aCAtIDFdO1xuICAgIGRlZmF1bHQ6XG4gICAgICB4ID0gcltyLmxlbmd0aCAtIDJdO1xuICAgICAgeSA9IHJbci5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH1cblxuICByZXMudG9TdHJpbmcgPSBwYXRoVG9TdHJpbmc7XG4gIHB0aC5hYnMgPSBwYXRoQ2xvbmUocmVzKTtcblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBpc0xpbmUoYmV6KSB7XG4gIHJldHVybiAoXG4gICAgYmV6WzBdID09PSBiZXpbMl0gJiZcbiAgICBiZXpbMV0gPT09IGJlelszXSAmJlxuICAgIGJlels0XSA9PT0gYmV6WzZdICYmXG4gICAgYmV6WzVdID09PSBiZXpbN11cbiAgKTtcbn1cblxuZnVuY3Rpb24gbGluZVRvQ3VydmUoeDEsIHkxLCB4MiwgeTIpIHtcbiAgcmV0dXJuIFtcbiAgICB4MSwgeTEsIHgyLFxuICAgIHkyLCB4MiwgeTJcbiAgXTtcbn1cblxuZnVuY3Rpb24gcXViaWNUb0N1cnZlKHgxLCB5MSwgYXgsIGF5LCB4MiwgeTIpIHtcbiAgdmFyIF8xMyA9IDEgLyAzLFxuICAgICAgXzIzID0gMiAvIDM7XG5cbiAgcmV0dXJuIFtcbiAgICBfMTMgKiB4MSArIF8yMyAqIGF4LFxuICAgIF8xMyAqIHkxICsgXzIzICogYXksXG4gICAgXzEzICogeDIgKyBfMjMgKiBheCxcbiAgICBfMTMgKiB5MiArIF8yMyAqIGF5LFxuICAgIHgyLFxuICAgIHkyXG4gIF07XG59XG5cbmZ1bmN0aW9uIGFyY1RvQ3VydmUoeDEsIHkxLCByeCwgcnksIGFuZ2xlLCBsYXJnZV9hcmNfZmxhZywgc3dlZXBfZmxhZywgeDIsIHkyLCByZWN1cnNpdmUpIHtcblxuICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvZiB3aGVyZSB0aGlzIG1hdGggY2FtZSBmcm9tIHZpc2l0OlxuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXNcbiAgdmFyIF8xMjAgPSBQSSAqIDEyMCAvIDE4MCxcbiAgICAgIHJhZCA9IFBJIC8gMTgwICogKCthbmdsZSB8fCAwKSxcbiAgICAgIHJlcyA9IFtdLFxuICAgICAgeHksXG4gICAgICByb3RhdGUgPSBjYWNoZXIoZnVuY3Rpb24oeCwgeSwgcmFkKSB7XG4gICAgICAgIHZhciBYID0geCAqIG1hdGguY29zKHJhZCkgLSB5ICogbWF0aC5zaW4ocmFkKSxcbiAgICAgICAgICAgIFkgPSB4ICogbWF0aC5zaW4ocmFkKSArIHkgKiBtYXRoLmNvcyhyYWQpO1xuXG4gICAgICAgIHJldHVybiB7IHg6IFgsIHk6IFkgfTtcbiAgICAgIH0pO1xuXG4gIGlmICghcmVjdXJzaXZlKSB7XG4gICAgeHkgPSByb3RhdGUoeDEsIHkxLCAtcmFkKTtcbiAgICB4MSA9IHh5Lng7XG4gICAgeTEgPSB4eS55O1xuICAgIHh5ID0gcm90YXRlKHgyLCB5MiwgLXJhZCk7XG4gICAgeDIgPSB4eS54O1xuICAgIHkyID0geHkueTtcblxuICAgIHZhciB4ID0gKHgxIC0geDIpIC8gMixcbiAgICAgICAgeSA9ICh5MSAtIHkyKSAvIDI7XG5cbiAgICB2YXIgaCA9ICh4ICogeCkgLyAocnggKiByeCkgKyAoeSAqIHkpIC8gKHJ5ICogcnkpO1xuXG4gICAgaWYgKGggPiAxKSB7XG4gICAgICBoID0gbWF0aC5zcXJ0KGgpO1xuICAgICAgcnggPSBoICogcng7XG4gICAgICByeSA9IGggKiByeTtcbiAgICB9XG5cbiAgICB2YXIgcngyID0gcnggKiByeCxcbiAgICAgICAgcnkyID0gcnkgKiByeSxcbiAgICAgICAgayA9IChsYXJnZV9hcmNfZmxhZyA9PSBzd2VlcF9mbGFnID8gLTEgOiAxKSAqXG4gICAgICAgICAgICBtYXRoLnNxcnQoYWJzKChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAtIHJ5MiAqIHggKiB4KSAvIChyeDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkpLFxuICAgICAgICBjeCA9IGsgKiByeCAqIHkgLyByeSArICh4MSArIHgyKSAvIDIsXG4gICAgICAgIGN5ID0gayAqIC1yeSAqIHggLyByeCArICh5MSArIHkyKSAvIDIsXG4gICAgICAgIGYxID0gbWF0aC5hc2luKCgoeTEgLSBjeSkgLyByeSkudG9GaXhlZCg5KSksXG4gICAgICAgIGYyID0gbWF0aC5hc2luKCgoeTIgLSBjeSkgLyByeSkudG9GaXhlZCg5KSk7XG5cbiAgICBmMSA9IHgxIDwgY3ggPyBQSSAtIGYxIDogZjE7XG4gICAgZjIgPSB4MiA8IGN4ID8gUEkgLSBmMiA6IGYyO1xuICAgIGYxIDwgMCAmJiAoZjEgPSBQSSAqIDIgKyBmMSk7XG4gICAgZjIgPCAwICYmIChmMiA9IFBJICogMiArIGYyKTtcblxuICAgIGlmIChzd2VlcF9mbGFnICYmIGYxID4gZjIpIHtcbiAgICAgIGYxID0gZjEgLSBQSSAqIDI7XG4gICAgfVxuICAgIGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYxKSB7XG4gICAgICBmMiA9IGYyIC0gUEkgKiAyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmMSA9IHJlY3Vyc2l2ZVswXTtcbiAgICBmMiA9IHJlY3Vyc2l2ZVsxXTtcbiAgICBjeCA9IHJlY3Vyc2l2ZVsyXTtcbiAgICBjeSA9IHJlY3Vyc2l2ZVszXTtcbiAgfVxuXG4gIHZhciBkZiA9IGYyIC0gZjE7XG5cbiAgaWYgKGFicyhkZikgPiBfMTIwKSB7XG4gICAgdmFyIGYyb2xkID0gZjIsXG4gICAgICAgIHgyb2xkID0geDIsXG4gICAgICAgIHkyb2xkID0geTI7XG5cbiAgICBmMiA9IGYxICsgXzEyMCAqIChzd2VlcF9mbGFnICYmIGYyID4gZjEgPyAxIDogLTEpO1xuICAgIHgyID0gY3ggKyByeCAqIG1hdGguY29zKGYyKTtcbiAgICB5MiA9IGN5ICsgcnkgKiBtYXRoLnNpbihmMik7XG4gICAgcmVzID0gYXJjVG9DdXJ2ZSh4MiwgeTIsIHJ4LCByeSwgYW5nbGUsIDAsIHN3ZWVwX2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBmMm9sZCwgY3gsIGN5XSk7XG4gIH1cblxuICBkZiA9IGYyIC0gZjE7XG5cbiAgdmFyIGMxID0gbWF0aC5jb3MoZjEpLFxuICAgICAgczEgPSBtYXRoLnNpbihmMSksXG4gICAgICBjMiA9IG1hdGguY29zKGYyKSxcbiAgICAgIHMyID0gbWF0aC5zaW4oZjIpLFxuICAgICAgdCA9IG1hdGgudGFuKGRmIC8gNCksXG4gICAgICBoeCA9IDQgLyAzICogcnggKiB0LFxuICAgICAgaHkgPSA0IC8gMyAqIHJ5ICogdCxcbiAgICAgIG0xID0gW3gxLCB5MV0sXG4gICAgICBtMiA9IFt4MSArIGh4ICogczEsIHkxIC0gaHkgKiBjMV0sXG4gICAgICBtMyA9IFt4MiArIGh4ICogczIsIHkyIC0gaHkgKiBjMl0sXG4gICAgICBtNCA9IFt4MiwgeTJdO1xuXG4gIG0yWzBdID0gMiAqIG0xWzBdIC0gbTJbMF07XG4gIG0yWzFdID0gMiAqIG0xWzFdIC0gbTJbMV07XG5cbiAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgIHJldHVybiBbbTIsIG0zLCBtNF0uY29uY2F0KHJlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzID0gW20yLCBtMywgbTRdLmNvbmNhdChyZXMpLmpvaW4oKS5zcGxpdCgnLCcpO1xuICAgIHZhciBuZXdyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBuZXdyZXNbaV0gPSBpICUgMiA/IHJvdGF0ZShyZXNbaSAtIDFdLCByZXNbaV0sIHJhZCkueSA6IHJvdGF0ZShyZXNbaV0sIHJlc1tpICsgMV0sIHJhZCkueDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3cmVzO1xuICB9XG59XG5cbi8vIFJldHVybnMgYm91bmRpbmcgYm94IG9mIGN1YmljIGJlemllciBjdXJ2ZS5cbi8vIFNvdXJjZTogaHR0cDovL2Jsb2cuaGFja2Vycy1jYWZlLm5ldC8yMDA5LzA2L2hvdy10by1jYWxjdWxhdGUtYmV6aWVyLWN1cnZlcy1ib3VuZGluZy5odG1sXG4vLyBPcmlnaW5hbCB2ZXJzaW9uOiBOSVNISU8gSGlyb2thenVcbi8vIE1vZGlmaWNhdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vMjIzNDVcbmZ1bmN0aW9uIGN1cnZlQkJveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHR2YWx1ZXMgPSBbXSxcbiAgICAgIGJvdW5kcyA9IFtbXSwgW11dLFxuICAgICAgYSwgYiwgYywgdCwgdDEsIHQyLCBiMmFjLCBzcXJ0YjJhYztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkge1xuXG4gICAgaWYgKGkgPT0gMCkge1xuICAgICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7XG4gICAgICBhID0gLTMgKiB4MCArIDkgKiB4MSAtIDkgKiB4MiArIDMgKiB4MztcbiAgICAgIGMgPSAzICogeDEgLSAzICogeDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGIgPSA2ICogeTAgLSAxMiAqIHkxICsgNiAqIHkyO1xuICAgICAgYSA9IC0zICogeTAgKyA5ICogeTEgLSA5ICogeTIgKyAzICogeTM7XG4gICAgICBjID0gMyAqIHkxIC0gMyAqIHkwO1xuICAgIH1cblxuICAgIGlmIChhYnMoYSkgPCAxZS0xMikge1xuXG4gICAgICBpZiAoYWJzKGIpIDwgMWUtMTIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHQgPSAtYyAvIGI7XG5cbiAgICAgIGlmICgwIDwgdCAmJiB0IDwgMSkge1xuICAgICAgICB0dmFsdWVzLnB1c2godCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGIyYWMgPSBiICogYiAtIDQgKiBjICogYTtcbiAgICBzcXJ0YjJhYyA9IG1hdGguc3FydChiMmFjKTtcblxuICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdDEgPSAoLWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgaWYgKDAgPCB0MSAmJiB0MSA8IDEpIHtcbiAgICAgIHR2YWx1ZXMucHVzaCh0MSk7XG4gICAgfVxuXG4gICAgdDIgPSAoLWIgLSBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgaWYgKDAgPCB0MiAmJiB0MiA8IDEpIHtcbiAgICAgIHR2YWx1ZXMucHVzaCh0Mik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGogPSB0dmFsdWVzLmxlbmd0aCxcbiAgICAgIGpsZW4gPSBqLFxuICAgICAgbXQ7XG5cbiAgd2hpbGUgKGotLSkge1xuICAgIHQgPSB0dmFsdWVzW2pdO1xuICAgIG10ID0gMSAtIHQ7XG4gICAgYm91bmRzWzBdW2pdID0gKG10ICogbXQgKiBtdCAqIHgwKSArICgzICogbXQgKiBtdCAqIHQgKiB4MSkgKyAoMyAqIG10ICogdCAqIHQgKiB4MikgKyAodCAqIHQgKiB0ICogeDMpO1xuICAgIGJvdW5kc1sxXVtqXSA9IChtdCAqIG10ICogbXQgKiB5MCkgKyAoMyAqIG10ICogbXQgKiB0ICogeTEpICsgKDMgKiBtdCAqIHQgKiB0ICogeTIpICsgKHQgKiB0ICogdCAqIHkzKTtcbiAgfVxuXG4gIGJvdW5kc1swXVtqbGVuXSA9IHgwO1xuICBib3VuZHNbMV1bamxlbl0gPSB5MDtcbiAgYm91bmRzWzBdW2psZW4gKyAxXSA9IHgzO1xuICBib3VuZHNbMV1bamxlbiArIDFdID0geTM7XG4gIGJvdW5kc1swXS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7XG5cbiAgcmV0dXJuIHtcbiAgICB4MDogbW1pbi5hcHBseSgwLCBib3VuZHNbMF0pLFxuICAgIHkwOiBtbWluLmFwcGx5KDAsIGJvdW5kc1sxXSksXG4gICAgeDE6IG1tYXguYXBwbHkoMCwgYm91bmRzWzBdKSxcbiAgICB5MTogbW1heC5hcHBseSgwLCBib3VuZHNbMV0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhdGhUb0N1cnZlKHBhdGgpIHtcblxuICB2YXIgcHRoID0gcGF0aHMocGF0aCk7XG5cbiAgLy8gcmV0dXJuIGNhY2hlZCBjdXJ2ZSwgaWYgZXhpc3RpbmdcbiAgaWYgKHB0aC5jdXJ2ZSkge1xuICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLmN1cnZlKTtcbiAgfVxuXG4gIHZhciBjdXJ2ZWRQYXRoID0gcGF0aFRvQWJzb2x1dGUocGF0aCksXG4gICAgICBhdHRycyA9IHsgeDogMCwgeTogMCwgYng6IDAsIGJ5OiAwLCBYOiAwLCBZOiAwLCBxeDogbnVsbCwgcXk6IG51bGwgfSxcbiAgICAgIHByb2Nlc3NQYXRoID0gZnVuY3Rpb24ocGF0aCwgZCwgcGF0aENvbW1hbmQpIHtcbiAgICAgICAgdmFyIG54LCBueTtcblxuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gWydDJywgZC54LCBkLnksIGQueCwgZC55LCBkLngsIGQueV07XG4gICAgICAgIH1cblxuICAgICAgICAhKHBhdGhbMF0gaW4geyBUOiAxLCBROiAxIH0pICYmIChkLnF4ID0gZC5xeSA9IG51bGwpO1xuXG4gICAgICAgIHN3aXRjaCAocGF0aFswXSkge1xuICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICBkLlggPSBwYXRoWzFdO1xuICAgICAgICAgIGQuWSA9IHBhdGhbMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQoYXJjVG9DdXJ2ZS5hcHBseSgwLCBbZC54LCBkLnldLmNvbmNhdChwYXRoLnNsaWNlKDEpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICBpZiAocGF0aENvbW1hbmQgPT0gJ0MnIHx8IHBhdGhDb21tYW5kID09ICdTJykge1xuICAgICAgICAgICAgLy8gSW4gJ1MnIGNhc2Ugd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwgaWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgQy9TLlxuICAgICAgICAgICAgbnggPSBkLnggKiAyIC0gZC5ieDtcbiAgICAgICAgICAgIC8vIEFuZCByZWZsZWN0IHRoZSBwcmV2aW91c1xuICAgICAgICAgICAgbnkgPSBkLnkgKiAyIC0gZC5ieTtcbiAgICAgICAgICAgIC8vIGNvbW1hbmQncyBjb250cm9sIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50LlxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG9yIHNvbWUgZWxzZSBvciBub3RoaW5nXG4gICAgICAgICAgICBueCA9IGQueDtcbiAgICAgICAgICAgIG55ID0gZC55O1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoID0gWydDJywgbngsIG55XS5jb25jYXQocGF0aC5zbGljZSgxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgIGlmIChwYXRoQ29tbWFuZCA9PSAnUScgfHwgcGF0aENvbW1hbmQgPT0gJ1QnKSB7XG4gICAgICAgICAgICAvLyBJbiAnVCcgY2FzZSB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50LCBpZiB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBRL1QuXG4gICAgICAgICAgICBkLnF4ID0gZC54ICogMiAtIGQucXg7XG4gICAgICAgICAgICAvLyBBbmQgbWFrZSBhIHJlZmxlY3Rpb24gc2ltaWxhclxuICAgICAgICAgICAgZC5xeSA9IGQueSAqIDIgLSBkLnF5O1xuICAgICAgICAgICAgLy8gdG8gY2FzZSAnUycuXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gb3Igc29tZXRoaW5nIGVsc2Ugb3Igbm90aGluZ1xuICAgICAgICAgICAgZC5xeCA9IGQueDtcbiAgICAgICAgICAgIGQucXkgPSBkLnk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQocXViaWNUb0N1cnZlKGQueCwgZC55LCBkLnF4LCBkLnF5LCBwYXRoWzFdLCBwYXRoWzJdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgIGQucXggPSBwYXRoWzFdO1xuICAgICAgICAgIGQucXkgPSBwYXRoWzJdO1xuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQocXViaWNUb0N1cnZlKGQueCwgZC55LCBwYXRoWzFdLCBwYXRoWzJdLCBwYXRoWzNdLCBwYXRoWzRdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQobGluZVRvQ3VydmUoZC54LCBkLnksIHBhdGhbMV0sIHBhdGhbMl0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSCc6XG4gICAgICAgICAgcGF0aCA9IFsnQyddLmNvbmNhdChsaW5lVG9DdXJ2ZShkLngsIGQueSwgcGF0aFsxXSwgZC55KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1YnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQobGluZVRvQ3VydmUoZC54LCBkLnksIGQueCwgcGF0aFsxXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaJzpcbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KGxpbmVUb0N1cnZlKGQueCwgZC55LCBkLlgsIGQuWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9LFxuXG4gICAgICBmaXhBcmMgPSBmdW5jdGlvbihwcCwgaSkge1xuXG4gICAgICAgIGlmIChwcFtpXS5sZW5ndGggPiA3KSB7XG4gICAgICAgICAgcHBbaV0uc2hpZnQoKTtcbiAgICAgICAgICB2YXIgcGkgPSBwcFtpXTtcblxuICAgICAgICAgIHdoaWxlIChwaS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhdGhDb21tYW5kc1tpXSA9ICdBJzsgLy8gaWYgY3JlYXRlZCBtdWx0aXBsZSBDOnMsIHRoZWlyIG9yaWdpbmFsIHNlZyBpcyBzYXZlZFxuICAgICAgICAgICAgcHAuc3BsaWNlKGkrKywgMCwgWydDJ10uY29uY2F0KHBpLnNwbGljZSgwLCA2KSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBpaSA9IGN1cnZlZFBhdGgubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBwYXRoQ29tbWFuZHMgPSBbXSwgLy8gcGF0aCBjb21tYW5kcyBvZiBvcmlnaW5hbCBwYXRoIHBcbiAgICAgIHBmaXJzdCA9ICcnLCAvLyB0ZW1wb3JhcnkgaG9sZGVyIGZvciBvcmlnaW5hbCBwYXRoIGNvbW1hbmRcbiAgICAgIHBhdGhDb21tYW5kID0gJyc7IC8vIGhvbGRlciBmb3IgcHJldmlvdXMgcGF0aCBjb21tYW5kIG9mIG9yaWdpbmFsIHBhdGhcblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSBjdXJ2ZWRQYXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjdXJ2ZWRQYXRoW2ldICYmIChwZmlyc3QgPSBjdXJ2ZWRQYXRoW2ldWzBdKTsgLy8gc2F2ZSBjdXJyZW50IHBhdGggY29tbWFuZFxuXG4gICAgaWYgKHBmaXJzdCAhPSAnQycpIC8vIEMgaXMgbm90IHNhdmVkIHlldCwgYmVjYXVzZSBpdCBtYXkgYmUgcmVzdWx0IG9mIGNvbnZlcnNpb25cbiAgICB7XG4gICAgICBwYXRoQ29tbWFuZHNbaV0gPSBwZmlyc3Q7IC8vIFNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmRcbiAgICAgIGkgJiYgKHBhdGhDb21tYW5kID0gcGF0aENvbW1hbmRzW2kgLSAxXSk7IC8vIEdldCBwcmV2aW91cyBwYXRoIGNvbW1hbmQgcGF0aENvbW1hbmRcbiAgICB9XG4gICAgY3VydmVkUGF0aFtpXSA9IHByb2Nlc3NQYXRoKGN1cnZlZFBhdGhbaV0sIGF0dHJzLCBwYXRoQ29tbWFuZCk7IC8vIFByZXZpb3VzIHBhdGggY29tbWFuZCBpcyBpbnB1dHRlZCB0byBwcm9jZXNzUGF0aFxuXG4gICAgaWYgKHBhdGhDb21tYW5kc1tpXSAhPSAnQScgJiYgcGZpcnN0ID09ICdDJykgcGF0aENvbW1hbmRzW2ldID0gJ0MnOyAvLyBBIGlzIHRoZSBvbmx5IGNvbW1hbmRcbiAgICAvLyB3aGljaCBtYXkgcHJvZHVjZSBtdWx0aXBsZSBDOnNcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IEMgaXMgYWxzbyBDIGluIG9yaWdpbmFsIHBhdGhcblxuICAgIGZpeEFyYyhjdXJ2ZWRQYXRoLCBpKTsgLy8gZml4QXJjIGFkZHMgYWxzbyB0aGUgcmlnaHQgYW1vdW50IG9mIEE6cyB0byBwYXRoQ29tbWFuZHNcblxuICAgIHZhciBzZWcgPSBjdXJ2ZWRQYXRoW2ldLFxuICAgICAgICBzZWdsZW4gPSBzZWcubGVuZ3RoO1xuXG4gICAgYXR0cnMueCA9IHNlZ1tzZWdsZW4gLSAyXTtcbiAgICBhdHRycy55ID0gc2VnW3NlZ2xlbiAtIDFdO1xuICAgIGF0dHJzLmJ4ID0gdG9GbG9hdChzZWdbc2VnbGVuIC0gNF0pIHx8IGF0dHJzLng7XG4gICAgYXR0cnMuYnkgPSB0b0Zsb2F0KHNlZ1tzZWdsZW4gLSAzXSkgfHwgYXR0cnMueTtcbiAgfVxuXG4gIC8vIGNhY2hlIGN1cnZlXG4gIHB0aC5jdXJ2ZSA9IHBhdGhDbG9uZShjdXJ2ZWRQYXRoKTtcblxuICByZXR1cm4gY3VydmVkUGF0aDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kUGF0aEludGVyc2VjdGlvbnM7XG4iLCJ2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIEVOVElUWV9QQVRURVJOID0gLyYjKFxcZCspO3wmI3goWzAtOWEtZl0rKTt8JihcXHcrKTsvaWc7XG5cbnZhciBFTlRJVFlfTUFQUElORyA9IHtcbiAgJ2FtcCc6ICcmJyxcbiAgJ2Fwb3MnOiAnXFwnJyxcbiAgJ2d0JzogJz4nLFxuICAnbHQnOiAnPCcsXG4gICdxdW90JzogJ1wiJ1xufTtcblxuLy8gbWFwIFVQUEVSQ0FTRSB2YXJpYW50cyBvZiBzdXBwb3J0ZWQgc3BlY2lhbCBjaGFyc1xuT2JqZWN0LmtleXMoRU5USVRZX01BUFBJTkcpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICBFTlRJVFlfTUFQUElOR1trLnRvVXBwZXJDYXNlKCldID0gRU5USVRZX01BUFBJTkdba107XG59KTtcblxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXMoXywgZCwgeCwgeikge1xuXG4gIC8vIHJlc2VydmVkIG5hbWVzLCBpLmUuICZuYnNwO1xuICBpZiAoeikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKEVOVElUWV9NQVBQSU5HLCB6KSkge1xuICAgICAgcmV0dXJuIEVOVElUWV9NQVBQSU5HW3pdO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGZhbGwgYmFjayB0byBvcmlnaW5hbCB2YWx1ZVxuICAgICAgcmV0dXJuICcmJyArIHogKyAnOyc7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVjaW1hbCBlbmNvZGVkIGNoYXJcbiAgaWYgKGQpIHtcbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlKGQpO1xuICB9XG5cbiAgLy8gaGV4IGVuY29kZWQgY2hhclxuICByZXR1cm4gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHgsIDE2KSk7XG59XG5cblxuLyoqXG4gKiBBIGJhc2ljIGVudGl0eSBkZWNvZGVyIHRoYXQgY2FuIGRlY29kZSBhIG1pbmltYWxcbiAqIHN1Yi1zZXQgb2YgcmVzZXJ2ZWQgbmFtZXMgKCZhbXA7KSBhcyB3ZWxsIGFzXG4gKiBoZXggKCYjeGFhZjspIGFuZCBkZWNpbWFsICgmIzEyMzE7KSBlbmNvZGVkIGNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gZGVjb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlRW50aXRpZXMocykge1xuICBpZiAocy5sZW5ndGggPiAzICYmIHMuaW5kZXhPZignJicpICE9PSAtMSkge1xuICAgIHJldHVybiBzLnJlcGxhY2UoRU5USVRZX1BBVFRFUk4sIHJlcGxhY2VFbnRpdGllcyk7XG4gIH1cblxuICByZXR1cm4gcztcbn1cblxudmFyIFhTSV9VUkkgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnO1xudmFyIFhTSV9QUkVGSVggPSAneHNpJztcbnZhciBYU0lfVFlQRSA9ICd4c2k6dHlwZSc7XG5cbnZhciBOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSA9ICdub24td2hpdGVzcGFjZSBvdXRzaWRlIG9mIHJvb3Qgbm9kZSc7XG5cbmZ1bmN0aW9uIGVycm9yKG1zZykge1xuICByZXR1cm4gbmV3IEVycm9yKG1zZyk7XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiAnbWlzc2luZyBuYW1lc3BhY2UgZm9yIHByZWZpeCA8JyArIHByZWZpeCArICc+Jztcbn1cblxuZnVuY3Rpb24gZ2V0dGVyKGdldEZuKSB7XG4gIHJldHVybiB7XG4gICAgJ2dldCc6IGdldEZuLFxuICAgICdlbnVtZXJhYmxlJzogdHJ1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZU5zTWF0cml4KG5zTWF0cml4KSB7XG4gIHZhciBjbG9uZSA9IHt9LCBrZXk7XG4gIGZvciAoa2V5IGluIG5zTWF0cml4KSB7XG4gICAgY2xvbmVba2V5XSA9IG5zTWF0cml4W2tleV07XG4gIH1cbiAgcmV0dXJuIGNsb25lO1xufVxuXG5mdW5jdGlvbiB1cmlQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiBwcmVmaXggKyAnJHVyaSc7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTnNNYXRyaXgobnNVcmlUb1ByZWZpeCkge1xuICB2YXIgbnNNYXRyaXggPSB7fSxcbiAgICAgIHVyaSxcbiAgICAgIHByZWZpeDtcblxuICBmb3IgKHVyaSBpbiBuc1VyaVRvUHJlZml4KSB7XG4gICAgcHJlZml4ID0gbnNVcmlUb1ByZWZpeFt1cmldO1xuICAgIG5zTWF0cml4W3ByZWZpeF0gPSBwcmVmaXg7XG4gICAgbnNNYXRyaXhbdXJpUHJlZml4KHByZWZpeCldID0gdXJpO1xuICB9XG5cbiAgcmV0dXJuIG5zTWF0cml4O1xufVxuXG5mdW5jdGlvbiBub29wR2V0Q29udGV4dCgpIHtcbiAgcmV0dXJuIHsgJ2xpbmUnOiAwLCAnY29sdW1uJzogMCB9O1xufVxuXG5mdW5jdGlvbiB0aHJvd0Z1bmMoZXJyKSB7XG4gIHRocm93IGVycjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHBhcnNlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSAgeyFPYmplY3Q8c3RyaW5nLCA/Pj19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMpIHtcblxuICBpZiAoIXRoaXMpIHtcbiAgICByZXR1cm4gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBwcm94eSA9IG9wdGlvbnMgJiYgb3B0aW9uc1sncHJveHknXTtcblxuICB2YXIgb25UZXh0LFxuICAgICAgb25PcGVuVGFnLFxuICAgICAgb25DbG9zZVRhZyxcbiAgICAgIG9uQ0RBVEEsXG4gICAgICBvbkVycm9yID0gdGhyb3dGdW5jLFxuICAgICAgb25XYXJuaW5nLFxuICAgICAgb25Db21tZW50LFxuICAgICAgb25RdWVzdGlvbixcbiAgICAgIG9uQXR0ZW50aW9uO1xuXG4gIHZhciBnZXRDb250ZXh0ID0gbm9vcEdldENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIERvIHdlIG5lZWQgdG8gcGFyc2UgdGhlIGN1cnJlbnQgZWxlbWVudHMgYXR0cmlidXRlcyBmb3IgbmFtZXNwYWNlcz9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgbWF5YmVOUyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEbyB3ZSBwcm9jZXNzIG5hbWVzcGFjZXMgYXQgYWxsP1xuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHZhciBpc05hbWVzcGFjZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2F1Z2h0IGVycm9yIHJldHVybmVkIG9uIHBhcnNlIGVuZFxuICAgKlxuICAgKiBAdHlwZSB7RXJyb3J9XG4gICAqL1xuICB2YXIgcmV0dXJuRXJyb3IgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgd2Ugc3RvcCBwYXJzaW5nP1xuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHZhciBwYXJzZVN0b3AgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgeyB1cmk6IHByZWZpeCB9IHVzZWQgYnkgdGhlIHBhcnNlci5cbiAgICpcbiAgICogVGhpcyBtYXAgd2lsbCBlbnN1cmUgd2UgY2FuIG5vcm1hbGl6ZSBwcmVmaXhlcyBkdXJpbmcgcHJvY2Vzc2luZztcbiAgICogZm9yIGVhY2ggdXJpLCBvbmx5IG9uZSBwcmVmaXggd2lsbCBiZSBleHBvc2VkIHRvIHRoZSBoYW5kbGVycy5cbiAgICpcbiAgICogQHR5cGUgeyFPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fX1cbiAgICovXG4gIHZhciBuc1VyaVRvUHJlZml4O1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgcGFyc2UgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xFcnJvcn0gZXJyXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIGVyciA9IGVycm9yKGVycik7XG4gICAgfVxuXG4gICAgcmV0dXJuRXJyb3IgPSBlcnI7XG5cbiAgICBvbkVycm9yKGVyciwgZ2V0Q29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8RXJyb3J9IGVyclxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhlcnIpIHtcblxuICAgIGlmICghb25XYXJuaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICBlcnIgPSBlcnJvcihlcnIpO1xuICAgIH1cblxuICAgIG9uV2FybmluZyhlcnIsIGdldENvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHBhcnNlIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgbmFtZVxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2JcbiAgICpcbiAgICogQHJldHVybiB7UGFyc2VyfVxuICAgKi9cbiAgdGhpc1snb24nXSA9IGZ1bmN0aW9uKG5hbWUsIGNiKSB7XG5cbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8bmFtZSwgY2I+Jyk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnb3BlblRhZyc6IG9uT3BlblRhZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICd0ZXh0Jzogb25UZXh0ID0gY2I7IGJyZWFrO1xuICAgIGNhc2UgJ2Nsb3NlVGFnJzogb25DbG9zZVRhZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICdlcnJvcic6IG9uRXJyb3IgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnd2Fybic6IG9uV2FybmluZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICdjZGF0YSc6IG9uQ0RBVEEgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnYXR0ZW50aW9uJzogb25BdHRlbnRpb24gPSBjYjsgYnJlYWs7IC8vIDwhWFhYWFggenp6ej1cImVlZWVcIj5cbiAgICBjYXNlICdxdWVzdGlvbic6IG9uUXVlc3Rpb24gPSBjYjsgYnJlYWs7IC8vIDw/IC4uLi4gID8+XG4gICAgY2FzZSAnY29tbWVudCc6IG9uQ29tbWVudCA9IGNiOyBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgZXJyb3IoJ3Vuc3VwcG9ydGVkIGV2ZW50OiAnICsgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZXNwYWNlIHRvIHByZWZpeCBtYXBwaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBwYXJzZXIubnMoe1xuICAgKiAgICdodHRwOi8vZm9vJzogJ2ZvbycsXG4gICAqICAgJ2h0dHA6Ly9iYXInOiAnYmFyJ1xuICAgKiB9KTtcbiAgICpcbiAgICogQHBhcmFtICB7IU9iamVjdDxzdHJpbmcsIHN0cmluZz59IG5zTWFwXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ25zJ10gPSBmdW5jdGlvbihuc01hcCkge1xuXG4gICAgaWYgKHR5cGVvZiBuc01hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5zTWFwID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuc01hcCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IGVycm9yKCdyZXF1aXJlZCBhcmdzIDxuc01hcD17fT4nKTtcbiAgICB9XG5cbiAgICB2YXIgX25zVXJpVG9QcmVmaXggPSB7fSwgaztcblxuICAgIGZvciAoayBpbiBuc01hcCkge1xuICAgICAgX25zVXJpVG9QcmVmaXhba10gPSBuc01hcFtrXTtcbiAgICB9XG5cbiAgICAvLyBGT1JDRSBkZWZhdWx0IG1hcHBpbmcgZm9yIHNjaGVtYSBpbnN0YW5jZVxuICAgIF9uc1VyaVRvUHJlZml4W1hTSV9VUkldID0gWFNJX1BSRUZJWDtcblxuICAgIGlzTmFtZXNwYWNlID0gdHJ1ZTtcbiAgICBuc1VyaVRvUHJlZml4ID0gX25zVXJpVG9QcmVmaXg7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgeG1sIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB4bWxcbiAgICpcbiAgICogQHJldHVybiB7RXJyb3J9IHJldHVybkVycm9yLCBpZiBub3QgdGhyb3duXG4gICAqL1xuICB0aGlzWydwYXJzZSddID0gZnVuY3Rpb24oeG1sKSB7XG4gICAgaWYgKHR5cGVvZiB4bWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8eG1sPXN0cmluZz4nKTtcbiAgICB9XG5cbiAgICByZXR1cm5FcnJvciA9IG51bGw7XG5cbiAgICBwYXJzZSh4bWwpO1xuXG4gICAgZ2V0Q29udGV4dCA9IG5vb3BHZXRDb250ZXh0O1xuICAgIHBhcnNlU3RvcCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHJldHVybkVycm9yO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdG9wIHBhcnNpbmcuXG4gICAqL1xuICB0aGlzWydzdG9wJ10gPSBmdW5jdGlvbigpIHtcbiAgICBwYXJzZVN0b3AgPSB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBzdHJpbmcsIGludm9raW5nIGNvbmZpZ3VyZWQgbGlzdGVuZXJzIG9uIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30geG1sXG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZSh4bWwpIHtcbiAgICB2YXIgbnNNYXRyaXhTdGFjayA9IGlzTmFtZXNwYWNlID8gW10gOiBudWxsLFxuICAgICAgICBuc01hdHJpeCA9IGlzTmFtZXNwYWNlID8gYnVpbGROc01hdHJpeChuc1VyaVRvUHJlZml4KSA6IG51bGwsXG4gICAgICAgIF9uc01hdHJpeCxcbiAgICAgICAgbm9kZVN0YWNrID0gW10sXG4gICAgICAgIGFub255bW91c05zQ291bnQgPSAwLFxuICAgICAgICB0YWdTdGFydCA9IGZhbHNlLFxuICAgICAgICB0YWdFbmQgPSBmYWxzZSxcbiAgICAgICAgaSA9IDAsIGogPSAwLFxuICAgICAgICB4LCB5LCBxLCB3LCB2LFxuICAgICAgICB4bWxucyxcbiAgICAgICAgZWxlbWVudE5hbWUsXG4gICAgICAgIF9lbGVtZW50TmFtZSxcbiAgICAgICAgZWxlbWVudFByb3h5XG4gICAgICAgIDtcblxuICAgIHZhciBhdHRyc1N0cmluZyA9ICcnLFxuICAgICAgICBhdHRyc1N0YXJ0ID0gMCxcbiAgICAgICAgY2FjaGVkQXR0cnMgLy8gZmFsc2UgPSBwYXJzZWQgd2l0aCBlcnJvcnMsIG51bGwgPSBuZWVkcyBwYXJzaW5nXG4gICAgICAgIDtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlIGF0dHJpYnV0ZXMgb24gZGVtYW5kIGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgYXR0cmlidXRlcy5cbiAgICAgKlxuICAgICAqIFJldHVybiBzZW1hbnRpY3M6ICgxKSBgZmFsc2VgIG9uIGF0dHJpYnV0ZSBwYXJzZSBlcnJvcixcbiAgICAgKiAoMikgb2JqZWN0IGhhc2ggb24gZXh0cmFjdGVkIGF0dHJzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbnxPYmplY3R9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QXR0cnMoKSB7XG4gICAgICBpZiAoY2FjaGVkQXR0cnMgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZEF0dHJzO1xuICAgICAgfVxuXG4gICAgICB2YXIgbnNVcmksXG4gICAgICAgICAgbnNVcmlQcmVmaXgsXG4gICAgICAgICAgbnNOYW1lLFxuICAgICAgICAgIGRlZmF1bHRBbGlhcyA9IGlzTmFtZXNwYWNlICYmIG5zTWF0cml4Wyd4bWxucyddLFxuICAgICAgICAgIGF0dHJMaXN0ID0gaXNOYW1lc3BhY2UgJiYgbWF5YmVOUyA/IFtdIDogbnVsbCxcbiAgICAgICAgICBpID0gYXR0cnNTdGFydCxcbiAgICAgICAgICBzID0gYXR0cnNTdHJpbmcsXG4gICAgICAgICAgbCA9IHMubGVuZ3RoLFxuICAgICAgICAgIGhhc05ld01hdHJpeCxcbiAgICAgICAgICBuZXdhbGlhcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBhbGlhcyxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGF0dHJzID0ge30sXG4gICAgICAgICAgc2VlbkF0dHJzID0ge30sXG4gICAgICAgICAgc2tpcEF0dHIsXG4gICAgICAgICAgdyxcbiAgICAgICAgICBqO1xuXG4gICAgICBwYXJzZUF0dHI6XG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICBza2lwQXR0ciA9IGZhbHNlO1xuICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkgeyAvLyBXSElURVNQQUNFPXsgXFxmXFxuXFxyXFx0XFx2fVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2FpdCBmb3Igbm9uIHdoaXRlc3BhY2UgY2hhcmFjdGVyXG4gICAgICAgIGlmICh3IDwgNjUgfHwgdyA+IDEyMiB8fCAodyA+IDkwICYmIHcgPCA5NykpIHtcbiAgICAgICAgICBpZiAodyAhPT0gOTUgJiYgdyAhPT0gNTgpIHsgLy8gY2hhciA5NVwiX1wiIDU4XCI6XCJcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgZmlyc3QgY2hhciBhdHRyaWJ1dGUgbmFtZScpO1xuICAgICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBhcnNlIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHcgPiA5NiAmJiB3IDwgMTIzIHx8XG4gICAgICAgICAgICB3ID4gNjQgJiYgdyA8IDkxIHx8XG4gICAgICAgICAgICB3ID4gNDcgJiYgdyA8IDU5IHx8XG4gICAgICAgICAgICB3ID09PSA0NiB8fCAvLyAnLidcbiAgICAgICAgICAgIHcgPT09IDQ1IHx8IC8vICctJ1xuICAgICAgICAgICAgdyA9PT0gOTUgLy8gJ18nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHdoaXRlc3BhY2VcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRVxuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUnKTtcbiAgICAgICAgICAgIGkgPSBqO1xuXG4gICAgICAgICAgICBjb250aW51ZSBwYXJzZUF0dHI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZXhwZWN0ZWQgXCI9XCJcbiAgICAgICAgICBpZiAodyA9PT0gNjEpIHsgLy8gXCI9XCIgPT0gNjFcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgYXR0cmlidXRlIG5hbWUgY2hhcicpO1xuICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBzLnN1YnN0cmluZyhpLCBqKTtcblxuICAgICAgICBpZiAobmFtZSA9PT0gJ3htbG5zOnhtbG5zJykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgZGVjbGFyYXRpb24gb2YgeG1sbnMnKTtcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGogKyAxKTtcblxuICAgICAgICBpZiAodyA9PT0gMzQpIHsgLy8gJ1wiJ1xuICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1wiJywgaSA9IGogKyAyKTtcblxuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZignXFwnJywgaSk7XG5cbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICh3ID09PSAzOSkgeyAvLyBcIidcIlxuICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1xcJycsIGkgPSBqICsgMik7XG5cbiAgICAgICAgICBpZiAoaiA9PT0gLTEpIHtcbiAgICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1wiJywgaSk7XG5cbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZSBxdW90ZXMnKTtcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG5cbiAgICAgICAgICAvLyBza2lwIHRvIG5leHQgc3BhY2VcbiAgICAgICAgICBmb3IgKGogPSBqICsgMTsgaiA8IGw7IGorKykge1xuICAgICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSk7XG5cbiAgICAgICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkgeyAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBjbG9zaW5nIHF1b3RlcycpO1xuXG4gICAgICAgICAgaiA9IGw7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFza2lwQXR0cikge1xuICAgICAgICAgIHZhbHVlID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gajtcblxuICAgICAgICAvLyBlbnN1cmUgU1BBQ0UgZm9sbG93cyBhdHRyaWJ1dGVcbiAgICAgICAgLy8gc2tpcCBpbGxlZ2FsIGNvbnRlbnQgb3RoZXJ3aXNlXG4gICAgICAgIC8vIGV4YW1wbGUgYT1cImJcImNcbiAgICAgICAgZm9yICg7IGogKyAxIDwgbDsgaisrKSB7XG4gICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSk7XG5cbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRklSU1QgSUxMRUdBTCBDSEFSXG4gICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIGF0dHJpYnV0ZSBlbmQnKTtcbiAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIGN1cnNvciB0byBuZXh0IGF0dHJpYnV0ZVxuICAgICAgICBpID0gaiArIDE7XG5cbiAgICAgICAgaWYgKHNraXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWUgcGFyc2VBdHRyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlIHJlLWRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChuYW1lIGluIHNlZW5BdHRycykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2F0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPiBhbHJlYWR5IGRlZmluZWQnKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlZW5BdHRyc1tuYW1lXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFpc05hbWVzcGFjZSkge1xuICAgICAgICAgIGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cnkgdG8gZXh0cmFjdCBuYW1lc3BhY2UgaW5mb3JtYXRpb25cbiAgICAgICAgaWYgKG1heWJlTlMpIHtcbiAgICAgICAgICBuZXdhbGlhcyA9IChcbiAgICAgICAgICAgIG5hbWUgPT09ICd4bWxucydcbiAgICAgICAgICAgICAgPyAneG1sbnMnXG4gICAgICAgICAgICAgIDogKG5hbWUuY2hhckNvZGVBdCgwKSA9PT0gMTIwICYmIG5hbWUuc3Vic3RyKDAsIDYpID09PSAneG1sbnM6JylcbiAgICAgICAgICAgICAgICA/IG5hbWUuc3Vic3RyKDYpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGhhbmRsZSB4bWxucyg6YWxpYXMpIGFzc2lnbm1lbnRcbiAgICAgICAgICBpZiAobmV3YWxpYXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5zVXJpID0gZGVjb2RlRW50aXRpZXModmFsdWUpO1xuICAgICAgICAgICAgbnNVcmlQcmVmaXggPSB1cmlQcmVmaXgobmV3YWxpYXMpO1xuXG4gICAgICAgICAgICBhbGlhcyA9IG5zVXJpVG9QcmVmaXhbbnNVcmldO1xuXG4gICAgICAgICAgICBpZiAoIWFsaWFzKSB7XG5cbiAgICAgICAgICAgICAgLy8gbm8gcHJlZml4IGRlZmluZWQgb3IgcHJlZml4IGNvbGxpc2lvblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG5ld2FsaWFzID09PSAneG1sbnMnKSB8fFxuICAgICAgICAgICAgICAgIChuc1VyaVByZWZpeCBpbiBuc01hdHJpeCAmJiBuc01hdHJpeFtuc1VyaVByZWZpeF0gIT09IG5zVXJpKVxuICAgICAgICAgICAgICApIHtcblxuICAgICAgICAgICAgICAgIC8vIGFsb2NhdGUgZnJlZSBucyBwcmVmaXhcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICBhbGlhcyA9ICducycgKyAoYW5vbnltb3VzTnNDb3VudCsrKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlICh0eXBlb2YgbnNNYXRyaXhbYWxpYXNdICE9PSAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBuZXdhbGlhcztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5zVXJpVG9QcmVmaXhbbnNVcmldID0gYWxpYXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuc01hdHJpeFtuZXdhbGlhc10gIT09IGFsaWFzKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTmV3TWF0cml4KSB7XG4gICAgICAgICAgICAgICAgbnNNYXRyaXggPSBjbG9uZU5zTWF0cml4KG5zTWF0cml4KTtcbiAgICAgICAgICAgICAgICBoYXNOZXdNYXRyaXggPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbnNNYXRyaXhbbmV3YWxpYXNdID0gYWxpYXM7XG4gICAgICAgICAgICAgIGlmIChuZXdhbGlhcyA9PT0gJ3htbG5zJykge1xuICAgICAgICAgICAgICAgIG5zTWF0cml4W3VyaVByZWZpeChhbGlhcyldID0gbnNVcmk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEFsaWFzID0gYWxpYXM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBuc01hdHJpeFtuc1VyaVByZWZpeF0gPSBuc1VyaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXhwb3NlIHhtbG5zKDphc2QpPVwiLi4uXCIgaW4gYXR0cmlidXRlc1xuICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbGxlY3QgYXR0cmlidXRlcyB1bnRpbCBhbGwgbmFtZXNwYWNlXG4gICAgICAgICAgLy8gZGVjbGFyYXRpb25zIGFyZSBwcm9jZXNzZWRcbiAgICAgICAgICBhdHRyTGlzdC5wdXNoKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB9IC8qKiBlbmQgaWYgKG1heWJlTnMpICovXG5cbiAgICAgICAgLy8gaGFuZGxlIGF0dHJpYnV0ZXMgb24gZWxlbWVudCB3aXRob3V0XG4gICAgICAgIC8vIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnNcbiAgICAgICAgdyA9IG5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAodyA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgIGlmICghKG5zTmFtZSA9IG5zTWF0cml4W25hbWUuc3Vic3RyaW5nKDAsIHcpXSkpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgobmFtZS5zdWJzdHJpbmcoMCwgdykpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBkZWZhdWx0QWxpYXMgPT09IG5zTmFtZVxuICAgICAgICAgID8gbmFtZS5zdWJzdHIodyArIDEpXG4gICAgICAgICAgOiBuc05hbWUgKyBuYW1lLnN1YnN0cih3KTtcblxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgaWYgKG5hbWUgPT09IFhTSV9UWVBFKSB7XG4gICAgICAgICAgdyA9IHZhbHVlLmluZGV4T2YoJzonKTtcblxuICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgbnNOYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIHcpO1xuXG4gICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCBwcmVmaXhlcywgaS5lLiB4czpTdHJpbmcgZ3JhY2VmdWxseVxuICAgICAgICAgICAgbnNOYW1lID0gbnNNYXRyaXhbbnNOYW1lXSB8fCBuc05hbWU7XG4gICAgICAgICAgICB2YWx1ZSA9IG5zTmFtZSArIHZhbHVlLnN1YnN0cmluZyh3KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0QWxpYXMgKyAnOicgKyB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcblxuICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIGhhbmRsZSBkZWZlcnJlZCwgcG9zc2libHkgbmFtZXNwYWNlZCBhdHRyaWJ1dGVzXG4gICAgICBpZiAobWF5YmVOUykge1xuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjYXB0dXJlZCBhdHRyaWJ1dGVzXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBhdHRyTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblxuICAgICAgICAgIG5hbWUgPSBhdHRyTGlzdFtpKytdO1xuICAgICAgICAgIHZhbHVlID0gYXR0ckxpc3RbaV07XG5cbiAgICAgICAgICB3ID0gbmFtZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgICAgICBpZiAodyAhPT0gLTEpIHtcblxuICAgICAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcobWlzc2luZ05hbWVzcGFjZUZvclByZWZpeChuYW1lLnN1YnN0cmluZygwLCB3KSkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZSA9IGRlZmF1bHRBbGlhcyA9PT0gbnNOYW1lXG4gICAgICAgICAgICAgID8gbmFtZS5zdWJzdHIodyArIDEpXG4gICAgICAgICAgICAgIDogbnNOYW1lICsgbmFtZS5zdWJzdHIodyk7XG5cbiAgICAgICAgICAgIC8vIGVuZDogbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG5cbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBYU0lfVFlQRSkge1xuICAgICAgICAgICAgICB3ID0gdmFsdWUuaW5kZXhPZignOicpO1xuXG4gICAgICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG5zTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCB3KTtcblxuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBkZWZhdWx0IHByZWZpeGVzLCBpLmUuIHhzOlN0cmluZyBncmFjZWZ1bGx5XG4gICAgICAgICAgICAgICAgbnNOYW1lID0gbnNNYXRyaXhbbnNOYW1lXSB8fCBuc05hbWU7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBuc05hbWUgKyB2YWx1ZS5zdWJzdHJpbmcodyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0QWxpYXMgKyAnOicgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgY2FwdHVyZWQgYXR0cmlidXRlc1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FjaGVkQXR0cnMgPSBhdHRycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0IHRoZSBwYXJzZSBjb250ZXh0IHsgbGluZSwgY29sdW1uLCBwYXJ0IH1cbiAgICAgKiBmcm9tIHRoZSBjdXJyZW50IHBhcnNlciBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gcGFyc2UgY29udGV4dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFBhcnNlQ29udGV4dCgpIHtcbiAgICAgIHZhciBzcGxpdHNSZSA9IC8oXFxyXFxufFxccnxcXG4pL2c7XG5cbiAgICAgIHZhciBsaW5lID0gMDtcbiAgICAgIHZhciBjb2x1bW4gPSAwO1xuICAgICAgdmFyIHN0YXJ0T2ZMaW5lID0gMDtcbiAgICAgIHZhciBlbmRPZkxpbmUgPSBqO1xuICAgICAgdmFyIG1hdGNoO1xuICAgICAgdmFyIGRhdGE7XG5cbiAgICAgIHdoaWxlIChpID49IHN0YXJ0T2ZMaW5lKSB7XG5cbiAgICAgICAgbWF0Y2ggPSBzcGxpdHNSZS5leGVjKHhtbCk7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kIG9mIGxpbmUgPSAoYnJlYWsgaWR4ICsgYnJlYWsgY2hhcnMpXG4gICAgICAgIGVuZE9mTGluZSA9IG1hdGNoWzBdLmxlbmd0aCArIG1hdGNoLmluZGV4O1xuXG4gICAgICAgIGlmIChlbmRPZkxpbmUgPiBpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIHRvIG5leHQgbGluZVxuICAgICAgICBsaW5lICs9IDE7XG5cbiAgICAgICAgc3RhcnRPZkxpbmUgPSBlbmRPZkxpbmU7XG4gICAgICB9XG5cbiAgICAgIC8vIEVPRiBlcnJvcnNcbiAgICAgIGlmIChpID09IC0xKSB7XG4gICAgICAgIGNvbHVtbiA9IGVuZE9mTGluZTtcbiAgICAgICAgZGF0YSA9IHhtbC5zdWJzdHJpbmcoaik7XG4gICAgICB9IGVsc2VcblxuICAgICAgLy8gc3RhcnQgZXJyb3JzXG4gICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICBkYXRhID0geG1sLnN1YnN0cmluZyhqLCBpKTtcbiAgICAgIH1cblxuICAgICAgLy8gb3RoZXIgZXJyb3JzXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29sdW1uID0gaSAtIHN0YXJ0T2ZMaW5lO1xuICAgICAgICBkYXRhID0gKGogPT0gLTEgPyB4bWwuc3Vic3RyaW5nKGkpIDogeG1sLnN1YnN0cmluZyhpLCBqICsgMSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGF0YSc6IGRhdGEsXG4gICAgICAgICdsaW5lJzogbGluZSxcbiAgICAgICAgJ2NvbHVtbic6IGNvbHVtblxuICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0ID0gZ2V0UGFyc2VDb250ZXh0O1xuXG5cbiAgICBpZiAocHJveHkpIHtcbiAgICAgIGVsZW1lbnRQcm94eSA9IE9iamVjdC5jcmVhdGUoe30sIHtcbiAgICAgICAgJ25hbWUnOiBnZXR0ZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ29yaWdpbmFsTmFtZSc6IGdldHRlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gX2VsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ2F0dHJzJzogZ2V0dGVyKGdldEF0dHJzKSxcbiAgICAgICAgJ25zJzogZ2V0dGVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuc01hdHJpeDtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFjdHVhbCBwYXJzZSBsb2dpY1xuICAgIHdoaWxlIChqICE9PSAtMSkge1xuXG4gICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaikgPT09IDYwKSB7IC8vIFwiPFwiXG4gICAgICAgIGkgPSBqO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSA9IHhtbC5pbmRleE9mKCc8Jywgaik7XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIGVuZFxuICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBmaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignbWlzc2luZyBzdGFydCB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqIDwgeG1sLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh4bWwuc3Vic3RyaW5nKGopLnRyaW0oKSkge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZyhOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSB0ZXh0XG4gICAgICBpZiAoaiAhPT0gaSkge1xuXG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9uVGV4dCkge1xuICAgICAgICAgICAgb25UZXh0KHhtbC5zdWJzdHJpbmcoaiwgaSksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh4bWwuc3Vic3RyaW5nKGosIGkpLnRyaW0oKSkge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZyhOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3ID0geG1sLmNoYXJDb2RlQXQoaSsxKTtcblxuICAgICAgLy8gcGFyc2UgY29tbWVudHMgKyBDREFUQVxuICAgICAgaWYgKHcgPT09IDMzKSB7IC8vIFwiIVwiXG4gICAgICAgIHEgPSB4bWwuY2hhckNvZGVBdChpKzIpO1xuXG4gICAgICAgIC8vIENEQVRBIHNlY3Rpb25cbiAgICAgICAgaWYgKHEgPT09IDkxICYmIHhtbC5zdWJzdHIoaSArIDMsIDYpID09PSAnQ0RBVEFbJykgeyAvLyA5MSA9PSBcIltcIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignXV0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNkYXRhJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9uQ0RBVEEpIHtcbiAgICAgICAgICAgIG9uQ0RBVEEoeG1sLnN1YnN0cmluZyhpICsgOSwgaiksIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaiArPSAzO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29tbWVudFxuICAgICAgICBpZiAocSA9PT0gNDUgJiYgeG1sLmNoYXJDb2RlQXQoaSArIDMpID09PSA0NSkgeyAvLyA0NSA9PSBcIi1cIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignLS0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNvbW1lbnQnKTtcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIGlmIChvbkNvbW1lbnQpIHtcbiAgICAgICAgICAgIG9uQ29tbWVudCh4bWwuc3Vic3RyaW5nKGkgKyA0LCBqKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaiArPSAzO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIHF1ZXN0aW9uIDw/IC4uLiA/PlxuICAgICAgaWYgKHcgPT09IDYzKSB7IC8vIFwiP1wiXG4gICAgICAgIGogPSB4bWwuaW5kZXhPZignPz4nLCBpKTtcbiAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCBxdWVzdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9uUXVlc3Rpb24pIHtcbiAgICAgICAgICBvblF1ZXN0aW9uKHhtbC5zdWJzdHJpbmcoaSwgaiArIDIpLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCBtYXRjaGluZyBjbG9zaW5nIHRhZyBmb3IgYXR0ZW50aW9uIG9yIHN0YW5kYXJkIHRhZ3NcbiAgICAgIC8vIGZvciB0aGF0IHdlIG11c3Qgc2tpcCB0aHJvdWdoIGF0dHJpYnV0ZSB2YWx1ZXNcbiAgICAgIC8vIChlbmNsb3NlZCBpbiBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcylcbiAgICAgIGZvciAoeCA9IGkgKyAxOyA7IHgrKykge1xuICAgICAgICB2ID0geG1sLmNoYXJDb2RlQXQoeCk7XG4gICAgICAgIGlmIChpc05hTih2KSkge1xuICAgICAgICAgIGogPSAtMTtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIHRhZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWzEwXSBBdHRWYWx1ZSA6Oj0gJ1wiJyAoW148JlwiXSB8IFJlZmVyZW5jZSkqICdcIicgfCBcIidcIiAoW148JiddIHwgUmVmZXJlbmNlKSogXCInXCJcbiAgICAgICAgLy8gc2tpcHMgdGhlIHF1b3RlZCBzdHJpbmdcbiAgICAgICAgLy8gKGRvdWJsZSBxdW90ZXMpIGRvZXMgbm90IGFwcGVhciBpbiBhIGxpdGVyYWwgZW5jbG9zZWQgYnkgKGRvdWJsZSBxdW90ZXMpXG4gICAgICAgIC8vIChzaW5nbGUgcXVvdGUpIGRvZXMgbm90IGFwcGVhciBpbiBhIGxpdGVyYWwgZW5jbG9zZWQgYnkgKHNpbmdsZSBxdW90ZSlcbiAgICAgICAgaWYgKHYgPT09IDM0KSB7IC8vICAnXCInXG4gICAgICAgICAgcSA9IHhtbC5pbmRleE9mKCdcIicsIHggKyAxKTtcbiAgICAgICAgICB4ID0gcSAhPT0gLTEgPyBxIDogeDtcbiAgICAgICAgfSBlbHNlIGlmICh2ID09PSAzOSkgeyAvLyBcIidcIlxuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZihcIidcIiwgeCArIDEpO1xuICAgICAgICAgIHggPSBxICE9PSAtMSA/IHEgOiB4O1xuICAgICAgICB9IGVsc2UgaWYgKHYgPT09IDYyKSB7IC8vICc+J1xuICAgICAgICAgIGogPSB4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgLy8gcGFyc2UgYXR0ZW50aW9uIDwhIC4uLj5cbiAgICAgIC8vIHByZXZpb3VzbHkgY29tbWVudCBhbmQgQ0RBVEEgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkXG4gICAgICBpZiAodyA9PT0gMzMpIHsgLy8gXCIhXCJcblxuICAgICAgICBpZiAob25BdHRlbnRpb24pIHtcbiAgICAgICAgICBvbkF0dGVudGlvbih4bWwuc3Vic3RyaW5nKGksIGogKyAxKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBqICs9IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkb24ndCBwcm9jZXNzIGF0dHJpYnV0ZXM7XG4gICAgICAvLyB0aGVyZSBhcmUgbm9uZVxuICAgICAgY2FjaGVkQXR0cnMgPSB7fTtcblxuICAgICAgLy8gaWYgKHhtbC5jaGFyQ29kZUF0KGkrMSkgPT09IDQ3KSB7IC8vIDwvLi4uXG4gICAgICBpZiAodyA9PT0gNDcpIHsgLy8gPC8uLi5cbiAgICAgICAgdGFnU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgdGFnRW5kID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIW5vZGVTdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3Npbmcgb3BlbiB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZlcmlmeSBvcGVuIDwtPiBjbG9zZSB0YWcgbWF0Y2hcbiAgICAgICAgeCA9IGVsZW1lbnROYW1lID0gbm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICBxID0gaSArIDIgKyB4Lmxlbmd0aDtcblxuICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhpICsgMiwgcSkgIT09IHgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2Nsb3NpbmcgdGFnIG1pc21hdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2ZXJpZnkgY2hhcnMgaW4gY2xvc2UgdGFnXG4gICAgICAgIGZvciAoOyBxIDwgajsgcSsrKSB7XG4gICAgICAgICAgdyA9IHhtbC5jaGFyQ29kZUF0KHEpO1xuXG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3ID4gOCAmJiB3IDwgMTQpKSB7IC8vIFxcZlxcblxcclxcdFxcdiBzcGFjZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdjbG9zZSB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaiAtIDEpID09PSA0NykgeyAvLyAuLi4vPlxuICAgICAgICAgIHggPSBlbGVtZW50TmFtZSA9IHhtbC5zdWJzdHJpbmcoaSArIDEsIGogLSAxKTtcblxuICAgICAgICAgIHRhZ1N0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICB0YWdFbmQgPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeCA9IGVsZW1lbnROYW1lID0geG1sLnN1YnN0cmluZyhpICsgMSwgaik7XG5cbiAgICAgICAgICB0YWdTdGFydCA9IHRydWU7XG4gICAgICAgICAgdGFnRW5kID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh3ID4gOTYgJiYgdyA8IDEyMyB8fCB3ID4gNjQgJiYgdyA8IDkxIHx8IHcgPT09IDk1IHx8IHcgPT09IDU4KSkgeyAvLyBjaGFyIDk1XCJfXCIgNThcIjpcIlxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignaWxsZWdhbCBmaXJzdCBjaGFyIG5vZGVOYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHEgPSAxLCB5ID0geC5sZW5ndGg7IHEgPCB5OyBxKyspIHtcbiAgICAgICAgICB3ID0geC5jaGFyQ29kZUF0KHEpO1xuXG4gICAgICAgICAgaWYgKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA+IDQ3ICYmIHcgPCA1OSB8fCB3ID09PSA0NSB8fCB3ID09PSA5NSB8fCB3ID09IDQ2KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gXFxmXFxuXFxyXFx0XFx2IHNwYWNlXG4gICAgICAgICAgICBlbGVtZW50TmFtZSA9IHguc3Vic3RyaW5nKDAsIHEpO1xuXG4gICAgICAgICAgICAvLyBtYXliZSB0aGVyZSBhcmUgYXR0cmlidXRlc1xuICAgICAgICAgICAgY2FjaGVkQXR0cnMgPSBudWxsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdpbnZhbGlkIG5vZGVOYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhZ0VuZCkge1xuICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGVsZW1lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcblxuICAgICAgICBfbnNNYXRyaXggPSBuc01hdHJpeDtcblxuICAgICAgICBpZiAodGFnU3RhcnQpIHtcblxuICAgICAgICAgIC8vIHJlbWVtYmVyIG9sZCBuYW1lc3BhY2VcbiAgICAgICAgICAvLyB1bmxlc3Mgd2UncmUgc2VsZi1jbG9zaW5nXG4gICAgICAgICAgaWYgKCF0YWdFbmQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4U3RhY2sucHVzaChfbnNNYXRyaXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjYWNoZWRBdHRycyA9PT0gbnVsbCkge1xuXG4gICAgICAgICAgICAvLyBxdWljayBjaGVjaywgd2hldGhlciB0aGVyZSBtYXkgYmUgbmFtZXNwYWNlXG4gICAgICAgICAgICAvLyBkZWNsYXJhdGlvbnMgb24gdGhlIG5vZGU7IGlmIHRoYXQgaXMgdGhlIGNhc2VcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZWFnZXJseSBwYXJzZSB0aGUgbm9kZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpZiAoKG1heWJlTlMgPSB4LmluZGV4T2YoJ3htbG5zJywgcSkgIT09IC0xKSkge1xuICAgICAgICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuXG4gICAgICAgICAgICAgIGdldEF0dHJzKCk7XG5cbiAgICAgICAgICAgICAgbWF5YmVOUyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lO1xuXG4gICAgICAgIHcgPSBlbGVtZW50TmFtZS5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgIHhtbG5zID0gbnNNYXRyaXhbZWxlbWVudE5hbWUuc3Vic3RyaW5nKDAsIHcpXTtcblxuICAgICAgICAgIC8vIHByZWZpeCBnaXZlbjsgbmFtZXNwYWNlIG11c3QgZXhpc3RcbiAgICAgICAgICBpZiAoIXhtbG5zKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3NpbmcgbmFtZXNwYWNlIG9uIDwnICsgX2VsZW1lbnROYW1lICsgJz4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lLnN1YnN0cih3ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeG1sbnMgPSBuc01hdHJpeFsneG1sbnMnXTtcblxuICAgICAgICAgIC8vIGlmIG5vIGRlZmF1bHQgbmFtZXNwYWNlIGlzIGRlZmluZWQsXG4gICAgICAgICAgLy8gd2UnbGwgaW1wb3J0IHRoZSBlbGVtZW50IGFzIGFub255bW91cy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIGl0IGlzIHVwIHRvIHVzZXJzIHRvIGNvcnJlY3QgdGhhdCB0byB0aGUgZG9jdW1lbnQgZGVmaW5lZFxuICAgICAgICAgIC8vIHRhcmdldE5hbWVzcGFjZSwgb3Igd2hhdGV2ZXIgdGhlaXIgdW5kZXJzYW5kaW5nIG9mIHRoZVxuICAgICAgICAgIC8vIFhNTCBzcGVjIG1hbmRhdGVzLlxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRqdXN0IG5hbWVzcGFjZSBwcmVmaXhzIGFzIGNvbmZpZ3VyZWRcbiAgICAgICAgaWYgKHhtbG5zKSB7XG4gICAgICAgICAgZWxlbWVudE5hbWUgPSB4bWxucyArICc6JyArIGVsZW1lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKHRhZ1N0YXJ0KSB7XG4gICAgICAgIGF0dHJzU3RhcnQgPSBxO1xuICAgICAgICBhdHRyc1N0cmluZyA9IHg7XG5cbiAgICAgICAgaWYgKG9uT3BlblRhZykge1xuICAgICAgICAgIGlmIChwcm94eSkge1xuICAgICAgICAgICAgb25PcGVuVGFnKGVsZW1lbnRQcm94eSwgZGVjb2RlRW50aXRpZXMsIHRhZ0VuZCwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uT3BlblRhZyhlbGVtZW50TmFtZSwgZ2V0QXR0cnMsIGRlY29kZUVudGl0aWVzLCB0YWdFbmQsIGdldENvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAodGFnRW5kKSB7XG5cbiAgICAgICAgaWYgKG9uQ2xvc2VUYWcpIHtcbiAgICAgICAgICBvbkNsb3NlVGFnKHByb3h5ID8gZWxlbWVudFByb3h5IDogZWxlbWVudE5hbWUsIGRlY29kZUVudGl0aWVzLCB0YWdTdGFydCwgZ2V0Q29udGV4dCk7XG5cbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzdG9yZSBvbGQgbmFtZXNwYWNlXG4gICAgICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgICAgIGlmICghdGFnU3RhcnQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4ID0gbnNNYXRyaXhTdGFjay5wb3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbnNNYXRyaXggPSBfbnNNYXRyaXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGogKz0gMTtcbiAgICB9XG4gIH0gLyoqIGVuZCBwYXJzZSAqL1xuXG59XG5cbmV4cG9ydCB7IFBhcnNlciwgZGVjb2RlRW50aXRpZXMgYXMgZGVjb2RlIH07XG4iLCJpbXBvcnQge1xuICBkb21pZnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgbWF0Y2hlcyBhcyBkb21NYXRjaGVzLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsLFxuICBldmVudCBhcyBkb21FdmVudCxcbiAgYXR0ciBhcyBkb21BdHRyXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBjcmVhdGVFbWl0dGVyIGZyb20gJ21pdHQnO1xuXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBzY3JvbGxTeW1ib2xMZWZ0OiAn4oC5JyxcbiAgc2Nyb2xsU3ltYm9sUmlnaHQ6ICfigLonXG59O1xuXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgYWRkcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBzY3JvbGwgb3ZlciBhIGxpc3Qgb2YgdGFicy5cbiAqXG4gKiBJdCBhZGRzIHNjcm9sbCBidXR0b25zIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlIG9mIHRoZSB0YWJzIGNvbnRhaW5lclxuICogaWYgbm90IGFsbCB0YWJzIGFyZSB2aXNpYmxlLiBJdCBhbHNvIGFkZHMgYSBtb3VzZSB3aGVlbCBsaXN0ZW5lciBvbiB0aGVcbiAqIGNvbnRhaW5lci5cbiAqXG4gKiBJZiBlaXRoZXIgYSBidXR0b24gaXMgY2xpY2tlZCBvciB0aGUgbW91c2Ugd2hlZWwgaXMgdXNlZCBvdmVyIHRoZSB0YWJzLFxuICogYSAnc2Nyb2xsJyBldmVudCBpcyBiZWluZyBmaXJlZC4gVGhpcyBldmVudCBjb250YWlucyB0aGUgbm9kZSBlbGVtZW50c1xuICogb2YgdGhlIG5ldyBhbmQgb2xkIGFjdGl2ZSB0YWIsIGFuZCB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSB0YWIgaGFzXG4gKiBjaGFuZ2VkIHJlbGF0aXZlIHRvIHRoZSBvbGQgYWN0aXZlIHRhYi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqICgxKSBwcm92aWRlIGEgdGFicy1jb250YWluZXI6XG4gKlxuICogdmFyICRlbCA9IChcbiAqICAgPGRpdj5cbiAqICAgICA8IS0tIGJ1dHRvbiBhZGRlZCBieSBzY3JvbGxUYWJzIC0tPlxuICogICAgIDxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uIHNjcm9sbC10YWJzLWxlZnRcIj48L3NwYW4+XG4gKiAgICAgPHVsIGNsYXNzPVwibXktdGFicy1jb250YWluZXJcIj5cbiAqICAgICAgIDxsaSBjbGFzcz1cIm15LXRhYiBpLWFtLWFjdGl2ZVwiPjwvbGk+XG4gKiAgICAgICA8bGkgY2xhc3M9XCJteS10YWJcIj48L2xpPlxuICogICAgICAgPGxpIGNsYXNzPVwibXktdGFiIGlnbm9yZS1tZVwiPjwvbGk+XG4gKiAgICAgPC91bD5cbiAqICAgICA8IS0tIGJ1dHRvbiBhZGRlZCBieSBzY3JvbGxUYWJzIC0tPlxuICogICAgIDxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uIHNjcm9sbC10YWJzLXJpZ2h0XCI+PC9zcGFuPlxuICogICA8L2Rpdj5cbiAqICk7XG4gKlxuICpcbiAqICgyKSBpbml0aWFsaXplIHNjcm9sbFRhYnM6XG4gKlxuICogIHZhciBzY3JvbGxlciA9IHNjcm9sbFRhYnModGFiQmFyTm9kZSwge1xuICogICAgc2VsZWN0b3JzOiB7XG4gKiAgICAgIHRhYnNDb250YWluZXI6ICcubXktdGFicy1jb250YWluZXInLFxuICogICAgICB0YWI6ICcubXktdGFiJyxcbiAqICAgICAgaWdub3JlOiAnLmlnbm9yZS1tZScsXG4gKiAgICAgIGFjdGl2ZTogJy5pLWFtLWFjdGl2ZSdcbiAqICAgIH1cbiAqICB9KTtcbiAqXG4gKlxuICogKDMpIGxpc3RlbiB0byB0aGUgc2Nyb2xsIGV2ZW50OlxuICpcbiAqIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCBmdW5jdGlvbihuZXdBY3RpdmVOb2RlLCBvbGRBY3RpdmVOb2RlLCBkaXJlY3Rpb24pIHtcbiAqICAgLy8gZGlyZWN0aW9uIGlzIGFueSBvZiAoLTE6IGxlZnQsIDE6IHJpZ2h0KVxuICogICAvLyBhY3RpdmF0ZSB0aGUgbmV3IGFjdGl2ZSB0YWJcbiAqIH0pO1xuICpcbiAqXG4gKiAoNCkgdXBkYXRlIHRoZSBzY3JvbGxlciBpZiB0YWJzIGNoYW5nZSBhbmQgb3IgdGhlIHRhYiBjb250YWluZXIgcmVzaXplczpcbiAqXG4gKiBzY3JvbGxlci51cGRhdGUoKTtcbiAqXG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gZWxcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zLnNlbGVjdG9yc1xuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy50YWJzQ29udGFpbmVyIHRoZSBjb250YWluZXIgYWxsIHRhYnMgYXJlIGNvbnRhaW5lZCBpblxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy50YWIgYSBzaW5nbGUgdGFiIGluc2lkZSB0aGUgdGFiIGNvbnRhaW5lclxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy5pZ25vcmUgdGFicyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGR1cmluZyBzY3JvbGwgbGVmdC9yaWdodFxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy5hY3RpdmUgc2VsZWN0b3IgZm9yIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAqIEBwYXJhbSAge1N0cmluZ30gW29wdGlvbnMuc2Nyb2xsU3ltYm9sTGVmdF1cbiAqIEBwYXJhbSAge1N0cmluZ30gW29wdGlvbnMuc2Nyb2xsU3ltYm9sUmlnaHRdXG4gKi9cbmZ1bmN0aW9uIFNjcm9sbFRhYnMoJGVsLCBvcHRpb25zKSB7XG5cbiAgLy8gd2UgYXJlIGFuIGV2ZW50IGVtaXR0ZXJcbiAgYXNzaWduKHRoaXMsIGNyZWF0ZUVtaXR0ZXIoKSk7XG5cbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IGFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgdGhpcy5jb250YWluZXIgPSAkZWw7XG5cbiAgdGhpcy5fY3JlYXRlU2Nyb2xsQnV0dG9ucygkZWwsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX2JpbmRFdmVudHMoJGVsKTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhIGNsaWNrYWJsZSBzY3JvbGwgYnV0dG9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmNsYXNzTmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMubGFiZWxcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLmRpcmVjdGlvblxuICpcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSBjcmVhdGVkIHNjcm9sbCBidXR0b24gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgb3B0aW9ucykge1xuXG4gIHZhciBjbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZSxcbiAgICAgIGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuXG5cbiAgdmFyIGJ1dHRvbiA9IGRvbVF1ZXJ5KCcuJyArIGNsYXNzTmFtZSwgcGFyZW50Tm9kZSk7XG5cbiAgaWYgKCFidXR0b24pIHtcbiAgICBidXR0b24gPSBkb21pZnkoJzxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uICcgKyBjbGFzc05hbWUgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGFiZWwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3Bhbj4nKTtcblxuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJ1dHRvbiwgcGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdKTtcbiAgfVxuXG4gIGRvbUF0dHIoYnV0dG9uLCAnZGF0YS1kaXJlY3Rpb24nLCBkaXJlY3Rpb24pO1xuXG4gIHJldHVybiBidXR0b247XG59O1xuXG4vKipcbiAqIENyZWF0ZSBib3RoIHNjcm9sbCBidXR0b25zXG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gcGFyZW50Tm9kZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG9wdGlvbnMuc2Nyb2xsU3ltYm9sTGVmdFxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNjcm9sbFN5bWJvbFJpZ2h0XG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLl9jcmVhdGVTY3JvbGxCdXR0b25zID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgb3B0aW9ucykge1xuXG4gIC8vIENyZWF0ZSBhIGJ1dHRvbiB0aGF0IHNjcm9sbHMgdG8gdGhlIHRhYiBsZWZ0IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYlxuICB0aGlzLl9jcmVhdGVCdXR0b24ocGFyZW50Tm9kZSwge1xuICAgIGNsYXNzTmFtZTogJ3Njcm9sbC10YWJzLWxlZnQnLFxuICAgIGxhYmVsOiBvcHRpb25zLnNjcm9sbFN5bWJvbExlZnQsXG4gICAgZGlyZWN0aW9uOiAtMVxuICB9KTtcblxuICAvLyBDcmVhdGUgYSBidXR0b24gdGhhdCBzY3JvbGxzIHRvIHRoZSB0YWIgcmlnaHQgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiXG4gIHRoaXMuX2NyZWF0ZUJ1dHRvbihwYXJlbnROb2RlLCB7XG4gICAgY2xhc3NOYW1lOiAnc2Nyb2xsLXRhYnMtcmlnaHQnLFxuICAgIGxhYmVsOiBvcHRpb25zLnNjcm9sbFN5bWJvbFJpZ2h0LFxuICAgIGRpcmVjdGlvbjogMVxuICB9KTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5nZXRBY3RpdmVUYWJOb2RlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkb21RdWVyeSh0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLmFjdGl2ZSwgdGhpcy5jb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgY29udGFpbmVyIGFsbCB0YWJzIGFyZSBjb250YWluZWQgaW5cbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5nZXRUYWJzQ29udGFpbmVyTm9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZG9tUXVlcnkodGhpcy5vcHRpb25zLnNlbGVjdG9ycy50YWJzQ29udGFpbmVyLCB0aGlzLmNvbnRhaW5lcik7XG59O1xuXG5cbi8qKlxuICogR2V0IGFsbCB0YWJzICh2aXNpYmxlIGFuZCBpbnZpc2libGUgb25lcylcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxET01FbGVtZW50Pn1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0QWxsVGFiTm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5QWxsKHRoaXMub3B0aW9ucy5zZWxlY3RvcnMudGFiLCB0aGlzLmNvbnRhaW5lcik7XG59O1xuXG5cbi8qKlxuICogR2V0cyBhbGwgdGFicyB0aGF0IGRvbid0IGhhdmUgdGhlIGlnbm9yZSBjbGFzcyBzZXRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxET01FbGVtZW50Pn1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0VmlzaWJsZVRhYnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGFsbFRhYnMgPSB0aGlzLmdldEFsbFRhYk5vZGVzKCk7XG5cbiAgdmFyIGlnbm9yZSA9IHRoaXMub3B0aW9ucy5zZWxlY3RvcnMuaWdub3JlO1xuXG4gIHJldHVybiBmaWx0ZXIoYWxsVGFicywgZnVuY3Rpb24odGFiTm9kZSkge1xuICAgIHJldHVybiAhZG9tTWF0Y2hlcyh0YWJOb2RlLCBpZ25vcmUpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBHZXQgYSB0YWIgcmVsYXRpdmUgdG8gYSByZWZlcmVuY2UgdGFiLlxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IHJlZmVyZW5jZVRhYk5vZGVcbiAqIEBwYXJhbSAge051bWJlcn0gbiBnZXRzIHRoZSBudGggdGFiIG5leHQgb3IgcHJldmlvdXMgdG8gdGhlIHJlZmVyZW5jZSB0YWJcbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICpcbiAqIEBleGFtcGxlOlxuICogVmlzaWJsZSB0YWJzOiBbIEEgfCBCIHwgQyB8IEQgfCBFIF1cbiAqIEFzc3VtZSB0YWIgJ0MnIGlzIHRoZSByZWZlcmVuY2UgdGFiOlxuICogSWYgZGlyZWN0aW9uID09PSAtMSwgaXQgcmV0dXJucyB0YWIgJ0InLFxuICogaWYgZGlyZWN0aW9uID09PSAgMiwgaXQgcmV0dXJucyB0YWIgJ0UnXG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLmdldEFkamFjZW50VGFiID0gZnVuY3Rpb24ocmVmZXJlbmNlVGFiTm9kZSwgbikge1xuICB2YXIgdmlzaWJsZVRhYnMgPSB0aGlzLmdldFZpc2libGVUYWJzKCk7XG5cbiAgdmFyIGluZGV4ID0gdmlzaWJsZVRhYnMuaW5kZXhPZihyZWZlcmVuY2VUYWJOb2RlKTtcblxuICByZXR1cm4gdmlzaWJsZVRhYnNbaW5kZXggKyBuXTtcbn07XG5cblNjcm9sbFRhYnMucHJvdG90eXBlLl9iaW5kRXZlbnRzID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLl9iaW5kV2hlZWxFdmVudChub2RlKTtcbiAgdGhpcy5fYmluZFRhYkNsaWNrRXZlbnRzKG5vZGUpO1xuICB0aGlzLl9iaW5kU2Nyb2xsQnV0dG9uRXZlbnRzKG5vZGUpO1xufTtcblxuLyoqXG4gKiAgQmluZCBhIGNsaWNrIGxpc3RlbmVyIHRvIGEgRE9NIG5vZGUuXG4gKiAgTWFrZSBzdXJlIGEgdGFiIGxpbmsgaXMgZW50aXJlbHkgdmlzaWJsZSBhZnRlciBvbkNsaWNrLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fYmluZFRhYkNsaWNrRXZlbnRzID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgc2VsZWN0b3IgPSB0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLnRhYjtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChub2RlLCBzZWxlY3RvciwgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgIHNlbGYuc2Nyb2xsVG9UYWJOb2RlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0KTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogQmluZCB0aGUgd2hlZWwgZXZlbnQgbGlzdGVuZXIgdG8gYSBET00gbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fYmluZFdoZWVsRXZlbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkb21FdmVudC5iaW5kKG5vZGUsICd3aGVlbCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIHNjcm9sbCBkaXJlY3Rpb24gKC0xOiBsZWZ0LCAxOiByaWdodClcbiAgICB2YXIgZGlyZWN0aW9uID0gTWF0aC5zaWduKGUuZGVsdGFZKTtcblxuICAgIHZhciBvbGRBY3RpdmVUYWIgPSBzZWxmLmdldEFjdGl2ZVRhYk5vZGUoKTtcblxuICAgIHZhciBuZXdBY3RpdmVUYWIgPSBzZWxmLmdldEFkamFjZW50VGFiKG9sZEFjdGl2ZVRhYiwgZGlyZWN0aW9uKTtcblxuICAgIGlmIChuZXdBY3RpdmVUYWIpIHtcbiAgICAgIHNlbGYuc2Nyb2xsVG9UYWJOb2RlKG5ld0FjdGl2ZVRhYik7XG4gICAgICBzZWxmLmVtaXQoJ3Njcm9sbCcsIG5ld0FjdGl2ZVRhYiwgb2xkQWN0aXZlVGFiLCBkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEJpbmQgc2Nyb2xsIGJ1dHRvbiBldmVudHMgdG8gYSBET00gbm9kZVxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IG5vZGVcbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuX2JpbmRTY3JvbGxCdXR0b25FdmVudHMgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQobm9kZSwgJy5zY3JvbGwtdGFicy1idXR0b24nLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgLy8gZGF0YS1kaXJlY3Rpb24gaXMgZWl0aGVyIC0xIG9yIDFcbiAgICB2YXIgZGlyZWN0aW9uID0gcGFyc2VJbnQoZG9tQXR0cih0YXJnZXQsICdkYXRhLWRpcmVjdGlvbicpLCAxMCk7XG5cbiAgICB2YXIgb2xkQWN0aXZlVGFiTm9kZSA9IHNlbGYuZ2V0QWN0aXZlVGFiTm9kZSgpO1xuXG4gICAgdmFyIG5ld0FjdGl2ZVRhYk5vZGUgPSBzZWxmLmdldEFkamFjZW50VGFiKG9sZEFjdGl2ZVRhYk5vZGUsIGRpcmVjdGlvbik7XG5cbiAgICBpZiAobmV3QWN0aXZlVGFiTm9kZSkge1xuICAgICAgc2VsZi5zY3JvbGxUb1RhYk5vZGUobmV3QWN0aXZlVGFiTm9kZSk7XG4gICAgICBzZWxmLmVtaXQoJ3Njcm9sbCcsIG5ld0FjdGl2ZVRhYk5vZGUsIG9sZEFjdGl2ZVRhYk5vZGUsIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuKiBTY3JvbGwgdG8gYSB0YWIgaWYgaXQgaXMgbm90IGVudGlyZWx5IHZpc2libGVcbipcbiogQHBhcmFtICB7RE9NRWxlbWVudH0gdGFiTm9kZSB0YWIgbm9kZSB0byBzY3JvbGwgdG9cbiovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5zY3JvbGxUb1RhYk5vZGUgPSBmdW5jdGlvbih0YWJOb2RlKSB7XG4gIGlmICghdGFiTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YWJzQ29udGFpbmVyTm9kZSA9IHRhYk5vZGUucGFyZW50Tm9kZTtcblxuICB2YXIgdGFiV2lkdGggPSB0YWJOb2RlLm9mZnNldFdpZHRoLFxuICAgICAgdGFiT2Zmc2V0TGVmdCA9IHRhYk5vZGUub2Zmc2V0TGVmdCxcbiAgICAgIHRhYk9mZnNldFJpZ2h0ID0gdGFiT2Zmc2V0TGVmdCArIHRhYldpZHRoLFxuICAgICAgY29udGFpbmVyV2lkdGggPSB0YWJzQ29udGFpbmVyTm9kZS5vZmZzZXRXaWR0aCxcbiAgICAgIGNvbnRhaW5lclNjcm9sbExlZnQgPSB0YWJzQ29udGFpbmVyTm9kZS5zY3JvbGxMZWZ0O1xuXG4gIGlmIChjb250YWluZXJTY3JvbGxMZWZ0ID4gdGFiT2Zmc2V0TGVmdCkge1xuICAgIC8vIHNjcm9sbCB0byB0aGUgbGVmdCwgaWYgdGhlIHRhYiBpcyBvdmVyZmxvd2luZyBvbiB0aGUgbGVmdCBzaWRlXG4gICAgdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSBpZiAodGFiT2Zmc2V0UmlnaHQgPiBjb250YWluZXJXaWR0aCkge1xuICAgIC8vIHNjcm9sbCB0byB0aGUgcmlnaHQsIGlmIHRoZSB0YWIgaXMgb3ZlcmZsb3dpbmcgb24gdGhlIHJpZ2h0IHNpZGVcbiAgICB0YWJzQ29udGFpbmVyTm9kZS5zY3JvbGxMZWZ0ID0gdGFiT2Zmc2V0UmlnaHQgLSBjb250YWluZXJXaWR0aDtcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlYWN0IG9uIHRhYiBjaGFuZ2VzIGZyb20gb3V0c2lkZSAocmVzaXplL3Nob3cvaGlkZS9hZGQvcmVtb3ZlKSxcbiAqIHVwZGF0ZSBzY3JvbGwgYnV0dG9uIHZpc2liaWxpdHkuXG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciB0YWJzQ29udGFpbmVyTm9kZSA9IHRoaXMuZ2V0VGFic0NvbnRhaW5lck5vZGUoKTtcblxuICAvLyBjaGVjayBpZiB0YWJzIGZpdCBpbiBjb250YWluZXJcbiAgdmFyIG92ZXJmbG93ID0gdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsV2lkdGggPiB0YWJzQ29udGFpbmVyTm9kZS5vZmZzZXRXaWR0aDtcblxuICAvLyBUT0RPKG5pa2t1KTogZGlzdGluZ3Vpc2ggb3ZlcmZsb3cgbGVmdCAvIG92ZXJmbG93IHJpZ2h0P1xuICB2YXIgb3ZlcmZsb3dDbGFzcyA9ICdzY3JvbGwtdGFicy1vdmVyZmxvdyc7XG5cbiAgZG9tQ2xhc3Nlcyh0aGlzLmNvbnRhaW5lcikudG9nZ2xlKG92ZXJmbG93Q2xhc3MsIG92ZXJmbG93KTtcblxuICBpZiAob3ZlcmZsb3cpIHtcbiAgICAvLyBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYiBpcyBhbHdheXMgdmlzaWJsZVxuICAgIHRoaXMuc2Nyb2xsVG9UYWJOb2RlKHRoaXMuZ2V0QWN0aXZlVGFiTm9kZSgpKTtcbiAgfVxufTtcblxuXG4vLyBleHBvcnRzIC8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDcmVhdGUgYSBzY3JvbGxUYWJzIGluc3RhbmNlIG9uIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gJGVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm4ge1Njcm9sbFRhYnN9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZSgkZWwsIG9wdGlvbnMpIHtcblxuICB2YXIgc2Nyb2xsVGFicyA9IGdldCgkZWwpO1xuXG4gIGlmICghc2Nyb2xsVGFicykge1xuICAgIHNjcm9sbFRhYnMgPSBuZXcgU2Nyb2xsVGFicygkZWwsIG9wdGlvbnMpO1xuXG4gICAgJGVsLl9fc2Nyb2xsVGFicyA9IHNjcm9sbFRhYnM7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVGFicztcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgc2Nyb2xsVGFicyBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIHByZXZpb3VzbHlcbiAqIGluaXRpYWxpemVkIG9uIHRoZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gJGVsXG4gKiBAcmV0dXJuIHtTY3JvbGxUYWJzfVxuICovXG5mdW5jdGlvbiBnZXQoJGVsKSB7XG4gIHJldHVybiAkZWwuX19zY3JvbGxUYWJzO1xufVxuXG5jcmVhdGUuZ2V0ID0gZ2V0OyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNlbGVjdGlvbiB1cGRhdGUgZm9yIHRoZSBnaXZlblxuICogY3VycmVudCBhbmQgbmV3IGlucHV0IHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3VycmVudFNlbGVjdGlvbiBhcyB7c3RhcnQsIGVuZH1cbiAqIEBwYXJhbSB7U3RyaW5nfSBjdXJyZW50VmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBuZXdWYWx1ZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gbmV3U2VsZWN0aW9uIGFzIHtzdGFydCwgZW5kfVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVVcGRhdGUoY3VycmVudFNlbGVjdGlvbiwgY3VycmVudFZhbHVlLCBuZXdWYWx1ZSkge1xuXG4gIHZhciBjdXJyZW50Q3Vyc29yID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCxcbiAgICAgIG5ld0N1cnNvciA9IGN1cnJlbnRDdXJzb3IsXG4gICAgICBkaWZmID0gbmV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFZhbHVlLmxlbmd0aCxcbiAgICAgIGlkeDtcblxuICB2YXIgbGVuZ3RoRGVsdGEgPSBuZXdWYWx1ZS5sZW5ndGggLSBjdXJyZW50VmFsdWUubGVuZ3RoO1xuXG4gIHZhciBjdXJyZW50VGFpbCA9IGN1cnJlbnRWYWx1ZS5zdWJzdHJpbmcoY3VycmVudEN1cnNvcik7XG5cbiAgLy8gY2hlY2sgaWYgd2UgY2FuIHJlbW92ZSBjb21tb24gZW5kaW5nIGZyb20gdGhlIGVxdWF0aW9uXG4gIC8vIHRvIGJlIGFibGUgdG8gcHJvcGVybHkgZGV0ZWN0IGEgc2VsZWN0aW9uIGNoYW5nZSBmb3JcbiAgLy8gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4gIC8vXG4gIC8vICAqIChBQUFUVFR8VEYpID0+IChBQUFUfFRGKVxuICAvLyAgKiAoQUFBVHxURikgPT4gIChBQUFUVFR8VEYpXG4gIC8vXG4gIGlmIChuZXdWYWx1ZS5sYXN0SW5kZXhPZihjdXJyZW50VGFpbCkgPT09IG5ld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRUYWlsLmxlbmd0aCkge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5zdWJzdHJpbmcoMCwgY3VycmVudFZhbHVlLmxlbmd0aCAtIGN1cnJlbnRUYWlsLmxlbmd0aCk7XG4gICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5zdWJzdHJpbmcoMCwgbmV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFRhaWwubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGRpZmZcbiAgdmFyIGRpZmYgPSBjcmVhdGVEaWZmKGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpO1xuXG4gIGlmIChkaWZmKSB7XG4gICAgaWYgKGRpZmYudHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIG5ld0N1cnNvciA9IGRpZmYubmV3U3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0N1cnNvciA9IGRpZmYubmV3RW5kO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByYW5nZShuZXdDdXJzb3IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbGN1bGF0ZVVwZGF0ZTtcblxuXG5mdW5jdGlvbiBjcmVhdGVEaWZmKGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpIHtcblxuICB2YXIgaW5zZXJ0O1xuXG4gIHZhciBsX3N0ciwgbF9jaGFyLCBsX2lkeCA9IDAsXG4gICAgICBzX3N0ciwgc19jaGFyLCBzX2lkeCA9IDA7XG5cbiAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICBsX3N0ciA9IG5ld1ZhbHVlO1xuICAgIHNfc3RyID0gY3VycmVudFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGxfc3RyID0gY3VycmVudFZhbHVlO1xuICAgIHNfc3RyID0gbmV3VmFsdWU7XG4gIH1cblxuICAvLyBhc3N1bWUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBpbnNlcnQgLyByZW1vdmUgYW5kXG4gIC8vIGRldGVjdCB0aGF0IF9maXJzdF8gZWRpdCBvcGVyYXRpb24gb25seVxuICB3aGlsZSAobF9pZHggPCBsX3N0ci5sZW5ndGgpIHtcblxuICAgIGxfY2hhciA9IGxfc3RyLmNoYXJBdChsX2lkeCk7XG4gICAgc19jaGFyID0gc19zdHIuY2hhckF0KHNfaWR4KTtcblxuICAgIC8vIGNoYXJzIG5vIG5vdCBlcXVhbFxuICAgIGlmIChsX2NoYXIgIT09IHNfY2hhcikge1xuXG4gICAgICBpZiAoIWluc2VydCkge1xuICAgICAgICBpbnNlcnQgPSB7XG4gICAgICAgICAgbF9zdGFydDogbF9pZHgsXG4gICAgICAgICAgc19zdGFydDogc19pZHhcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbF9pZHgrKztcbiAgICB9XG5cbiAgICAvLyBjaGFycyBlcXVhbCAoYWdhaW4/KVxuICAgIGVsc2Uge1xuXG4gICAgICBpZiAoaW5zZXJ0ICYmICFpbnNlcnQuY29tcGxldGUpIHtcbiAgICAgICAgaW5zZXJ0LmxfZW5kID0gbF9pZHg7XG4gICAgICAgIGluc2VydC5zX2VuZCA9IHNfaWR4O1xuICAgICAgICBpbnNlcnQuY29tcGxldGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBzX2lkeCsrO1xuICAgICAgbF9pZHgrKztcbiAgICB9XG4gIH1cblxuICBpZiAoaW5zZXJ0ICYmICFpbnNlcnQuY29tcGxldGUpIHtcbiAgICBpbnNlcnQuY29tcGxldGUgPSB0cnVlO1xuICAgIGluc2VydC5zX2VuZCA9IHNfc3RyLmxlbmd0aDtcbiAgICBpbnNlcnQubF9lbmQgPSBsX3N0ci5sZW5ndGg7XG4gIH1cblxuICAvLyBubyBkaWZmXG4gIGlmICghaW5zZXJ0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3U3RhcnQ6IGluc2VydC5sX3N0YXJ0LFxuICAgICAgbmV3RW5kOiBpbnNlcnQubF9lbmQsXG4gICAgICB0eXBlOiAnYWRkJ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld1N0YXJ0OiBpbnNlcnQuc19zdGFydCxcbiAgICAgIG5ld0VuZDogaW5zZXJ0LnNfZW5kLFxuICAgICAgdHlwZTogbmV3VmFsdWUubGVuZ3RoIDwgY3VycmVudFZhbHVlLmxlbmd0aCA/ICdyZW1vdmUnIDogJ3JlcGxhY2UnXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFV0aWxpdHkgbWV0aG9kIGZvciBjcmVhdGluZyBhIG5ldyBzZWxlY3Rpb24gcmFuZ2Uge3N0YXJ0LCBlbmR9IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhcnRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbZW5kXVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gc2VsZWN0aW9uIHJhbmdlIGFzIHtzdGFydCwgZW5kfVxuICovXG5mdW5jdGlvbiByYW5nZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IGVuZFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5yYW5nZSA9IHJhbmdlO1xuXG5cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0ciwgcG9zaXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICBiZWZvcmU6IHN0ci5zdWJzdHJpbmcoMCwgcG9zaXRpb24pLFxuICAgIGFmdGVyOiBzdHIuc3Vic3RyaW5nKHBvc2l0aW9uKVxuICB9O1xufSIsImZ1bmN0aW9uIGVuc3VyZUltcG9ydGVkKGVsZW1lbnQsIHRhcmdldCkge1xuXG4gIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHRhcmdldC5vd25lckRvY3VtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIG1heSBmYWlsIG9uIHdlYmtpdFxuICAgICAgcmV0dXJuIHRhcmdldC5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudCwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogYXBwZW5kVG8gdXRpbGl0eVxuICovXG5cbi8qKlxuICogQXBwZW5kIGEgbm9kZSB0byBhIHRhcmdldCBlbGVtZW50IGFuZCByZXR1cm4gdGhlIGFwcGVuZGVkIG5vZGUuXG4gKlxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gdGFyZ2V0XG4gKlxuICogQHJldHVybiB7U1ZHRWxlbWVudH0gdGhlIGFwcGVuZGVkIG5vZGVcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG8oZWxlbWVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuYXBwZW5kQ2hpbGQoZW5zdXJlSW1wb3J0ZWQoZWxlbWVudCwgdGFyZ2V0KSk7XG59XG5cbi8qKlxuICogYXBwZW5kIHV0aWxpdHlcbiAqL1xuXG4vKipcbiAqIEFwcGVuZCBhIG5vZGUgdG8gYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBhcHBlbmQodGFyZ2V0LCBub2RlKSB7XG4gIGFwcGVuZFRvKG5vZGUsIHRhcmdldCk7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qKlxuICogYXR0cmlidXRlIGFjY2Vzc29yIHV0aWxpdHlcbiAqL1xuXG52YXIgTEVOR1RIX0FUVFIgPSAyO1xuXG52YXIgQ1NTX1BST1BFUlRJRVMgPSB7XG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAxLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAxLFxuICAnY2xpcCc6IDEsXG4gICdjbGlwLXBhdGgnOiAxLFxuICAnY2xpcC1ydWxlJzogMSxcbiAgJ2NvbG9yJzogMSxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAxLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogMSxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAxLFxuICAnY29sb3ItcmVuZGVyaW5nJzogMSxcbiAgJ2N1cnNvcic6IDEsXG4gICdkaXJlY3Rpb24nOiAxLFxuICAnZGlzcGxheSc6IDEsXG4gICdkb21pbmFudC1iYXNlbGluZSc6IDEsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6IDEsXG4gICdmaWxsJzogMSxcbiAgJ2ZpbGwtb3BhY2l0eSc6IDEsXG4gICdmaWxsLXJ1bGUnOiAxLFxuICAnZmlsdGVyJzogMSxcbiAgJ2Zsb29kLWNvbG9yJzogMSxcbiAgJ2Zsb29kLW9wYWNpdHknOiAxLFxuICAnZm9udCc6IDEsXG4gICdmb250LWZhbWlseSc6IDEsXG4gICdmb250LXNpemUnOiBMRU5HVEhfQVRUUixcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAxLFxuICAnZm9udC1zdHJldGNoJzogMSxcbiAgJ2ZvbnQtc3R5bGUnOiAxLFxuICAnZm9udC12YXJpYW50JzogMSxcbiAgJ2ZvbnQtd2VpZ2h0JzogMSxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAxLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAxLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogMSxcbiAgJ2tlcm5pbmcnOiAxLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAxLFxuICAnbGlnaHRpbmctY29sb3InOiAxLFxuICAnbWFya2VyJzogMSxcbiAgJ21hcmtlci1lbmQnOiAxLFxuICAnbWFya2VyLW1pZCc6IDEsXG4gICdtYXJrZXItc3RhcnQnOiAxLFxuICAnbWFzayc6IDEsXG4gICdvcGFjaXR5JzogMSxcbiAgJ292ZXJmbG93JzogMSxcbiAgJ3BvaW50ZXItZXZlbnRzJzogMSxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6IDEsXG4gICdzdG9wLWNvbG9yJzogMSxcbiAgJ3N0b3Atb3BhY2l0eSc6IDEsXG4gICdzdHJva2UnOiAxLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6IDEsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6IDEsXG4gICdzdHJva2UtbGluZWNhcCc6IDEsXG4gICdzdHJva2UtbGluZWpvaW4nOiAxLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAxLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAxLFxuICAnc3Ryb2tlLXdpZHRoJzogTEVOR1RIX0FUVFIsXG4gICd0ZXh0LWFuY2hvcic6IDEsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAxLFxuICAndGV4dC1yZW5kZXJpbmcnOiAxLFxuICAndW5pY29kZS1iaWRpJzogMSxcbiAgJ3Zpc2liaWxpdHknOiAxLFxuICAnd29yZC1zcGFjaW5nJzogMSxcbiAgJ3dyaXRpbmctbW9kZSc6IDFcbn07XG5cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpIHtcbiAgaWYgKENTU19QUk9QRVJUSUVTW25hbWVdKSB7XG4gICAgcmV0dXJuIG5vZGUuc3R5bGVbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlTlMobnVsbCwgbmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBoeXBoZW5hdGVkID0gbmFtZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xuXG4gIHZhciB0eXBlID0gQ1NTX1BST1BFUlRJRVNbaHlwaGVuYXRlZF07XG5cbiAgaWYgKHR5cGUpIHtcbiAgICAvLyBhcHBlbmQgcGl4ZWwgdW5pdCwgdW5sZXNzIHByZXNlbnRcbiAgICBpZiAodHlwZSA9PT0gTEVOR1RIX0FUVFIgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpICsgJ3B4JztcbiAgICB9XG5cbiAgICBub2RlLnN0eWxlW2h5cGhlbmF0ZWRdID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlcyhub2RlLCBhdHRycykge1xuXG4gIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJzKSwgaSwgbmFtZTtcblxuICBmb3IgKGkgPSAwLCBuYW1lOyAobmFtZSA9IG5hbWVzW2ldKTsgaSsrKSB7XG4gICAgc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIGF0dHJzW25hbWVdKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgb3Igc2V0cyByYXcgYXR0cmlidXRlcyBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7T2JqZWN0fSBbYXR0cnNdXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtuYW1lXVxuICogQHBhcmFtICB7U3RyaW5nfSBbdmFsdWVdXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBhdHRyKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2V0QXR0cmlidXRlcyhub2RlLCBuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcclxuICogQ2xlYXIgdXRpbGl0eVxyXG4gKi9cclxuZnVuY3Rpb24gaW5kZXgoYXJyLCBvYmopIHtcclxuICBpZiAoYXJyLmluZGV4T2YpIHtcclxuICAgIHJldHVybiBhcnIuaW5kZXhPZihvYmopO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoYXJyW2ldID09PSBvYmopIHtcclxuICAgICAgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gLTE7XHJcbn1cclxuXHJcbnZhciByZSA9IC9cXHMrLztcclxuXHJcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XHJcblxyXG5mdW5jdGlvbiBkZWZpbmVkKG8pIHtcclxuICByZXR1cm4gdHlwZW9mIG8gIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG4vKipcclxuICogV3JhcCBgZWxgIGluIGEgYENsYXNzTGlzdGAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIGNsYXNzZXMoZWwpIHtcclxuICByZXR1cm4gbmV3IENsYXNzTGlzdChlbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsYXNzTGlzdChlbCkge1xyXG4gIGlmICghZWwgfHwgIWVsLm5vZGVUeXBlKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgRE9NIGVsZW1lbnQgcmVmZXJlbmNlIGlzIHJlcXVpcmVkJyk7XHJcbiAgfVxyXG4gIHRoaXMuZWwgPSBlbDtcclxuICB0aGlzLmxpc3QgPSBlbC5jbGFzc0xpc3Q7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGQgY2xhc3MgYG5hbWVgIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuXHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgdGhpcy5saXN0LmFkZChuYW1lKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZmFsbGJhY2tcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIHZhciBpID0gaW5kZXgoYXJyLCBuYW1lKTtcclxuICBpZiAoIX5pKSB7XHJcbiAgICBhcnIucHVzaChuYW1lKTtcclxuICB9XHJcblxyXG4gIGlmIChkZWZpbmVkKHRoaXMuZWwuY2xhc3NOYW1lLmJhc2VWYWwpKSB7XHJcbiAgICB0aGlzLmVsLmNsYXNzTmFtZS5iYXNlVmFsID0gYXJyLmpvaW4oJyAnKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5lbC5jbGFzc05hbWUgPSBhcnIuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGNsYXNzIGBuYW1lYCB3aGVuIHByZXNlbnQsIG9yXHJcbiAqIHBhc3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVtb3ZlXHJcbiAqIGFueSB3aGljaCBtYXRjaC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBuYW1lXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICBpZiAoJ1tvYmplY3QgUmVnRXhwXScgPT09IHRvU3RyaW5nLmNhbGwobmFtZSkpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbW92ZU1hdGNoaW5nKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgdGhpcy5saXN0LnJlbW92ZShuYW1lKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZmFsbGJhY2tcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIHZhciBpID0gaW5kZXgoYXJyLCBuYW1lKTtcclxuICBpZiAofmkpIHtcclxuICAgIGFyci5zcGxpY2UoaSwgMSk7XHJcbiAgfVxyXG4gIHRoaXMuZWwuY2xhc3NOYW1lLmJhc2VWYWwgPSBhcnIuam9pbignICcpO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBhbGwgY2xhc3NlcyBtYXRjaGluZyBgcmVgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nID0gZnVuY3Rpb24ocmUpIHtcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAocmUudGVzdChhcnJbaV0pKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKGFycltpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRvZ2dsZSBjbGFzcyBgbmFtZWAsIGNhbiBmb3JjZSBzdGF0ZSB2aWEgYGZvcmNlYC5cclxuICpcclxuICogRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBjbGFzc0xpc3QsIGJ1dCBkbyBub3Qgc3VwcG9ydCBgZm9yY2VgIHlldCxcclxuICogdGhlIG1pc3Rha2Ugd2lsbCBiZSBkZXRlY3RlZCBhbmQgY29ycmVjdGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGZvcmNlXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKG5hbWUsIGZvcmNlKSB7XHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgaWYgKGRlZmluZWQoZm9yY2UpKSB7XHJcbiAgICAgIGlmIChmb3JjZSAhPT0gdGhpcy5saXN0LnRvZ2dsZShuYW1lLCBmb3JjZSkpIHtcclxuICAgICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpOyAvLyB0b2dnbGUgYWdhaW4gdG8gY29ycmVjdFxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBmYWxsYmFja1xyXG4gIGlmIChkZWZpbmVkKGZvcmNlKSkge1xyXG4gICAgaWYgKCFmb3JjZSkge1xyXG4gICAgICB0aGlzLnJlbW92ZShuYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkKG5hbWUpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcclxuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZChuYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhbiBhcnJheSBvZiBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheX1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLmFycmF5ID0gZnVuY3Rpb24oKSB7XHJcbiAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnO1xyXG4gIHZhciBzdHIgPSBjbGFzc05hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xyXG4gIHZhciBhcnIgPSBzdHIuc3BsaXQocmUpO1xyXG4gIGlmICgnJyA9PT0gYXJyWzBdKSB7XHJcbiAgICBhcnIuc2hpZnQoKTtcclxuICB9XHJcbiAgcmV0dXJuIGFycjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBjbGFzcyBgbmFtZWAgaXMgcHJlc2VudC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkNsYXNzTGlzdC5wcm90b3R5cGUuaGFzID1cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICByZXR1cm4gKFxyXG4gICAgdGhpcy5saXN0ID9cclxuICAgICAgdGhpcy5saXN0LmNvbnRhaW5zKG5hbWUpIDpcclxuICAgICAgISEgfmluZGV4KHRoaXMuYXJyYXkoKSwgbmFtZSlcclxuICApO1xyXG59O1xuXG5mdW5jdGlvbiByZW1vdmUoZWxlbWVudCkge1xuICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDbGVhciB1dGlsaXR5XG4gKi9cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgKGZvciBjaGFpbmluZylcbiAqL1xuZnVuY3Rpb24gY2xlYXIoZWxlbWVudCkge1xuICB2YXIgY2hpbGQ7XG5cbiAgd2hpbGUgKChjaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZCkpIHtcbiAgICByZW1vdmUoY2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGNsb25lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xufVxuXG52YXIgbnMgPSB7XG4gIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJ1xufTtcblxuLyoqXG4gKiBET00gcGFyc2luZyB1dGlsaXR5XG4gKi9cblxudmFyIFNWR19TVEFSVCA9ICc8c3ZnIHhtbG5zPVwiJyArIG5zLnN2ZyArICdcIic7XG5cbmZ1bmN0aW9uIHBhcnNlKHN2Zykge1xuXG4gIHZhciB1bndyYXAgPSBmYWxzZTtcblxuICAvLyBlbnN1cmUgd2UgaW1wb3J0IGEgdmFsaWQgc3ZnIGRvY3VtZW50XG4gIGlmIChzdmcuc3Vic3RyaW5nKDAsIDQpID09PSAnPHN2ZycpIHtcbiAgICBpZiAoc3ZnLmluZGV4T2YobnMuc3ZnKSA9PT0gLTEpIHtcbiAgICAgIHN2ZyA9IFNWR19TVEFSVCArIHN2Zy5zdWJzdHJpbmcoNCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG5hbWVzcGFjZSBzdmdcbiAgICBzdmcgPSBTVkdfU1RBUlQgKyAnPicgKyBzdmcgKyAnPC9zdmc+JztcbiAgICB1bndyYXAgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHBhcnNlZCA9IHBhcnNlRG9jdW1lbnQoc3ZnKTtcblxuICBpZiAoIXVud3JhcCkge1xuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgdmFyIHBhcmVudCA9IHBhcnNlZC5maXJzdENoaWxkO1xuXG4gIHdoaWxlIChwYXJlbnQuZmlyc3RDaGlsZCkge1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBhcmVudC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiBmcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gcGFyc2VEb2N1bWVudChzdmcpIHtcblxuICB2YXIgcGFyc2VyO1xuXG4gIC8vIHBhcnNlXG4gIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgcGFyc2VyLmFzeW5jID0gZmFsc2U7XG5cbiAgcmV0dXJuIHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3ZnLCAndGV4dC94bWwnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdXRpbGl0eSBmb3IgU1ZHIGVsZW1lbnRzXG4gKi9cblxuXG4vKipcbiAqIENyZWF0ZSBhIHNwZWNpZmljIHR5cGUgZnJvbSBuYW1lIG9yIFNWRyBtYXJrdXAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb3IgbWFya3VwIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW2F0dHJzXSBhdHRyaWJ1dGVzIHRvIHNldCBvbiB0aGUgZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGUobmFtZSwgYXR0cnMpIHtcbiAgdmFyIGVsZW1lbnQ7XG5cbiAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnPCcpIHtcbiAgICBlbGVtZW50ID0gcGFyc2UobmFtZSkuZmlyc3RDaGlsZDtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLnN2ZywgbmFtZSk7XG4gIH1cblxuICBpZiAoYXR0cnMpIHtcbiAgICBhdHRyKGVsZW1lbnQsIGF0dHJzKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIEV2ZW50cyBoYW5kbGluZyB1dGlsaXR5XG4gKi9cblxuZnVuY3Rpb24gb24obm9kZSwgZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XG4gIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xufVxuXG5mdW5jdGlvbiBvZmYobm9kZSwgZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XG4gIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xufVxuXG4vKipcbiAqIEdlb21ldHJ5IGhlbHBlcnNcbiAqL1xuXG4vLyBmYWtlIG5vZGUgdXNlZCB0byBpbnN0YW50aWF0ZSBzdmcgZ2VvbWV0cnkgZWxlbWVudHNcbnZhciBub2RlID0gY3JlYXRlKCdzdmcnKTtcblxuZnVuY3Rpb24gZXh0ZW5kKG9iamVjdCwgcHJvcHMpIHtcbiAgdmFyIGksIGssIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG5cbiAgZm9yIChpID0gMDsgKGsgPSBrZXlzW2ldKTsgaSsrKSB7XG4gICAgb2JqZWN0W2tdID0gcHJvcHNba107XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVBvaW50KHgsIHkpIHtcbiAgdmFyIHBvaW50ID0gbm9kZS5jcmVhdGVTVkdQb2ludCgpO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICBjYXNlIDA6XG4gICAgcmV0dXJuIHBvaW50O1xuICBjYXNlIDI6XG4gICAgeCA9IHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5XG4gICAgfTtcbiAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBleHRlbmQocG9pbnQsIHgpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBtYXRyaXggdmlhIGFyZ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjcmVhdGVNYXRyaXgoeyBhOiAxLCBiOiAxIH0pO1xuICogY3JlYXRlTWF0cml4KCk7XG4gKiBjcmVhdGVNYXRyaXgoMSwgMiwgMCwgMCwgMzAsIDIwKTtcbiAqXG4gKiBAcmV0dXJuIHtTVkdNYXRyaXh9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBtYXRyaXggPSBub2RlLmNyZWF0ZVNWR01hdHJpeCgpO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICBjYXNlIDA6XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgY2FzZSAxOlxuICAgIHJldHVybiBleHRlbmQobWF0cml4LCBhKTtcbiAgY2FzZSA2OlxuICAgIHJldHVybiBleHRlbmQobWF0cml4LCB7XG4gICAgICBhOiBhLFxuICAgICAgYjogYixcbiAgICAgIGM6IGMsXG4gICAgICBkOiBkLFxuICAgICAgZTogZSxcbiAgICAgIGY6IGZcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm0obWF0cml4KSB7XG4gIGlmIChtYXRyaXgpIHtcbiAgICByZXR1cm4gbm9kZS5jcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KG1hdHJpeCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuY3JlYXRlU1ZHVHJhbnNmb3JtKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJpYWxpemF0aW9uIHV0aWxcbiAqL1xuXG52YXIgVEVYVF9FTlRJVElFUyA9IC8oWyY8Pl17MX0pL2c7XG52YXIgQVRUUl9FTlRJVElFUyA9IC8oW1xcblxcclwiXXsxfSkvZztcblxudmFyIEVOVElUWV9SRVBMQUNFTUVOVCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICdcXCcnXG59O1xuXG5mdW5jdGlvbiBlc2NhcGUoc3RyLCBwYXR0ZXJuKSB7XG5cbiAgZnVuY3Rpb24gcmVwbGFjZUZuKG1hdGNoLCBlbnRpdHkpIHtcbiAgICByZXR1cm4gRU5USVRZX1JFUExBQ0VNRU5UW2VudGl0eV0gfHwgZW50aXR5O1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VGbik7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShub2RlLCBvdXRwdXQpIHtcblxuICB2YXIgaSwgbGVuLCBhdHRyTWFwLCBhdHRyTm9kZSwgY2hpbGROb2RlcztcblxuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgLy8gVEVYVFxuICBjYXNlIDM6XG4gICAgLy8gcmVwbGFjZSBzcGVjaWFsIFhNTCBjaGFyYWN0ZXJzXG4gICAgb3V0cHV0LnB1c2goZXNjYXBlKG5vZGUudGV4dENvbnRlbnQsIFRFWFRfRU5USVRJRVMpKTtcbiAgICBicmVhaztcblxuICAvLyBFTEVNRU5UXG4gIGNhc2UgMTpcbiAgICBvdXRwdXQucHVzaCgnPCcsIG5vZGUudGFnTmFtZSk7XG5cbiAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHtcbiAgICAgIGF0dHJNYXAgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSBhdHRyTWFwLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGF0dHJOb2RlID0gYXR0ck1hcC5pdGVtKGkpO1xuICAgICAgICBvdXRwdXQucHVzaCgnICcsIGF0dHJOb2RlLm5hbWUsICc9XCInLCBlc2NhcGUoYXR0ck5vZGUudmFsdWUsIEFUVFJfRU5USVRJRVMpLCAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgIG91dHB1dC5wdXNoKCc+Jyk7XG4gICAgICBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBzZXJpYWxpemUoY2hpbGROb2Rlcy5pdGVtKGkpLCBvdXRwdXQpO1xuICAgICAgfVxuICAgICAgb3V0cHV0LnB1c2goJzwvJywgbm9kZS50YWdOYW1lLCAnPicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnLz4nKTtcbiAgICB9XG4gICAgYnJlYWs7XG5cbiAgLy8gQ09NTUVOVFxuICBjYXNlIDg6XG4gICAgb3V0cHV0LnB1c2goJzwhLS0nLCBlc2NhcGUobm9kZS5ub2RlVmFsdWUsIFRFWFRfRU5USVRJRVMpLCAnLS0+Jyk7XG4gICAgYnJlYWs7XG5cbiAgLy8gQ0RBVEFcbiAgY2FzZSA0OlxuICAgIG91dHB1dC5wdXNoKCc8IVtDREFUQVsnLCBub2RlLm5vZGVWYWx1ZSwgJ11dPicpO1xuICAgIGJyZWFrO1xuXG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gaGFuZGxlIG5vZGUgJyArIG5vZGUubm9kZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBpbm5lckhUTUwgbGlrZSBmdW5jdGlvbmFsaXR5IGZvciBTVkcgZWxlbWVudHMuXG4gKiBiYXNlZCBvbiBpbm5lclNWRyAoaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9pbm5lcnN2ZylcbiAqL1xuXG5cbmZ1bmN0aW9uIHNldChlbGVtZW50LCBzdmcpIHtcblxuICB2YXIgcGFyc2VkID0gcGFyc2Uoc3ZnKTtcblxuICAvLyBjbGVhciBlbGVtZW50IGNvbnRlbnRzXG4gIGNsZWFyKGVsZW1lbnQpO1xuXG4gIGlmICghc3ZnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc0ZyYWdtZW50KHBhcnNlZCkpIHtcbiAgICAvLyBleHRyYWN0IDxzdmc+IGZyb20gcGFyc2VkIGRvY3VtZW50XG4gICAgcGFyc2VkID0gcGFyc2VkLmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub2RlcyA9IHNsaWNlKHBhcnNlZC5jaGlsZE5vZGVzKTtcblxuICAvLyBpbXBvcnQgKyBhcHBlbmQgZWFjaCBub2RlXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhcHBlbmRUbyhub2Rlc1tpXSwgZWxlbWVudCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXQoZWxlbWVudCkge1xuICB2YXIgY2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQsXG4gICAgICBvdXRwdXQgPSBbXTtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBzZXJpYWxpemUoY2hpbGQsIG91dHB1dCk7XG4gICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZztcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnJhZ21lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCc7XG59XG5cbmZ1bmN0aW9uIGlubmVyU1ZHKGVsZW1lbnQsIHN2Zykge1xuXG4gIGlmIChzdmcgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldChlbGVtZW50LCBzdmcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgcGFyc2luZyBTVkc6ICcgKyBlLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXQoZWxlbWVudCk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzbGljZShhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG59XG5cbi8qKlxuICogU2VsZWN0aW9uIHV0aWxpdGllc1xuICovXG5cbmZ1bmN0aW9uIHNlbGVjdChub2RlLCBzZWxlY3Rvcikge1xuICByZXR1cm4gbm9kZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0QWxsKG5vZGUsIHNlbGVjdG9yKSB7XG4gIHZhciBub2RlcyA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgcmV0dXJuIFtdLm1hcC5jYWxsKG5vZGVzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIHByZXBlbmRUbyB1dGlsaXR5XG4gKi9cblxuLyoqXG4gKiBQcmVwZW5kIGEgbm9kZSB0byBhIHRhcmdldCBlbGVtZW50IGFuZCByZXR1cm4gdGhlIHByZXBlbmRlZCBub2RlLlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHRoZSBwcmVwZW5kZWQgbm9kZVxuICovXG5mdW5jdGlvbiBwcmVwZW5kVG8obm9kZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuaW5zZXJ0QmVmb3JlKGVuc3VyZUltcG9ydGVkKG5vZGUsIHRhcmdldCksIHRhcmdldC5maXJzdENoaWxkIHx8IG51bGwpO1xufVxuXG4vKipcbiAqIHByZXBlbmQgdXRpbGl0eVxuICovXG5cbi8qKlxuICogUHJlcGVuZCBhIG5vZGUgdG8gYSB0YXJnZXQgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IHRhcmdldFxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gbm9kZVxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHRoZSB0YXJnZXQgZWxlbWVudFxuICovXG5mdW5jdGlvbiBwcmVwZW5kKHRhcmdldCwgbm9kZSkge1xuICBwcmVwZW5kVG8obm9kZSwgdGFyZ2V0KTtcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHV0aWxpdHlcbiAqL1xuXG5mdW5jdGlvbiByZXBsYWNlKGVsZW1lbnQsIHJlcGxhY2VtZW50KSB7XG4gIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZW5zdXJlSW1wb3J0ZWQocmVwbGFjZW1lbnQsIGVsZW1lbnQpLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlcGxhY2VtZW50O1xufVxuXG4vKipcbiAqIHRyYW5zZm9ybSBhY2Nlc3NvciB1dGlsaXR5XG4gKi9cblxuZnVuY3Rpb24gd3JhcE1hdHJpeCh0cmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm0pIHtcbiAgaWYgKHRyYW5zZm9ybSBpbnN0YW5jZW9mIFNWR01hdHJpeCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1MaXN0LmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgodHJhbnNmb3JtKTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2Zvcm07XG59XG5cblxuZnVuY3Rpb24gc2V0VHJhbnNmb3Jtcyh0cmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm1zKSB7XG4gIHZhciBpLCB0O1xuXG4gIHRyYW5zZm9ybUxpc3QuY2xlYXIoKTtcblxuICBmb3IgKGkgPSAwOyAodCA9IHRyYW5zZm9ybXNbaV0pOyBpKyspIHtcbiAgICB0cmFuc2Zvcm1MaXN0LmFwcGVuZEl0ZW0od3JhcE1hdHJpeCh0cmFuc2Zvcm1MaXN0LCB0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgb3Igc2V0IHRoZSB0cmFuc2Zvcm1zIG9uIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7U1ZHVHJhbnNmb3JtfFNWR01hdHJpeHxBcnJheTxTVkdUcmFuc2Zvcm18U1ZHTWF0cml4Pn0gW3RyYW5zZm9ybXNdXG4gKlxuICogQHJldHVybiB7U1ZHVHJhbnNmb3JtfSB0aGUgY29uc29saWRhdGVkIHRyYW5zZm9ybVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSwgdHJhbnNmb3Jtcykge1xuICB2YXIgdHJhbnNmb3JtTGlzdCA9IG5vZGUudHJhbnNmb3JtLmJhc2VWYWw7XG5cbiAgaWYgKHRyYW5zZm9ybXMpIHtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1zKSkge1xuICAgICAgdHJhbnNmb3JtcyA9IFsgdHJhbnNmb3JtcyBdO1xuICAgIH1cblxuICAgIHNldFRyYW5zZm9ybXModHJhbnNmb3JtTGlzdCwgdHJhbnNmb3Jtcyk7XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtTGlzdC5jb25zb2xpZGF0ZSgpO1xufVxuXG5leHBvcnQgeyBhcHBlbmQsIGFwcGVuZFRvLCBhdHRyLCBjbGFzc2VzLCBjbGVhciwgY2xvbmUsIGNyZWF0ZSwgaW5uZXJTVkcsIHByZXBlbmQsIHByZXBlbmRUbywgcmVtb3ZlLCByZXBsYWNlLCB0cmFuc2Zvcm0sIG9uLCBvZmYsIGNyZWF0ZVBvaW50LCBjcmVhdGVNYXRyaXgsIGNyZWF0ZVRyYW5zZm9ybSwgc2VsZWN0LCBzZWxlY3RBbGwgfTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcclxuICBcIm5hbWVcIjogXCJBY3Rpdml0aVwiLFxyXG4gIFwidXJpXCI6IFwiaHR0cDovL2FjdGl2aXRpLm9yZy9icG1uXCIsXHJcbiAgXCJwcmVmaXhcIjogXCJhY3Rpdml0aVwiLFxyXG4gIFwieG1sXCI6IHtcclxuICAgIFwidGFnQWxpYXNcIjogXCJsb3dlckNhc2VcIlxyXG4gIH0sXHJcbiAgXCJhc3NvY2lhdGlvbnNcIjogW10sXHJcbiAgXCJ0eXBlc1wiOiBbXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkRlZmluaXRpb25zXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpEZWZpbml0aW9uc1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGlhZ3JhbVJlbGF0aW9uSWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5PdXRCaW5kaW5nXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJFbGVtZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic291cmNlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInNvdXJjZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidGFyZ2V0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImJ1c2luZXNzS2V5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImxvY2FsXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZXNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5cIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkluT3V0QmluZGluZ1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkNhbGxBY3Rpdml0eVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJPdXRcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkluT3V0QmluZGluZ1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkNhbGxBY3Rpdml0eVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJBc3luY0NhcGFibGVcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkFjdGl2aXR5XCIsXHJcbiAgICAgICAgXCJicG1uOkdhdGV3YXlcIixcclxuICAgICAgICBcImJwbW46RXZlbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzeW5jXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhc3luY0JlZm9yZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYXN5bmNBZnRlclwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhjbHVzaXZlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkpvYlByaW9yaXplZFwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46UHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJqb2JQcmlvcml0eVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJTaWduYWxFdmVudERlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYXN5bmNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVycm9yRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXJyb3JDb2RlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXJyb3JNZXNzYWdlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRXJyb3JcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkVycm9yXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhY3Rpdml0aTplcnJvck1lc3NhZ2VcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiUG90ZW50aWFsU3RhcnRlclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYnBtbjpSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZvcm1TdXBwb3J0ZWRcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlN0YXJ0RXZlbnRcIixcclxuICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImZvcm1IYW5kbGVyQ2xhc3NcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZm9ybUtleVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUZW1wbGF0ZVN1cHBvcnRlZFwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46UHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiYnBtbjpGbG93RWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibW9kZWxlclRlbXBsYXRlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkluaXRpYXRvclwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFsgXCJicG1uOlN0YXJ0RXZlbnRcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImluaXRpYXRvclwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJTY3JpcHRUYXNrXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpTY3JpcHRUYXNrXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXN1bHRWYXJpYWJsZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJQcm9jZXNzXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpQcm9jZXNzXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVTdGFydGVyQ29uZmlndXJhdGlvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVTdGFydGVyVXNlcnNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmVyc2lvblRhZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJoaXN0b3J5VGltZVRvTGl2ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpc1N0YXJ0YWJsZUluVGFza2xpc3RcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicHJvY2Vzcy1pcy1leGVjdXRhYmxlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVzY2FsYXRpb25FdmVudERlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVzY2FsYXRpb25Db2RlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybWFsRXhwcmVzc2lvblwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46Rm9ybWFsRXhwcmVzc2lvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQXNzaWduYWJsZVwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogWyBcImJwbW46VXNlclRhc2tcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzc2lnbmVlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhbmRpZGF0ZVVzZXJzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhbmRpZGF0ZUdyb3Vwc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkdWVEYXRlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImZvbGxvd1VwRGF0ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJwcmlvcml0eVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJDYWxsQWN0aXZpdHlcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFsgXCJicG1uOkNhbGxBY3Rpdml0eVwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FsbGVkRWxlbWVudEJpbmRpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcImxhdGVzdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VmVyc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VmVyc2lvblRhZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VGVuYW50SWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FzZVJlZlwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYXNlQmluZGluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IFwibGF0ZXN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhc2VWZXJzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhc2VUZW5hbnRJZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZU1hcHBpbmdDbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiU2VydmljZVRhc2tMaWtlXCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlNlcnZpY2VUYXNrXCIsXHJcbiAgICAgICAgXCJicG1uOkJ1c2luZXNzUnVsZVRhc2tcIixcclxuICAgICAgICBcImJwbW46U2VuZFRhc2tcIixcclxuICAgICAgICBcImJwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzdWx0VmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRG1uQ2FwYWJsZVwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpCdXNpbmVzc1J1bGVUYXNrXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZlwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZkJpbmRpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcImxhdGVzdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZlZlcnNpb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibWFwRGVjaXNpb25SZXN1bHRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInJlc3VsdExpc3RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVjaXNpb25SZWZUZW5hbnRJZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJFeHRlcm5hbENhcGFibGVcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImFjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZVwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidHlwZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ0b3BpY1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUYXNrUHJpb3JpemVkXCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlByb2Nlc3NcIixcclxuICAgICAgICBcImFjdGl2aXRpOkV4dGVybmFsQ2FwYWJsZVwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidGFza1ByaW9yaXR5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlByb3BlcnRpZXNcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkVsZW1lbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFsgXCIqXCIgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiUHJvcGVydHlcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlByb3BlcnR5XCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJFbGVtZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbm5lY3RvclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2VcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpbnB1dE91dHB1dFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiSW5wdXRPdXRwdXRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29ubmVjdG9ySWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJJbnB1dE91dHB1dFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkZsb3dOb2RlXCIsXHJcbiAgICAgICAgICBcImFjdGl2aXRpOkNvbm5lY3RvclwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlucHV0T3V0cHV0XCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJJbnB1dE91dHB1dFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb25uZWN0b3JJZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlucHV0UGFyYW1ldGVyc1wiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0UGFyYW1ldGVyXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm91dHB1dFBhcmFtZXRlcnNcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJPdXRwdXRQYXJhbWV0ZXJcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJcIixcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlZmluaXRpb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkxpc3RcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIml0ZW1zXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIk1hcFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZW50cmllc1wiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkVudHJ5XCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVudHJ5XCIsXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwia2V5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlZmluaXRpb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJWYWx1ZVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlNjcmlwdFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic2NyaXB0Rm9ybWF0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2VcIixcclxuICAgICAgICAgIFwiYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXJcIixcclxuICAgICAgICAgIFwiYWN0aXZpdGk6VGFza0xpc3RlbmVyXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic3RyaW5nVmFsdWVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRQYXJhbWV0ZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlclwiIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIk91dHB1dFBhcmFtZXRlclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyXCIgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQ29sbGVjdGFibGVcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbIFwiYnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljc1wiIF0sXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVsZW1lbnRWYXJpYWJsZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCIsXHJcbiAgICAgICAgICBcImJwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJib2R5XCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkV4ZWN1dGlvbkxpc3RlbmVyXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOlRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpTZXJ2aWNlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCIsXHJcbiAgICAgICAgICBcImJwbW46QnVzaW5lc3NSdWxlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOlNjcmlwdFRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpSZWNlaXZlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOk1hbnVhbFRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpFeGNsdXNpdmVHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46U2VxdWVuY2VGbG93XCIsXHJcbiAgICAgICAgICBcImJwbW46UGFyYWxsZWxHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46SW5jbHVzaXZlR2F0ZXdheVwiLFxyXG4gICAgICAgICAgXCJicG1uOkV2ZW50QmFzZWRHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46U3RhcnRFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46RW5kRXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpCb3VuZGFyeUV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46Q2FsbEFjdGl2aXR5XCIsXHJcbiAgICAgICAgICBcImJwbW46U3ViUHJvY2Vzc1wiLFxyXG4gICAgICAgICAgXCJicG1uOlByb2Nlc3NcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNsYXNzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlbGVnYXRlRXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJzY3JpcHRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlNjcmlwdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUYXNrTGlzdGVuZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNsYXNzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlbGVnYXRlRXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJzY3JpcHRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlNjcmlwdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudERlZmluaXRpb25zXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGb3JtUHJvcGVydHlcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImJwbW46U3RhcnRFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ0eXBlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlcXVpcmVkXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlYWRhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIndyaXRhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhcmlhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGF0ZVBhdHRlcm5cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZXNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGb3JtRGF0YVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYnBtbjpTdGFydEV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYnVzaW5lc3NLZXlcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibGFiZWxcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidHlwZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkYXRlUGF0dGVyblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWZhdWx0VmFsdWVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicHJvcGVydGllc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiUHJvcGVydGllc1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWxpZGF0aW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJWYWxpZGF0aW9uXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiVmFsdWVcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlZhbGlkYXRpb25cIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb25zdHJhaW50c1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQ29uc3RyYWludFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQ29uc3RyYWludFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm5hbWVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29uZmlnXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFyaWFibGVOYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhcmlhYmxlRXZlbnRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfVxyXG4gIF0sXHJcbiAgXCJlbXVtZXJhdGlvbnNcIjogWyBdXHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tQ29udGV4dFBhZCB7XHJcbiAgY29uc3RydWN0b3IoY29uZmlnLCBjb250ZXh0UGFkLCBjcmVhdGUsIGVsZW1lbnRGYWN0b3J5LCBpbmplY3RvciwgdHJhbnNsYXRlKSB7XHJcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcclxuICAgIHRoaXMuZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcclxuICAgIHRoaXMudHJhbnNsYXRlID0gdHJhbnNsYXRlO1xyXG4gICAgLy/oh6rliqjmkYbmlL7kvY3nva5cclxuICAgIGlmIChjb25maWcuYXV0b1BsYWNlICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmF1dG9QbGFjZSA9IGluamVjdG9yLmdldCgnYXV0b1BsYWNlJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgLy/ms6jlhozlt6XlhbdcclxuICAgIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcclxuICB9XHJcbiAgZ2V0Q29udGV4dFBhZEVudHJpZXMoZWxlbWVudCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBhdXRvUGxhY2UsXHJcbiAgICAgIGNyZWF0ZSxcclxuICAgICAgZWxlbWVudEZhY3RvcnksXHJcbiAgICAgIHRyYW5zbGF0ZVxyXG4gICAgfSA9IHRoaXM7XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwZW5kVXNlclRhc2soZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgaWYgKGF1dG9QbGFjZSkge1xyXG4gICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpVc2VyVGFzaycgfSk7XHJcbiAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXBwZW5kVXNlclRhc2tTdGFydChldmVudCwgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBlbmRVc2VyVGFza1N0YXJ0KGV2ZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46VXNlclRhc2snIH0pO1xyXG4gICAgICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcHBlbmRDYWxsQWN0aXZpdHlTdGFydChldmVudCkge1xyXG4gICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46Q2FsbEFjdGl2aXR5JyB9KTtcclxuICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwZW5kQ2FsbEFjdGl2aXR5KGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGF1dG9QbGFjZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46Q2FsbEFjdGl2aXR5JyB9KTtcclxuICAgICAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXBwZW5kQ2FsbEFjdGl2aXR5U3RhcnQoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICdhcHBlbmQudXNlci10YXNrJzoge1xyXG4gICAgICAgIGdyb3VwOiAnbW9kZWwnLFxyXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi11c2VyLXRhc2snLFxyXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FwcGVuZCBTZXJ2aWNlVGFzaycpLFxyXG4gICAgICAgIGFjdGlvbjoge1xyXG4gICAgICAgICAgY2xpY2s6IGFwcGVuZFVzZXJUYXNrLFxyXG4gICAgICAgICAgZHJhZ3N0YXJ0OiBhcHBlbmRVc2VyVGFza1N0YXJ0XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAnYXBwZW5kLmNhbGwtYWN0aXZpdHknOntcclxuICAgICAgICAgIGdyb3VwOiAnbW9kZWwnLFxyXG4gICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNhbGwtYWN0aXZpdHknLFxyXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQXBwZW5kIENhbGxBY3Rpdml0eScpLFxyXG4gICAgICAgICAgYWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgY2xpY2s6IGFwcGVuZENhbGxBY3Rpdml0eSxcclxuICAgICAgICAgICAgICBkcmFnc3RhcnQ6IGFwcGVuZENhbGxBY3Rpdml0eVN0YXJ0XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbkN1c3RvbUNvbnRleHRQYWQuJGluamVjdCA9IFtcclxuICAnY29uZmlnJyxcclxuICAnY29udGV4dFBhZCcsXHJcbiAgJ2NyZWF0ZScsXHJcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcclxuICAnaW5qZWN0b3InLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tUGFsZXR0ZSB7XHJcbiAgY29uc3RydWN0b3IoY3JlYXRlLCBlbGVtZW50RmFjdG9yeSwgcGFsZXR0ZSwgdHJhbnNsYXRlKSB7XHJcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcclxuICAgIHRoaXMuZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcclxuICAgIHRoaXMudHJhbnNsYXRlID0gdHJhbnNsYXRlO1xyXG4gICAgcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFsZXR0ZUVudHJpZXMoZWxlbWVudCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjcmVhdGUsXHJcbiAgICAgIGVsZW1lbnRGYWN0b3J5LFxyXG4gICAgICB0cmFuc2xhdGVcclxuICAgIH0gPSB0aGlzO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VUYXNrKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpVc2VyVGFzaycgfSk7XHJcbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xyXG4gICAgfVxyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDYWxsQWN0aXZpdHkoZXZlbnQpIHtcclxuICAgICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknIH0pO1xyXG4gICAgICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2NyZWF0ZS51c2VyLXRhc2snOiB7XHJcbiAgICAgICAgZ3JvdXA6ICdhY3Rpdml0eScsXHJcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXVzZXItdGFzaycsXHJcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIFVzZXJUYXNrJyksXHJcbiAgICAgICAgYWN0aW9uOiB7XHJcbiAgICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZVNlcnZpY2VUYXNrLFxyXG4gICAgICAgICAgY2xpY2s6IGNyZWF0ZVNlcnZpY2VUYXNrXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAgICdjcmVhdGUuY2FsbC1hY3Rpdml0eSc6IHtcclxuICAgICAgICAgICAgZ3JvdXA6ICdhY3Rpdml0eScsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jYWxsLWFjdGl2aXR5JyxcclxuICAgICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIENhbGxBY3Rpdml0eScpLFxyXG4gICAgICAgICAgICBhY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIGRyYWdzdGFydDogY3JlYXRlQ2FsbEFjdGl2aXR5LFxyXG4gICAgICAgICAgICAgICAgY2xpY2s6IGNyZWF0ZUNhbGxBY3Rpdml0eVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQ3VzdG9tUGFsZXR0ZS4kaW5qZWN0ID0gW1xyXG4gICdjcmVhdGUnLFxyXG4gICdlbGVtZW50RmFjdG9yeScsXHJcbiAgJ3BhbGV0dGUnLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07IiwiaW1wb3J0IEN1c3RvbUNvbnRleHRQYWQgZnJvbSAnLi9DdXN0b21Db250ZXh0UGFkJztcclxuaW1wb3J0IEN1c3RvbVBhbGV0dGUgZnJvbSAnLi9DdXN0b21QYWxldHRlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBfX2luaXRfXzogWyAnY3VzdG9tQ29udGV4dFBhZCcsICdjdXN0b21QYWxldHRlJyBdLFxyXG4gIGN1c3RvbUNvbnRleHRQYWQ6IFsgJ3R5cGUnLCBDdXN0b21Db250ZXh0UGFkIF0sXHJcbiAgY3VzdG9tUGFsZXR0ZTogWyAndHlwZScsIEN1c3RvbVBhbGV0dGUgXVxyXG59OyIsImltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi90cmFuc2xhdGlvbnNHZXJtYW4nO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdXN0b21UcmFuc2xhdGUodGVtcGxhdGUsIHJlcGxhY2VtZW50cykge1xyXG4gIHJlcGxhY2VtZW50cyA9IHJlcGxhY2VtZW50cyB8fCB7fTtcclxuICB0ZW1wbGF0ZSA9IHRyYW5zbGF0aW9uc1t0ZW1wbGF0ZV0gfHwgdGVtcGxhdGU7XHJcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soW159XSspfS9nLCBmdW5jdGlvbihfLCBrZXkpIHtcclxuXHQgdmFyIHN0ciA9IHJlcGxhY2VtZW50c1trZXldO1xyXG5cdCAgaWYodHJhbnNsYXRpb25zW3JlcGxhY2VtZW50c1trZXldXSAhPSBudWxsICYmIHRyYW5zbGF0aW9ucyBbcmVwbGFjZW1lbnRzW2tleV1dICE9ICd1bmRlZmluZWQnKXtcclxuXHRcdCAgc3RyID0gdHJhbnNsYXRpb25zW3JlcGxhY2VtZW50c1trZXldXTtcclxuXHQgIH1cclxuICAgIHJldHVybiAgc3RyIHx8ICd7JyArIGtleSArICd9JztcclxuICB9KTtcclxufSIsImV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8vIExhYmVsc1xyXG4gICAgJ0FjdGl2YXRlIHRoZSBnbG9iYWwgY29ubmVjdCB0b29sJyA6ICfmv4DmtLvlhajlsYDov57mjqXlt6XlhbcnLFxyXG4gICAgJ0FwcGVuZCB7dHlwZX0nOiAn6L+95YqgIHt0eXBlfScsXHJcbiAgICAnQXBwZW5kIEVuZEV2ZW50JzogJ+i/veWKoCDnu5PmnZ/kuovku7YgJyxcclxuICAgICdBcHBlbmQgVGFzayc6J+i/veWKoCDku7vliqEnLFxyXG4gICAgJ0FwcGVuZCBHYXRld2F5Jzon6L+95YqgIOe9keWFsycsXHJcbiAgICAnQXBwZW5kIEludGVybWVkaWF0ZS9Cb3VuZGFyeSBFdmVudCc6J+i/veWKoCDkuK3pl7Qv6L6555WMIOS6i+S7ticsXHJcbiAgICAnQWRkIExhbmUgYWJvdmUnOiAn5Zyo5LiK6Z2i5re75Yqg6YGTJyxcclxuICAgICdEaXZpZGUgaW50byB0d28gTGFuZXMnOiAn5YiG5Ymy5oiQ5Lik5Liq6YGTJyxcclxuICAgICdEaXZpZGUgaW50byB0aHJlZSBMYW5lcyc6ICfliIblibLmiJDkuInkuKrpgZMnLFxyXG4gICAgJ0FkZCBMYW5lIGJlbG93JzogJ+WcqOS4i+mdoua3u+WKoOmBkycsXHJcbiAgICAnQXBwZW5kIGNvbXBlbnNhdGlvbiBhY3Rpdml0eSc6ICfov73liqDooaXlgb/mtLvliqgnLFxyXG4gICAgJ0NoYW5nZSB0eXBlJzogJ+S/ruaUueexu+WeiycsXHJcbiAgICAnQ29ubmVjdCB1c2luZyBBc3NvY2lhdGlvbic6ICfkvb/nlKjlhbPogZTov57mjqUnLFxyXG4gICAgJ0Nvbm5lY3QgdXNpbmcgU2VxdWVuY2UvTWVzc2FnZUZsb3cgb3IgQXNzb2NpYXRpb24nOiAn5L2/55So6aG65bqPL+a2iOaBr+a1geaIluiAheWFs+iBlOi/nuaOpScsXHJcbiAgICAnQ29ubmVjdCB1c2luZyBEYXRhSW5wdXRBc3NvY2lhdGlvbic6ICfkvb/nlKjmlbDmja7ovpPlhaXlhbPogZTov57mjqUnLFxyXG4gICAgJ1JlbW92ZSc6ICfnp7vpmaQnLFxyXG4gICAgJ0FjdGl2YXRlIHRoZSBoYW5kIHRvb2wnOiAn5r+A5rS75oqT5omL5bel5YW3JyxcclxuICAgICdBY3RpdmF0ZSB0aGUgbGFzc28gdG9vbCc6ICfmv4DmtLvlpZfntKLlt6XlhbcnLFxyXG4gICAgJ0FjdGl2YXRlIHRoZSBjcmVhdGUvcmVtb3ZlIHNwYWNlIHRvb2wnOiAn5r+A5rS75Yib5bu6L+WIoOmZpOepuumXtOW3peWFtycsXHJcbiAgICAnQ3JlYXRlIGV4cGFuZGVkIFN1YlByb2Nlc3MnOiAn5Yib5bu65omp5bGV5a2Q6L+H56iLJyxcclxuICAgICdDcmVhdGUgSW50ZXJtZWRpYXRlVGhyb3dFdmVudC9Cb3VuZGFyeUV2ZW50JyA6ICfliJvlu7rkuK3pl7Tmipvlh7rkuovku7Yv6L6555WM5LqL5Lu2JyxcclxuICAgICdDcmVhdGUgUG9vbC9QYXJ0aWNpcGFudCc6ICfliJvlu7rmsaAv5Y+C5LiO6ICFJyxcclxuICAgICdQYXJhbGxlbCBNdWx0aSBJbnN0YW5jZSc6ICflubbooYzlpJrph43kuovku7YnLFxyXG4gICAgJ1NlcXVlbnRpYWwgTXVsdGkgSW5zdGFuY2UnOiAn5pe25bqP5aSa6YeN5LqL5Lu2JyxcclxuICAgICdEYXRhT2JqZWN0UmVmZXJlbmNlJzon5pWw5o2u5a+56LGh5Y+C6ICDJyxcclxuICAgICdEYXRhU3RvcmVSZWZlcmVuY2UnOifmlbDmja7lrZjlgqjlj4LogIMnLFxyXG4gICAgJ0xvb3AnOiAn5b6q546vJyxcclxuICAgICdBZC1ob2MnOiAn5Y2z5bitJyxcclxuICAgICdDcmVhdGUge3R5cGV9JzogJ+WIm+W7uiB7dHlwZX0nLFxyXG4gICAgJ0NyZWF0ZSBUYXNrJzon5Yib5bu65Lu75YqhJyxcclxuICAgICdDcmVhdGUgU3RhcnRFdmVudCc6J+WIm+W7uuW8gOWni+S6i+S7ticsXHJcbiAgICAnQ3JlYXRlIEVuZEV2ZW50Jzon5Yib5bu657uT5p2f5LqL5Lu2JyxcclxuICAgICdDcmVhdGUgR3JvdXAnOifliJvlu7rnu4QnLFxyXG4gICAgJ1Rhc2snOiAn5Lu75YqhJyxcclxuICAgICdTZW5kIFRhc2snOiAn5Y+R6YCB5Lu75YqhJyxcclxuICAgICdSZWNlaXZlIFRhc2snOiAn5o6l5pS25Lu75YqhJyxcclxuICAgICdVc2VyIFRhc2snOiAn55So5oi35Lu75YqhJyxcclxuICAgICdNYW51YWwgVGFzayc6ICfmiYvlt6Xku7vliqEnLFxyXG4gICAgJ0J1c2luZXNzIFJ1bGUgVGFzayc6ICfkuJrliqHop4TliJnku7vliqEnLFxyXG4gICAgJ1NlcnZpY2UgVGFzayc6ICfmnI3liqHku7vliqEnLFxyXG4gICAgJ1NjcmlwdCBUYXNrJzogJ+iEmuacrOS7u+WKoScsXHJcbiAgICAnQ2FsbCBBY3Rpdml0eSc6ICfosIPnlKjmtLvliqgnLFxyXG4gICAgJ1N1YiBQcm9jZXNzIChjb2xsYXBzZWQpJzogJ+WtkOa1geeoi++8iOaKmOWPoOeahO+8iScsXHJcbiAgICAnU3ViIFByb2Nlc3MgKGV4cGFuZGVkKSc6ICflrZDmtYHnqIvvvIjlsZXlvIDnmoTvvIknLFxyXG4gICAgJ1N0YXJ0IEV2ZW50JzogJ+W8gOWni+S6i+S7ticsXHJcbiAgICAnU3RhcnRFdmVudCc6ICflvIDlp4vkuovku7YnLFxyXG4gICAgJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfkuK3pl7Tkuovku7YnLFxyXG4gICAgJ0VuZCBFdmVudCc6ICfnu5PmnZ/kuovku7YnLFxyXG4gICAgJ0VuZEV2ZW50JzogJ+e7k+adn+S6i+S7ticsXHJcbiAgICAnQ3JlYXRlIEdhdGV3YXknOiAn5Yib5bu6572R5YWzJyxcclxuICAgICdHYXRlV2F5Jzon572R5YWzJyxcclxuICAgICdDcmVhdGUgSW50ZXJtZWRpYXRlL0JvdW5kYXJ5IEV2ZW50JzogJ+WIm+W7uuS4remXtC/ovrnnlYzkuovku7YnLFxyXG4gICAgJ01lc3NhZ2UgU3RhcnQgRXZlbnQnOiAn5raI5oGv5byA5aeL5LqL5Lu2JyxcclxuICAgICdUaW1lciBTdGFydCBFdmVudCc6ICflrprml7blvIDlp4vkuovku7YnLFxyXG4gICAgJ0NvbmRpdGlvbmFsIFN0YXJ0IEV2ZW50JzogJ+adoeS7tuW8gOWni+S6i+S7ticsXHJcbiAgICAnU2lnbmFsIFN0YXJ0IEV2ZW50JzogJ+S/oeWPt+W8gOWni+S6i+S7ticsXHJcbiAgICAnRXJyb3IgU3RhcnQgRXZlbnQnOiAn6ZSZ6K+v5byA5aeL5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50JzogJ+WNh+e6p+W8gOWni+S6i+S7ticsXHJcbiAgICAnQ29tcGVuc2F0aW9uIFN0YXJ0IEV2ZW50JzogJ+ihpeWBv+W8gOWni+S6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5raI5oGv5byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdUaW1lciBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5a6a5pe25byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdDb25kaXRpb25hbCBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5p2h5Lu25byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdTaWduYWwgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+S/oeWPt+W8gOWni+S6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnRXNjYWxhdGlvbiBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5Y2H57qn5byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdNZXNzYWdlIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfmtojmga/kuK3pl7TmjZXojrfkuovku7YnLFxyXG4gICAgJ01lc3NhZ2UgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+a2iOaBr+S4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnVGltZXIgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JzogJ+WumuaXtuS4remXtOaNleiOt+S6i+S7ticsXHJcbiAgICAnRXNjYWxhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnOiAn5Y2H57qn5Lit6Ze05oqb5Ye65LqL5Lu2JyxcclxuICAgICdDb25kaXRpb25hbCBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnOiAn5p2h5Lu25Lit6Ze05o2V6I635LqL5Lu2JyxcclxuICAgICdMaW5rIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfpk77mjqXkuK3pl7TmjZXojrfkuovku7YnLFxyXG4gICAgJ0xpbmsgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+mTvuaOpeS4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnQ29tcGVuc2F0aW9uIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfooaXlgb/kuK3pl7Tmipvlh7rkuovku7YnLFxyXG4gICAgJ1NpZ25hbCBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnOiAn5L+h5Y+35Lit6Ze05o2V6I635LqL5Lu2JyxcclxuICAgICdTaWduYWwgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+S/oeWPt+S4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBFbmQgRXZlbnQnOiAn5raI5oGv57uT5p2f5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIEVuZCBFdmVudCc6ICflrprml7bnu5PmnZ/kuovku7YnLFxyXG4gICAgJ0Vycm9yIEVuZCBFdmVudCc6ICfplJnor6/nu5PmnZ/kuovku7YnLFxyXG4gICAgJ0NhbmNlbCBFbmQgRXZlbnQnOiAn5Y+W5raI57uT5p2f5LqL5Lu2JyxcclxuICAgICdDb21wZW5zYXRpb24gRW5kIEV2ZW50JzogJ+ihpeWBv+e7k+adn+S6i+S7ticsXHJcbiAgICAnU2lnbmFsIEVuZCBFdmVudCc6ICfkv6Hlj7fnu5PmnZ/kuovku7YnLFxyXG4gICAgJ1Rlcm1pbmF0ZSBFbmQgRXZlbnQnOiAn57uI5q2i57uT5p2f5LqL5Lu2JyxcclxuICAgICdNZXNzYWdlIEJvdW5kYXJ5IEV2ZW50JzogJ+a2iOaBr+i+ueeVjOS6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5raI5oGv6L6555WM5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdUaW1lciBCb3VuZGFyeSBFdmVudCc6ICflrprml7bovrnnlYzkuovku7YnLFxyXG4gICAgJ1RpbWVyIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICflrprml7bovrnnlYzkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxyXG4gICAgJ0VzY2FsYXRpb24gQm91bmRhcnkgRXZlbnQnOiAn5Y2H57qn6L6555WM5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICfljYfnuqfovrnnlYzkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxyXG4gICAgJ0NvbmRpdGlvbmFsIEJvdW5kYXJ5IEV2ZW50JzogJ+adoeS7tui+ueeVjOS6i+S7ticsXHJcbiAgICAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+adoeS7tui+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnRXJyb3IgQm91bmRhcnkgRXZlbnQnOiAn6ZSZ6K+v6L6555WM5LqL5Lu2JyxcclxuICAgICdDYW5jZWwgQm91bmRhcnkgRXZlbnQnOiAn5Y+W5raI6L6555WM5LqL5Lu2JyxcclxuICAgICdTaWduYWwgQm91bmRhcnkgRXZlbnQnOiAn5L+h5Y+36L6555WM5LqL5Lu2JyxcclxuICAgICdTaWduYWwgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+S/oeWPt+i+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnQ29tcGVuc2F0aW9uIEJvdW5kYXJ5IEV2ZW50JzogJ+ihpeWBv+i+ueeVjOS6i+S7ticsXHJcbiAgICAnRXhjbHVzaXZlIEdhdGV3YXknOiAn5LqS5pal572R5YWzJyxcclxuICAgICdQYXJhbGxlbCBHYXRld2F5JzogJ+W5tuihjOe9keWFsycsXHJcbiAgICAnSW5jbHVzaXZlIEdhdGV3YXknOiAn55u45a65572R5YWzJyxcclxuICAgICdDb21wbGV4IEdhdGV3YXknOiAn5aSN5p2C572R5YWzJyxcclxuICAgICdFdmVudCBiYXNlZCBHYXRld2F5JzogJ+S6i+S7tue9keWFsycsXHJcbiAgICAnVHJhbnNhY3Rpb24nOiAn6L2s6L+QJyxcclxuICAgICdTdWIgUHJvY2Vzcyc6ICflrZDmtYHnqIsnLFxyXG4gICAgJ0V2ZW50IFN1YiBQcm9jZXNzJzogJ+S6i+S7tuWtkOa1geeoiycsXHJcbiAgICAnQ29sbGFwc2VkIFBvb2wnOiAn5oqY5Y+g5rGgJyxcclxuICAgICdFeHBhbmRlZCBQb29sJzogJ+WxleW8gOaxoCcsXHJcbiAgICAvLyBFcnJvcnNcclxuICAgICdubyBwYXJlbnQgZm9yIHtlbGVtZW50fSBpbiB7cGFyZW50fSc6ICflnKh7cGFyZW50femHjO+8jHtlbGVtZW50feayoeacieeItuexuycsXHJcbiAgICAnbm8gc2hhcGUgdHlwZSBzcGVjaWZpZWQnOiAn5rKh5pyJ5oyH5a6a55qE5b2i54q257G75Z6LJyxcclxuICAgICdmbG93IGVsZW1lbnRzIG11c3QgYmUgY2hpbGRyZW4gb2YgcG9vbHMvcGFydGljaXBhbnRzJzogJ+a1geWFg+e0oOW/hemhu+aYr+axoC/lj4LkuI7ogIXnmoTlrZDnsbsnLFxyXG4gICAgJ291dCBvZiBib3VuZHMgcmVsZWFzZSc6ICdvdXQgb2YgYm91bmRzIHJlbGVhc2UnLFxyXG4gICAgJ21vcmUgdGhhbiB7Y291bnR9IGNoaWxkIGxhbmVzJzogJ+WtkOmBk+Wkp+S6jntjb3VudH0gJyxcclxuICAgICdlbGVtZW50IHJlcXVpcmVkJzogJ+WFg+e0oOS4jeiDveS4uuepuicsXHJcbiAgICAnZGlhZ3JhbSBub3QgcGFydCBvZiBicG1uOkRlZmluaXRpb25zJzogJ+a1geeoi+WbvuS4jeespuWQiGJwbW7op4TojIMnLFxyXG4gICAgJ25vIGRpYWdyYW0gdG8gZGlzcGxheSc6ICfmsqHmnInlj6/lsZXnpLrnmoTmtYHnqIvlm74nLFxyXG4gICAgJ25vIHByb2Nlc3Mgb3IgY29sbGFib3JhdGlvbiB0byBkaXNwbGF5JzogJ+ayoeacieWPr+WxleekuueahOa1geeoiy/ljY/kvZwnLFxyXG4gICAgJ2VsZW1lbnQge2VsZW1lbnR9IHJlZmVyZW5jZWQgYnkge3JlZmVyZW5jZWR9I3twcm9wZXJ0eX0gbm90IHlldCBkcmF3bic6ICfnlLF7cmVmZXJlbmNlZH0je3Byb3BlcnR5feW8leeUqOeahHtlbGVtZW50feWFg+e0oOS7jeacque7mOWIticsXHJcbiAgICAnYWxyZWFkeSByZW5kZXJlZCB7ZWxlbWVudH0nOiAne2VsZW1lbnR9IOW3suiiq+a4suafkycsXHJcbiAgICAnZmFpbGVkIHRvIGltcG9ydCB7ZWxlbWVudH0nOiAn5a+85YWle2VsZW1lbnR95aSx6LSlJyxcclxuICAgIC8v5bGe5oCn6Z2i5p2/55qE5Y+C5pWwXHJcbiAgICAnSWQnOifnvJblj7cnLFxyXG4gICAgJ05hbWUnOiflkI3np7AnLFxyXG4gICAgJ0dlbmVyYWwnOifluLjop4QnLFxyXG4gICAgJ0RldGFpbHMnOifor6bmg4UnLFxyXG4gICAgJ01lc3NhZ2UgTmFtZSc6J+a2iOaBr+WQjeensCcsXHJcbiAgICAnTWVzc2FnZSc6J+a2iOaBrycsXHJcbiAgICAnSW5pdGlhdG9yJzon5Yib5bu66ICFJyxcclxuICAgICdBc3luY2hyb25vdXMgQ29udGludWF0aW9ucyc6J+aMgee7reW8guatpScsXHJcbiAgICAnQXN5bmNocm9ub3VzIEJlZm9yZSc6J+W8guatpeWJjScsXHJcbiAgICAnQXN5bmNocm9ub3VzIEFmdGVyJzon5byC5q2l5ZCOJyxcclxuICAgICdKb2IgQ29uZmlndXJhdGlvbic6J+W3peS9nOmFjee9ricsXHJcbiAgICAnRXhjbHVzaXZlJzon5o6S6ZmkJyxcclxuICAgICdKb2IgUHJpb3JpdHknOiflt6XkvZzkvJjlhYjnuqcnLFxyXG4gICAgJ1JldHJ5IFRpbWUgQ3ljbGUnOifph43or5Xml7bpl7TlkajmnJ8nLFxyXG4gICAgJ0RvY3VtZW50YXRpb24nOifmlofmoaMnLFxyXG4gICAgJ0VsZW1lbnQgRG9jdW1lbnRhdGlvbic6J+WFg+e0oOaWh+ahoycsXHJcbiAgICAnSGlzdG9yeSBDb25maWd1cmF0aW9uJzon5Y6G5Y+y6YWN572uJyxcclxuICAgICdIaXN0b3J5IFRpbWUgVG8gTGl2ZSc6J+WOhuWPsueahOeUn+WtmOaXtumXtCcsXHJcbiAgICAnRm9ybXMnOifooajljZUnLFxyXG4gICAgJ0Zvcm0gS2V5Jzon6KGo5Y2Va2V5JyxcclxuICAgICdGb3JtIEZpZWxkcyc6J+ihqOWNleWtl+autScsXHJcbiAgICAnQnVzaW5lc3MgS2V5Jzon5Lia5Yqha2V5JyxcclxuICAgICdGb3JtIEZpZWxkJzon6KGo5Y2V5a2X5q61JyxcclxuICAgICdJRCc6J+e8luWPtycsXHJcbiAgICAnVHlwZSc6J+exu+WeiycsXHJcbiAgICAnTGFiZWwnOiflkI3np7AnLFxyXG4gICAgJ0RlZmF1bHQgVmFsdWUnOifpu5jorqTlgLwnLFxyXG4gICAgJ1ZhbGlkYXRpb24nOifmoKHpqownLFxyXG4gICAgJ0FkZCBDb25zdHJhaW50Jzon5re75Yqg57qm5p2fJyxcclxuICAgICdDb25maWcnOifphY3nva4nLFxyXG4gICAgJ1Byb3BlcnRpZXMnOiflsZ7mgKcnLFxyXG4gICAgJ0FkZCBQcm9wZXJ0eSc6J+a3u+WKoOWxnuaApycsXHJcbiAgICAnVmFsdWUnOiflgLwnLFxyXG4gICAgJ0FkZCc6J+a3u+WKoCcsXHJcbiAgICAnVmFsdWVzJzon5YC8JyxcclxuICAgICdBZGQgVmFsdWUnOifmt7vliqDlgLwnLFxyXG4gICAgJ0xpc3RlbmVycyc6J+ebkeWQrOWZqCcsXHJcbiAgICAnRXhlY3V0aW9uIExpc3RlbmVyJzon5omn6KGM55uR5ZCsJyxcclxuICAgICdFdmVudCBUeXBlJzon5LqL5Lu257G75Z6LJyxcclxuICAgICdMaXN0ZW5lciBUeXBlJzon55uR5ZCs5Zmo57G75Z6LJyxcclxuICAgICdKYXZhIENsYXNzJzonSmF2YeexuycsXHJcbiAgICAnRXhwcmVzc2lvbic6J+ihqOi+vuW8jycsXHJcbiAgICAnTXVzdCBwcm92aWRlIGEgdmFsdWUnOiflv4Xpobvmj5DkvpvkuIDkuKrlgLwnLFxyXG4gICAgJ0RlbGVnYXRlIEV4cHJlc3Npb24nOifku6PnkIbooajovr7lvI8nLFxyXG4gICAgJ1NjcmlwdCc6J+iEmuacrCcsXHJcbiAgICAnU2NyaXB0IEZvcm1hdCc6J+iEmuacrOagvOW8jycsXHJcbiAgICAnU2NyaXB0IFR5cGUnOifohJrmnKznsbvlnosnLFxyXG4gICAgJ0lubGluZSBTY3JpcHQnOiflhoXogZTohJrmnKwnLFxyXG4gICAgJ0V4dGVybmFsIFNjcmlwdCc6J+WklumDqOiEmuacrCcsXHJcbiAgICAnUmVzb3VyY2UnOifotYTmupAnLFxyXG4gICAgJ0ZpZWxkIEluamVjdGlvbic6J+Wtl+auteazqOWFpScsXHJcbiAgICAnRXh0ZW5zaW9ucyc6J+aJqeWxlScsXHJcbiAgICAnSW5wdXQvT3V0cHV0Jzon6L6T5YWlL+i+k+WHuicsXHJcbiAgICAnSW5wdXQgUGFyYW1ldGVycyc6J+i+k+WFpeWPguaVsCcsXHJcbiAgICAnT3V0cHV0IFBhcmFtZXRlcnMnOifovpPlh7rlj4LmlbAnLFxyXG4gICAgJ1BhcmFtZXRlcnMnOiflj4LmlbAnLFxyXG4gICAgJ091dHB1dCBQYXJhbWV0ZXInOifovpPlh7rlj4LmlbAnLFxyXG4gICAgJ1RpbWVyIERlZmluaXRpb24gVHlwZSc6J+WumuaXtuWZqOWumuS5ieexu+WeiycsXHJcbiAgICAnVGltZXIgRGVmaW5pdGlvbic6J+WumuaXtuWZqOWumuS5iScsXHJcbiAgICAnRGF0ZSc6J+aXpeacnycsXHJcbiAgICAnRHVyYXRpb24nOifmjIHnu60nLFxyXG4gICAgJ0N5Y2xlJzon5b6q546vJyxcclxuICAgICdTaWduYWwnOifkv6Hlj7cnLFxyXG4gICAgJ1NpZ25hbCBOYW1lJzon5L+h5Y+35ZCN56ewJyxcclxuICAgICdFc2NhbGF0aW9uJzon5Y2H57qnJyxcclxuICAgICdFcnJvcic6J+mUmeivrycsXHJcbiAgICAnTGluayBOYW1lJzon6ZO+5o6l5ZCN56ewJyxcclxuICAgICdDb25kaXRpb24nOifmnaHku7blkI3np7AnLFxyXG4gICAgJ1ZhcmlhYmxlIE5hbWUnOiflj5jph4/lkI3np7AnLFxyXG4gICAgJ1ZhcmlhYmxlIEV2ZW50Jzon5Y+Y6YeP5LqL5Lu2JyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUgY2hhbmdlIGV2ZW50IGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuJzon5aSa5Liq5Y+Y6YeP5LqL5Lu25Lul6YCX5Y+36ZqU5byAJyxcclxuICAgICdXYWl0IGZvciBDb21wbGV0aW9uJzon562J5b6F5a6M5oiQJyxcclxuICAgICdBY3Rpdml0eSBSZWYnOifmtLvliqjlj4LogIMnLFxyXG4gICAgJ1ZlcnNpb24gVGFnJzon54mI5pys5qCH562+JyxcclxuICAgICdFeGVjdXRhYmxlJzon5Y+v5omn6KGM5paH5Lu2JyxcclxuICAgICdFeHRlcm5hbCBUYXNrIENvbmZpZ3VyYXRpb24nOifmianlsZXku7vliqHphY3nva4nLFxyXG4gICAgJ1Rhc2sgUHJpb3JpdHknOifku7vliqHkvJjlhYjnuqcnLFxyXG4gICAgJ0V4dGVybmFsJzon5aSW6YOoJyxcclxuICAgICdDb25uZWN0b3InOifov57mjqXlmagnLFxyXG4gICAgJ011c3QgY29uZmlndXJlIENvbm5lY3Rvcic6J+W/hemhu+mFjee9rui/nuaOpeWZqCcsXHJcbiAgICAnQ29ubmVjdG9yIElkJzon6L+e5o6l5Zmo57yW5Y+3JyxcclxuICAgICdJbXBsZW1lbnRhdGlvbic6J+WunueOsOaWueW8jycsXHJcbiAgICAnRmllbGQgSW5qZWN0aW9ucyc6J+Wtl+auteazqOWFpScsXHJcbiAgICAnRmllbGRzJzon5a2X5q61JyxcclxuICAgICdSZXN1bHQgVmFyaWFibGUnOifnu5Pmnpzlj5jph48nLFxyXG4gICAgJ1RvcGljJzon5Li76aKYJyxcclxuICAgICdDb25maWd1cmUgQ29ubmVjdG9yJzon6YWN572u6L+e5o6l5ZmoJyxcclxuICAgICdJbnB1dCBQYXJhbWV0ZXInOifovpPlhaXlj4LmlbAnLFxyXG4gICAgJ0Fzc2lnbmVlJzon5Luj55CG5Lq6JyxcclxuICAgICdDYW5kaWRhdGUgVXNlcnMnOiflgJnpgInnlKjmiLcnLFxyXG4gICAgJ0NhbmRpZGF0ZSBHcm91cHMnOiflgJnpgInnu4QnLFxyXG4gICAgJ0R1ZSBEYXRlJzon5Yiw5pyf5pe26Ze0JyxcclxuICAgICdGb2xsb3cgVXAgRGF0ZSc6J+i3n+i4quaXpeacnycsXHJcbiAgICAnUHJpb3JpdHknOifkvJjlhYjnuqcnLFxyXG4gICAgJ1RoZSBmb2xsb3cgdXAgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJzon6Lef6Liq5pel5pyf5b+F6aG756ym5ZCIRUzooajovr7lvI/vvIzlpoLvvJogJHtzb21lRGF0ZX0gLOaIluiAheS4gOS4qklTT+agh+WHhuaXpeacn++8jOWmgu+8mjIwMTUtMDYtMjZUMDk6NTQ6MDAnLFxyXG4gICAgJ1RoZSBkdWUgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJzon6Lef6Liq5pel5pyf5b+F6aG756ym5ZCIRUzooajovr7lvI/vvIzlpoLvvJogJHtzb21lRGF0ZX0gLOaIluiAheS4gOS4qklTT+agh+WHhuaXpeacn++8jOWmgu+8mjIwMTUtMDYtMjZUMDk6NTQ6MDAnLFxyXG4gICAgJ1ZhcmlhYmxlcyc6J+WPmOmHjycsXHJcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgQ29uZmlndXJhdGlvbic6J+WAmemAieW8gOWni+mFjee9ricsXHJcbiAgICAnVGFzayBMaXN0ZW5lcic6J+S7u+WKoeebkeWQrOWZqCcsXHJcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgR3JvdXBzJzon5YCZ6YCJ5byA5aeL57uEJyxcclxuICAgICdDYW5kaWRhdGUgU3RhcnRlciBVc2Vycyc6J+WAmemAieW8gOWni+eUqOaItycsXHJcbiAgICAnVGFza2xpc3QgQ29uZmlndXJhdGlvbic6J+S7u+WKoeWIl+ihqOmFjee9ricsXHJcbiAgICAnU3RhcnRhYmxlJzon5ZCv5YqoJyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nOifmjIflrprlpJrkuKrnu4Qs55So6YCX5Y+35YiG6ZqUJyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdXNlciBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0Lic6J+aMh+WumuWkmuS4queUqOaItyznlKjpgJflj7fliIbpmpQnLFxyXG4gICAgJ1RoaXMgbWFwcyB0byB0aGUgcHJvY2VzcyBkZWZpbml0aW9uIGtleS4nOifov5nkvJrmmKDlsITkuLrmtYHnqIvlrprkuYnnmoTplK4nLFxyXG4gICAgJ0NhbGxBY3Rpdml0eSBUeXBlJzon6LCD55So5rS75Yqo57G75Z6LJyxcclxuICAgICdDb25kaXRpb24gVHlwZSc6J+adoeS7tuexu+WeiycsXHJcbiAgICAnQ3JlYXRlIFVzZXJUYXNrJzon5Yib5bu655So5oi35Lu75YqhJyxcclxuICAgICdDcmVhdGUgQ2FsbEFjdGl2aXR5Jzon5Yib5bu66LCD55So5rS75YqoJyxcclxuICAgICdDYWxsZWQgRWxlbWVudCc6J+iwg+eUqOWFg+e0oCcsXHJcbiAgICAnQ3JlYXRlIERhdGFPYmplY3RSZWZlcmVuY2UnOifliJvlu7rmlbDmja7lr7nosaHlvJXnlKgnLFxyXG4gICAgJ0NyZWF0ZSBEYXRhU3RvcmVSZWZlcmVuY2UnOifliJvlu7rmlbDmja7lrZjlgqjlvJXnlKgnLFxyXG4gICAgJ011bHRpIEluc3RhbmNlJzon5aSa5a6e5L6LJyxcclxuICAgICdMb29wIENhcmRpbmFsaXR5Jzon5a6e5L6L5pWw6YePJyxcclxuICAgICdDb2xsZWN0aW9uJzon5Lu75Yqh5Y+C5LiO5Lq65YiX6KGoJyxcclxuICAgICdFbGVtZW50IFZhcmlhYmxlJzon5YWD57Sg5Y+Y6YePJyxcclxuICAgICdDb21wbGV0aW9uIENvbmRpdGlvbic6J+WujOaIkOadoeS7tidcclxufTtcclxuIiwibW9kdWxlLmV4cG9ydHMgPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxyXFxuPGJwbW4yOmRlZmluaXRpb25zIHhtbG5zOnhzaT1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcXFwiIHhtbG5zOmJwbW4yPVxcXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9CUE1OLzIwMTAwNTI0L01PREVMXFxcIiB4bWxuczpicG1uZGk9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvRElcXFwiIHhtbG5zOmRjPVxcXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1xcXCIgeG1sbnM6ZGk9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXFxcIiB4c2k6c2NoZW1hTG9jYXRpb249XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUwgQlBNTjIwLnhzZFxcXCIgaWQ9XFxcInNhbXBsZS1kaWFncmFtXFxcIiB0YXJnZXROYW1lc3BhY2U9XFxcImh0dHA6Ly9hY3Rpdml0aS5vcmcvYnBtblxcXCI+XFxyXFxuICA8YnBtbjI6cHJvY2VzcyBpZD1cXFwiUHJvY2Vzc18xXFxcIiBpc0V4ZWN1dGFibGU9XFxcInRydWVcXFwiPlxcclxcbiAgICA8YnBtbjI6c3RhcnRFdmVudCBpZD1cXFwiU3RhcnRFdmVudF8xXFxcIi8+XFxyXFxuICA8L2JwbW4yOnByb2Nlc3M+XFxyXFxuICA8YnBtbmRpOkJQTU5EaWFncmFtIGlkPVxcXCJCUE1ORGlhZ3JhbV8xXFxcIj5cXHJcXG4gICAgPGJwbW5kaTpCUE1OUGxhbmUgaWQ9XFxcIkJQTU5QbGFuZV8xXFxcIiBicG1uRWxlbWVudD1cXFwiUHJvY2Vzc18xXFxcIj5cXHJcXG4gICAgICA8YnBtbmRpOkJQTU5TaGFwZSBpZD1cXFwiX0JQTU5TaGFwZV9TdGFydEV2ZW50XzJcXFwiIGJwbW5FbGVtZW50PVxcXCJTdGFydEV2ZW50XzFcXFwiPlxcclxcbiAgICAgICAgPGRjOkJvdW5kcyBoZWlnaHQ9XFxcIjM2LjBcXFwiIHdpZHRoPVxcXCIzNi4wXFxcIiB4PVxcXCI0MTIuMFxcXCIgeT1cXFwiMjQwLjBcXFwiLz5cXHJcXG4gICAgICA8L2JwbW5kaTpCUE1OU2hhcGU+XFxyXFxuICAgIDwvYnBtbmRpOkJQTU5QbGFuZT5cXHJcXG4gIDwvYnBtbmRpOkJQTU5EaWFncmFtPlxcclxcbjwvYnBtbjI6ZGVmaW5pdGlvbnM+XCI7XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRoYXQgZGVjaWRlcyB1cG9uIHRoZSB2aXNpYmlsaXR5IC8gZWRpdGFibGVcclxuICogc3RhdGUgb2YgcHJvcGVydGllcyBpbiB0aGUgcHJvcGVydGllcyBwYW5lbC5cclxuICpcclxuICogSW1wbGVtZW50b3JzIG11c3Qgc3ViY2xhc3MgdGhpcyBjb21wb25lbnQgYW5kIG92ZXJyaWRlXHJcbiAqIHtAbGluayBQcm9wZXJ0aWVzQWN0aXZhdG9yI2lzRW50cnlWaXNpYmxlfSBhbmRcclxuICoge0BsaW5rIFByb3BlcnRpZXNBY3RpdmF0b3IjaXNQcm9wZXJ0eUVkaXRhYmxlfSB0byBwcm92aWRlXHJcbiAqIGN1c3RvbSBiZWhhdmlvci5cclxuICpcclxuICogQGNsYXNzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge051bWJlcn0gW3ByaW9yaXR5XSBhdCB3aGljaCBwcmlvcml0eSB0byBob29rIGludG8gdGhlIGFjdGl2YXRpb25cclxuICovXHJcbmZ1bmN0aW9uIFByb3BlcnRpZXNBY3RpdmF0b3IoZXZlbnRCdXMsIHByaW9yaXR5KSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBwcmlvcml0eSA9IHByaW9yaXR5IHx8IERFRkFVTFRfUFJJT1JJVFk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdwcm9wZXJ0aWVzUGFuZWwuaXNFbnRyeVZpc2libGUnLCBwcmlvcml0eSwgZnVuY3Rpb24oZSkge1xyXG4gICAgcmV0dXJuIHNlbGYuaXNFbnRyeVZpc2libGUoZS5lbnRyeSwgZS5lbGVtZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oJ3Byb3BlcnRpZXNQYW5lbC5pc1Byb3BlcnR5RWRpdGFibGUnLCBwcmlvcml0eSwgZnVuY3Rpb24oZSkge1xyXG4gICAgcmV0dXJuIHNlbGYuaXNQcm9wZXJ0eUVkaXRhYmxlKGUuZW50cnksIGUucHJvcGVydHlOYW1lLCBlLmVsZW1lbnQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5Qcm9wZXJ0aWVzQWN0aXZhdG9yLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHJvcGVydGllc0FjdGl2YXRvcjtcclxuXHJcblxyXG4vKipcclxuICogU2hvdWxkIHRoZSBnaXZlbiBlbnRyeSBiZSB2aXNpYmxlIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgIFByb3BlcnRpZXNBY3RpdmF0b3IjaXNFbnRyeVZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICovXHJcblByb3BlcnRpZXNBY3RpdmF0b3IucHJvdG90eXBlLmlzRW50cnlWaXNpYmxlID0gZnVuY3Rpb24oZW50cnksIGVsZW1lbnQpIHtcclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG91bGQgdGhlIGdpdmVuIHByb3BlcnR5IGJlIGVkaXRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnRcclxuICpcclxuICogQG1ldGhvZCAgUHJvcGVydGllc0FjdGl2YXRvciNpc1Byb3BlcnR5RWRpdGFibGVcclxuICpcclxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eU5hbWVcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gKi9cclxuUHJvcGVydGllc0FjdGl2YXRvci5wcm90b3R5cGUuaXNQcm9wZXJ0eUVkaXRhYmxlID0gZnVuY3Rpb24oZW50cnksIHByb3BlcnR5TmFtZSwgZWxlbWVudCkge1xyXG4gIHJldHVybiB0cnVlO1xyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbUNsZWFyID0gcmVxdWlyZSgnbWluLWRvbScpLmNsZWFyLFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyksXHJcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxyXG4gICAgSWRzID0gcmVxdWlyZSgnaWRzJykuZGVmYXVsdDtcclxuXHJcbnZhciBTUEFDRV9SRUdFWCA9IC9cXHMvO1xyXG5cclxuLy8gZm9yIFFOYW1lIHZhbGlkYXRpb24gYXMgcGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVDaGFyXHJcbnZhciBRTkFNRV9SRUdFWCA9IC9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaTtcclxuXHJcbi8vIGZvciBJRCB2YWxpZGF0aW9uIGFzIHBlciBCUE1OIFNjaGVtYSAoUU5hbWUgLSBOYW1lc3BhY2UpXHJcbnZhciBJRF9SRUdFWCA9IC9eW2Etel9dW1xcdy0uXSokL2k7XHJcblxyXG52YXIgUExBQ0VIT0xERVJfUkVHRVggPSAvXFwkXFx7KFtefV0qKVxcfS9nO1xyXG5cclxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcclxuICAnJic6ICcmYW1wOycsXHJcbiAgJzwnOiAnJmx0OycsXHJcbiAgJz4nOiAnJmd0OycsXHJcbiAgJ1wiJzogJyZxdW90OycsXHJcbiAgJ1xcJyc6ICcmIzM5OydcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNlbGVjdGVkT3B0aW9uKHNlbGVjdEJveCkge1xyXG4gIGlmIChzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0Qm94Lm9wdGlvbnNbc2VsZWN0Qm94LnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VsZWN0ZWRPcHRpb24gPSBzZWxlY3RlZE9wdGlvbjtcclxuXHJcblxyXG5mdW5jdGlvbiBzZWxlY3RlZFR5cGUoZWxlbWVudFN5bnRheCwgaW5wdXROb2RlKSB7XHJcbiAgdmFyIHR5cGVTZWxlY3QgPSBkb21RdWVyeShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpO1xyXG4gIHJldHVybiBzZWxlY3RlZE9wdGlvbih0eXBlU2VsZWN0KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VsZWN0ZWRUeXBlID0gc2VsZWN0ZWRUeXBlO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgcm9vdCBlbGVtZW50IHRoZSBkb2N1bWVudCB0aGlzXHJcbiAqIGJ1c2luZXNzIG9iamVjdCBpcyBjb250YWluZWQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRSb290KGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgdmFyIHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xyXG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCkge1xyXG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XHJcbiAgfVxyXG4gIHJldHVybiBwYXJlbnQ7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldFJvb3QgPSBnZXRSb290O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBmaWx0ZXJzIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCB3aGljaCBoYXZlIGEgZ2l2ZW4gdHlwZS5cclxuICogcmVtb3ZlcyBhIG5ldyBsaXN0XHJcbiAqL1xyXG5mdW5jdGlvbiBmaWx0ZXJFbGVtZW50c0J5VHlwZShvYmplY3RMaXN0LCB0eXBlKSB7XHJcbiAgdmFyIGxpc3QgPSBvYmplY3RMaXN0IHx8IFtdO1xyXG4gIHZhciByZXN1bHQgPSBbXTtcclxuICBmb3JFYWNoKGxpc3QsIGZ1bmN0aW9uKG9iaikge1xyXG4gICAgaWYgKGlzKG9iaiwgdHlwZSkpIHtcclxuICAgICAgcmVzdWx0LnB1c2gob2JqKTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5maWx0ZXJFbGVtZW50c0J5VHlwZSA9IGZpbHRlckVsZW1lbnRzQnlUeXBlO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XHJcbiAgdmFyIHJvb3QgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlckVsZW1lbnRzQnlUeXBlKHJvb3Qucm9vdEVsZW1lbnRzLCByZWZlcmVuY2VkVHlwZSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRSb290RWxlbWVudHNCeVR5cGUgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUFsbENoaWxkcmVuKGRvbUVsZW1lbnQpIHtcclxuICB3aGlsZSAoZG9tRWxlbWVudC5maXJzdENoaWxkKSB7XHJcbiAgICBkb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVBbGxDaGlsZHJlbiA9IHJlbW92ZUFsbENoaWxkcmVuO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBhZGRzIGFuIGVtcHR5IG9wdGlvbiB0byB0aGUgbGlzdFxyXG4gKi9cclxuZnVuY3Rpb24gYWRkRW1wdHlQYXJhbWV0ZXIobGlzdCkge1xyXG4gIHJldHVybiBsaXN0LnB1c2goeyAnbGFiZWwnOiAnJywgJ3ZhbHVlJzogJycsICduYW1lJzogJycgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmFkZEVtcHR5UGFyYW1ldGVyID0gYWRkRW1wdHlQYXJhbWV0ZXI7XHJcblxyXG5cclxuLyoqXHJcbiAqIHJldHVybnMgYSBsaXN0IHdpdGggYWxsIHJvb3QgZWxlbWVudHMgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXIgJ3JlZmVyZW5jZWRUeXBlJ1xyXG4gKi9cclxuZnVuY3Rpb24gcmVmcmVzaE9wdGlvbnNNb2RlbChidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUpIHtcclxuICB2YXIgbW9kZWwgPSBbXTtcclxuICB2YXIgcmVmZXJhYmxlT2JqZWN0cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcclxuICBmb3JFYWNoKHJlZmVyYWJsZU9iamVjdHMsIGZ1bmN0aW9uKG9iaikge1xyXG4gICAgbW9kZWwucHVzaCh7XHJcbiAgICAgIGxhYmVsOiAob2JqLm5hbWUgfHwgJycpICsgJyAoaWQ9JytvYmouaWQrJyknLFxyXG4gICAgICB2YWx1ZTogb2JqLmlkLFxyXG4gICAgICBuYW1lOiBvYmoubmFtZVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG1vZGVsO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZWZyZXNoT3B0aW9uc01vZGVsID0gcmVmcmVzaE9wdGlvbnNNb2RlbDtcclxuXHJcblxyXG4vKipcclxuICogZmlsbHMgdGhlIGRyb3AgZG93biB3aXRoIG9wdGlvbnNcclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnNEcm9wRG93bihkb21TZWxlY3RvciwgYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlLCBlbnRyeU5vZGUpIHtcclxuICB2YXIgb3B0aW9ucyA9IHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcclxuICBhZGRFbXB0eVBhcmFtZXRlcihvcHRpb25zKTtcclxuICB2YXIgc2VsZWN0Qm94ID0gZG9tUXVlcnkoZG9tU2VsZWN0b3IsIGVudHJ5Tm9kZSk7XHJcbiAgZG9tQ2xlYXIoc2VsZWN0Qm94KTtcclxuXHJcbiAgZm9yRWFjaChvcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgIHZhciBvcHRpb25FbnRyeSA9IGRvbWlmeSgnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbi52YWx1ZSkgKyAnXCI+JyArIGVzY2FwZUhUTUwob3B0aW9uLmxhYmVsKSArICc8L29wdGlvbj4nKTtcclxuICAgIHNlbGVjdEJveC5hcHBlbmRDaGlsZChvcHRpb25FbnRyeSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnVwZGF0ZU9wdGlvbnNEcm9wRG93biA9IHVwZGF0ZU9wdGlvbnNEcm9wRG93bjtcclxuXHJcblxyXG4vKipcclxuICogY2hlY2tzIHdoZXRoZXIgdGhlIGlkIHZhbHVlIGlzIHZhbGlkXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYm9cclxuICogQHBhcmFtIHtTdHJpbmd9IGlkVmFsdWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ30gZXJyb3IgbWVzc2FnZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYXNzaWduZWQgPSBiby4kbW9kZWwuaWRzLmFzc2lnbmVkKGlkVmFsdWUpO1xyXG5cclxuICB2YXIgaWRFeGlzdHMgPSBhc3NpZ25lZCAmJiBhc3NpZ25lZCAhPT0gYm87XHJcblxyXG4gIGlmICghaWRWYWx1ZSB8fCBpZEV4aXN0cykge1xyXG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnRWxlbWVudCBtdXN0IGhhdmUgYW4gdW5pcXVlIGlkLicpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuaXNJZFZhbGlkID0gaXNJZFZhbGlkO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlkVmFsdWUgPSBzdHJpcFBsYWNlaG9sZGVycyhpZFZhbHVlKTtcclxuXHJcbiAgaWYgKGNvbnRhaW5zU3BhY2UoaWRWYWx1ZSkpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lkIG11c3Qgbm90IGNvbnRhaW4gc3BhY2VzLicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFJRF9SRUdFWC50ZXN0KGlkVmFsdWUpKSB7XHJcblxyXG4gICAgaWYgKFFOQU1FX1JFR0VYLnRlc3QoaWRWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBub3QgY29udGFpbiBwcmVmaXguJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBiZSBhIHZhbGlkIFFOYW1lLicpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVJZCA9IHZhbGlkYXRlSWQ7XHJcblxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xyXG4gIHJldHVybiBTUEFDRV9SRUdFWC50ZXN0KHZhbHVlKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY29udGFpbnNTcGFjZSA9IGNvbnRhaW5zU3BhY2U7XHJcblxyXG5cclxuZnVuY3Rpb24gc3RyaXBQbGFjZWhvbGRlcnMoaWRWYWx1ZSkge1xyXG5cclxuICAvLyByZXBsYWNlIGV4cHJlc3Npb24gZS5nLiAke1ZFUlNJT05fVEFHfVxyXG4gIC8vIHVzZSBvbmx5IHRoZSBjb250ZW50IGJldHdlZW4gJHt9XHJcbiAgLy8gZm9yIHRoZSBSRUdFWCBjaGVja1xyXG4gIHJldHVybiBpZFZhbHVlLnJlcGxhY2UoUExBQ0VIT0xERVJfUkVHRVgsICckMScpO1xyXG59XHJcblxyXG4vKipcclxuICogZ2VuZXJhdGUgYSBzZW1hbnRpYyBpZCB3aXRoIGdpdmVuIHByZWZpeFxyXG4gKi9cclxuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xyXG4gIHZhciBpZHMgPSBuZXcgSWRzKFszMiwzMiwxXSk7XHJcblxyXG4gIHJldHVybiBpZHMubmV4dFByZWZpeGVkKHByZWZpeCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLm5leHRJZCA9IG5leHRJZDtcclxuXHJcblxyXG5mdW5jdGlvbiB0cmlnZ2VyQ2xpY2tFdmVudChlbGVtZW50KSB7XHJcbiAgdmFyIGV2dDtcclxuICB2YXIgZXZlbnRUeXBlID0gJ2NsaWNrJztcclxuXHJcbiAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveFxyXG4gICAgICBldnQgPSBuZXcgTW91c2VFdmVudCgoZXZlbnRUeXBlKSwgeyB2aWV3OiB3aW5kb3csIGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIElFIDExLCBQaGFudG9tSlMgKHdhdCEpXHJcbiAgICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50Jyk7XHJcblxyXG4gICAgICBldnQuaW5pdEV2ZW50KChldmVudFR5cGUpLCB0cnVlLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gV2VsY29tZSBJRVxyXG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcclxuXHJcbiAgICByZXR1cm4gZWxlbWVudC5maXJlRXZlbnQoJ29uJyArIGV2ZW50VHlwZSwgZXZ0KTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnRyaWdnZXJDbGlja0V2ZW50ID0gdHJpZ2dlckNsaWNrRXZlbnQ7XHJcblxyXG5cclxuZnVuY3Rpb24gZXNjYXBlSFRNTChzdHIpIHtcclxuICBzdHIgPSAnJyArIHN0cjtcclxuXHJcbiAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZSgvWyY8PlwiJ10vZywgZnVuY3Rpb24obWF0Y2gpIHtcclxuICAgIHJldHVybiBIVE1MX0VTQ0FQRV9NQVBbbWF0Y2hdO1xyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5lc2NhcGVIVE1MID0gZXNjYXBlSFRNTDsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxuXHJcbnZhciBjaGVja2JveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcbiAgdmFyIHJlc291cmNlID0gZGVmYXVsdFBhcmFtZXRlcnMsXHJcbiAgICAgIGlkID0gcmVzb3VyY2UuaWQsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCBpZCxcclxuICAgICAgY2FuQmVEaXNhYmxlZCA9ICEhb3B0aW9ucy5kaXNhYmxlZCAmJiB0eXBlb2Ygb3B0aW9ucy5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuICByZXNvdXJjZS5odG1sID1cclxuICAgICc8aW5wdXQgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgICd0eXBlPVwiY2hlY2tib3hcIiAnICtcclxuICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiICcgK1xyXG4gICAgICAgICAoY2FuQmVEaXNhYmxlZCA/ICdkYXRhLWRpc2FibGU9XCJpc0Rpc2FibGVkXCInIDogJycpICtcclxuICAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCInIDogJycpICtcclxuICAgICAgICAgJyAvPicgK1xyXG4gICAgJzxsYWJlbCBmb3I9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIicgOiAnJykgK1xyXG4gICAgICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xyXG4gICAgICAgICAnPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPic7XHJcblxyXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBjaGVja2JveCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2UuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgcmVzID0ge307XHJcblxyXG4gICAgcmVzW29wdGlvbnMubW9kZWxQcm9wZXJ0eV0gPSBiby5nZXQob3B0aW9ucy5tb2RlbFByb3BlcnR5KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH07XHJcblxyXG4gIHJlc291cmNlLnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgdmFyIHJlcyA9IHt9O1xyXG5cclxuICAgIHJlc1tvcHRpb25zLm1vZGVsUHJvcGVydHldID0gISF2YWx1ZXNbb3B0aW9ucy5tb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcmVzKTtcclxuICB9O1xyXG5cclxuICBpZiAodHlwZW9mIG9wdGlvbnMuc2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXNvdXJjZS5zZXQgPSBvcHRpb25zLnNldDtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5nZXQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLmdldCA9IG9wdGlvbnMuZ2V0O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcclxuICAgIHJlc291cmNlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzYWJsZWQuYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlSGlkZGVuKSB7XHJcbiAgICByZXNvdXJjZS5pc0hpZGRlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gIW9wdGlvbnMuaGlkZGVuLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC1jaGVja2JveCddO1xyXG5cclxuICByZXR1cm4gcmVzb3VyY2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrYm94O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnk7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBzZWxlY3RFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL1NlbGVjdEVudHJ5RmFjdG9yeScpLFxyXG4gICAgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG4vKipcclxuICogVGhlIGNvbWJvIGJveCBpcyBhIHNwZWNpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlbGVjdCBlbnRyeSBhbmQgYWRkcyB0aGUgb3B0aW9uICdjdXN0b20nIHRvIHRoZVxyXG4gKiBzZWxlY3QgYm94LiBJZiAnY3VzdG9tJyBpcyBzZWxlY3RlZCwgYW4gYWRkaXRpb25hbCB0ZXh0IGlucHV0IGZpZWxkIGlzIHNob3duIHdoaWNoIGFsbG93cyB0byBkZWZpbmVcclxuICogYSBjdXN0b20gdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWRcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsXHJcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyBsaXN0IG9mIG5hbWUvdmFsdWUgcGFpcnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm1vZGVsUHJvcGVydHlcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuZ2V0XHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLnNldFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtvcHRpb25zLmN1c3RvbVZhbHVlXSBjdXN0b20gc2VsZWN0IG9wdGlvbiB2YWx1ZSAoZGVmYXVsdDogJ2N1c3RvbScpXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gW29wdGlvbnMuY3VzdG9tTmFtZV0gY3VzdG9tIHNlbGVjdCBvcHRpb24gbmFtZSB2aXNpYmxlIGluIHRoZSBzZWxlY3QgYm94IChkZWZhdWx0OiAnY3VzdG9tJylcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxudmFyIGNvbWJvQm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cclxuICB2YXIgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcclxuICAgICAgY3VzdG9tVmFsdWUgPSBvcHRpb25zLmN1c3RvbVZhbHVlIHx8ICdjdXN0b20nLFxyXG4gICAgICBjdXN0b21OYW1lID0gb3B0aW9ucy5jdXN0b21OYW1lIHx8ICdjdXN0b20gJyArIG1vZGVsUHJvcGVydHksXHJcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgLy8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBub3QgYSBidWlsdCBpbiB2YWx1ZVxyXG4gIHZhciBpc0N1c3RvbVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWVbbW9kZWxQcm9wZXJ0eV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXNDdXN0b20gPSAhZmluZChzZWxlY3RPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgcmV0dXJuIHZhbHVlW21vZGVsUHJvcGVydHldID09PSBvcHRpb24udmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaXNDdXN0b207XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNvbWJvT3B0aW9ucyA9IGFzc2lnbih7fSwgb3B0aW9ucyk7XHJcblxyXG4gIC8vIHRydWUgaWYgdGhlIHNlbGVjdGVkIHZhbHVlIGluIHRoZSBzZWxlY3QgYm94IGlzIGN1c3RvbVZhbHVlXHJcbiAgY29tYm9PcHRpb25zLnNob3dDdXN0b21JbnB1dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBzZWxlY3RCb3ggPSBkb21RdWVyeSgnW2RhdGEtZW50cnk9XCInKyBvcHRpb25zLmlkICsnXCJdIHNlbGVjdCcsIG5vZGUucGFyZW50Tm9kZSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdEJveCkge1xyXG4gICAgICByZXR1cm4gc2VsZWN0Qm94LnZhbHVlID09PSBjdXN0b21WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgY29tYm9PcHRpb25zLmdldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMuZ2V0KGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgIHZhciBtb2RpZmllZFZhbHVlcyA9IHt9O1xyXG5cclxuICAgIGlmICghaXNDdXN0b21WYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZVttb2RlbFByb3BlcnR5XSB8fCAnJztcclxuXHJcbiAgICAgIHJldHVybiBtb2RpZmllZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZmllZFZhbHVlc1ttb2RlbFByb3BlcnR5XSA9IGN1c3RvbVZhbHVlO1xyXG4gICAgbW9kaWZpZWRWYWx1ZXNbJ2N1c3RvbS0nK21vZGVsUHJvcGVydHldID0gdmFsdWVbbW9kZWxQcm9wZXJ0eV07XHJcblxyXG4gICAgcmV0dXJuIG1vZGlmaWVkVmFsdWVzO1xyXG4gIH07XHJcblxyXG4gIGNvbWJvT3B0aW9ucy5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciBtb2RpZmllZFZhbHVlcyA9IHt9O1xyXG5cclxuICAgIC8vIGlmIHRoZSBjdXN0b20gc2VsZWN0IG9wdGlvbiBoYXMgYmVlbiBzZWxlY3RlZFxyXG4gICAgLy8gdGFrZSB0aGUgdmFsdWUgZnJvbSB0aGUgdGV4dCBpbnB1dCBmaWVsZFxyXG4gICAgaWYgKHZhbHVlc1ttb2RlbFByb3BlcnR5XSA9PT0gY3VzdG9tVmFsdWUpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZXNbJ2N1c3RvbS0nICsgbW9kZWxQcm9wZXJ0eV0gfHwgJyc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcHRpb25zLmVtcHR5UGFyYW1ldGVyICYmIHZhbHVlc1ttb2RlbFByb3BlcnR5XSA9PT0gJycpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtb2RpZmllZFZhbHVlc1ttb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb25zLnNldChlbGVtZW50LCBtb2RpZmllZFZhbHVlcywgbm9kZSk7XHJcbiAgfTtcclxuXHJcbiAgY29tYm9PcHRpb25zLnNlbGVjdE9wdGlvbnMucHVzaCh7IG5hbWU6IGN1c3RvbU5hbWUsIHZhbHVlOiBjdXN0b21WYWx1ZSB9KTtcclxuXHJcbiAgdmFyIGNvbWJvQm94RW50cnkgPSBhc3NpZ24oe30sIHNlbGVjdEVudHJ5RmFjdG9yeShjb21ib09wdGlvbnMsIGNvbWJvT3B0aW9ucykpO1xyXG5cclxuICBjb21ib0JveEVudHJ5Lmh0bWwgKz0gJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlciBicHAtY29tYm8taW5wdXRcIiAnICtcclxuICAgICdkYXRhLXNob3c9XCJzaG93Q3VzdG9tSW5wdXRcIicgK1xyXG4gICAgJz4nICtcclxuICAgICc8aW5wdXQgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChvcHRpb25zLmlkKSArICctaW5wdXRcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJjdXN0b20tJyArXHJcbiAgICAgIGVzY2FwZUhUTUwobW9kZWxQcm9wZXJ0eSkgKyAnXCIgJyArXHJcbiAgICAnIC8+JyArXHJcbiAgJzwvZGl2Pic7XHJcblxyXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBjb21ibyBib3ggZW50cnkgZmllbGRcclxuICBpZiAoZGVzY3JpcHRpb24pIHtcclxuICAgIGNvbWJvQm94RW50cnkuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvbWJvQm94RW50cnk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGNvbWJvQm94O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuLy8gaW5wdXQgZW50aXRpZXNcclxudmFyIHRleHRJbnB1dEZpZWxkID0gcmVxdWlyZSgnLi9UZXh0SW5wdXRFbnRyeUZhY3RvcnknKSxcclxuICAgIGNoZWNrYm94RmllbGQgPSByZXF1aXJlKCcuL0NoZWNrYm94RW50cnlGYWN0b3J5JyksXHJcbiAgICBzZWxlY3RCb3hGaWVsZCA9IHJlcXVpcmUoJy4vU2VsZWN0RW50cnlGYWN0b3J5JyksXHJcbiAgICBjb21ib0JveEZpZWxkID0gcmVxdWlyZSgnLi9Db21ib0VudHJ5RmFjdG9yeScpLFxyXG4gICAgdGV4dEJveEZpZWxkID0gcmVxdWlyZSgnLi9UZXh0Qm94RW50cnlGYWN0b3J5JyksXHJcbiAgICB2YWxpZGF0aW9uQXdhcmVUZXh0SW5wdXRGaWVsZCA9IHJlcXVpcmUoJy4vVmFsaWRhdGlvbkF3YXJlVGV4dElucHV0JyksXHJcbiAgICB0YWJsZUZpZWxkID0gcmVxdWlyZSgnLi9UYWJsZUVudHJ5RmFjdG9yeScpLFxyXG4gICAgbGFiZWxFbnRyeSA9IHJlcXVpcmUoJy4vTGFiZWxGYWN0b3J5JyksXHJcbiAgICBsaW5rID0gcmVxdWlyZSgnLi9MaW5rRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBlbnN1cmVOb3ROdWxsKHByb3ApIHtcclxuICBpZiAoIXByb3ApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihwcm9wICsgJyBtdXN0IGJlIHNldC4nKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwcm9wO1xyXG59XHJcblxyXG4vKipcclxuICogc2V0cyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBuZWVkZWQgdG8gY3JlYXRlIGFuIGVudHJ5XHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zXHJcbiAqIEByZXR1cm5zIHt7aWQ6ICosIGRlc2NyaXB0aW9uOiAoKnxzdHJpbmcpLCBnZXQ6ICgqfEZ1bmN0aW9uKSwgc2V0OiAoKnxGdW5jdGlvbiksXHJcbiAqICAgICAgICAgICAgdmFsaWRhdGU6ICgqfEZ1bmN0aW9uKSwgaHRtbDogc3RyaW5nfX1cclxuICovXHJcbnZhciBzZXREZWZhdWx0UGFyYW1ldGVycyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgLy8gZGVmYXVsdCBtZXRob2QgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlucHV0IGZpZWxkXHJcbiAgdmFyIGRlZmF1bHRHZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICByZXMgPSB7fSxcclxuICAgICAgICBwcm9wID0gZW5zdXJlTm90TnVsbChvcHRpb25zLm1vZGVsUHJvcGVydHkpO1xyXG4gICAgcmVzW3Byb3BdID0gYm8uZ2V0KHByb3ApO1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gZGVmYXVsdCBtZXRob2QgdG8gc2V0IGEgbmV3IHZhbHVlIHRvIHRoZSBpbnB1dCBmaWVsZFxyXG4gIHZhciBkZWZhdWx0U2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgcmVzID0ge30sXHJcbiAgICAgICAgcHJvcCA9IGVuc3VyZU5vdE51bGwob3B0aW9ucy5tb2RlbFByb3BlcnR5KTtcclxuICAgIGlmICh2YWx1ZXNbcHJvcF0gIT09ICcnKSB7XHJcbiAgICAgIHJlc1twcm9wXSA9IHZhbHVlc1twcm9wXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc1twcm9wXSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcmVzKTtcclxuICB9O1xyXG5cclxuICAvLyBkZWZhdWx0IHZhbGlkYXRpb24gbWV0aG9kXHJcbiAgdmFyIGRlZmF1bHRWYWxpZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZCA6IG9wdGlvbnMuaWQsXHJcbiAgICBkZXNjcmlwdGlvbiA6IChvcHRpb25zLmRlc2NyaXB0aW9uIHx8ICcnKSxcclxuICAgIGdldCA6IChvcHRpb25zLmdldCB8fCBkZWZhdWx0R2V0KSxcclxuICAgIHNldCA6IChvcHRpb25zLnNldCB8fCBkZWZhdWx0U2V0KSxcclxuICAgIHZhbGlkYXRlIDogKG9wdGlvbnMudmFsaWRhdGUgfHwgZGVmYXVsdFZhbGlkYXRlKSxcclxuICAgIGh0bWw6ICcnXHJcbiAgfTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEVudHJ5RmFjdG9yeSgpIHtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYW4gdGV4dCBpbnB1dCBlbnRyeSBvYmplY3QgZm9yIGEgcHJvcGVydHkgcGFuZWwuXHJcbiAqIG9wdGlvbnMgYXJlOlxyXG4gKiAtIGlkOiBpZCBvZiB0aGUgZW50cnkgLSBTdHJpbmdcclxuICpcclxuICogLSBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gbGFiZWw6IGxhYmVsIGZvciB0aGUgaW5wdXQgZmllbGQgLSBTdHJpbmdcclxuICpcclxuICogLSBzZXQ6IHNldHRlciBtZXRob2QgLSBGdW5jdGlvblxyXG4gKlxyXG4gKiAtIGdldDogZ2V0dGVyIG1ldGhvZCAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gdmFsaWRhdGU6IHZhbGlkYXRpb24gbWVodG9kIC0gRnVuY3Rpb25cclxuICpcclxuICogLSBtb2RlbFByb3BlcnR5OiBuYW1lIG9mIHRoZSBtb2RlbCBwcm9wZXJ0eSAtIFN0cmluZ1xyXG4gKlxyXG4gKiAtIGJ1dHRvbkFjdGlvbjogT2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogLSBPYmplY3RcclxuICogLS0tLSBuYW1lOiBuYW1lIG9mIHRoZSBbZGF0YS1hY3Rpb25dIGNhbGxiYWNrIC0gU3RyaW5nXHJcbiAqIC0tLS0gbWV0aG9kOiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgW2RhdGEtYWN0aW9uXSAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gYnV0dG9uU2hvdzogT2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogLSBPYmplY3RcclxuICogLS0tLSBuYW1lOiBuYW1lIG9mIHRoZSBbZGF0YS1zaG93XSBjYWxsYmFjayAtIFN0cmluZ1xyXG4gKiAtLS0tIG1ldGhvZDogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIFtkYXRhLXNob3ddIC0gRnVuY3Rpb25cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICogQHJldHVybnMgdGhlIHByb3BlcnR5UGFuZWwgZW50cnkgcmVzb3VyY2Ugb2JqZWN0XHJcbiAqL1xyXG5FbnRyeUZhY3RvcnkudGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiB0ZXh0SW5wdXRGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiB2YWxpZGF0aW9uQXdhcmVUZXh0SW5wdXRGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgY2hlY2tib3ggaW5wdXQgZW50cnkgb2JqZWN0IGZvciBhIHByb3BlcnR5IHBhbmVsLlxyXG4gKiBvcHRpb25zIGFyZTpcclxuICogLSBpZDogaWQgb2YgdGhlIGVudHJ5IC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eSAtIFN0cmluZ1xyXG4gKlxyXG4gKiAtIGxhYmVsOiBsYWJlbCBmb3IgdGhlIGlucHV0IGZpZWxkIC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gc2V0OiBzZXR0ZXIgbWV0aG9kIC0gRnVuY3Rpb25cclxuICpcclxuICogLSBnZXQ6IGdldHRlciBtZXRob2QgLSBGdW5jdGlvblxyXG4gKlxyXG4gKiAtIHZhbGlkYXRlOiB2YWxpZGF0aW9uIG1ldGhvZCAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gbW9kZWxQcm9wZXJ0eTogbmFtZSBvZiB0aGUgbW9kZWwgcHJvcGVydHkgLSBTdHJpbmdcclxuICpcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICogQHJldHVybnMgdGhlIHByb3BlcnR5UGFuZWwgZW50cnkgcmVzb3VyY2Ugb2JqZWN0XHJcbiAqL1xyXG5FbnRyeUZhY3RvcnkuY2hlY2tib3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGNoZWNrYm94RmllbGQob3B0aW9ucywgc2V0RGVmYXVsdFBhcmFtZXRlcnMob3B0aW9ucykpO1xyXG59O1xyXG5cclxuRW50cnlGYWN0b3J5LnRleHRCb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHRleHRCb3hGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3Rvcnkuc2VsZWN0Qm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiBzZWxlY3RCb3hGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkuY29tYm9Cb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGNvbWJvQm94RmllbGQob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkudGFibGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHRhYmxlRmllbGQob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkubGFiZWwgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGxhYmVsRW50cnkob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkubGluayA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICByZXR1cm4gbGluayhvcHRpb25zKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRW50cnlGYWN0b3J5O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBsaW5raWZpZWQgYW5kIEhUTUwgZXNjYXBlZCBlbnRyeSBmaWVsZCBkZXNjcmlwdGlvbi5cclxuICpcclxuICogQXMgYSBzcGVjaWFsIGZlYXR1cmUsIHRoaXMgZGVzY3JpcHRpb24gbWF5IGNvbnRhaW4gYm90aCBtYXJrZG93blxyXG4gKiBhbmQgcGxhaW4gPGEgaHJlZj4gbGlua3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvblxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuXHJcbiAgLy8gd2UgdG9rZW5pemUgdGhlIGRlc2NyaXB0aW9uIHRvIGV4dHJhY3QgdGV4dCwgSFRNTCBhbmQgbWFya2Rvd24gbGlua3NcclxuICAvLyB0ZXh0IGFuZCBsaW5rcyBhcmUgaGFuZGxlZCBzZXBlcmF0ZWx5XHJcblxyXG4gIHZhciBlc2NhcGVkID0gW107XHJcblxyXG4gIC8vIG1hdGNoIG1hcmtkb3duIFt7VEVYVH1dKHtVUkx9KSBhbmQgSFRNTCBsaW5rcyA8YSBocmVmPVwie1VSTH1cIj57VEVYVH08L2E+XHJcbiAgdmFyIHBhdHRlcm4gPSAvKD86XFxbKFteXFxdXSspXFxdXFwoKGh0dHBzPzpcXC9cXC9bXlwiPD5cXF1dKylcXCkpfCg/OjxhIGhyZWY9XCIoaHR0cHM/OlxcL1xcL1teXCI8Pl0rKVwiPihbXjxdKik8XFwvYT4pL2dpO1xyXG5cclxuICB2YXIgaW5kZXggPSAwO1xyXG4gIHZhciBtYXRjaDtcclxuICB2YXIgbGluaywgdGV4dDtcclxuXHJcbiAgd2hpbGUgKChtYXRjaCA9IHBhdHRlcm4uZXhlYyhkZXNjcmlwdGlvbikpKSB7XHJcblxyXG4gICAgLy8gZXNjYXBlICsgaW5zZXJ0IHRleHQgYmVmb3JlIG1hdGNoXHJcbiAgICBpZiAobWF0Y2guaW5kZXggPiBpbmRleCkge1xyXG4gICAgICBlc2NhcGVkLnB1c2goZXNjYXBlSFRNTChkZXNjcmlwdGlvbi5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGxpbmsgPSBtYXRjaFsyXSB8fCBtYXRjaFszXTtcclxuICAgIHRleHQgPSBtYXRjaFsxXSB8fCBtYXRjaFs0XTtcclxuXHJcbiAgICAvLyBpbnNlcnQgc2FmZSBsaW5rXHJcbiAgICBlc2NhcGVkLnB1c2goJzxhIGhyZWY9XCInICsgbGluayArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgZXNjYXBlSFRNTCh0ZXh0KSArICc8L2E+Jyk7XHJcblxyXG4gICAgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vIGVzY2FwZSBhbmQgaW5zZXJ0IHRleHQgYWZ0ZXIgbGFzdCBtYXRjaFxyXG4gIGlmIChpbmRleCA8IGRlc2NyaXB0aW9uLmxlbmd0aCkge1xyXG4gICAgZXNjYXBlZC5wdXNoKGVzY2FwZUhUTUwoZGVzY3JpcHRpb24uc3Vic3RyaW5nKGluZGV4KSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLWRlc2NyaXB0aW9uXCI+JyArIGVzY2FwZWQuam9pbignJykgKyAnPC9kaXY+JztcclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogVGhlIGxhYmVsIGZhY3RvcnkgcHJvdmlkZXMgYSBsYWJlbCBlbnRyeS4gRm9yIHRoZSBsYWJlbCB0ZXh0XHJcbiAqIGl0IGV4cGVjdHMgZWl0aGVyIGEgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBvcHRpb25zLmxhYmVsVGV4dFxyXG4gKiBwYXJhbWV0ZXIgb3IgaXQgY291bGQgYmUgZ2VuZXJhdGVkIHByb2dyYW1tYXRpY2FsbHkgdXNpbmcgYVxyXG4gKiBmdW5jdGlvbiBwYXNzZWQgYXMgdGhlIG9wdGlvbnMuZ2V0IHBhcmFtZXRlci5cclxuICpcclxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsVGV4dF1cclxuICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLmdldF1cclxuICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNob3dMYWJlbF1cclxuICogQHBhcmFtICB7Qm9vbGVhbn0gW29wdGlvbnMuZGl2aWRlcl0gYWRkcyBhIGRpdmlkZXIgYXQgdGhlIHRvcCBvZiB0aGUgbGFiZWwgaWYgdHJ1ZTsgZGVmYXVsdDogZmFsc2VcclxuICovXHJcbnZhciBsYWJlbCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IG9wdGlvbnMuaWQsXHJcbiAgICBodG1sOiAnPGxhYmVsIGRhdGEtdmFsdWU9XCJsYWJlbFwiICcgK1xyXG4gICAgICAgICAgICAnZGF0YS1zaG93PVwic2hvd0xhYmVsXCIgJyArXHJcbiAgICAgICAgICAgICdjbGFzcz1cImVudHJ5LWxhYmVsJyArIChvcHRpb25zLmRpdmlkZXIgPyAnIGRpdmlkZXInIDogJycpICsgJ1wiPicgK1xyXG4gICAgICAgICAgJzwvbGFiZWw+JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IGxhYmVsOiBvcHRpb25zLmxhYmVsVGV4dCB9O1xyXG4gICAgfSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0xhYmVsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2hvd0xhYmVsKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGxhYmVsO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxudmFyIGJpbmQgPSByZXF1aXJlKCdsb2Rhc2gvYmluZCcpO1xyXG5cclxuLyoqXHJcbiAqIEFuIGVudHJ5IHRoYXQgcmVuZGVycyBhIGNsaWNrYWJsZSBsaW5rLlxyXG4gKlxyXG4gKiBBIHBhc3NlZCB7QGxpbmsgb3B0aW9ucyNoYW5kbGVDbGlja30gaGFuZGxlciBpcyByZXNwb25zaWJsZVxyXG4gKiB0byBwcm9jZXNzIHRoZSBjbGljay5cclxuICpcclxuICogVGhlIGxpbmsgbWF5IGJlIGNvbmRpdGlvbmFsbHkgc2hvd24gb3IgaGlkZGVuLiBUaGlzIGNhbiBiZVxyXG4gKiBjb250cm9sbGVkIHZpYSB0aGUge0BsaW5rIG9wdGlvbnMuc2hvd0xpbmt9LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMubGFiZWxdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMuaGFuZGxlQ2xpY2tcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuc2hvd0xpbmtdIHJldHVybmluZyBmYWxzZSB0byBoaWRlIGxpbmtcclxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmRlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiB2YXIgbGlua0VudHJ5ID0gbGluayh7XHJcbiAqICAgaWQ6ICdmb28nLFxyXG4gKiAgIGRlc2NyaXB0aW9uOiAnU29tZSBEZXNjcmlwdGlvbicsXHJcbiAqICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50KSB7IC4uLiB9LFxyXG4gKiAgIHNob3dMaW5rOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7IC4uLiB9XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtFbnRyeX0gdGhlIG5ld2x5IGNyZWF0ZWQgZW50cnlcclxuICovXHJcbmZ1bmN0aW9uIGxpbmsob3B0aW9ucykge1xyXG5cclxuICB2YXIgaWQgPSBvcHRpb25zLmlkLFxyXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgaWQsXHJcbiAgICAgIHNob3dMaW5rID0gb3B0aW9ucy5zaG93TGluayxcclxuICAgICAgaGFuZGxlQ2xpY2sgPSBvcHRpb25zLmhhbmRsZUNsaWNrLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIGlmIChzaG93TGluayAmJiB0eXBlb2Ygc2hvd0xpbmsgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5zaG93TGluayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgaGFuZGxlQ2xpY2sgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5oYW5kbGVDbGljayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICB9XHJcblxyXG4gIHZhciByZXNvdXJjZSA9IHtcclxuICAgIGlkOiBpZFxyXG4gIH07XHJcblxyXG4gIHJlc291cmNlLmh0bWwgPVxyXG4gICAgJzxhIGRhdGEtYWN0aW9uPVwiaGFuZGxlQ2xpY2tcIiAnICtcclxuICAgIChzaG93TGluayA/ICdkYXRhLXNob3c9XCJzaG93TGlua1wiICcgOiAnJykgK1xyXG4gICAgJ2NsYXNzPVwiYnBwLWVudHJ5LWxpbmsnICsgKG9wdGlvbnMuY3NzQ2xhc3NlcyA/ICcgJyArIGVzY2FwZUhUTUwob3B0aW9ucy5jc3NDbGFzc2VzKSA6ICcnKSArXHJcbiAgICAnXCI+JyArIGVzY2FwZUhUTUwobGFiZWwpICsgJzwvYT4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgbGluayBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2UuaGFuZGxlQ2xpY2sgPSBiaW5kKGhhbmRsZUNsaWNrLCByZXNvdXJjZSk7XHJcblxyXG4gIGlmICh0eXBlb2Ygc2hvd0xpbmsgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLnNob3dMaW5rID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBzaG93TGluay5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzb3VyY2U7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gbGluaztcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZG9taWZ5ID0gcmVxdWlyZSgnbWluLWRvbScpLmRvbWlmeTtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxuXHJcbnZhciBpc0xpc3QgPSBmdW5jdGlvbihsaXN0KSB7XHJcbiAgcmV0dXJuICEoIWxpc3QgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxpc3QpICE9PSAnW29iamVjdCBBcnJheV0nKTtcclxufTtcclxuXHJcbnZhciBhZGRFbXB0eVBhcmFtZXRlciA9IGZ1bmN0aW9uKGxpc3QpIHtcclxuICByZXR1cm4gbGlzdC5jb25jYXQoWyB7IG5hbWU6ICcnLCB2YWx1ZTogJycgfSBdKTtcclxufTtcclxuXHJcbnZhciBjcmVhdGVPcHRpb24gPSBmdW5jdGlvbihvcHRpb24pIHtcclxuICByZXR1cm4gJzxvcHRpb24gdmFsdWU9XCInICsgb3B0aW9uLnZhbHVlICsgJ1wiPicgKyBvcHRpb24ubmFtZSArICc8L29wdGlvbj4nO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWRcclxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbF1cclxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gb3B0aW9ucy5zZWxlY3RPcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5tb2RlbFByb3BlcnR5XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZW1wdHlQYXJhbWV0ZXJcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuZGlzYWJsZWRcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuaGlkZGVuXHJcbiAqIEBwYXJhbSAge09iamVjdH0gZGVmYXVsdFBhcmFtZXRlcnNcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxudmFyIHNlbGVjdGJveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcbiAgdmFyIHJlc291cmNlID0gZGVmYXVsdFBhcmFtZXRlcnMsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCByZXNvdXJjZS5pZCxcclxuICAgICAgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyB8fCBbIHsgbmFtZTogJycsIHZhbHVlOiAnJyB9IF0sXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHksXHJcbiAgICAgIGVtcHR5UGFyYW1ldGVyID0gb3B0aW9ucy5lbXB0eVBhcmFtZXRlcixcclxuICAgICAgY2FuQmVEaXNhYmxlZCA9ICEhb3B0aW9ucy5kaXNhYmxlZCAmJiB0eXBlb2Ygb3B0aW9ucy5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuXHJcbiAgaWYgKGVtcHR5UGFyYW1ldGVyKSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gYWRkRW1wdHlQYXJhbWV0ZXIoc2VsZWN0T3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcmVzb3VyY2UuaHRtbCA9XHJcbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIicgK1xyXG4gICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiICcgOiAnJykgK1xyXG4gICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCIgJyA6ICcnKSArXHJcbiAgICAnPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPicgK1xyXG4gICAgJzxzZWxlY3QgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChyZXNvdXJjZS5pZCkgKyAnLXNlbGVjdFwiIG5hbWU9XCInICtcclxuICAgIGVzY2FwZUhUTUwobW9kZWxQcm9wZXJ0eSkgKyAnXCInICtcclxuICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIiAnIDogJycpICtcclxuICAgIChjYW5CZUhpZGRlbiA/ICdkYXRhLXNob3c9XCJpc0hpZGRlblwiICcgOiAnJykgK1xyXG4gICAgJyBkYXRhLXZhbHVlPic7XHJcblxyXG4gIGlmIChpc0xpc3Qoc2VsZWN0T3B0aW9ucykpIHtcclxuICAgIGZvckVhY2goc2VsZWN0T3B0aW9ucywgZnVuY3Rpb24ob3B0aW9uKSB7XHJcbiAgICAgIHJlc291cmNlLmh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgZXNjYXBlSFRNTChvcHRpb24udmFsdWUpICsgJ1wiPicgK1xyXG4gICAgICAob3B0aW9uLm5hbWUgPyBlc2NhcGVIVE1MKG9wdGlvbi5uYW1lKSA6ICcnKSArICc8L29wdGlvbj4nO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNvdXJjZS5odG1sICs9ICc8L3NlbGVjdD4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgc2VsZWN0IGJveCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaG93Q3VzdG9tSW5wdXQgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLmh0bWwgKz0gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbGwgdGhlIHNlbGVjdCBib3ggb3B0aW9ucyBkeW5hbWljYWxseS5cclxuICAgKlxyXG4gICAqIENhbGxzIHRoZSBkZWZpbmVkIGZ1bmN0aW9uICNzZWxlY3RPcHRpb25zIGluIHRoZSBlbnRyeSB0byBnZXQgdGhlXHJcbiAgICogdmFsdWVzIGZvciB0aGUgb3B0aW9ucyBhbmQgc2V0IHRoZSB2YWx1ZSB0byB0aGUgaW5wdXROb2RlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVudHJ5Tm9kZVxyXG4gICAqIEBwYXJhbSB7RW50cnlEZXNjcmlwdG9yfSBpbnB1dE5vZGVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXROYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1ZhbHVlXHJcbiAgICovXHJcbiAgcmVzb3VyY2Uuc2V0Q29udHJvbFZhbHVlID0gZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlLCBpbnB1dE5vZGUsIGlucHV0TmFtZSwgbmV3VmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2Ygc2VsZWN0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cclxuICAgICAgdmFyIG9wdGlvbnMgPSBzZWxlY3RPcHRpb25zKGVsZW1lbnQsIGlucHV0Tm9kZSk7XHJcblxyXG4gICAgICBpZiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyByZW1vdmUgZXhpc3Rpbmcgb3B0aW9uc1xyXG4gICAgICAgIHdoaWxlIChpbnB1dE5vZGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgaW5wdXROb2RlLnJlbW92ZUNoaWxkKGlucHV0Tm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkZCBvcHRpb25zXHJcbiAgICAgICAgZm9yRWFjaChvcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvbWlmeShjcmVhdGVPcHRpb24ob3B0aW9uKSk7XHJcblxyXG4gICAgICAgICAgaW5wdXROb2RlLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNlbGVjdCB2YWx1ZVxyXG4gICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaW5wdXROb2RlLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGlmIChjYW5CZURpc2FibGVkKSB7XHJcbiAgICByZXNvdXJjZS5pc0Rpc2FibGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBvcHRpb25zLmRpc2FibGVkLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlmIChjYW5CZUhpZGRlbikge1xyXG4gICAgcmVzb3VyY2UuaXNIaWRkZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICFvcHRpb25zLmhpZGRlbi5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXNvdXJjZS5jc3NDbGFzc2VzID0gWydicHAtZHJvcGRvd24nXTtcclxuXHJcbiAgcmV0dXJuIHJlc291cmNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBzZWxlY3Rib3g7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbUF0dHIgPSByZXF1aXJlKCdtaW4tZG9tJykuYXR0cixcclxuICAgIGRvbUNsb3Nlc3QgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xvc2VzdDtcclxuXHJcbnZhciBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyksXHJcbiAgICBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcclxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpO1xyXG5cclxudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnk7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcbnZhciB1cGRhdGVTZWxlY3Rpb24gPSByZXF1aXJlKCdzZWxlY3Rpb24tdXBkYXRlJyk7XHJcblxyXG52YXIgVEFCTEVfUk9XX0RJVl9TTklQUEVUID0gJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlciBicHAtdGFibGUtcm93XCI+JztcclxudmFyIERFTEVURV9ST1dfQlVUVE9OX1NOSVBQRVQgPSAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJkZWxldGVFbGVtZW50XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+WDwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JztcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUlucHV0Um93VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKSB7XHJcbiAgdmFyIHRlbXBsYXRlID0gVEFCTEVfUk9XX0RJVl9TTklQUEVUO1xyXG4gIHRlbXBsYXRlICs9IGNyZWF0ZUlucHV0VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKTtcclxuICB0ZW1wbGF0ZSArPSBjYW5SZW1vdmUgPyBERUxFVEVfUk9XX0JVVFRPTl9TTklQUEVUIDogJyc7XHJcbiAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XHJcblxyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSW5wdXRUZW1wbGF0ZShwcm9wZXJ0aWVzLCBjYW5SZW1vdmUpIHtcclxuICB2YXIgY29sdW1ucyA9IHByb3BlcnRpZXMubGVuZ3RoO1xyXG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xyXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgdGVtcGxhdGUgKz0gJzxpbnB1dCBjbGFzcz1cImJwcC10YWJsZS1yb3ctY29sdW1ucy0nICsgY29sdW1ucyArICcgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FuUmVtb3ZlID8gJ2JwcC10YWJsZS1yb3ctcmVtb3ZhYmxlJyA6ICcnKSArICdcIiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAnaWQ9XCJhY3Rpdml0aS10YWJsZS1yb3ctY2VsbC1pbnB1dC12YWx1ZVwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICd0eXBlPVwidGV4dFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICduYW1lPVwiJyArIGVzY2FwZUhUTUwocHJvcCkgKyAnXCIgLz4nO1xyXG4gIH0pO1xyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTGFiZWxSb3dUZW1wbGF0ZShsYWJlbHMpIHtcclxuICB2YXIgdGVtcGxhdGUgPSBUQUJMRV9ST1dfRElWX1NOSVBQRVQ7XHJcbiAgdGVtcGxhdGUgKz0gY3JlYXRlTGFiZWxUZW1wbGF0ZShsYWJlbHMpO1xyXG4gIHRlbXBsYXRlICs9ICc8L2Rpdj4nO1xyXG5cclxuICByZXR1cm4gdGVtcGxhdGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUxhYmVsVGVtcGxhdGUobGFiZWxzKSB7XHJcbiAgdmFyIGNvbHVtbnMgPSBsYWJlbHMubGVuZ3RoO1xyXG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xyXG4gIGZvckVhY2gobGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xyXG4gICAgdGVtcGxhdGUgKz0gJzxsYWJlbCBjbGFzcz1cImJwcC10YWJsZS1yb3ctY29sdW1ucy0nICsgY29sdW1ucyArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nO1xyXG4gIH0pO1xyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGljayhlbGVtZW50cywgcHJvcGVydGllcykge1xyXG4gIHJldHVybiAoZWxlbWVudHMgfHwgW10pLm1hcChmdW5jdGlvbihlbGVtKSB7XHJcbiAgICB2YXIgbmV3RWxlbWVudCA9IHt9O1xyXG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgIG5ld0VsZW1lbnRbcHJvcF0gPSBlbGVtW3Byb3BdIHx8ICcnO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGlmZihlbGVtZW50LCBub2RlLCB2YWx1ZXMsIG9sZFZhbHVlcywgZWRpdGFibGUpIHtcclxuICByZXR1cm4gZmlsdGVyKHZhbHVlcywgZnVuY3Rpb24odmFsdWUsIGlkeCkge1xyXG4gICAgcmV0dXJuICF2YWx1ZUVxdWFsKGVsZW1lbnQsIG5vZGUsIHZhbHVlLCBvbGRWYWx1ZXNbaWR4XSwgZWRpdGFibGUsIGlkeCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhbHVlRXF1YWwoZWxlbWVudCwgbm9kZSwgdmFsdWUsIG9sZFZhbHVlLCBlZGl0YWJsZSwgaWR4KSB7XHJcbiAgaWYgKHZhbHVlICYmICFvbGRWYWx1ZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICB2YXIgYWxsS2V5cyA9IGtleXModmFsdWUpLmNvbmNhdChrZXlzKG9sZFZhbHVlKSk7XHJcblxyXG4gIHJldHVybiBhbGxLZXlzLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xyXG4gICAgdmFyIG4gPSB2YWx1ZVtrZXldIHx8IHVuZGVmaW5lZDtcclxuICAgIHZhciBvID0gb2xkVmFsdWVba2V5XSB8fCB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gIWVkaXRhYmxlKGVsZW1lbnQsIG5vZGUsIGtleSwgaWR4KSB8fCBuID09PSBvO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRFbnRyeU5vZGUobm9kZSkge1xyXG4gIHJldHVybiBkb21DbG9zZXN0KG5vZGUsICdbZGF0YS1lbnRyeV0nLCB0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKG5vZGUpIHtcclxuICByZXR1cm4gZG9tUXVlcnkoJ2RpdltkYXRhLWxpc3QtZW50cnktY29udGFpbmVyXScsIG5vZGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcclxuICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKSB7XHJcbiAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydDtcclxuICBub2RlLnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi5lbmQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5kZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLm1vZGVsUHJvcGVydGllc1xyXG4gKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLmxhYmVsc1xyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5nZXRFbGVtZW50cyAtIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBsaXN0IG9mIGJ1c2luZXNzIG9iamVjdCBpdGVtc1xyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5yZW1vdmVFbGVtZW50XHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBvcHRpb25zLmFkZEVsZW1lbnRcclxuICogQHBhcmFtICB7RnVuY3Rpb259IG9wdGlvbnMudXBkYXRlRWxlbWVudFxyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5lZGl0YWJsZVxyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5zZXRDb250cm9sVmFsdWVcclxuICogQHBhcmFtICB7RnVuY3Rpb259IG9wdGlvbnMuc2hvd1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgdmFyIGlkID0gb3B0aW9ucy5pZCxcclxuICAgICAgbW9kZWxQcm9wZXJ0aWVzID0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXMsXHJcbiAgICAgIGxhYmVscyA9IG9wdGlvbnMubGFiZWxzLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIHZhciBsYWJlbFJvdyA9IGNyZWF0ZUxhYmVsUm93VGVtcGxhdGUobGFiZWxzKTtcclxuXHJcbiAgdmFyIGdldEVsZW1lbnRzID0gb3B0aW9ucy5nZXRFbGVtZW50cztcclxuXHJcbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBvcHRpb25zLnJlbW92ZUVsZW1lbnQsXHJcbiAgICAgIGNhblJlbW92ZSA9IHR5cGVvZiByZW1vdmVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgYWRkRWxlbWVudCA9IG9wdGlvbnMuYWRkRWxlbWVudCxcclxuICAgICAgY2FuQWRkID0gdHlwZW9mIGFkZEVsZW1lbnQgPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGFkZExhYmVsID0gb3B0aW9ucy5hZGRMYWJlbCB8fCAnQWRkIFZhbHVlJztcclxuXHJcbiAgdmFyIHVwZGF0ZUVsZW1lbnQgPSBvcHRpb25zLnVwZGF0ZUVsZW1lbnQsXHJcbiAgICAgIGNhblVwZGF0ZSA9IHR5cGVvZiB1cGRhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgZWRpdGFibGUgPSBvcHRpb25zLmVkaXRhYmxlIHx8IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuICAgICAgc2V0Q29udHJvbFZhbHVlID0gb3B0aW9ucy5zZXRDb250cm9sVmFsdWU7XHJcblxyXG4gIHZhciBzaG93ID0gb3B0aW9ucy5zaG93LFxyXG4gICAgICBjYW5CZVNob3duID0gdHlwZW9mIHNob3cgPT09ICdmdW5jdGlvbic7XHJcblxyXG4gIHZhciBlbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiBwaWNrKGdldEVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpLCBtb2RlbFByb3BlcnRpZXMpO1xyXG4gIH07XHJcblxyXG4gIHZhciBmYWN0b3J5ID0ge1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgaHRtbDogKGNhbkFkZCA/XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXRhYmxlLWFkZC1yb3dcIiAnICsgKGNhbkJlU2hvd24gPyAnZGF0YS1zaG93PVwic2hvd1wiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgICAgICc8bGFiZWw+JyArIGVzY2FwZUhUTUwoYWRkTGFiZWwpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiYWRkXCIgZGF0YS1hY3Rpb249XCJhZGRFbGVtZW50XCI+PHNwYW4+Kzwvc3Bhbj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICc8L2Rpdj4nIDogJycpICtcclxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXRhYmxlXCIgZGF0YS1zaG93PVwic2hvd1RhYmxlXCI+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXIgYnBwLXRhYmxlLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICBsYWJlbFJvdyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgJzwvZGl2PicgK1xyXG5cclxuICAgICAgICAgIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyB0YWJsZSBlbnRyeSBmaWVsZFxyXG4gICAgICAgICAgKGRlc2NyaXB0aW9uID8gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6ICcnKSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvRWxlbWVudHMgPSBlbGVtZW50cyhlbGVtZW50LCBub2RlLCB0aGlzLl9faW52YWxpZFZhbHVlcyk7XHJcblxyXG4gICAgICB2YXIgaW52YWxpZFZhbHVlcyA9IHRoaXMuX19pbnZhbGlkVmFsdWVzO1xyXG5cclxuICAgICAgZGVsZXRlIHRoaXMuX19pbnZhbGlkVmFsdWVzO1xyXG5cclxuICAgICAgZm9yRWFjaChpbnZhbGlkVmFsdWVzLCBmdW5jdGlvbih2YWx1ZSwgaWR4KSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBib0VsZW1lbnRzW2lkeF07XHJcblxyXG4gICAgICAgIGZvckVhY2gobW9kZWxQcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgICAgICBlbGVtZW50W3Byb3BdID0gdmFsdWVbcHJvcF07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGJvRWxlbWVudHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpb24gPSB0aGlzLl9fYWN0aW9uIHx8IHt9O1xyXG4gICAgICBkZWxldGUgdGhpcy5fX2FjdGlvbjtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdkZWxldGUtZWxlbWVudCcpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlRWxlbWVudChlbGVtZW50LCBub2RlLCBhY3Rpb24uaWR4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhY3Rpb24uaWQgPT09ICdhZGQtZWxlbWVudCcpIHtcclxuICAgICAgICByZXR1cm4gYWRkRWxlbWVudChlbGVtZW50LCBub2RlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChjYW5VcGRhdGUpIHtcclxuICAgICAgICB2YXIgY29tbWFuZHMgPSBbXSxcclxuICAgICAgICAgICAgdmFsdWVzVG9WYWxpZGF0ZSA9IHZhbHVlcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICB2YWx1ZXNUb1ZhbGlkYXRlID0gZGlmZihlbGVtZW50LCBub2RlLCB2YWx1ZXMsIGVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpLCBlZGl0YWJsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGZvckVhY2godmFsdWVzVG9WYWxpZGF0ZSwgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIHZhciB2YWxpZGF0aW9uRXJyb3IsXHJcbiAgICAgICAgICAgICAgaWR4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSBvcHRpb25zLnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yKSB7XHJcbiAgICAgICAgICAgIHZhciBjbWQgPSB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNtZCkge1xyXG4gICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY2FjaGUgaW52YWxpZCB2YWx1ZSBpbiBhbiBvYmplY3QgYnkgaW5kZXggYXMga2V5XHJcbiAgICAgICAgICAgIHNlbGYuX19pbnZhbGlkVmFsdWVzID0gc2VsZi5fX2ludmFsaWRWYWx1ZXMgfHwge307XHJcbiAgICAgICAgICAgIHNlbGYuX19pbnZhbGlkVmFsdWVzW2lkeF0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGV4ZWN1dGUgYSBjb21tYW5kLCB3aGljaCBkb2VzIG5vdCBkbyBhbnl0aGluZ1xyXG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZUxpc3RFbnRyeVRlbXBsYXRlOiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIHNlbGVjdEJveCkge1xyXG4gICAgICByZXR1cm4gY3JlYXRlSW5wdXRSb3dUZW1wbGF0ZShtb2RlbFByb3BlcnRpZXMsIGNhblJlbW92ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIHRlbXBsYXRlID0gZG9taWZ5KGNyZWF0ZUlucHV0Um93VGVtcGxhdGUobW9kZWxQcm9wZXJ0aWVzLCBjYW5SZW1vdmUpKTtcclxuXHJcbiAgICAgIHZhciBjb250YWluZXIgPSBnZXRDb250YWluZXIobm9kZSk7XHJcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgICB0aGlzLl9fYWN0aW9uID0ge1xyXG4gICAgICAgIGlkOiAnYWRkLWVsZW1lbnQnXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG5vZGUpO1xyXG4gICAgICB2YXIgcm93VG9EZWxldGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoZG9tQXR0cihyb3dUb0RlbGV0ZSwgJ2RhdGEtaW5kZXgnKSwgMTApO1xyXG5cclxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvd1RvRGVsZXRlKTtcclxuXHJcbiAgICAgIHRoaXMuX19hY3Rpb24gPSB7XHJcbiAgICAgICAgaWQ6ICdkZWxldGUtZWxlbWVudCcsXHJcbiAgICAgICAgaWR4OiBpZHhcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0YWJsZTogZnVuY3Rpb24oZWxlbWVudCwgcm93Tm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbUNsb3Nlc3Qocm93Tm9kZSwgJ1tkYXRhLWVudHJ5XScpO1xyXG4gICAgICByZXR1cm4gZWRpdGFibGUoZWxlbWVudCwgZW50cnlOb2RlLCBwcm9wLCBpZHgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICBlbnRyeU5vZGUgPSBnZXRFbnRyeU5vZGUoZW50cnlOb2RlKTtcclxuICAgICAgcmV0dXJuIHNob3coZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93VGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShlbnRyeU5vZGUpO1xyXG4gICAgICB2YXIgZWxlbXMgPSBlbGVtZW50cyhlbGVtZW50LCBlbnRyeU5vZGUpO1xyXG4gICAgICByZXR1cm4gZWxlbXMgJiYgZWxlbXMubGVuZ3RoICYmICghY2FuQmVTaG93biB8fCBzaG93KGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlTGlzdEl0ZW06IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfTtcclxuXHJcbiAgLy8gVXBkYXRlL3NldCB0aGUgc2VsZWN0aW9uIG9uIHRoZSBjb3JyZWN0IHBvc2l0aW9uLlxyXG4gIC8vIEl0J3MgdGhlIHNhbWUgY29kZSBsaWtlIGZvciBhbiBpbnB1dCB2YWx1ZSBpbiB0aGUgUHJvcGVydGllc1BhbmVsLmpzLlxyXG4gIGlmIChzZXRDb250cm9sVmFsdWUpIHtcclxuICAgIGZhY3Rvcnkuc2V0Q29udHJvbFZhbHVlID0gZnVuY3Rpb24oZWxlbWVudCwgcm93Tm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShyb3dOb2RlKTtcclxuXHJcbiAgICAgIHZhciBpc1JlYWRPbmx5ID0gZG9tQXR0cihpbnB1dCwgJ3JlYWRvbmx5Jyk7XHJcbiAgICAgIHZhciBvbGRWYWx1ZSA9IGlucHV0LnZhbHVlO1xyXG5cclxuICAgICAgdmFyIHNlbGVjdGlvbjtcclxuXHJcbiAgICAgIC8vIHByZXZlbnRzIGlucHV0IGZpZWxkcyBmcm9tIGhhdmluZyB0aGUgdmFsdWUgJ3VuZGVmaW5lZCdcclxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3aGVuIHRoZSBhdHRyaWJ1dGUgJ3JlYWRvbmx5JyBleGlzdHMsIGlnbm9yZSB0aGUgY29tcGFyaXNvblxyXG4gICAgICAvLyB3aXRoICdvbGRWYWx1ZScgYW5kICd2YWx1ZSdcclxuICAgICAgaWYgKCEhaXNSZWFkT25seSAmJiBvbGRWYWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3Rpb24gb24gdW5kby9yZWRvXHJcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBpbnB1dCkge1xyXG4gICAgICAgIHNlbGVjdGlvbiA9IHVwZGF0ZVNlbGVjdGlvbihnZXRTZWxlY3Rpb24oaW5wdXQpLCBvbGRWYWx1ZSwgdmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRDb250cm9sVmFsdWUoZWxlbWVudCwgZW50cnlOb2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCk7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmYWN0b3J5O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG52YXIgdGV4dEJveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcblxyXG4gIHZhciByZXNvdXJjZSA9IGRlZmF1bHRQYXJhbWV0ZXJzLFxyXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgcmVzb3VyY2UuaWQsXHJcbiAgICAgIGNhbkJlU2hvd24gPSAhIW9wdGlvbnMuc2hvdyAmJiB0eXBlb2Ygb3B0aW9ucy5zaG93ID09PSAnZnVuY3Rpb24nLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIHJlc291cmNlLmh0bWwgPVxyXG4gICAgJzxsYWJlbCBmb3I9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChyZXNvdXJjZS5pZCkgKyAnXCIgJyArXHJcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcclxuICAgICc+JyArIGxhYmVsICsgJzwvbGFiZWw+JyArXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgJyArXHJcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcclxuICAgICc+JyArXHJcbiAgICAgICc8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcclxuICAgICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiIC8+JyArXHJcbiAgICAnPC9kaXY+JztcclxuXHJcbiAgLy8gYWRkIGRlc2NyaXB0aW9uIGJlbG93IHRleHQgYm94IGVudHJ5IGZpZWxkXHJcbiAgaWYgKGRlc2NyaXB0aW9uKSB7XHJcbiAgICByZXNvdXJjZS5odG1sICs9IGVudHJ5RmllbGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7XHJcbiAgfVxyXG5cclxuICBpZiAoY2FuQmVTaG93bikge1xyXG4gICAgcmVzb3VyY2UuaXNTaG93biA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaG93LmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC10ZXh0Ym94J107XHJcblxyXG4gIHJldHVybiByZXNvdXJjZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gdGV4dEJveDtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnk7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG52YXIgdGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdFBhcmFtZXRlcnMpIHtcclxuXHJcbiAgLy8gRGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBidXR0b24gbmV4dCB0byB0aGUgaW5wdXQtZmllbGRcclxuICB2YXIgZGVmYXVsdEJ1dHRvbkFjdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9XCInICsgb3B0aW9ucy5tb2RlbFByb3BlcnR5ICsgJ1wiXScsIGlucHV0Tm9kZSk7XHJcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8vIGRlZmF1bHQgbWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgYnV0dG9uIHNob3VsZCBiZSB2aXNpYmxlXHJcbiAgdmFyIGRlZmF1bHRCdXR0b25TaG93ID0gZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1cIicgKyBvcHRpb25zLm1vZGVsUHJvcGVydHkgKyAnXCJdJywgaW5wdXROb2RlKTtcclxuXHJcbiAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gIH07XHJcblxyXG5cclxuICB2YXIgcmVzb3VyY2UgPSBkZWZhdWx0UGFyYW1ldGVycyxcclxuICAgICAgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHJlc291cmNlLmlkLFxyXG4gICAgICBkYXRhVmFsdWVMYWJlbCA9IG9wdGlvbnMuZGF0YVZhbHVlTGFiZWwsXHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gKG9wdGlvbnMuYnV0dG9uTGFiZWwgfHwgJ1gnKSxcclxuICAgICAgYWN0aW9uTmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25BY3Rpb24gIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5idXR0b25BY3Rpb24ubmFtZSA6ICdjbGVhcicsXHJcbiAgICAgIGFjdGlvbk1ldGhvZCA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25BY3Rpb24gIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5idXR0b25BY3Rpb24ubWV0aG9kIDogZGVmYXVsdEJ1dHRvbkFjdGlvbixcclxuICAgICAgc2hvd05hbWUgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uU2hvdyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLmJ1dHRvblNob3cubmFtZSA6ICdjYW5DbGVhcicsXHJcbiAgICAgIHNob3dNZXRob2QgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uU2hvdyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLmJ1dHRvblNob3cubWV0aG9kIDogZGVmYXVsdEJ1dHRvblNob3csXHJcbiAgICAgIGNhbkJlRGlzYWJsZWQgPSAhIW9wdGlvbnMuZGlzYWJsZWQgJiYgdHlwZW9mIG9wdGlvbnMuZGlzYWJsZWQgPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGNhbkJlSGlkZGVuID0gISFvcHRpb25zLmhpZGRlbiAmJiB0eXBlb2Ygb3B0aW9ucy5oaWRkZW4gPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgcmVzb3VyY2UuaHRtbCA9XHJcbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcclxuICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiICcgOiAnJykgK1xyXG4gICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIiAnIDogJycpICtcclxuICAgICAgKGRhdGFWYWx1ZUxhYmVsID8gJ2RhdGEtdmFsdWU9XCInICsgZXNjYXBlSFRNTChkYXRhVmFsdWVMYWJlbCkgKyAnXCInIDogJycpICsgJz4nKyBlc2NhcGVIVE1MKGxhYmVsKSArJzwvbGFiZWw+JyArXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgJyArXHJcbiAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIicgOiAnJykgK1xyXG4gICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xyXG4gICAgICAnPicgK1xyXG4gICAgICAnPGlucHV0IGlkPVwiYWN0aXZpdGktJyArIGVzY2FwZUhUTUwocmVzb3VyY2UuaWQpICsgJ1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbnMubW9kZWxQcm9wZXJ0eSkgKyAnXCIgJyArXHJcbiAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXHJcbiAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCInIDogJycpICtcclxuICAgICAgICAnIC8+JyArXHJcbiAgICAgICc8YnV0dG9uIGNsYXNzPVwiJyArIGVzY2FwZUhUTUwoYWN0aW9uTmFtZSkgKyAnXCIgZGF0YS1hY3Rpb249XCInICsgZXNjYXBlSFRNTChhY3Rpb25OYW1lKSArICdcIiBkYXRhLXNob3c9XCInICsgZXNjYXBlSFRNTChzaG93TmFtZSkgKyAnXCIgJyArXHJcbiAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXHJcbiAgICAgICAgKGNhbkJlSGlkZGVuID8gJyBkYXRhLXNob3c9XCJpc0hpZGRlblwiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgJzxzcGFuPicgKyBlc2NhcGVIVE1MKGJ1dHRvbkxhYmVsKSArICc8L3NwYW4+JyArXHJcbiAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICc8L2Rpdj4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgdGV4dCBpbnB1dCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2VbYWN0aW9uTmFtZV0gPSBhY3Rpb25NZXRob2Q7XHJcbiAgcmVzb3VyY2Vbc2hvd05hbWVdID0gc2hvd01ldGhvZDtcclxuXHJcbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcclxuICAgIHJlc291cmNlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzYWJsZWQuYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlSGlkZGVuKSB7XHJcbiAgICByZXNvdXJjZS5pc0hpZGRlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gIW9wdGlvbnMuaGlkZGVuLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC10ZXh0ZmllbGQnXTtcclxuXHJcbiAgcmV0dXJuIHJlc291cmNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB0ZXh0RmllbGQ7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB0ZXh0RmllbGQgPSByZXF1aXJlKCcuL1RleHRJbnB1dEVudHJ5RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGFyb3VuZCBUZXh0SW5wdXRFbnRyeUZhY3RvcnkuXHJcbiAqIEl0IGFkZHMgZnVuY3Rpb25hbGl0eSB0byBjYWNoZSBhbiBpbnZhbGlkIHZhbHVlIGVudGVyZWQgaW4gdGhlXHJcbiAqIHRleHQgaW5wdXQsIGluc3RlYWQgb2Ygc2V0dGluZyBpdCBvbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LlxyXG4gKi9cclxudmFyIHZhbGlkYXRpb25Bd2FyZVRleHRGaWVsZCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcblxyXG4gIHZhciBtb2RlbFByb3BlcnR5ID0gb3B0aW9ucy5tb2RlbFByb3BlcnR5O1xyXG5cclxuICBkZWZhdWx0UGFyYW1ldGVycy5nZXQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl9fbGFzdEludmFsaWRWYWx1ZTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fX2xhc3RJbnZhbGlkVmFsdWU7XHJcblxyXG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICBwcm9wZXJ0aWVzW21vZGVsUHJvcGVydHldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogb3B0aW9ucy5nZXRQcm9wZXJ0eShlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICByZXR1cm4gcHJvcGVydGllcztcclxuICB9O1xyXG5cclxuICBkZWZhdWx0UGFyYW1ldGVycy5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGUuYXBwbHkodGhpcywgWyBlbGVtZW50LCB2YWx1ZXMsIG5vZGUgXSksXHJcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICAvLyBtYWtlIHN1cmUgd2UgZG8gbm90IHVwZGF0ZSB0aGUgaWRcclxuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIHZhbGlkYXRpb25FcnJvcnNbbW9kZWxQcm9wZXJ0eV0pIHtcclxuICAgICAgdGhpcy5fX2xhc3RJbnZhbGlkVmFsdWUgPSBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwge30sIG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICAgIHByb3BlcnRpZXNbbW9kZWxQcm9wZXJ0eV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwgcHJvcGVydGllcywgbm9kZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgdmFyIHZhbGlkYXRlID0gZGVmYXVsdFBhcmFtZXRlcnMudmFsaWRhdGUgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciB2YWx1ZSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB0aGlzLl9fbGFzdEludmFsaWRWYWx1ZTtcclxuXHJcbiAgICB2YXIgcHJvcGVydHkgPSB7fTtcclxuICAgIHByb3BlcnR5W21vZGVsUHJvcGVydHldID0gdmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgcHJvcGVydHksIG5vZGUpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiB0ZXh0RmllbGQob3B0aW9ucywgZGVmYXVsdFBhcmFtZXRlcnMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB2YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQ7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBtYXAgPSByZXF1aXJlKCdsb2Rhc2gvbWFwJyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgJ2FjdGl2aXRpOmFzeW5jQmVmb3JlJyBpcyBzZXRcclxuICogdG8gdHJ1ZS5cclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJvKSB7XHJcbiAgcmV0dXJuICEhKGJvLmdldCgnYWN0aXZpdGk6YXN5bmNCZWZvcmUnKSB8fCBiby5nZXQoJ2FjdGl2aXRpOmFzeW5jJykpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5pc0FzeW5jQmVmb3JlID0gaXNBc3luY0JlZm9yZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnYWN0aXZpdGk6YXN5bmNBZnRlcicgaXMgc2V0XHJcbiAqIHRvIHRydWUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJvKSB7XHJcbiAgcmV0dXJuICEhYm8uZ2V0KCdhY3Rpdml0aTphc3luY0FmdGVyJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmlzQXN5bmNBZnRlciA9IGlzQXN5bmNBZnRlcjtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnYWN0aXZpdGk6ZXhjbHVzaXZlJyBpcyBzZXRcclxuICogdG8gdHJ1ZS5cclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0V4Y2x1c2l2ZShibykge1xyXG4gIHJldHVybiAhIWJvLmdldCgnYWN0aXZpdGk6ZXhjbHVzaXZlJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmlzRXhjbHVzaXZlID0gaXNFeGNsdXNpdmU7XHJcblxyXG4vKipcclxuICogR2V0IGZpcnN0ICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSdcclxuICovXHJcbmZ1bmN0aW9uIGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKSB7XHJcbiAgcmV0dXJuIChleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhibywgJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJykgfHwgW10pWzBdO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5nZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSA9IGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlO1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgYWxsIGV4aXN0aW5nICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBhIGxpc3Qgb2YgJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJ1xyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpIHtcclxuICB2YXIgcmV0cnlUaW1lQ3ljbGVzID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScpO1xyXG4gIHJldHVybiBtYXAocmV0cnlUaW1lQ3ljbGVzLCBmdW5jdGlvbihjeWNsZSkge1xyXG4gICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLnJlbW92ZUVudHJ5KGJvLCBlbGVtZW50LCBjeWNsZSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlID0gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGU7IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNvbGxlY3Rpb25BZGQgPSByZXF1aXJlKCdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJykuYWRkLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIENhdGVnb3J5SGVscGVyID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhdGVnb3J5SGVscGVyO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgYnBtbjpDYXRlZ29yeVZhbHVlIGluc2lkZSBhIG5ldyBicG1uOkNhdGVnb3J5XHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvbnNcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlWYWx1ZS5cclxuICovXHJcbkNhdGVnb3J5SGVscGVyLmNyZWF0ZUNhdGVnb3J5VmFsdWUgPSBmdW5jdGlvbihkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeVZhbHVlJyksXHJcbiAgICAgIGNhdGVnb3J5ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5Jywge1xyXG4gICAgICAgIGNhdGVnb3J5VmFsdWU6IFsgY2F0ZWdvcnlWYWx1ZSBdXHJcbiAgICAgIH0pO1xyXG5cclxuICAvLyBhZGQgdG8gY29ycmVjdCBwbGFjZVxyXG4gIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgY2F0ZWdvcnkpO1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0KGNhdGVnb3J5KS4kcGFyZW50ID0gZGVmaW5pdGlvbnM7XHJcbiAgZ2V0QnVzaW5lc3NPYmplY3QoY2F0ZWdvcnlWYWx1ZSkuJHBhcmVudCA9IGNhdGVnb3J5O1xyXG5cclxuICByZXR1cm4gY2F0ZWdvcnlWYWx1ZTtcclxuXHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIENtZEhlbHBlciA9IHt9O1xyXG5tb2R1bGUuZXhwb3J0cyA9IENtZEhlbHBlcjtcclxuXHJcbkNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgY29udGV4dDogeyBlbGVtZW50OiBlbGVtZW50LCBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnRpZXMpIHtcclxuICByZXR1cm4ge1xyXG4gICAgY21kOiAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXNcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIG9iamVjdHNUb0FkZCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcclxuICAgIGNvbnRleHQ6IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogbGlzdFByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvQWRkOiBvYmplY3RzVG9BZGRcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QgPSBmdW5jdGlvbihlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbGlzdFByb3BlcnR5TmFtZSwgcmVmZXJlbmNlUHJvcGVydHlOYW1lLCBvYmplY3RzVG9SZW1vdmUpIHtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBjdXJyZW50T2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuICAgICAgcHJvcGVydHlOYW1lOiBsaXN0UHJvcGVydHlOYW1lLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvYmplY3RzVG9SZW1vdmVcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuXHJcbkNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIHJlZmVyZW5jZVByb3BlcnR5TmFtZSwgb2JqZWN0c1RvQWRkLCBvYmplY3RzVG9SZW1vdmUpIHtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBjdXJyZW50T2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuICAgICAgcHJvcGVydHlOYW1lOiBsaXN0UHJvcGVydHlOYW1lLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvQWRkOiBvYmplY3RzVG9BZGQsXHJcbiAgICAgIG9iamVjdHNUb1JlbW92ZTogb2JqZWN0c1RvUmVtb3ZlXHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcblxyXG5DbWRIZWxwZXIuc2V0TGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBsaXN0UHJvcGVydHlOYW1lLCB1cGRhdGVkT2JqZWN0TGlzdCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcclxuICAgIGNvbnRleHQ6IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogbGlzdFByb3BlcnR5TmFtZSxcclxuICAgICAgdXBkYXRlZE9iamVjdExpc3Q6IHVwZGF0ZWRPYmplY3RMaXN0XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEVsZW1lbnRIZWxwZXIgPSB7fTtcclxubW9kdWxlLmV4cG9ydHMgPSBFbGVtZW50SGVscGVyO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBhbmQgc2V0IHRoZSBwYXJlbnQgdG8gaXRcclxuICpcclxuICogQG1ldGhvZCBFbGVtZW50SGVscGVyI2NyZWF0ZUVsZW1lbnRcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnRUeXBlIG9mIHRoZSBuZXcgZWxlbWVudFxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBvZiB0aGUgbmV3IGVsZW1lbnQgaW4ga2V5LXZhbHVlIHBhaXJzXHJcbiAqIEBwYXJhbSB7bW9kZGxlLm9iamVjdH0gcGFyZW50IG9mIHRoZSBuZXcgZWxlbWVudFxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgdGhlIG5ldyBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudCB3aGljaCBpcyBjcmVhdGVkXHJcbiAqL1xyXG5FbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KSB7XHJcbiAgdmFyIGVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZShlbGVtZW50VHlwZSwgcHJvcGVydGllcyk7XHJcbiAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xyXG5cclxuICByZXR1cm4gZWxlbWVudDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxudmFyIEV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFdmVudERlZmluaXRpb25IZWxwZXI7XHJcblxyXG5FdmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCwgZXZlbnRUeXBlKSB7XHJcblxyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICBldmVudERlZmluaXRpb24gPSBudWxsO1xyXG5cclxuICBpZiAoYm8uZXZlbnREZWZpbml0aW9ucykge1xyXG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICBpZiAoaXMoZXZlbnQsIGV2ZW50VHlwZSkpIHtcclxuICAgICAgICBldmVudERlZmluaXRpb24gPSBldmVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXZlbnREZWZpbml0aW9uO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldE1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKTtcclxufTtcclxuXHJcbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVycm9yRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVzY2FsYXRpb25FdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKTtcclxufTtcclxuXHJcbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XHJcbn07XHJcblxyXG5FdmVudERlZmluaXRpb25IZWxwZXIuZ2V0TGlua0V2ZW50RGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5nZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi9DbWRIZWxwZXInKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSB7fTtcclxuXHJcbnZhciBnZXRFeHRlbnNpb25FbGVtZW50cyA9IGZ1bmN0aW9uKGJvKSB7XHJcbiAgcmV0dXJuIGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzID0gZnVuY3Rpb24oYm8sIHR5cGUpIHtcclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhibyk7XHJcbiAgaWYgKHR5cGVvZiBleHRlbnNpb25FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHZhciBleHRlbnNpb25WYWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpO1xyXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25WYWx1ZXMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHZhciBlbGVtZW50cyA9IGV4dGVuc2lvblZhbHVlcy5maWx0ZXIoZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaXModmFsdWUsIHR5cGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50cztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmFkZEVudHJ5ID0gZnVuY3Rpb24oYm8sIGVsZW1lbnQsIGVudHJ5LCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbiAgLy8gaWYgdGhlcmUgaXMgbm8gZXh0ZW5zaW9uRWxlbWVudHMgbGlzdCwgY3JlYXRlIG9uZVxyXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgIC8vIFRPRE86IEFzayBEYW5pZWwgd2hpY2ggb3BlcmF0aW9uIGNvc3RzIG1vcmVcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtlbnRyeV0gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgIHJldHVybiB7IGV4dGVuc2lvbkVsZW1lbnRzIDogZXh0ZW5zaW9uRWxlbWVudHMgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gYWRkIG5ldyBmYWlsZWRKb2JSZXRyeUV4dGVuc2lvbkVsZW1lbnQgdG8gZXhpc3RpbmcgZXh0ZW5zaW9uRWxlbWVudHMgbGlzdFxyXG4gICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFtlbnRyeV0pO1xyXG4gIH1cclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLnJlbW92ZUVudHJ5ID0gZnVuY3Rpb24oYm8sIGVsZW1lbnQsIGVudHJ5KSB7XHJcbiAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcblxyXG4gICAgLy8gcmV0dXJuIGFuIGVtcHR5IGNvbW1hbmQgd2hlbiB0aGVyZSBpcyBubyBleHRlbnNpb25FbGVtZW50cyBsaXN0XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCAnZXh0ZW5zaW9uRWxlbWVudHMnLCBbZW50cnldKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXI7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50cyA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKS5nZXRFeHRlbnNpb25FbGVtZW50cztcclxuXHJcbnZhciBGb3JtSGVscGVyID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1IZWxwZXI7XHJcblxyXG4vKipcclxuICogUmV0dXJuIGZvcm0gZGF0YSBmcm9tIGJ1c2luZXNzIG9iamVjdCBvciB1bmRlZmluZWQgaWYgbm9uZSBleGlzdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fHVuZGVmaW5lZH0gZm9ybURhdGFcclxuICpcclxuICog5q2k5pa55rOV5bqf5byDXHJcbiAqXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldEZvcm1EYXRhID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gLyogdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcclxuXHJcbiAgdmFyIGZvcm1EYXRhID0ge31cclxuXHJcbiAgaWYgKHR5cGVvZiBmb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiBmb3JtRGF0YVswXTtcclxuICB9Ki9cclxuIHJldHVybiB7fTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGFsbCBmb3JtIGZpZWxkcyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcclxuICogYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7QXJyYXl9IGEgbGlzdCBvZiBmb3JtIGZpZWxkIG9iamVjdHNcclxuICovXHJcbkZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgLyoq55u05o6l6I635Y+WIEV4dGVuc2lvbkVsZW1lbnRz55qEIGFjdGl2aXRpOkZvcm1Qcm9wZXJ0eeWFg+e0oCovXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcclxuXHJcbiAgcmV0dXJuIGZvcm1GaWVsZHMgfHwgW107XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGZvcm0gZmllbGQgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0IGF0IGdpdmVuIGluZGV4XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZm9ybSBmaWVsZFxyXG4gKi9cclxuRm9ybUhlbHBlci5nZXRGb3JtRmllbGQgPSBmdW5jdGlvbihlbGVtZW50LCBpZHgpIHtcclxuXHJcbiAgdmFyIGZvcm1GaWVsZHMgPSB0aGlzLmdldEZvcm1GaWVsZHMoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiBmb3JtRmllbGRzW2lkeF07XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgY29uc3RyYWludHMgZm9yIGEgc3BlY2lmaWMgZm9ybSBmaWVsZCBmcm9tIHRoZSBidXNpbmVzcyBvYmplY3RcclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZm9ybUZpZWxkXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBhIGxpc3Qgb2YgY29uc3RyYWludCBvYmplY3RzXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldENvbnN0cmFpbnRzID0gZnVuY3Rpb24oZm9ybUZpZWxkKSB7XHJcbiAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQudmFsaWRhdGlvbiAmJiBmb3JtRmllbGQudmFsaWRhdGlvbi5jb25zdHJhaW50cykge1xyXG4gICAgcmV0dXJuIGZvcm1GaWVsZC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgYWN0aXZpdGk6dmFsdWUgb2JqZWN0cyBmb3IgYSBzcGVjaWZpYyBmb3JtIGZpZWxkIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBmb3JtRmllbGRcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldEVudW1WYWx1ZXMgPSBmdW5jdGlvbihmb3JtRmllbGQpIHtcclxuICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC52YWx1ZXMpIHtcclxuICAgIHJldHVybiBmb3JtRmllbGQudmFsdWVzO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTW9kZWxVdGlsID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKSxcclxuICAgIGlzID0gTW9kZWxVdGlsLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25IZWxwZXInKTtcclxudmFyIGV4dGVuc2lvbnNFbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpO1xyXG5cclxudmFyIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXI7XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2FjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZSdcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1NlcnZpY2VUYXNrTGlrZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZScpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgJ3RydWUnIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzICdhY3Rpdml0aTpEbW5DYXBhYmxlJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRG1uQ2FwYWJsZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkRtbkNhcGFibGUnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXh0ZXJuYWxDYXBhYmxlJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXh0ZXJuYWxDYXBhYmxlID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYWN0aXZpdGk6RXh0ZXJuYWxDYXBhYmxlJyk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcidcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1Rhc2tMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcicpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgJ3RydWUnIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcidcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc0V4ZWN1dGlvbkxpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInIG9yXHJcbiAqICdhY3Rpdml0aTpUYXNrTGlzdGVuZXInXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5pc1Rhc2tMaXN0ZW5lcihlbGVtZW50KSB8fCB0aGlzLmlzRXhlY3V0aW9uTGlzdGVuZXIoZWxlbWVudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2JwbW46U2VxdWVuY2VGbG93J1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VxdWVuY2VGbG93ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSAnYWN0aXZpdGk6U2VydmljZVRhc2tMaWtlJyBidXNpbmVzcyBvYmplY3QuXHJcbiAqXHJcbiAqIElmIHRoZSBnaXZlbiBlbGVtZW50IGlzIG5vdCBhICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnLCB0aGVuICdmYWxzZSdcclxuICogaXMgcmV0dXJuZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnIGJ1c2luZXNzIG9iamVjdFxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOkVuZEV2ZW50JykpIHtcclxuXHJcbiAgICAvLyBjaGFuZ2UgYnVzaW5lc3Mgb2JqZWN0IHRvICdtZXNzYWdlRXZlbnREZWZpbml0aW9uJyB3aGVuXHJcbiAgICAvLyB0aGUgZWxlbWVudCBpcyBhIG1lc3NhZ2UgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50IG9yIG1lc3NhZ2UgZW5kIGV2ZW50XHJcbiAgICAvLyBiZWNhdXNlIHRoZSBhY3Rpdml0aSBleHRlbnNpb25zIChlLmcuIGFjdGl2aXRpOmNsYXNzKSBhcmUgaW4gdGhlIG1lc3NhZ2VcclxuICAgIC8vIGV2ZW50IGRlZmluaXRpb24gdGFnIGFuZCBub3QgaW4gdGhlIGludGVybWVkaWF0ZSB0aHJvdyBldmVudCBvciBlbmQgZXZlbnQgdGFnXHJcbiAgICB2YXIgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gICAgaWYgKG1lc3NhZ2VFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgZWxlbWVudCA9IG1lc3NhZ2VFdmVudERlZmluaXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcy5pc1NlcnZpY2VUYXNrTGlrZShlbGVtZW50KSAmJiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cclxuICpcclxuICogUG9zc2libGUgaW1wbGVtZW50YXRpb24gdHlwZXMgYXJlOlxyXG4gKiAtIGRtblxyXG4gKiAtIGNvbm5lY3RvclxyXG4gKiAtIGV4dGVybmFsXHJcbiAqIC0gY2xhc3NcclxuICogLSBleHByZXNzaW9uXHJcbiAqIC0gZGVsZWdhdGVFeHByZXNzaW9uXHJcbiAqIC0gc2NyaXB0XHJcbiAqIC0gb3IgdW5kZWZpbmVkLCB3aGVuIG5vIG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIHR5cGUgaXMgZm91bmRcclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSB0aGUgaW1wbGVtZW50YXRpb24gdHlwZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgdmFyIGJvID0gdGhpcy5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFibykge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW5lcihlbGVtZW50KSkge1xyXG4gICAgICBibyA9IGVsZW1lbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5pc0RtbkNhcGFibGUoYm8pKSB7XHJcbiAgICB2YXIgZGVjaXNpb25SZWYgPSBiby5nZXQoJ2FjdGl2aXRpOmRlY2lzaW9uUmVmJyk7XHJcbiAgICBpZiAodHlwZW9mIGRlY2lzaW9uUmVmICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gJ2Rtbic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5pc1NlcnZpY2VUYXNrTGlrZShibykpIHtcclxuICAgIHZhciBjb25uZWN0b3JzID0gZXh0ZW5zaW9uc0VsZW1lbnRIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpDb25uZWN0b3InKTtcclxuICAgIGlmICh0eXBlb2YgY29ubmVjdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuICdjb25uZWN0b3InO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuaXNFeHRlcm5hbENhcGFibGUoYm8pKSB7XHJcbiAgICB2YXIgdHlwZSA9IGJvLmdldCgnYWN0aXZpdGk6dHlwZScpO1xyXG4gICAgaWYgKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcclxuICAgICAgcmV0dXJuICdleHRlcm5hbCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgY2xzID0gYm8uZ2V0KCdhY3Rpdml0aTpjbGFzcycpO1xyXG4gIGlmICh0eXBlb2YgY2xzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgcmV0dXJuICdjbGFzcyc7XHJcbiAgfVxyXG5cclxuICB2YXIgZXhwcmVzc2lvbiA9IGJvLmdldCgnYWN0aXZpdGk6ZXhwcmVzc2lvbicpO1xyXG4gIGlmICh0eXBlb2YgZXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAnZXhwcmVzc2lvbic7XHJcbiAgfVxyXG5cclxuICB2YXIgZGVsZWdhdGVFeHByZXNzaW9uID0gYm8uZ2V0KCdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nKTtcclxuICBpZiAodHlwZW9mIGRlbGVnYXRlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAnZGVsZWdhdGVFeHByZXNzaW9uJztcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmlzTGlzdGVuZXIoYm8pKSB7XHJcbiAgICB2YXIgc2NyaXB0ID0gYm8uZ2V0KCdzY3JpcHQnKTtcclxuICAgIGlmICh0eXBlb2Ygc2NyaXB0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gJ3NjcmlwdCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIE1vZGVsVXRpbCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJyksXHJcbiAgICBpcyA9IE1vZGVsVXRpbC5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gTW9kZWxVdGlsLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxyXG4gICAgaW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcbnZhciBJbnB1dE91dHB1dEhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnB1dE91dHB1dEhlbHBlcjtcclxuXHJcbmZ1bmN0aW9uIGdldEVsZW1lbnRzKGJvLCB0eXBlLCBwcm9wKSB7XHJcbiAgdmFyIGVsZW1zID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sIHR5cGUpIHx8IFtdO1xyXG4gIHJldHVybiAhcHJvcCA/IGVsZW1zIDogKGVsZW1zWzBdIHx8IHt9KVtwcm9wXSB8fCBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyhlbGVtZW50LCBwcm9wLCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICB2YXIgaW5wdXRPdXRwdXQgPSBJbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gIHJldHVybiAoaW5wdXRPdXRwdXQgJiYgaW5wdXRPdXRwdXQuZ2V0KHByb3ApKSB8fCBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGlucHV0T3V0cHV0IGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgaW5wdXRPdXRwdXQgb2JqZWN0XHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIGlmICghaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgIHJldHVybiAoZ2V0RWxlbWVudHMoYm8sICdhY3Rpdml0aTpJbnB1dE91dHB1dCcpIHx8IFtdKVswXTtcclxuICB9XHJcbiAgdmFyIGNvbm5lY3RvciA9IHRoaXMuZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xyXG4gIHJldHVybiBjb25uZWN0b3IgJiYgY29ubmVjdG9yLmdldCgnaW5wdXRPdXRwdXQnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBjb25uZWN0b3IgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGNvbm5lY3RvciBvYmplY3RcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmdldENvbm5lY3RvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGJvICYmIChnZXRFbGVtZW50cyhibywgJ2FjdGl2aXRpOkNvbm5lY3RvcicpIHx8IFtdKVswXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYWxsIGlucHV0IHBhcmFtZXRlcnMgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdCwgYW5kXHJcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuXHJcbiAqXHJcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheX0gYSBsaXN0IG9mIGlucHV0IHBhcmFtZXRlciBvYmplY3RzXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlcnMgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gZ2V0UGFyYW1ldGVycy5hcHBseSh0aGlzLCBbIGVsZW1lbnQsICdpbnB1dFBhcmFtZXRlcnMnLCBpbnNpZGVDb25uZWN0b3IgXSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFsbCBvdXRwdXQgcGFyYW1ldGVycyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcclxuICogYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7Ym9vbGVhbn0gaW5zaWRlQ29ubmVjdG9yXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5fSBhIGxpc3Qgb2Ygb3V0cHV0IHBhcmFtZXRlciBvYmplY3RzXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRPdXRwdXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24oZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMuYXBwbHkodGhpcywgWyBlbGVtZW50LCAnb3V0cHV0UGFyYW1ldGVycycsIGluc2lkZUNvbm5lY3RvciBdKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBpbnB1dCBwYXJhbWV0ZXIgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0IGF0IGdpdmVuIGluZGV4XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7Ym9vbGVhbn0gaW5zaWRlQ29ubmVjdG9yXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gaW5wdXQgcGFyYW1ldGVyXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvcilbaWR4XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBvdXRwdXQgcGFyYW1ldGVyIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdCBhdCBnaXZlbiBpbmRleFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IG91dHB1dCBwYXJhbWV0ZXJcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpW2lkeF07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgc3VwcG9ydHMgaW5wdXRPdXRwdXRcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBpbnNpZGVDb25uZWN0b3JcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5pc0lucHV0T3V0cHV0U3VwcG9ydGVkID0gZnVuY3Rpb24oZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcblxyXG4gIGlmIChpbnNpZGVDb25uZWN0b3IpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBpcyhibywgJ2JwbW46Rmxvd05vZGUnKSAmJiAhKFxyXG4gICAgICBpcyhibywgJ2JwbW46U3RhcnRFdmVudCcpIHx8XHJcbiAgICAgIGlzKGJvLCAnYnBtbjpHYXRld2F5JykgfHxcclxuICAgICAgaXMoYm8sICdicG1uOkJvdW5kYXJ5RXZlbnQnKSB8fFxyXG4gICAgICAoXHJcbiAgICAgICAgaXMoYm8sICdicG1uOlN1YlByb2Nlc3MnKSAmJiBiby5nZXQoJ3RyaWdnZXJlZEJ5RXZlbnQnKVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBzdXBwb3J0cyBvdXRwdXQgcGFyYW1ldGVyc1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmFyZU91dHB1dFBhcmFtZXRlcnNTdXBwb3J0ZWQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICByZXR1cm4gaW5zaWRlQ29ubmVjdG9yIHx8ICghaXMoYm8sICdicG1uOkVuZEV2ZW50JykgJiYgIWJvLmxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi9DbWRIZWxwZXInKTtcclxuXHJcblxyXG52YXIgUGFydGljaXBhbnRIZWxwZXIgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFydGljaXBhbnRIZWxwZXI7XHJcblxyXG5QYXJ0aWNpcGFudEhlbHBlci5tb2RpZnlQcm9jZXNzQnVzaW5lc3NPYmplY3QgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVzKSB7XHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKSxcclxuICAgICAgcHJvcGVydGllcyA9IHt9O1xyXG5cclxuICBwcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlc1twcm9wZXJ0eV07XHJcblxyXG4gIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BlcnRpZXMpO1xyXG59O1xyXG5cclxuUGFydGljaXBhbnRIZWxwZXIuZ2V0UHJvY2Vzc0J1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKSxcclxuICAgICAgcHJvcGVydGllcyA9IHt9O1xyXG5cclxuICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBiby5nZXQocHJvcGVydHlOYW1lKTtcclxuXHJcbiAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcclxuXHJcbnZhciBQcm9wZXJ0aWVzQWN0aXZhdG9yID0gcmVxdWlyZSgnLi4vLi4vUHJvcGVydGllc0FjdGl2YXRvcicpO1xyXG5cclxudmFyIGFzeW5jQ2FwYWJsZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXInKSxcclxuICAgIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG4vLyBicG1uIHByb3BlcnRpZXNcclxudmFyIHByb2Nlc3NQcm9wcyA9IHJlcXVpcmUoJy4uLy4uL3Byb3ZpZGVyL2JwbW4vcGFydHMvUHJvY2Vzc1Byb3BzJyksXHJcbiAgICBldmVudFByb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9FdmVudFByb3BzJyksXHJcbiAgICBsaW5rUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0xpbmtQcm9wcycpLFxyXG4gICAgZG9jdW1lbnRhdGlvblByb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9Eb2N1bWVudGF0aW9uUHJvcHMnKSxcclxuICAgIGlkUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0lkUHJvcHMnKSxcclxuICAgIG5hbWVQcm9wcyA9IHJlcXVpcmUoJy4uLy4uL3Byb3ZpZGVyL2JwbW4vcGFydHMvTmFtZVByb3BzJyksXHJcbiAgICBleGVjdXRhYmxlUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0V4ZWN1dGFibGVQcm9wcycpO1xyXG5cclxuLy8gYWN0aXZpdGkgcHJvcGVydGllc1xyXG52YXIgc2VydmljZVRhc2tEZWxlZ2F0ZVByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9TZXJ2aWNlVGFza0RlbGVnYXRlUHJvcHMnKSxcclxuICAgIHVzZXJUYXNrUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL1VzZXJUYXNrUHJvcHMnKSxcclxuICAgIGFzeW5jaHJvbm91c0NvbnRpbnVhdGlvblByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9Bc3luY2hyb25vdXNDb250aW51YXRpb25Qcm9wcycpLFxyXG4gICAgY2FsbEFjdGl2aXR5UHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0NhbGxBY3Rpdml0eVByb3BzJyksXHJcbiAgICBtdWx0aUluc3RhbmNlUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL011bHRpSW5zdGFuY2VMb29wUHJvcHMnKSxcclxuICAgIGNvbmRpdGlvbmFsUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0NvbmRpdGlvbmFsUHJvcHMnKSxcclxuICAgIHNjcmlwdFByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9TY3JpcHRUYXNrUHJvcHMnKSxcclxuICAgIGVycm9yUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0Vycm9yRXZlbnRQcm9wcycpLFxyXG4gICAgZm9ybVByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9Gb3JtUHJvcHMnKSxcclxuICAgIHN0YXJ0RXZlbnRJbml0aWF0b3IgPSByZXF1aXJlKCcuL3BhcnRzL1N0YXJ0RXZlbnRJbml0aWF0b3InKSxcclxuICAgIHZhcmlhYmxlTWFwcGluZyA9IHJlcXVpcmUoJy4vcGFydHMvVmFyaWFibGVNYXBwaW5nUHJvcHMnKSxcclxuICAgIHZlcnNpb25UYWcgPSByZXF1aXJlKCcuL3BhcnRzL1ZlcnNpb25UYWdQcm9wcycpO1xyXG5cclxudmFyIGxpc3RlbmVyUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyUHJvcHMnKSxcclxuICAgIGxpc3RlbmVyRGV0YWlscyA9IHJlcXVpcmUoJy4vcGFydHMvTGlzdGVuZXJEZXRhaWxQcm9wcycpLFxyXG4gICAgbGlzdGVuZXJGaWVsZHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyRmllbGRJbmplY3Rpb25Qcm9wcycpO1xyXG5cclxudmFyIGVsZW1lbnRUZW1wbGF0ZUNob29zZXJQcm9wcyA9IHJlcXVpcmUoJy4vZWxlbWVudC10ZW1wbGF0ZXMvcGFydHMvQ2hvb3NlclByb3BzJyksXHJcbiAgICBlbGVtZW50VGVtcGxhdGVDdXN0b21Qcm9wcyA9IHJlcXVpcmUoJy4vZWxlbWVudC10ZW1wbGF0ZXMvcGFydHMvQ3VzdG9tUHJvcHMnKTtcclxuXHJcbi8vIElucHV0L091dHB1dFxyXG52YXIgaW5wdXRPdXRwdXQgPSByZXF1aXJlKCcuL3BhcnRzL0lucHV0T3V0cHV0UHJvcHMnKSxcclxuICAgIGlucHV0T3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi9wYXJ0cy9JbnB1dE91dHB1dFBhcmFtZXRlclByb3BzJyk7XHJcblxyXG4vLyBDb25uZWN0b3JcclxudmFyIGNvbm5lY3RvckRldGFpbHMgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvckRldGFpbFByb3BzJyksXHJcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dCA9IHJlcXVpcmUoJy4vcGFydHMvQ29ubmVjdG9ySW5wdXRPdXRwdXRQcm9wcycpLFxyXG4gICAgY29ubmVjdG9ySW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyUHJvcHMnKTtcclxuXHJcbi8vIHByb3BlcnRpZXNcclxudmFyIHByb3BlcnRpZXMgPSByZXF1aXJlKCcuL3BhcnRzL1Byb3BlcnRpZXNQcm9wcycpO1xyXG5cclxuLy8gam9iIGNvbmZpZ3VyYXRpb25cclxudmFyIGpvYkNvbmZpZ3VyYXRpb24gPSByZXF1aXJlKCcuL3BhcnRzL0pvYkNvbmZpZ3VyYXRpb25Qcm9wcycpO1xyXG5cclxuLy8gaGlzdG9yeSB0aW1lIHRvIGxpdmVcclxudmFyIGhpc3RvcnlUaW1lVG9MaXZlID0gcmVxdWlyZSgnLi9wYXJ0cy9IaXN0b3J5VGltZVRvTGl2ZVByb3BzJyk7XHJcblxyXG4vLyBjYW5kaWRhdGUgc3RhcnRlciBncm91cHMvdXNlcnNcclxudmFyIGNhbmRpZGF0ZVN0YXJ0ZXIgPSByZXF1aXJlKCcuL3BhcnRzL0NhbmRpZGF0ZVN0YXJ0ZXJQcm9wcycpO1xyXG5cclxuLy8gdGFza2xpc3RcclxudmFyIHRhc2tsaXN0ID0gcmVxdWlyZSgnLi9wYXJ0cy9UYXNrbGlzdFByb3BzJyk7XHJcblxyXG4vLyBleHRlcm5hbCB0YXNrIGNvbmZpZ3VyYXRpb25cclxudmFyIGV4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24gPSByZXF1aXJlKCcuL3BhcnRzL0V4dGVybmFsVGFza0NvbmZpZ3VyYXRpb25Qcm9wcycpO1xyXG5cclxuLy8gZmllbGQgaW5qZWN0aW9uXHJcbnZhciBmaWVsZEluamVjdGlvbnMgPSByZXF1aXJlKCcuL3BhcnRzL0ZpZWxkSW5qZWN0aW9uUHJvcHMnKTtcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyk7XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbnZhciBpc0V4dGVybmFsVGFza1ByaW9yaXR5RW5hYmxlZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgLy8gc2hvdyBvbmx5IGlmIGVsZW1lbnQgaXMgYSBwcm9jZXNzLCBhIHBhcnRpY2lwYW50IC4uLlxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB2YXIgZXh0ZXJuYWxCbyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgaXNFeHRlcm5hbFRhc2sgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGV4dGVybmFsQm8pID09PSAnZXh0ZXJuYWwnO1xyXG5cclxuICAvLyAuLi4gb3IgYW4gZXh0ZXJuYWwgdGFzayB3aXRoIHNlbGVjdGVkIGV4dGVybmFsIGltcGxlbWVudGF0aW9uIHR5cGVcclxuICByZXR1cm4gISFJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNFeHRlcm5hbENhcGFibGUoZXh0ZXJuYWxCbykgJiYgaXNFeHRlcm5hbFRhc2s7XHJcbn07XHJcblxyXG52YXIgaXNKb2JDb25maWdFbmFibGVkID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgYmVoYXZpb3JcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICBpZiAoYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNCZWZvcmUoYm8pIHx8IGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQWZ0ZXIoYm8pKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIHRpbWVyIGRlZmluaXRpb25cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSkge1xyXG4gICAgcmV0dXJuICEhZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxudmFyIGdldElucHV0T3V0cHV0UGFyYW1ldGVyTGFiZWwgPSBmdW5jdGlvbihwYXJhbSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOklucHV0UGFyYW1ldGVyJykpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lucHV0IFBhcmFtZXRlcicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKHBhcmFtLCAnYWN0aXZpdGk6T3V0cHV0UGFyYW1ldGVyJykpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ091dHB1dCBQYXJhbWV0ZXInKTtcclxuICB9XHJcblxyXG4gIHJldHVybiAnJztcclxufTtcclxuXHJcbnZhciBnZXRMaXN0ZW5lckxhYmVsID0gZnVuY3Rpb24ocGFyYW0sIHRyYW5zbGF0ZSkge1xyXG5cclxuICBpZiAoaXMocGFyYW0sICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcicpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdFeGVjdXRpb24gTGlzdGVuZXInKTtcclxuICB9XHJcblxyXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcicpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdUYXNrIExpc3RlbmVyJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJyc7XHJcbn07XHJcblxyXG52YXIgUFJPQ0VTU19LRVlfSElOVCA9ICdUaGlzIG1hcHMgdG8gdGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBrZXkuJztcclxudmFyIFRBU0tfS0VZX0hJTlQgPSAnVGhpcyBtYXBzIHRvIHRoZSB0YXNrIGRlZmluaXRpb24ga2V5Lic7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxyXG4gICAgZWxlbWVudCwgY2FudmFzLCBicG1uRmFjdG9yeSxcclxuICAgIGVsZW1lbnRSZWdpc3RyeSwgZWxlbWVudFRlbXBsYXRlcywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIC8vIHJlZmVyIHRvIHRhcmdldCBlbGVtZW50IGZvciBleHRlcm5hbCBsYWJlbHNcclxuICBlbGVtZW50ID0gZWxlbWVudC5sYWJlbFRhcmdldCB8fCBlbGVtZW50O1xyXG5cclxuICB2YXIgZ2VuZXJhbEdyb3VwID0ge1xyXG4gICAgaWQ6ICdnZW5lcmFsJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIGlkT3B0aW9ucztcclxuICB2YXIgcHJvY2Vzc09wdGlvbnM7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcclxuICAgIGlkT3B0aW9ucyA9IHsgZGVzY3JpcHRpb246IFBST0NFU1NfS0VZX0hJTlQgfTtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpKSB7XHJcbiAgICBpZE9wdGlvbnMgPSB7IGRlc2NyaXB0aW9uOiBUQVNLX0tFWV9ISU5UIH07XHJcbiAgfVxyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgcHJvY2Vzc09wdGlvbnMgPSB7IHByb2Nlc3NJZERlc2NyaXB0aW9uOiBQUk9DRVNTX0tFWV9ISU5UIH07XHJcbiAgfVxyXG5cclxuICBpZFByb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBpZE9wdGlvbnMpO1xyXG4gIG5hbWVQcm9wcyhnZW5lcmFsR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjYW52YXMsIHRyYW5zbGF0ZSk7XHJcbiAgcHJvY2Vzc1Byb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBwcm9jZXNzT3B0aW9ucyk7XHJcbiAgdmVyc2lvblRhZyhnZW5lcmFsR3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSk7XHJcbiAgZXhlY3V0YWJsZVByb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcclxuICBlbGVtZW50VGVtcGxhdGVDaG9vc2VyUHJvcHMoZ2VuZXJhbEdyb3VwLCBlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgY3VzdG9tRmllbGRzR3JvdXBzID0gZWxlbWVudFRlbXBsYXRlQ3VzdG9tUHJvcHMoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBkZXRhaWxzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2RldGFpbHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGV0YWlscycpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIHNlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG4gIHVzZXJUYXNrUHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpO1xyXG4gIHNjcmlwdFByb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcbiAgbGlua1Byb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcclxuICBjYWxsQWN0aXZpdHlQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG4gIGV2ZW50UHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpO1xyXG4gIGVycm9yUHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuICBjb25kaXRpb25hbFByb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcbiAgc3RhcnRFdmVudEluaXRpYXRvcihkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSk7IC8vIHRoaXMgbXVzdCBiZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBkZXRhaWxzIGdyb3VwIVxyXG5cclxuICB2YXIgbXVsdGlJbnN0YW5jZUdyb3VwID0ge1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ011bHRpIEluc3RhbmNlJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgbXVsdGlJbnN0YW5jZVByb3BzKG11bHRpSW5zdGFuY2VHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBhc3luY0dyb3VwID0ge1xyXG4gICAgaWQgOiAnYXN5bmMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQXN5bmNocm9ub3VzIENvbnRpbnVhdGlvbnMnKSxcclxuICAgIGVudHJpZXMgOiBbXVxyXG4gIH07XHJcbiAgYXN5bmNocm9ub3VzQ29udGludWF0aW9uUHJvcHMoYXN5bmNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBqb2JDb25maWd1cmF0aW9uR3JvdXAgPSB7XHJcbiAgICBpZCA6ICdqb2JDb25maWd1cmF0aW9uJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdKb2IgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllcyA6IFtdLFxyXG4gICAgZW5hYmxlZDogaXNKb2JDb25maWdFbmFibGVkXHJcbiAgfTtcclxuICBqb2JDb25maWd1cmF0aW9uKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBleHRlcm5hbFRhc2tHcm91cCA9IHtcclxuICAgIGlkIDogJ2V4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24nLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0V4dGVybmFsIFRhc2sgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllcyA6IFtdLFxyXG4gICAgZW5hYmxlZDogaXNFeHRlcm5hbFRhc2tQcmlvcml0eUVuYWJsZWRcclxuICB9O1xyXG4gIGV4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24oZXh0ZXJuYWxUYXNrR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuXHJcbiAgdmFyIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cCA9IHtcclxuICAgIGlkOiAnY2FuZGlkYXRlU3RhcnRlckNvbmZpZ3VyYXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIGNhbmRpZGF0ZVN0YXJ0ZXIoY2FuZGlkYXRlU3RhcnRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGhpc3RvcnlUaW1lVG9MaXZlR3JvdXAgPSB7XHJcbiAgICBpZDogJ2hpc3RvcnlDb25maWd1cmF0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0hpc3RvcnkgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIGhpc3RvcnlUaW1lVG9MaXZlKGhpc3RvcnlUaW1lVG9MaXZlR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgdGFza2xpc3RHcm91cCA9IHtcclxuICAgIGlkOiAndGFza2xpc3QnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFza2xpc3QgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIHRhc2tsaXN0KHRhc2tsaXN0R3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgZG9jdW1lbnRhdGlvbkdyb3VwID0ge1xyXG4gICAgaWQ6ICdkb2N1bWVudGF0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RvY3VtZW50YXRpb24nKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuICBkb2N1bWVudGF0aW9uUHJvcHMoZG9jdW1lbnRhdGlvbkdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGdyb3VwcyA9IFtdO1xyXG4gIGdyb3Vwcy5wdXNoKGdlbmVyYWxHcm91cCk7XHJcbiAgY3VzdG9tRmllbGRzR3JvdXBzLmZvckVhY2goZnVuY3Rpb24oZ3JvdXApIHtcclxuICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICB9KTtcclxuICBncm91cHMucHVzaChkZXRhaWxzR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGV4dGVybmFsVGFza0dyb3VwKTtcclxuICBncm91cHMucHVzaChtdWx0aUluc3RhbmNlR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGFzeW5jR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCk7XHJcbiAgZ3JvdXBzLnB1c2goY2FuZGlkYXRlU3RhcnRlckdyb3VwKTtcclxuICBncm91cHMucHVzaChoaXN0b3J5VGltZVRvTGl2ZUdyb3VwKTtcclxuICBncm91cHMucHVzaCh0YXNrbGlzdEdyb3VwKTtcclxuICBncm91cHMucHVzaChkb2N1bWVudGF0aW9uR3JvdXApO1xyXG5cclxuICByZXR1cm4gZ3JvdXBzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVWYXJpYWJsZXNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIHZhcmlhYmxlc0dyb3VwID0ge1xyXG4gICAgaWQgOiAndmFyaWFibGVzJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdWYXJpYWJsZXMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuICB2YXJpYWJsZU1hcHBpbmcodmFyaWFibGVzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgdmFyaWFibGVzR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGb3Jtc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgZm9ybUdyb3VwID0ge1xyXG4gICAgaWQgOiAnZm9ybXMnLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0Zvcm1zJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgZm9ybVByb3BzKGZvcm1Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHJldHVybiBbXHJcbiAgICBmb3JtR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lcnNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBsaXN0ZW5lcnNHcm91cCA9IHtcclxuICAgIGlkIDogJ2xpc3RlbmVycycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lcnMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIG9wdGlvbnMgPSBsaXN0ZW5lclByb3BzKGxpc3RlbmVyc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRGV0YWlsc0dyb3VwID0ge1xyXG4gICAgaWQ6ICdsaXN0ZW5lci1kZXRhaWxzJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIGxhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJhbSA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGdldExpc3RlbmVyTGFiZWwocGFyYW0sIHRyYW5zbGF0ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbGlzdGVuZXJEZXRhaWxzKGxpc3RlbmVyRGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRmllbGRzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2xpc3RlbmVyLWZpZWxkcycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBJbmplY3Rpb24nKSxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGxpc3RlbmVyRmllbGRzKGxpc3RlbmVyRmllbGRzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgbGlzdGVuZXJzR3JvdXAsXHJcbiAgICBsaXN0ZW5lckRldGFpbHNHcm91cCxcclxuICAgIGxpc3RlbmVyRmllbGRzR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dE91dHB1dFRhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGlucHV0T3V0cHV0R3JvdXAgPSB7XHJcbiAgICBpZDogJ2lucHV0LW91dHB1dCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQYXJhbWV0ZXJzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcblxyXG4gIHZhciBvcHRpb25zID0gaW5wdXRPdXRwdXQoaW5wdXRPdXRwdXRHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwID0ge1xyXG4gICAgaWQ6ICdpbnB1dC1vdXRwdXQtcGFyYW1ldGVyJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcihlbGVtZW50LCBub2RlKTtcclxuICAgIH0sXHJcbiAgICBsYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcGFyYW0gPSBvcHRpb25zLmdldFNlbGVjdGVkUGFyYW1ldGVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRQYXJhbWV0ZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBpbnB1dE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGlucHV0T3V0cHV0R3JvdXAsXHJcbiAgICBpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdG9yVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBjb25uZWN0b3JEZXRhaWxzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2Nvbm5lY3Rvci1kZXRhaWxzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RldGFpbHMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgY29ubmVjdG9yRGV0YWlscyhjb25uZWN0b3JEZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgY29ubmVjdG9ySW5wdXRPdXRwdXRHcm91cCA9IHtcclxuICAgIGlkOiAnY29ubmVjdG9yLWlucHV0LW91dHB1dCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dC9PdXRwdXQnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIG9wdGlvbnMgPSBjb25uZWN0b3JJbnB1dE91dHB1dChjb25uZWN0b3JJbnB1dE91dHB1dEdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGNvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyR3JvdXAgPSB7XHJcbiAgICBpZDogJ2Nvbm5lY3Rvci1pbnB1dC1vdXRwdXQtcGFyYW1ldGVyJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcihlbGVtZW50LCBub2RlKTtcclxuICAgIH0sXHJcbiAgICBsYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcGFyYW0gPSBvcHRpb25zLmdldFNlbGVjdGVkUGFyYW1ldGVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRQYXJhbWV0ZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlcihjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGNvbm5lY3RvckRldGFpbHNHcm91cCxcclxuICAgIGNvbm5lY3RvcklucHV0T3V0cHV0R3JvdXAsXHJcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmllbGRJbmplY3Rpb25zVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZmllbGRHcm91cCA9IHtcclxuICAgIGlkOiAnZmllbGQtaW5qZWN0aW9ucy1wcm9wZXJ0aWVzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ZpZWxkIEluamVjdGlvbnMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgZmllbGRJbmplY3Rpb25zKGZpZWxkR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgZmllbGRHcm91cFxyXG4gIF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgcHJvcGVydGllc0dyb3VwID0ge1xyXG4gICAgaWQgOiAnZXh0ZW5zaW9uRWxlbWVudHMtcHJvcGVydGllcycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9wZXJ0aWVzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgcHJvcGVydGllcyhwcm9wZXJ0aWVzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgcHJvcGVydGllc0dyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuLy8gYWN0aXZpdGkgUHJvcGVydGllcyBQcm92aWRlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuLyoqXHJcbiAqIEEgcHJvcGVydGllcyBwcm92aWRlciBmb3IgYWN0aXZpdGkgcmVsYXRlZCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcclxuICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGVzfSBlbGVtZW50VGVtcGxhdGVzXHJcbiAqIEBwYXJhbSB7VHJhbnNsYXRlfSB0cmFuc2xhdGVcclxuICovXHJcbmZ1bmN0aW9uIEFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyKFxyXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgYnBtbkZhY3RvcnksXHJcbiAgICBlbGVtZW50UmVnaXN0cnksIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBQcm9wZXJ0aWVzQWN0aXZhdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICB0aGlzLmdldFRhYnMgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcblxyXG4gICAgdmFyIGdlbmVyYWxUYWIgPSB7XHJcbiAgICAgIGlkOiAnZ2VuZXJhbCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxyXG4gICAgICAgIGVsZW1lbnQsIGNhbnZhcywgYnBtbkZhY3RvcnksXHJcbiAgICAgICAgZWxlbWVudFJlZ2lzdHJ5LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB2YXJpYWJsZXNUYWIgPSB7XHJcbiAgICAgIGlkOiAndmFyaWFibGVzJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGVzJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlVmFyaWFibGVzVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGZvcm1zVGFiID0ge1xyXG4gICAgICBpZDogJ2Zvcm1zJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRm9ybXMnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVGb3Jtc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBsaXN0ZW5lcnNUYWIgPSB7XHJcbiAgICAgIGlkOiAnbGlzdGVuZXJzJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnTGlzdGVuZXJzJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlTGlzdGVuZXJzVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSksXHJcbiAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gIWV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpXHJcbiAgICAgICAgICB8fCAoIWlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKVxyXG4gICAgICAgICAgJiYgZXZlbnREZWZpbml0aW9uSGVscGVyLmdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCkpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpbnB1dE91dHB1dFRhYiA9IHtcclxuICAgICAgaWQ6ICdpbnB1dC1vdXRwdXQnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dC9PdXRwdXQnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVJbnB1dE91dHB1dFRhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb25uZWN0b3JUYWIgPSB7XHJcbiAgICAgIGlkOiAnY29ubmVjdG9yJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlQ29ubmVjdG9yVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSksXHJcbiAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIGJvICYmIGltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUoYm8pID09PSAnY29ubmVjdG9yJztcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgZmllbGRJbmplY3Rpb25zVGFiID0ge1xyXG4gICAgICBpZDogJ2ZpZWxkLWluamVjdGlvbnMnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBJbmplY3Rpb25zJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlRmllbGRJbmplY3Rpb25zVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGV4dGVuc2lvbnNUYWIgPSB7XHJcbiAgICAgIGlkOiAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFeHRlbnNpb25zJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlRXh0ZW5zaW9uRWxlbWVudHNHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBnZW5lcmFsVGFiLFxyXG4gICAgICB2YXJpYWJsZXNUYWIsXHJcbiAgICAgIGNvbm5lY3RvclRhYixcclxuICAgICAgZm9ybXNUYWIsXHJcbiAgICAgIGxpc3RlbmVyc1RhYixcclxuICAgICAgaW5wdXRPdXRwdXRUYWIsXHJcbiAgICAgIGZpZWxkSW5qZWN0aW9uc1RhYixcclxuICAgICAgZXh0ZW5zaW9uc1RhYlxyXG4gICAgXTtcclxuICB9O1xyXG5cclxufVxyXG5cclxuQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXIuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnLFxyXG4gICdicG1uRmFjdG9yeScsXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2VsZW1lbnRUZW1wbGF0ZXMnLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07XHJcblxyXG5pbmhlcml0cyhBY3Rpdml0aVByb3BlcnRpZXNQcm92aWRlciwgUHJvcGVydGllc0FjdGl2YXRvcik7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBpbnB1dCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHRoZSBnaXZlblxyXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgc2NyaXB0Rm9ybWF0ID0gYmluZGluZy5zY3JpcHRGb3JtYXQsXHJcbiAgICAgIHBhcmFtZXRlclZhbHVlLFxyXG4gICAgICBwYXJhbWV0ZXJEZWZpbml0aW9uO1xyXG5cclxuICBpZiAoc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICBwYXJhbWV0ZXJEZWZpbml0aW9uID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpTY3JpcHQnLCB7XHJcbiAgICAgIHNjcmlwdEZvcm1hdDogc2NyaXB0Rm9ybWF0LFxyXG4gICAgICB2YWx1ZTogdmFsdWVcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBwYXJhbWV0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6SW5wdXRQYXJhbWV0ZXInLCB7XHJcbiAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXHJcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXHJcbiAgICBkZWZpbml0aW9uOiBwYXJhbWV0ZXJEZWZpbml0aW9uXHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXI7XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBvdXRwdXQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW5cclxuICogYmluZGluZyBhbmQgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBzY3JpcHRGb3JtYXQgPSBiaW5kaW5nLnNjcmlwdEZvcm1hdCxcclxuICAgICAgcGFyYW1ldGVyVmFsdWUsXHJcbiAgICAgIHBhcmFtZXRlckRlZmluaXRpb247XHJcblxyXG4gIGlmIChzY3JpcHRGb3JtYXQpIHtcclxuICAgIHBhcmFtZXRlckRlZmluaXRpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlNjcmlwdCcsIHtcclxuICAgICAgc2NyaXB0Rm9ybWF0OiBzY3JpcHRGb3JtYXQsXHJcbiAgICAgIHZhbHVlOiBiaW5kaW5nLnNvdXJjZVxyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHBhcmFtZXRlclZhbHVlID0gYmluZGluZy5zb3VyY2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpPdXRwdXRQYXJhbWV0ZXInLCB7XHJcbiAgICBuYW1lOiB2YWx1ZSxcclxuICAgIHZhbHVlOiBwYXJhbWV0ZXJWYWx1ZSxcclxuICAgIGRlZmluaXRpb246IHBhcmFtZXRlckRlZmluaXRpb25cclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlT3V0cHV0UGFyYW1ldGVyID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGkgcHJvcGVydHkgZnJvbSB0aGUgZ2l2ZW4gYmluZGluZy5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aVByb3BlcnR5KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlByb3BlcnR5Jywge1xyXG4gICAgbmFtZTogYmluZGluZy5uYW1lLFxyXG4gICAgdmFsdWU6IHZhbHVlIHx8ICcnXHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnR5O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGk6aW4gZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgdmFyIHByb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aUluT3V0QXR0cnMoYmluZGluZywgdmFsdWUpO1xyXG5cclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbicsIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluID0gY3JlYXRlQWN0aXZpdGlJbjtcclxuXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOmluIHdpdGggYnVzaW5lc3NLZXkgZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbicsIHtcclxuICAgIGJ1c2luZXNzS2V5OiB2YWx1ZVxyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5ID0gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleTtcclxuXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOm91dCBlbGVtZW50IGZyb20gZ2l2ZW4gYmluZGluZy5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aU91dChiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgcHJvcGVydGllcyA9IGNyZWF0ZUFjdGl2aXRpSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSk7XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOk91dCcsIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aU91dCA9IGNyZWF0ZUFjdGl2aXRpT3V0O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXIgZWxlbWVudCBjb250YWluaW5nIGFuIGlubGluZSBzY3JpcHQgZnJvbSBnaXZlbiBiaW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIHNjcmlwdEZvcm1hdCA9IGJpbmRpbmcuc2NyaXB0Rm9ybWF0LFxyXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSxcclxuICAgICAgcGFyYW1ldGVyRGVmaW5pdGlvbjtcclxuXHJcbiAgaWYgKHNjcmlwdEZvcm1hdCkge1xyXG4gICAgcGFyYW1ldGVyRGVmaW5pdGlvbiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6U2NyaXB0Jywge1xyXG4gICAgICBzY3JpcHRGb3JtYXQ6IHNjcmlwdEZvcm1hdCxcclxuICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgcGFyYW1ldGVyVmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOkV4ZWN1dGlvbkxpc3RlbmVyJywge1xyXG4gICAgZXZlbnQ6IGJpbmRpbmcuZXZlbnQsXHJcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXHJcbiAgICBzY3JpcHQ6IHBhcmFtZXRlckRlZmluaXRpb25cclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lclNjcmlwdCA9IGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOmZpZWxkIGVsZW1lbnQgY29udGFpbmluZyBzdHJpbmcgb3IgZXhwcmVzc2lvbiBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgREVGQVVMVF9QUk9QUyA9IHtcclxuICAgICdzdHJpbmcnOiB1bmRlZmluZWQsXHJcbiAgICAnZXhwcmVzc2lvbic6IHVuZGVmaW5lZCxcclxuICAgICduYW1lJzogdW5kZWZpbmVkXHJcbiAgfTtcclxuXHJcbiAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUZBVUxUX1BST1BTKTtcclxuXHJcbiAgaWYgKCFiaW5kaW5nLmV4cHJlc3Npb24pIHtcclxuICAgIHByb3BzLnN0cmluZyA9IHZhbHVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBwcm9wcy5leHByZXNzaW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByb3BzLm5hbWUgPSBiaW5kaW5nLm5hbWU7XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOkZpZWxkJywgcHJvcHMpO1xyXG59XHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24gPSBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBwcm9wZXJ0aWVzIGZvciBhY3Rpdml0aTppbiBhbmQgYWN0aXZpdGk6b3V0IHR5cGVzLlxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbk91dEF0dHJzKGJpbmRpbmcsIHZhbHVlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzID0ge307XHJcblxyXG4gIC8vIGFjdGl2aXRpOmluIHNvdXJjZShFeHByZXNzaW9uKSB0YXJnZXRcclxuICBpZiAoYmluZGluZy50YXJnZXQpIHtcclxuXHJcbiAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IGJpbmRpbmcudGFyZ2V0O1xyXG5cclxuICAgIGlmIChiaW5kaW5nLmV4cHJlc3Npb24pIHtcclxuICAgICAgcHJvcGVydGllcy5zb3VyY2VFeHByZXNzaW9uID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH0gZWxzZVxyXG5cclxuICAvLyBhY3Rpdml0aTooaW58b3V0KSB2YXJpYWJsZXMgbG9jYWxcclxuICBpZiAoYmluZGluZy52YXJpYWJsZXMpIHtcclxuICAgIHByb3BlcnRpZXMudmFyaWFibGVzID0gJ2FsbCc7XHJcblxyXG4gICAgaWYgKGJpbmRpbmcudmFyaWFibGVzID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYWN0aXZpdGk6b3V0IHNvdXJjZShFeHByZXNzaW9uKSB0YXJnZXRcclxuICBlbHNlIHtcclxuICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdmFsdWU7XHJcblxyXG4gICAgWyAnc291cmNlJywgJ3NvdXJjZUV4cHJlc3Npb24nIF0uZm9yRWFjaChmdW5jdGlvbihrKSB7XHJcbiAgICAgIGlmIChiaW5kaW5nW2tdKSB7XHJcbiAgICAgICAgcHJvcGVydGllc1trXSA9IGJpbmRpbmdba107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcclxuXHJcbnZhciBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4vSGVscGVyJykuZ2V0VGVtcGxhdGU7XHJcblxyXG52YXIgUHJvcGVydGllc0FjdGl2YXRvciA9IHJlcXVpcmUoJy4uLy4uLy4uL1Byb3BlcnRpZXNBY3RpdmF0b3InKTtcclxuXHJcbnZhciBISUdIRVJfUFJJT1JJVFkgPSAxMTAwO1xyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgdGVtcGxhdGUgdmlzaWJpbGl0eSBzZXR0aW5ncy5cclxuICpcclxuICogQ29udHJvbGxlZCB1c2luZyBgZW50cmllc1Zpc2libGVgIG9uIHRlbXBsYXRlIGNvbmZpZyBvYmplY3Q6XHJcbiAqXHJcbiAqIGBgYGpzb25cclxuICogICAgIFwiZW50cmllc1Zpc2libGVcIjoge1xyXG4gKiAgICAgICBcIl9hbGxcIjogdHJ1ZXxmYWxzZSxcclxuICogICAgICAgXCJlbnRyeU5hbWVcIjogdHJ1ZXxmYWxzZSxcclxuICogICAgICAgLi4uXHJcbiAqICAgICB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcclxuICovXHJcbmZ1bmN0aW9uIEN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcihldmVudEJ1cywgZWxlbWVudFRlbXBsYXRlcykge1xyXG4gIFByb3BlcnRpZXNBY3RpdmF0b3IuY2FsbCh0aGlzLCBldmVudEJ1cywgSElHSEVSX1BSSU9SSVRZKTtcclxuXHJcbiAgdGhpcy5pc0VudHJ5VmlzaWJsZSA9IGZ1bmN0aW9uKGVudHJ5LCBlbGVtZW50KSB7XHJcblxyXG4gICAgdmFyIHRlbXBsYXRlID0gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcyk7XHJcblxyXG4gICAgaWYgKHRlbXBsYXRlICYmICFpc0VudHJ5VmlzaWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB0aGlzLmlzUHJvcGVydHlFZGl0YWJsZSA9IGZ1bmN0aW9uKGVudHJ5LCBwcm9wZXJ0eU5hbWUsIGVsZW1lbnQpIHtcclxuXHJcbiAgICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgICBpZiAodGVtcGxhdGUgJiYgIWlzRW50cnlFZGl0YWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5DdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnIF07XHJcblxyXG5pbmhlcml0cyhDdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IsIFByb3BlcnRpZXNBY3RpdmF0b3IpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3I7XHJcblxyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxudmFyIENVU1RPTV9QUk9QRVJUSUVTX1BBVFRFUk4gPSAvXmN1c3RvbS0vO1xyXG5cclxudmFyIERFRkFVTFRfRU5UUklFU19WSVNJQkxFID0ge1xyXG4gIF9hbGw6IGZhbHNlLFxyXG4gIGlkOiB0cnVlLFxyXG4gIG5hbWU6IHRydWVcclxufTtcclxuXHJcbmZ1bmN0aW9uIGlzQ3VzdG9tRW50cnkoZW50cnkpIHtcclxuICByZXR1cm4gQ1VTVE9NX1BST1BFUlRJRVNfUEFUVEVSTi50ZXN0KGVudHJ5LmlkKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFbnRyeVZpc2libGUoZW50cnksIHRlbXBsYXRlKSB7XHJcblxyXG4gIHZhciBlbnRyeUlkID0gZW50cnkuaWQ7XHJcblxyXG4gIGlmIChlbnRyeUlkID09PSAnZWxlbWVudFRlbXBsYXRlLWNob29zZXInIHx8IGlzQ3VzdG9tRW50cnkoZW50cnkpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhciBlbnRyaWVzVmlzaWJsZSA9IHRlbXBsYXRlLmVudHJpZXNWaXNpYmxlIHx8IERFRkFVTFRfRU5UUklFU19WSVNJQkxFO1xyXG5cclxuICBpZiAodHlwZW9mIGVudHJpZXNWaXNpYmxlID09PSAnYm9vbGVhbicpIHtcclxuICAgIHJldHVybiBlbnRyaWVzVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHZhciBkZWZhdWx0VmlzaWJsZSA9IGVudHJpZXNWaXNpYmxlLl9hbGwgfHwgZmFsc2UsXHJcbiAgICAgIGVudHJ5VmlzaWJsZSA9IGVudHJpZXNWaXNpYmxlW2VudHJ5SWRdO1xyXG5cclxuICAvLyBkID0gdHJ1ZSwgZSA9IGZhbHNlID0+IGZhbHNlXHJcbiAgLy8gZCA9IGZhbHNlLCBlID0gdHJ1ZSA9PiB0cnVlXHJcbiAgLy8gZCA9IGZhbHNlLCBlID0gZmFsc2VcclxuICByZXR1cm4gKFxyXG4gICAgKGRlZmF1bHRWaXNpYmxlID09PSB0cnVlICYmIGVudHJ5VmlzaWJsZSAhPT0gZmFsc2UpIHx8XHJcbiAgICAoZGVmYXVsdFZpc2libGUgPT09IGZhbHNlICYmIGVudHJ5VmlzaWJsZSA9PT0gdHJ1ZSlcclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VudHJ5RWRpdGFibGUoZW50cnksIHRlbXBsYXRlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGlzQ3VzdG9tRW50cnkoZW50cnkpKSB7XHJcbiAgICBwcm9wZXJ0eSA9IGdldFByb3BlcnR5KHRlbXBsYXRlLCBlbnRyeSk7XHJcblxyXG4gICAgcmV0dXJuIHByb3BlcnR5ICYmIHByb3BlcnR5LmVkaXRhYmxlICE9PSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eSh0ZW1wbGF0ZSwgZW50cnkpIHtcclxuXHJcbiAgdmFyIGluZGV4O1xyXG4gIHZhciBpZHggPSBlbnRyeS5pZC5yZXBsYWNlKCdjdXN0b20tJyArIHRlbXBsYXRlLmlkICsgJy0nLCAnJyk7XHJcbiAgaWYgKGlkeC5pbmRleE9mKCctJykgIT09IC0xKSB7XHJcbiAgICB2YXIgaW5kZXhlcyA9IGlkeC5zcGxpdCgnLScpO1xyXG4gICAgaWYgKGluZGV4ZXMubGVuZ3RoID09IDIpIHtcclxuICAgICAgdmFyIHNjb3BlTmFtZSA9IGluZGV4ZXNbMF0ucmVwbGFjZSgvXy9nLCAnOicpO1xyXG4gICAgICBpbmRleCA9IHBhcnNlSW50KGluZGV4ZXNbMV0sIDEwKTtcclxuICAgICAgaWYgKHNjb3BlTmFtZSAmJiAhaXNOYU4oaW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdLnByb3BlcnRpZXNbaW5kZXhdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGluZGV4ID0gcGFyc2VJbnQoaWR4LCAxMCk7XHJcbiAgICBpZiAoIWlzTmFOKGluZGV4KSkge1xyXG4gICAgICByZXR1cm4gdGVtcGxhdGUucHJvcGVydGllc1tpbmRleF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBleHRyYWN0IHByb3BlcnR5IGluZGV4IGZvciBlbnRyeSA8JyArIGVudHJ5LmlkICsgJz4nKTtcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgdmFsdWVzID0gcmVxdWlyZSgnbG9kYXNoL3ZhbHVlcycpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBndXkga25vd2luZyBhbGwgY29uZmlndXJlZCBlbGVtZW50IHRlbXBsYXRlcy5cclxuICpcclxuICogVGhpcyByZWdpc3RyeSB3b24ndCB2YWxpZGF0ZS4gVXNlIHRoZSB7QGxpbmsgVmFsaWRhdG9yfVxyXG4gKiB0byB2ZXJpZnkgYSB0ZW1wbGF0ZSBpcyB2YWxpZCBwcmlvciB0byBhZGRpbmcgaXQgdG9cclxuICogdGhpcyByZWdpc3RyeS5cclxuICovXHJcbmZ1bmN0aW9uIEVsZW1lbnRUZW1wbGF0ZXMoKSB7XHJcblxyXG4gIHRoaXMuX3RlbXBsYXRlcyA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBrbm93biBlbGVtZW50IHRlbXBsYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gZGVzY3JpcHRvcnNcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0VsZW1lbnRUZW1wbGF0ZXN9XHJcbiAgICovXHJcbiAgdGhpcy5zZXQgPSBmdW5jdGlvbihkZXNjcmlwdG9ycykge1xyXG5cclxuICAgIHZhciB0ZW1wbGF0ZXMgPSB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcclxuXHJcbiAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGRlc2NyaXB0b3IpIHtcclxuICAgICAgdGVtcGxhdGVzW2Rlc2NyaXB0b3IuaWRdID0gZGVzY3JpcHRvcjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0ZW1wbGF0ZSBkZXNjcmlwdG9yIHdpdGggZ2l2ZW4gaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gaWRcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1RlbXBsYXRlRGVzY3JpcHRvcn1cclxuICAgKi9cclxuICB0aGlzLmdldCA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW2lkXTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYWxsIGtub3duIHRlbXBsYXRlIGRlc2NyaXB0b3JzLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn1cclxuICAgKi9cclxuICB0aGlzLmdldEFsbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHZhbHVlcyh0aGlzLl90ZW1wbGF0ZXMpO1xyXG4gIH07XHJcblxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRUZW1wbGF0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFZhbGlkYXRvciA9IHJlcXVpcmUoJy4vVmFsaWRhdG9yJyk7XHJcblxyXG4vKipcclxuICogVGhlIGd1eSByZXNwb25zaWJsZSBmb3IgdGVtcGxhdGUgbG9hZGluZy5cclxuICpcclxuICogUHJvdmlkZSB0aGUgYWN0dWFsIHRlbXBsYXRlcyB2aWEgdGhlIGBjb25maWcuZWxlbWVudFRlbXBsYXRlc2AuXHJcbiAqXHJcbiAqIFRoYXQgY29uZmlndXJhdGlvbiBjYW4gZWl0aGVyIGJlIGFuIGFycmF5IG9mIHRlbXBsYXRlXHJcbiAqIGRlc2NyaXB0b3JzIG9yIGEgbm9kZSBzdHlsZSBjYWxsYmFjayB0byByZXRyaWV2ZVxyXG4gKiB0aGUgdGVtcGxhdGVzIGFzeW5jaHJvbm91c2x5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5PFRlbXBsYXRlRGVzY3JpcHRvcj58RnVuY3Rpb259IGxvYWRUZW1wbGF0ZXNcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGVzfSBlbGVtZW50VGVtcGxhdGVzXHJcbiAqL1xyXG5mdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzTG9hZGVyKGxvYWRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzKSB7XHJcbiAgdGhpcy5fbG9hZFRlbXBsYXRlcyA9IGxvYWRUZW1wbGF0ZXM7XHJcbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcclxuICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcclxuXHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLnJlbG9hZCgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXI7XHJcblxyXG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyLiRpbmplY3QgPSBbXHJcbiAgJ2NvbmZpZy5lbGVtZW50VGVtcGxhdGVzJyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdlbGVtZW50VGVtcGxhdGVzJ1xyXG5dO1xyXG5cclxuXHJcbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHZhciBsb2FkVGVtcGxhdGVzID0gdGhpcy5fbG9hZFRlbXBsYXRlcztcclxuXHJcbiAgLy8gbm8gdGVtcGxhdGVzIHNwZWNpZmllZFxyXG4gIGlmICh0eXBlb2YgbG9hZFRlbXBsYXRlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIHRlbXBsYXRlIGxvYWRlciBmdW5jdGlvbiBzcGVjaWZpZWRcclxuICBpZiAodHlwZW9mIGxvYWRUZW1wbGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcclxuXHJcbiAgICByZXR1cm4gbG9hZFRlbXBsYXRlcyhmdW5jdGlvbihlcnIsIHRlbXBsYXRlcykge1xyXG5cclxuICAgICAgaWYgKGVycikge1xyXG4gICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlRXJyb3JzKFsgZXJyIF0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLnNldFRlbXBsYXRlcyh0ZW1wbGF0ZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyB0ZW1wbGF0ZXMgYXJyYXkgc3BlY2lmaWVkXHJcbiAgaWYgKGxvYWRUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRUZW1wbGF0ZXMobG9hZFRlbXBsYXRlcyk7XHJcbiAgfVxyXG5cclxufTtcclxuXHJcbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnNldFRlbXBsYXRlcyA9IGZ1bmN0aW9uKHRlbXBsYXRlcykge1xyXG5cclxuICB2YXIgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXM7XHJcblxyXG4gIHZhciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKCkuYWRkQWxsKHRlbXBsYXRlcyk7XHJcblxyXG4gIHZhciBlcnJvcnMgPSB2YWxpZGF0b3IuZ2V0RXJyb3JzKCksXHJcbiAgICAgIHZhbGlkVGVtcGxhdGVzID0gdmFsaWRhdG9yLmdldFZhbGlkVGVtcGxhdGVzKCk7XHJcblxyXG4gIGVsZW1lbnRUZW1wbGF0ZXMuc2V0KHZhbGlkVGVtcGxhdGVzKTtcclxuXHJcbiAgaWYgKGVycm9ycy5sZW5ndGgpIHtcclxuICAgIHRoaXMudGVtcGxhdGVFcnJvcnMoZXJyb3JzKTtcclxuICB9XHJcblxyXG4gIHRoaXMudGVtcGxhdGVzQ2hhbmdlZCgpO1xyXG59O1xyXG5cclxuRWxlbWVudFRlbXBsYXRlc0xvYWRlci5wcm90b3R5cGUudGVtcGxhdGVzQ2hhbmdlZCA9IGZ1bmN0aW9uKCkge1xyXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2VsZW1lbnRUZW1wbGF0ZXMuY2hhbmdlZCcpO1xyXG59O1xyXG5cclxuRWxlbWVudFRlbXBsYXRlc0xvYWRlci5wcm90b3R5cGUudGVtcGxhdGVFcnJvcnMgPSBmdW5jdGlvbihlcnJvcnMpIHtcclxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmVycm9ycycsIHtcclxuICAgIGVycm9yczogZXJyb3JzXHJcbiAgfSk7XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnk7XHJcblxyXG52YXIgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG5cclxudmFyIFRFTVBMQVRFX0FUVFIgPSAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQlBNTiAyLjAgZXh0ZW5zaW9uIGF0dHJpYnV0ZSBuYW1lIHVuZGVyXHJcbiAqIHdoaWNoIHRoZSBlbGVtZW50IHRlbXBsYXRlIGlzIHN0b3JlZC5cclxuICpcclxuICogQHR5cGUge1N0cmluZ31cclxuICovXHJcbm1vZHVsZS5leHBvcnRzLlRFTVBMQVRFX0FUVFIgPSBURU1QTEFURV9BVFRSO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgaWQgZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ31cclxuICovXHJcbmZ1bmN0aW9uIGdldFRlbXBsYXRlSWQoZWxlbWVudCkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKGJvKSB7XHJcbiAgICByZXR1cm4gYm8uZ2V0KFRFTVBMQVRFX0FUVFIpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZ2V0VGVtcGxhdGVJZCA9IGdldFRlbXBsYXRlSWQ7XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvZiBhIGdpdmVuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcclxuICpcclxuICogQHJldHVybiB7VGVtcGxhdGVEZWZpbml0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xyXG4gIHZhciBpZCA9IGdldFRlbXBsYXRlSWQoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiBpZCAmJiBlbGVtZW50VGVtcGxhdGVzLmdldChpZCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldFRlbXBsYXRlID0gZ2V0VGVtcGxhdGU7XHJcblxyXG4vKipcclxuICogR2V0IGRlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtUZW1wbGF0ZURlZmluaXRpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xyXG5cclxuICAvLyByZXR1cm4gZmlyc3QgZGVmYXVsdCB0ZW1wbGF0ZSwgaWYgYW55IGV4aXN0c1xyXG4gIHJldHVybiAoXHJcbiAgICBlbGVtZW50VGVtcGxhdGVzLmdldEFsbCgpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBpc0FueShlbGVtZW50LCB0LmFwcGxpZXNUbykgJiYgdC5pc0RlZmF1bHQ7XHJcbiAgICB9KVxyXG4gIClbMF07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldERlZmF1bHRUZW1wbGF0ZSA9IGdldERlZmF1bHRUZW1wbGF0ZTtcclxuXHJcblxyXG4vKipcclxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXHJcbiAqIEJQTU4gZWxlbWVudCwgZGlhZ3JhbSBlbGVtZW50IG9yIEV4dGVuc2lvbkVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBmaW5kRXh0ZW5zaW9uKGVsZW1lbnQsIHR5cGUpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICBpZiAoaXMoYm8sICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykpIHtcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm87XHJcbiAgfSBlbHNlIHtcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZXh0ZW5zaW9uRWxlbWVudHM7XHJcbiAgfVxyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGZ1bmN0aW9uKGUpIHtcclxuICAgIHJldHVybiBpcyhlLCB0eXBlKTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZEV4dGVuc2lvbiA9IGZpbmRFeHRlbnNpb247XHJcblxyXG5cclxuZnVuY3Rpb24gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgdHlwZXMpIHtcclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJykuZmlsdGVyKGZ1bmN0aW9uKGUpIHtcclxuICAgIHJldHVybiBpc0FueShlLCB0eXBlcyk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRFeHRlbnNpb25zID0gZmluZEV4dGVuc2lvbnM7XHJcblxyXG5cclxuZnVuY3Rpb24gZmluZEFjdGl2aXRpSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xyXG5cclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgdmFyIG1hdGNoZXI7XHJcblxyXG4gIGlmIChiaW5kaW5nLnR5cGUgPT09ICdhY3Rpdml0aTppbicpIHtcclxuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgIHJldHVybiBpcyhlLCAnYWN0aXZpdGk6SW4nKSAmJiBpc0luT3V0KGUsIGJpbmRpbmcpO1xyXG4gICAgfTtcclxuICB9IGVsc2VcclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6b3V0Jykge1xyXG4gICAgbWF0Y2hlciA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgcmV0dXJuIGlzKGUsICdhY3Rpdml0aTpPdXQnKSAmJiBpc0luT3V0KGUsIGJpbmRpbmcpO1xyXG4gICAgfTtcclxuICB9IGVsc2VcclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknKSB7XHJcbiAgICBtYXRjaGVyID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICByZXR1cm4gaXMoZSwgJ2FjdGl2aXRpOkluJykgJiYgJ2J1c2luZXNzS2V5JyBpbiBlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIG1hdGNoZXIpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5maW5kQWN0aXZpdGlJbk91dCA9IGZpbmRBY3Rpdml0aUluT3V0O1xyXG5cclxuZnVuY3Rpb24gZmluZEFjdGl2aXRpUHJvcGVydHkoYWN0aXZpdGlQcm9wZXJ0aWVzLCBiaW5kaW5nKSB7XHJcbiAgcmV0dXJuIGZpbmQoYWN0aXZpdGlQcm9wZXJ0aWVzLmdldCgndmFsdWVzJyksIGZ1bmN0aW9uKHApIHtcclxuICAgIHJldHVybiBwLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZEFjdGl2aXRpUHJvcGVydHkgPSBmaW5kQWN0aXZpdGlQcm9wZXJ0eTtcclxuXHJcblxyXG5mdW5jdGlvbiBmaW5kSW5wdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcclxuICB2YXIgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyk7XHJcblxyXG4gIHJldHVybiBmaW5kKHBhcmFtZXRlcnMsIGZ1bmN0aW9uKHApIHtcclxuICAgIHJldHVybiBwLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZElucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcclxuICB2YXIgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xyXG5cclxuICByZXR1cm4gZmluZChwYXJhbWV0ZXJzLCBmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgdmFsdWUgPSBwLnZhbHVlO1xyXG5cclxuICAgIGlmICghYmluZGluZy5zY3JpcHRGb3JtYXQpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlID09PSBiaW5kaW5nLnNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHAuZGVmaW5pdGlvbjtcclxuXHJcbiAgICBpZiAoIWRlZmluaXRpb24gfHwgYmluZGluZy5zY3JpcHRGb3JtYXQgIT09IGRlZmluaXRpb24uc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVmaW5pdGlvbi52YWx1ZSA9PT0gYmluZGluZy5zb3VyY2U7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRPdXRwdXRQYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoYm8sICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykpIHtcclxuICAgIHJldHVybiBibztcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xyXG5cclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6aW4nKSB7XHJcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHRhcmdldCBhdHRyaWJ1dGVcclxuICAgIGlmIChiaW5kaW5nLnRhcmdldCkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC50YXJnZXQgPT09IGJpbmRpbmcudGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gJ2FjdGl2aXRpOm91dCcpIHtcclxuICAgIC8vIGZpbmQgYmFzZWQgb24gc291cmNlIC8gc291cmNlRXhwcmVzc2lvblxyXG4gICAgaWYgKGJpbmRpbmcuc291cmNlKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnNvdXJjZSA9PT0gYmluZGluZy5zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJpbmRpbmcuc291cmNlRXhwcmVzc2lvbikge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5zb3VyY2VFeHByZXNzaW9uID09PSBiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmaW5kIGJhc2VkIHZhcmlhYmxlcyAvIGxvY2FsIGNvbWJpbmF0aW9uXHJcbiAgaWYgKGJpbmRpbmcudmFyaWFibGVzKSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC52YXJpYWJsZXMgPT09ICdhbGwnICYmIChcclxuICAgICAgYmluZGluZy52YXJpYWJsZXMgIT09ICdsb2NhbCcgfHwgZWxlbWVudC5sb2NhbFxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheScpO1xyXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3QnKTtcclxuXHJcbnZhciBEUk9QRE9XTl9UWVBFID0gJ0Ryb3Bkb3duJztcclxuXHJcbnZhciBWQUxJRF9UWVBFUyA9IFsgJ1N0cmluZycsICdUZXh0JywgJ0Jvb2xlYW4nLCAnSGlkZGVuJywgRFJPUERPV05fVFlQRSBdO1xyXG5cclxudmFyIFBST1BFUlRZX1RZUEUgPSAncHJvcGVydHknLFxyXG4gICAgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSA9ICdhY3Rpdml0aTpwcm9wZXJ0eScsXHJcbiAgICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTppbnB1dFBhcmFtZXRlcicsXHJcbiAgICBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnYWN0aXZpdGk6b3V0cHV0UGFyYW1ldGVyJyxcclxuICAgIEFDVElWSVRJX0lOX1RZUEUgPSAnYWN0aXZpdGk6aW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX1RZUEUgPSAnYWN0aXZpdGk6b3V0JyxcclxuICAgIEFDVElWSVRJX0lOX0JVU0lORVNTX0tFWV9UWVBFID0gJ2FjdGl2aXRpOmluOmJ1c2luZXNzS2V5JyxcclxuICAgIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUiA9ICdhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lcicsXHJcbiAgICBBQ1RJVklUSV9GSUVMRCA9ICdhY3Rpdml0aTpmaWVsZCc7XHJcblxyXG52YXIgVkFMSURfQklORElOR19UWVBFUyA9IFtcclxuICBQUk9QRVJUWV9UWVBFLFxyXG4gIEFDVElWSVRJX1BST1BFUlRZX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUsXHJcbiAgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSLFxyXG4gIEFDVElWSVRJX0ZJRUxEXHJcbl07XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgZWxlbWVudCB0ZW1wbGF0ZSB2YWxpZGF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBWYWxpZGF0b3IoKSB7XHJcblxyXG4gIHRoaXMuX3RlbXBsYXRlc0J5SWQgPSB7fTtcclxuXHJcbiAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMgPSBbXTtcclxuICB0aGlzLl9lcnJvcnMgPSBbXTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgdGhlIHRlbXBsYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gdGVtcGxhdGVzXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3J9IHNlbGZcclxuICAgKi9cclxuICB0aGlzLmFkZEFsbCA9IGZ1bmN0aW9uKHRlbXBsYXRlcykge1xyXG5cclxuICAgIGlmICghaXNBcnJheSh0ZW1wbGF0ZXMpKSB7XHJcbiAgICAgIHRoaXMuX2xvZ0Vycm9yKCd0ZW1wbGF0ZXMgbXVzdCBiZSBbXScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGVtcGxhdGVzLmZvckVhY2godGhpcy5hZGQsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgZ2l2ZW4gZWxlbWVudCB0ZW1wbGF0ZSwgaWYgaXQgaXMgdmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1ZhbGlkYXRvcn0gc2VsZlxyXG4gICAqL1xyXG4gIHRoaXMuYWRkID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcclxuXHJcbiAgICB2YXIgZXJyID0gdGhpcy5fdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgaWYgKCFlcnIpIHtcclxuICAgICAgdGhpcy5fdGVtcGxhdGVzQnlJZFt0ZW1wbGF0ZS5pZF0gPSB0ZW1wbGF0ZTtcclxuXHJcbiAgICAgIHRoaXMuX3ZhbGlkVGVtcGxhdGVzLnB1c2godGVtcGxhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Vycm9yfSB2YWxpZGF0aW9uIGVycm9yLCBpZiBhbnlcclxuICAgKi9cclxuICB0aGlzLl92YWxpZGF0ZVRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcclxuXHJcbiAgICB2YXIgZXJyLFxyXG4gICAgICAgIGlkID0gdGVtcGxhdGUuaWQsXHJcbiAgICAgICAgYXBwbGllc1RvID0gdGVtcGxhdGUuYXBwbGllc1RvLFxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLFxyXG4gICAgICAgIHNjb3BlcyA9IHRlbXBsYXRlLnNjb3BlcztcclxuXHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignbWlzc2luZyB0ZW1wbGF0ZSBpZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpZCBpbiB0aGlzLl90ZW1wbGF0ZXNCeUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcigndGVtcGxhdGUgaWQgPCcgKyBpZCArICc+IGFscmVhZHkgdXNlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNBcnJheShhcHBsaWVzVG8pKSB7XHJcbiAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKCdtaXNzaW5nIGFwcGxpZXNUbz1bXScsIHRlbXBsYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzQXJyYXkocHJvcGVydGllcykpIHtcclxuICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoJ21pc3NpbmcgcHJvcGVydGllcz1bXScsIHRlbXBsYXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpKSB7XHJcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKCdpbnZhbGlkIHByb3BlcnRpZXMnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzY29wZXMpIHtcclxuICAgICAgZXJyID0gdGhpcy5fdmFsaWRhdGVTY29wZXModGVtcGxhdGUsIHNjb3Blcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycjtcclxuICB9O1xyXG5cclxuICB0aGlzLl92YWxpZGF0ZVNjb3BlcyA9IGZ1bmN0aW9uKHRlbXBsYXRlLCBzY29wZXMpIHtcclxuXHJcbiAgICB2YXIgZXJyLFxyXG4gICAgICAgIHNjb3BlLFxyXG4gICAgICAgIHNjb3BlTmFtZTtcclxuXHJcbiAgICBpZiAoIWlzT2JqZWN0KHNjb3BlcykgfHwgaXNBcnJheShzY29wZXMpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignaW52YWxpZCBzY29wZXMsIHNob3VsZCBiZSBzY29wZXM9e30nLCB0ZW1wbGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChzY29wZU5hbWUgaW4gc2NvcGVzKSB7XHJcbiAgICAgIHNjb3BlID0gc2NvcGVzW3Njb3BlTmFtZV07XHJcblxyXG4gICAgICBpZiAoIWlzT2JqZWN0KHNjb3BlKSB8fCBpc0FycmF5KHNjb3BlKSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKCdpbnZhbGlkIHNjb3BlLCBzaG91bGQgYmUgc2NvcGU9e30nLCB0ZW1wbGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNBcnJheShzY29wZS5wcm9wZXJ0aWVzKSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ21pc3NpbmcgcHJvcGVydGllcz1bXSBpbiBzY29wZSA8JyArIHNjb3BlTmFtZSArICc+JywgdGVtcGxhdGVcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzKHNjb3BlLnByb3BlcnRpZXMpKSB7XHJcbiAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgcHJvcGVydGllcyBpbiBzY29wZSA8JyArIHNjb3BlTmFtZSArICc+Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBwcm9wZXJ0aWVzIGFuZCByZXR1cm4gZmFsc2UgaWYgYW55IGlzIGludmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5PFByb3BlcnR5RGVzY3JpcHRvcj59IHByb3BlcnRpZXNcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYWxsIHByb3BlcnRpZXMgYXJlIHZhbGlkXHJcbiAgICovXHJcbiAgdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcykge1xyXG4gICAgdmFyIHZhbGlkUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKHRoaXMuX3ZhbGlkYXRlUHJvcGVydHksIHRoaXMpO1xyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gdmFsaWRQcm9wZXJ0aWVzLmxlbmd0aDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGZhbHNlLCBpZiB0aGVyZSB3YXNcclxuICAgKiBhIHZhbGlkYXRpb24gZXJyb3IuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgcHJvcGVydHkgaXMgdmFsaWRcclxuICAgKi9cclxuICB0aGlzLl92YWxpZGF0ZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgdHlwZSA9IHByb3BlcnR5LnR5cGUsXHJcbiAgICAgICAgYmluZGluZyA9IHByb3BlcnR5LmJpbmRpbmc7XHJcblxyXG4gICAgdmFyIGVycjtcclxuXHJcbiAgICB2YXIgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcblxyXG4gICAgaWYgKFZBTElEX1RZUEVTLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XHJcbiAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICdpbnZhbGlkIHByb3BlcnR5IHR5cGUgPCcgKyB0eXBlICsgJz47ICcgK1xyXG4gICAgICAgICdtdXN0IGJlIGFueSBvZiB7ICcgKyBWQUxJRF9UWVBFUy5qb2luKCcsICcpICsgJyB9J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09PSBEUk9QRE9XTl9UWVBFICYmIGJpbmRpbmdUeXBlICE9PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVIpIHtcclxuICAgICAgaWYgKCFpc0FycmF5KHByb3BlcnR5LmNob2ljZXMpKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAnbXVzdCBwcm92aWRlIGNob2ljZXM9W10gd2l0aCAnICsgRFJPUERPV05fVFlQRSArICcgdHlwZSdcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2VcclxuXHJcbiAgICAgIGlmICghcHJvcGVydHkuY2hvaWNlcy5ldmVyeShpc0Ryb3Bkb3duQ2hvaWNlVmFsaWQpKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAneyBuYW1lLCB2YWx1ZSB9IG11c3QgYmUgc3BlY2lmaWVkIGZvciAnICtcclxuICAgICAgICAgIERST1BET1dOX1RZUEUgKyAnIGNob2ljZXMnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghYmluZGluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9nRXJyb3IoJ3Byb3BlcnR5IG1pc3NpbmcgYmluZGluZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChWQUxJRF9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpID09PSAtMSkge1xyXG4gICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAnaW52YWxpZCBwcm9wZXJ0eS5iaW5kaW5nIHR5cGUgPCcgKyBiaW5kaW5nVHlwZSArICc+OyAnICtcclxuICAgICAgICAnbXVzdCBiZSBhbnkgb2YgeyAnICsgVkFMSURfQklORElOR19UWVBFUy5qb2luKCcsICcpICsgJyB9J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gUFJPUEVSVFlfVFlQRSB8fFxyXG4gICAgICAgIGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9QUk9QRVJUWV9UWVBFIHx8XHJcbiAgICAgICAgYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0lOUFVUX1BBUkFNRVRFUl9UWVBFIHx8XHJcbiAgICAgICAgYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0ZJRUxEKSB7XHJcblxyXG4gICAgICBpZiAoIWJpbmRpbmcubmFtZSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ3Byb3BlcnR5LmJpbmRpbmcgPCcgKyBiaW5kaW5nVHlwZSArICc+IHJlcXVpcmVzIG5hbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFKSB7XHJcbiAgICAgIGlmICghYmluZGluZy5zb3VyY2UpIHtcclxuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyBzb3VyY2UnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5fVFlQRSkge1xyXG5cclxuICAgICAgaWYgKCFiaW5kaW5nLnZhcmlhYmxlcyAmJiAhYmluZGluZy50YXJnZXQpIHtcclxuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyAnICtcclxuICAgICAgICAgICd2YXJpYWJsZXMgb3IgdGFyZ2V0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcblxyXG4gICAgICBpZiAoIWJpbmRpbmcudmFyaWFibGVzICYmICFiaW5kaW5nLnNvdXJjZSAmJiAhYmluZGluZy5zb3VyY2VFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAncHJvcGVydHkuYmluZGluZyA8JyArIGJpbmRpbmdUeXBlICsgJz4gcmVxdWlyZXMgJyArXHJcbiAgICAgICAgICAndmFyaWFibGVzLCBzb3VyY2VFeHByZXNzaW9uIG9yIHNvdXJjZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVIpIHtcclxuXHJcbiAgICAgIGlmICh0eXBlICE9PSAnSGlkZGVuJykge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ2ludmFsaWQgcHJvcGVydHkgdHlwZSA8JyArIHR5cGUgKyAnPiBmb3IgJyArIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUiArICc7ICcgK1xyXG4gICAgICAgICAgJ211c3QgYmUgPEhpZGRlbj4nXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhZXJyO1xyXG4gIH07XHJcblxyXG5cclxuICB0aGlzLl9sb2dFcnJvciA9IGZ1bmN0aW9uKGVyciwgdGVtcGxhdGUpIHtcclxuXHJcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgZXJyID0gJ3RlbXBsYXRlKGlkOiAnICsgdGVtcGxhdGUuaWQgKyAnKSAnICsgZXJyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlcnIgPSBuZXcgRXJyb3IoZXJyKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9lcnJvcnMucHVzaChlcnIpO1xyXG5cclxuICAgIHJldHVybiBlcnI7XHJcbiAgfTtcclxuXHJcbiAgdGhpcy5nZXRFcnJvcnMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XHJcbiAgfTtcclxuXHJcbiAgdGhpcy5nZXRWYWxpZFRlbXBsYXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkVGVtcGxhdGVzO1xyXG4gIH07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmFsaWRhdG9yO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzRHJvcGRvd25DaG9pY2VWYWxpZChjKSB7XHJcbiAgcmV0dXJuICduYW1lJyBpbiBjICYmICd2YWx1ZScgaW4gYztcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZmluZEV4dGVuc2lvbiA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRFeHRlbnNpb24sXHJcbiAgICBmaW5kRXh0ZW5zaW9ucyA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRFeHRlbnNpb25zO1xyXG5cclxudmFyIGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aVByb3BlcnR5LFxyXG4gICAgY3JlYXRlSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVJbnB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZU91dHB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW4gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluLFxyXG4gICAgY3JlYXRlQWN0aXZpdGlPdXQgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aU91dCxcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5LFxyXG4gICAgY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lclNjcmlwdCA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQsXHJcbiAgICBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbjtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBBQ1RJVklUSV9TRVJWSUNFX1RBU0tfTElLRSA9IFtcclxuICAnYWN0aXZpdGk6Y2xhc3MnLFxyXG4gICdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nLFxyXG4gICdhY3Rpdml0aTpleHByZXNzaW9uJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEEgaGFuZGxlciB0aGF0IGNoYW5nZXMgdGhlIG1vZGVsaW5nIHRlbXBsYXRlIG9mIGEgQlBNTiBlbGVtZW50LlxyXG4gKi9cclxuZnVuY3Rpb24gQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlcihtb2RlbGluZywgY29tbWFuZFN0YWNrLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICBmdW5jdGlvbiBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcclxuXHJcbiAgICB2YXIgYm8gPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICAgIC8vIGFkZCBleHRlbnNpb24gZWxlbWVudHNcclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XHJcbiAgICAgICAgdmFsdWVzOiBbXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xyXG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50c1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpIHtcclxuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xyXG4gICAgICAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJzogbmV3VGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlSW9NYXBwaW5ncyhlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xyXG5cclxuICAgIHZhciBuZXdNYXBwaW5ncyA9IGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3MobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRNYXBwaW5ncztcclxuXHJcbiAgICBpZiAoIW5ld01hcHBpbmdzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7IGlucHV0T3V0cHV0OiBuZXdNYXBwaW5ncyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dCA9IGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XHJcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKTtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgICAgb2JqZWN0c1RvQWRkOiBbIG5ld01hcHBpbmdzIF0sXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRNYXBwaW5ncyA/IFsgb2xkTWFwcGluZ3MgXSA6IFtdXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xyXG5cclxuICAgIHZhciBuZXdNYXBwaW5ncyA9IGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb25zKG5ld1RlbXBsYXRlLCBicG1uRmFjdG9yeSksXHJcbiAgICAgICAgb2xkTWFwcGluZ3M7XHJcblxyXG4gICAgaWYgKCFuZXdNYXBwaW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7IGZpZWxkOiBuZXdNYXBwaW5ncyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dCA9IGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XHJcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgWydhY3Rpdml0aTpGaWVsZCddKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogbmV3TWFwcGluZ3MsXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRNYXBwaW5ncyA/IG9sZE1hcHBpbmdzIDogW11cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdGlQcm9wZXJ0aWVzKGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XHJcblxyXG4gICAgdmFyIG5ld1Byb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnRpZXMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRQcm9wZXJ0aWVzO1xyXG5cclxuICAgIGlmICghbmV3UHJvcGVydGllcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXHJcbiAgICAgICAgcHJvcGVydGllczogeyBwcm9wZXJ0aWVzOiBuZXdQcm9wZXJ0aWVzIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkUHJvcGVydGllcyA9IGZpbmRFeHRlbnNpb24oZWxlbWVudCwgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogWyBuZXdQcm9wZXJ0aWVzIF0sXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRQcm9wZXJ0aWVzID8gWyBvbGRQcm9wZXJ0aWVzIF0gOiBbXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgbmV3UHJvcGVydGllcyA9IGNyZWF0ZUJwbW5Qcm9wZXJ0eVVwZGF0ZXMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICB2YXIgbmV3UHJvcGVydGllc0NvdW50ID0gT2JqZWN0LmtleXMobmV3UHJvcGVydGllcykubGVuZ3RoO1xyXG5cclxuICAgIGlmICghbmV3UHJvcGVydGllc0NvdW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiBuZXdQcm9wZXJ0aWVzXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBuZXdQcm9wZXJ0aWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZUluT3V0KGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XHJcblxyXG4gICAgdmFyIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbk91dChuZXdUZW1wbGF0ZSwgYnBtbkZhY3RvcnkpLFxyXG4gICAgICAgIG9sZEluT3V0O1xyXG5cclxuICAgIGlmICghbmV3SW5PdXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250ZXh0KSB7XHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdCcsIHtcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHsgaW5vdXQ6IG5ld0luT3V0IH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkSW5PdXQgPSBmaW5kRXh0ZW5zaW9ucyhjb250ZXh0LCBbICdhY3Rpdml0aTpJbicsICdhY3Rpdml0aTpPdXQnIF0pO1xyXG5cclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgICAgb2JqZWN0c1RvQWRkOiBuZXdJbk91dCxcclxuICAgICAgICBvYmplY3RzVG9SZW1vdmU6IG9sZEluT3V0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlRXhlY3V0aW9uTGlzdGVuZXIoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgbmV3RXhlY3V0aW9uTGlzdGVuZXJzID0gY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lcnMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRFeGVjdXRpb25zTGlzdGVuZXJzO1xyXG5cclxuICAgIGlmICghbmV3RXhlY3V0aW9uTGlzdGVuZXJzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXHJcbiAgICAgICAgcHJvcGVydGllczogeyBleGVjdXRpb25MaXN0ZW5lcjogbmV3RXhlY3V0aW9uTGlzdGVuZXJzIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkRXhlY3V0aW9uc0xpc3RlbmVycyA9IGZpbmRFeHRlbnNpb25zKGNvbnRleHQsIFsgJ2FjdGl2aXRpOkV4ZWN1dGlvbkxpc3RlbmVyJyBdKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogbmV3RXhlY3V0aW9uTGlzdGVuZXJzLFxyXG4gICAgICAgIG9iamVjdHNUb1JlbW92ZTogb2xkRXhlY3V0aW9uc0xpc3RlbmVyc1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSAvIHJlY3JlYXRlIGEgc2NvcGVkIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50IHRoZSBkaWFncmFtIHBhcmVudCBlbGVtZW50XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNjb3BlTmFtZSBuYW1lIG9mIHRoZSBzY29wZSwgaS5lLiBhY3Rpdml0aTpDb25uZWN0b3JcclxuICAgKiBAcGFyYW0ge09iamVjdH0gc2NvcGVEZWZpbml0aW9uXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gdXBkYXRlU2NvcGVFbGVtZW50cyhlbGVtZW50LCBzY29wZU5hbWUsIHNjb3BlRGVmaW5pdGlvbikge1xyXG5cclxuICAgIHZhciBzY29wZUVsZW1lbnQgPSBicG1uRmFjdG9yeS5jcmVhdGUoc2NvcGVOYW1lKTtcclxuXHJcbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW5wdXRPdXRwdXRcclxuICAgIHVwZGF0ZUlvTWFwcGluZ3MoZWxlbWVudCwgc2NvcGVEZWZpbml0aW9uLCBzY29wZUVsZW1lbnQpO1xyXG5cclxuICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTpmaWVsZFxyXG4gICAgdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOnByb3BlcnRpZXNcclxuICAgIHVwZGF0ZUFjdGl2aXRpUHJvcGVydGllcyhlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIG90aGVyIHByb3BlcnRpZXMgKGJwbW46Y29uZGl0aW9uLCBhY3Rpdml0aTphc3luYywgLi4uKVxyXG4gICAgdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOmluIGFuZCBhY3Rpdml0aTpvdXRcclxuICAgIHVwZGF0ZUluT3V0KGVsZW1lbnQsIHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVFbGVtZW50KTtcclxuXHJcbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXJcclxuICAgIHVwZGF0ZUV4ZWN1dGlvbkxpc3RlbmVyKGVsZW1lbnQsIHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVFbGVtZW50KTtcclxuXHJcbiAgICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xyXG4gICAgdmFyIG9sZFNjb3BlID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgc2NvcGVOYW1lKTtcclxuXHJcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCcsIHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgIG9iamVjdHNUb0FkZDogWyBzY29wZUVsZW1lbnQgXSxcclxuICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRTY29wZSA/IFsgb2xkU2NvcGUgXSA6IFtdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBvc2UgYW4gZWxlbWVudCB0ZW1wbGF0ZSBjaGFuZ2UgYWN0aW9uLCB1cGRhdGluZyBhbGxcclxuICAgKiBuZWNlc3NhcnkgdW5kZXJseWluZyBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50XHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQub2xkVGVtcGxhdGVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5uZXdUZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHRoaXMucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcclxuICAgICAgICBuZXdUZW1wbGF0ZSA9IGNvbnRleHQubmV3VGVtcGxhdGU7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOm1vZGVsZXJUZW1wbGF0ZSBhdHRyaWJ1dGVcclxuICAgIHVwZGF0ZU1vZGVsZXJUZW1wbGF0ZShlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgaWYgKG5ld1RlbXBsYXRlKSB7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW5wdXRPdXRwdXRcclxuICAgICAgdXBkYXRlSW9NYXBwaW5ncyhlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZmllbGRcclxuICAgICAgdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6cHJvcGVydGllc1xyXG4gICAgICB1cGRhdGVBY3Rpdml0aVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xyXG5cclxuICAgICAgLy8gdXBkYXRlIG90aGVyIHByb3BlcnRpZXMgKGJwbW46Y29uZGl0aW9uLCBhY3Rpdml0aTphc3luYywgLi4uKVxyXG4gICAgICB1cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTppbiBhbmQgYWN0aXZpdGk6b3V0XHJcbiAgICAgIHVwZGF0ZUluT3V0KGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lclxyXG4gICAgICB1cGRhdGVFeGVjdXRpb25MaXN0ZW5lcihlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyBsb29wIG9uIHNjb3BlcyBwcm9wZXJ0aWVzXHJcbiAgICAgIGZvckVhY2gobmV3VGVtcGxhdGUuc2NvcGVzLCBmdW5jdGlvbihzY29wZURlZmluaXRpb24sIHNjb3BlTmFtZSkge1xyXG4gICAgICAgIHVwZGF0ZVNjb3BlRWxlbWVudHMoZWxlbWVudCwgc2NvcGVOYW1lLCBzY29wZURlZmluaXRpb24pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnLCAnY29tbWFuZFN0YWNrJywgJ2JwbW5GYWN0b3J5JyBdO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyO1xyXG5cclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVCcG1uUHJvcGVydHlVcGRhdGVzKHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICB2YXIgcHJvcGVydHlVcGRhdGVzID0ge307XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcblxyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1RhcmdldCA9IGJpbmRpbmcubmFtZSxcclxuICAgICAgICBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgIGlmIChiaW5kaW5nLnR5cGUgPT09ICdwcm9wZXJ0eScpIHtcclxuXHJcbiAgICAgIGlmIChiaW5kaW5nVGFyZ2V0ID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XHJcbiAgICAgICAgICBib2R5OiBwLnZhbHVlLFxyXG4gICAgICAgICAgbGFuZ3VhZ2U6IGJpbmRpbmcuc2NyaXB0Rm9ybWF0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHAudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFzc2lnbmluZyBhY3Rpdml0aTphc3luYyB0byB0cnVlfGZhbHNlXHJcbiAgICAgIC8vIGFzc2lnbmluZyBicG1uOmNvbmRpdGlvbkV4cHJlc3Npb24gdG8geyAkdHlwZTogJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIC4uLiB9XHJcbiAgICAgIHByb3BlcnR5VXBkYXRlc1tiaW5kaW5nVGFyZ2V0XSA9IHByb3BlcnR5VmFsdWU7XHJcblxyXG4gICAgICAvLyBtYWtlIHN1cmUgd2UgdW5zZXQgb3RoZXIgXCJpbXBsZW1lbnRhdGlvbiB0eXBlc1wiXHJcbiAgICAgIC8vIHdoZW4gYXBwbHlpbmcgYSBhY3Rpdml0aTpjbGFzcyB0ZW1wbGF0ZSBvbnRvIGEgcHJlY29uZmlndXJlZFxyXG4gICAgICAvLyBhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24gZWxlbWVudFxyXG4gICAgICBpZiAoQUNUSVZJVElfU0VSVklDRV9UQVNLX0xJS0UuaW5kZXhPZihiaW5kaW5nVGFyZ2V0KSAhPT0gLTEpIHtcclxuICAgICAgICBBQ1RJVklUSV9TRVJWSUNFX1RBU0tfTElLRS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcclxuICAgICAgICAgIGlmIChwcm9wICE9PSBiaW5kaW5nVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5VXBkYXRlc1twcm9wXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcHJvcGVydHlVcGRhdGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9ucyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgaW5qZWN0aW9ucyA9IFtdO1xyXG5cclxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpmaWVsZCcpIHtcclxuICAgICAgaW5qZWN0aW9ucy5wdXNoKGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24oXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChpbmplY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIGluamVjdGlvbnM7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aVByb3BlcnRpZXModGVtcGxhdGUsIGJwbW5GYWN0b3J5KSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpwcm9wZXJ0eScpIHtcclxuICAgICAgcHJvcGVydGllcy5wdXNoKGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkoXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6UHJvcGVydGllcycsIHtcclxuICAgICAgdmFsdWVzOiBwcm9wZXJ0aWVzXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3ModGVtcGxhdGUsIGJwbW5GYWN0b3J5KSB7XHJcblxyXG4gIHZhciBpbnB1dFBhcmFtZXRlcnMgPSBbXSxcclxuICAgICAgb3V0cHV0UGFyYW1ldGVycyA9IFtdO1xyXG5cclxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6aW5wdXRQYXJhbWV0ZXInKSB7XHJcbiAgICAgIGlucHV0UGFyYW1ldGVycy5wdXNoKGNyZWF0ZUlucHV0UGFyYW1ldGVyKFxyXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XHJcbiAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ2FjdGl2aXRpOm91dHB1dFBhcmFtZXRlcicpIHtcclxuICAgICAgb3V0cHV0UGFyYW1ldGVycy5wdXNoKGNyZWF0ZU91dHB1dFBhcmFtZXRlcihcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gZG8gd2UgbmVlZCB0byBjcmVhdGUgbmV3IGlvTWFwcGluZ3MgKD8pXHJcbiAgaWYgKG91dHB1dFBhcmFtZXRlcnMubGVuZ3RoIHx8IGlucHV0UGFyYW1ldGVycy5sZW5ndGgpIHtcclxuICAgIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOklucHV0T3V0cHV0Jywge1xyXG4gICAgICBpbnB1dFBhcmFtZXRlcnM6IGlucHV0UGFyYW1ldGVycyxcclxuICAgICAgb3V0cHV0UGFyYW1ldGVyczogb3V0cHV0UGFyYW1ldGVyc1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUluT3V0KHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICB2YXIgaW5PdXRzID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTppbicpIHtcclxuICAgICAgaW5PdXRzLnB1c2goY3JlYXRlQWN0aXZpdGlJbihcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6b3V0Jykge1xyXG4gICAgICBpbk91dHMucHVzaChjcmVhdGVBY3Rpdml0aU91dChcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknKSB7XHJcbiAgICAgIGluT3V0cy5wdXNoKGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBpbk91dHM7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVycyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lcicpIHtcclxuICAgICAgZXhlY3V0aW9uTGlzdGVuZXIucHVzaChjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVyU2NyaXB0KFxyXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XHJcbiAgICAgICkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXI7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIENoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIgPSByZXF1aXJlKCcuL0NoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXInKTtcclxuXHJcbnZhciBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmdldFRlbXBsYXRlLFxyXG4gICAgZ2V0RGVmYXVsdFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0RGVmYXVsdFRlbXBsYXRlO1xyXG5cclxuZnVuY3Rpb24gcmVnaXN0ZXJIYW5kbGVycyhjb21tYW5kU3RhY2ssIGVsZW1lbnRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnkpIHtcclxuICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKFxyXG4gICAgJ3Byb3BlcnRpZXNQYW5lbC5hY3Rpdml0aS5jaGFuZ2VUZW1wbGF0ZScsXHJcbiAgICBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyXHJcbiAgKTtcclxuXHJcbiAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBzaGFwZSBjcmVhdGlvblxyXG4gIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5zaGFwZS5jcmVhdGUucG9zdEV4ZWN1dGVkJyBdLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBhcHBseURlZmF1bHRUZW1wbGF0ZShjb250ZXh0LmNvbnRleHQuc2hhcGUsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIGFwcGx5IGRlZmF1bHQgZWxlbWVudCB0ZW1wbGF0ZXMgb24gY29ubmVjdGlvbiBjcmVhdGlvblxyXG4gIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5jb25uZWN0aW9uLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGFwcGx5RGVmYXVsdFRlbXBsYXRlKGNvbnRleHQuY29udGV4dC5jb25uZWN0aW9uLCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2spO1xyXG4gIH0pO1xyXG59XHJcblxyXG5yZWdpc3RlckhhbmRsZXJzLiRpbmplY3QgPSBbICdjb21tYW5kU3RhY2snLCAnZWxlbWVudFRlbXBsYXRlcycsICdldmVudEJ1cycsICdlbGVtZW50UmVnaXN0cnknIF07XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgX19pbml0X186IFsgcmVnaXN0ZXJIYW5kbGVycyBdXHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gYXBwbHlEZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgY29tbWFuZFN0YWNrKSB7XHJcblxyXG4gIGlmICghZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcylcclxuICAgICAgJiYgZ2V0RGVmYXVsdFRlbXBsYXRlKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMpKSB7XHJcblxyXG4gICAgdmFyIGNvbW1hbmQgPSAncHJvcGVydGllc1BhbmVsLmFjdGl2aXRpLmNoYW5nZVRlbXBsYXRlJztcclxuICAgIHZhciBjb21tYW5kQ29udGV4dCA9IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgbmV3VGVtcGxhdGU6IGdldERlZmF1bHRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKVxyXG4gICAgfTtcclxuXHJcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLCBjb21tYW5kQ29udGV4dCk7XHJcbiAgfVxyXG59XHJcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIF9fZGVwZW5kc19fOiBbXHJcbiAgICByZXF1aXJlKCcuL2NtZC9pbmRleCcpLFxyXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XHJcbiAgXSxcclxuICBfX2luaXRfXzogW1xyXG4gICAgJ2N1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcicsXHJcbiAgICAnZWxlbWVudFRlbXBsYXRlc0xvYWRlcidcclxuICBdLFxyXG4gIGN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQ3VzdG9tRWxlbWVudHNQcm9wZXJ0aWVzQWN0aXZhdG9yJykgXSxcclxuICBlbGVtZW50VGVtcGxhdGVzOiBbICd0eXBlJywgcmVxdWlyZSgnLi9FbGVtZW50VGVtcGxhdGVzJykgXSxcclxuICBlbGVtZW50VGVtcGxhdGVzTG9hZGVyOiBbICd0eXBlJywgcmVxdWlyZSgnLi9FbGVtZW50VGVtcGxhdGVzTG9hZGVyJykgXVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGUsXHJcbiAgICBnZXRUZW1wbGF0ZUlkID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGVJZDtcclxuXHJcbnZhciBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKTtcclxuXHJcbnZhciBURU1QTEFURV9BVFRSID0gcmVxdWlyZSgnLi4vSGVscGVyJykuVEVNUExBVEVfQVRUUjtcclxuXHJcbmZ1bmN0aW9uIGlzQW55KGVsZW1lbnQsIHR5cGVzKSB7XHJcbiAgcmV0dXJuIHR5cGVzLnJlZHVjZShmdW5jdGlvbihyZXN1bHQsIHR5cGUpIHtcclxuICAgIHJldHVybiByZXN1bHQgfHwgaXMoZWxlbWVudCwgdHlwZSk7XHJcbiAgfSwgZmFsc2UpO1xyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBvcHRpb25zID0gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhb3B0aW9uc1swXS5pc0RlZmF1bHQpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCBlbGVtZW50IHRlbXBsYXRlICh2aWEgZHJvcGRvd24pXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdlbGVtZW50VGVtcGxhdGUtY2hvb3NlcicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFbGVtZW50IFRlbXBsYXRlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJyxcclxuICAgIHNlbGVjdE9wdGlvbnM6IG9wdGlvbnMsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcclxuICAgICAgcmV0dXJuIGFwcGx5VGVtcGxhdGUoZWxlbWVudCwgcHJvcGVydGllc1tURU1QTEFURV9BVFRSXSwgZWxlbWVudFRlbXBsYXRlcyk7XHJcbiAgICB9LFxyXG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgICAgIHJldHVybiB0ZW1wbGF0ZSAmJiBpc0RlZmF1bHRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBhcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlSWQsIGVsZW1lbnRUZW1wbGF0ZXMpIHtcclxuXHJcbiAgLy8gY2xlYW51cFxyXG4gIC8vIGNsZWFyIGlucHV0IG91dHB1dCBtYXBwaW5nc1xyXG4gIC8vIHVuZG8gY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGVtcGxhdGVcclxuXHJcbiAgLy8gcmUtZXN0YWJsaXNoXHJcbiAgLy8gc2V0IGlucHV0IG91dHB1dCBtYXBwaW5nc1xyXG4gIC8vIGFwcGx5IGNoYW5nZXMgdG8gcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIG5ldyB0ZW1wbGF0ZVxyXG5cclxuICB2YXIgb2xkVGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKSxcclxuICAgICAgbmV3VGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldChuZXdUZW1wbGF0ZUlkKTtcclxuXHJcbiAgaWYgKG9sZFRlbXBsYXRlID09PSBuZXdUZW1wbGF0ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXNQYW5lbC5hY3Rpdml0aS5jaGFuZ2VUZW1wbGF0ZScsXHJcbiAgICBjb250ZXh0OiB7XHJcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgIG9sZFRlbXBsYXRlOiBvbGRUZW1wbGF0ZSxcclxuICAgICAgbmV3VGVtcGxhdGU6IG5ld1RlbXBsYXRlXHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgY3VycmVudFRlbXBsYXRlSWQgPSBnZXRUZW1wbGF0ZUlkKGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZW1wdHlPcHRpb24gPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIHZhbHVlOiAnJ1xyXG4gIH07XHJcblxyXG4gIHZhciBhbGxPcHRpb25zID0gZWxlbWVudFRlbXBsYXRlcy5nZXRBbGwoKS5yZWR1Y2UoZnVuY3Rpb24odGVtcGxhdGVzLCB0KSB7XHJcbiAgICBpZiAoIWlzQW55KGVsZW1lbnQsIHQuYXBwbGllc1RvKSkge1xyXG4gICAgICByZXR1cm4gdGVtcGxhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZW1wbGF0ZXMuY29uY2F0KHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKHQubmFtZSksXHJcbiAgICAgIHZhbHVlOiB0LmlkLFxyXG4gICAgICBpc0RlZmF1bHQ6IHQuaXNEZWZhdWx0XHJcbiAgICB9KTtcclxuICB9LCBbIGVtcHR5T3B0aW9uIF0pO1xyXG5cclxuXHJcbiAgdmFyIGRlZmF1bHRPcHRpb24gPSBmaW5kKGFsbE9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xyXG4gICAgcmV0dXJuIGlzRGVmYXVsdFRlbXBsYXRlKG9wdGlvbik7XHJcbiAgfSk7XHJcblxyXG4gIHZhciBjdXJyZW50T3B0aW9uID0gZmluZChhbGxPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IGN1cnJlbnRUZW1wbGF0ZUlkO1xyXG4gIH0pO1xyXG5cclxuICBpZiAoY3VycmVudFRlbXBsYXRlSWQgJiYgIWN1cnJlbnRPcHRpb24pIHtcclxuICAgIGN1cnJlbnRPcHRpb24gPSB1bmtub3duVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlSWQsIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgYWxsT3B0aW9ucy5wdXNoKGN1cnJlbnRPcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFkZWZhdWx0T3B0aW9uKSB7XHJcblxyXG4gICAgLy8gcmV0dXJuIGFsbCBvcHRpb25zLCBpbmNsdWRpbmcgZW1wdHlcclxuICAgIC8vIGFuZCBvcHRpb25hbGx5IHVua25vd25UZW1wbGF0ZSBvcHRpb25cclxuICAgIHJldHVybiBhbGxPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gc3BlY2lhbCBsaW1pdGVkIGhhbmRsaW5nIGZvclxyXG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xyXG5cclxuICB2YXIgb3B0aW9ucyA9IFtdO1xyXG5cclxuICAvLyBjdXJyZW50IHRlbXBsYXRlIG5vdCBzZXRcclxuICBpZiAoIWN1cnJlbnRUZW1wbGF0ZUlkKSB7XHJcbiAgICBvcHRpb25zLnB1c2goe1xyXG4gICAgICBuYW1lOiAnJyxcclxuICAgICAgdmFsdWU6ICcnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGN1cnJlbnQgdGVtcGxhdGUgbm90IGRlZmF1bHRcclxuICBpZiAoY3VycmVudE9wdGlvbiAmJiBjdXJyZW50T3B0aW9uICE9PSBkZWZhdWx0T3B0aW9uKSB7XHJcbiAgICBvcHRpb25zLnB1c2goY3VycmVudE9wdGlvbik7XHJcbiAgfVxyXG5cclxuICBvcHRpb25zLnB1c2goZGVmYXVsdE9wdGlvbik7XHJcblxyXG4gIC8vIFsgKGVtcHR5KSwgKGN1cnJlbnQpLCBkZWZhdWx0T3B0aW9uIF1cclxuICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuZnVuY3Rpb24gdW5rbm93blRlbXBsYXRlKHRlbXBsYXRlSWQsIHRyYW5zbGF0ZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiB0cmFuc2xhdGUoJ1t1bmtub3duIHRlbXBsYXRlOiB7dGVtcGxhdGVJZH1dJywgeyB0ZW1wbGF0ZUlkOiB0ZW1wbGF0ZUlkIH0pLFxyXG4gICAgdmFsdWU6IHRlbXBsYXRlSWRcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RlZmF1bHRUZW1wbGF0ZShlbGVtZW50VGVtcGxhdGUpIHtcclxuICByZXR1cm4gZWxlbWVudFRlbXBsYXRlLmlzRGVmYXVsdDtcclxufSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGUsXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBmaW5kRXh0ZW5zaW9uID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbixcclxuICAgIGZpbmRFeHRlbnNpb25zID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbnMsXHJcbiAgICBmaW5kSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9IZWxwZXInKS5maW5kSW5wdXRQYXJhbWV0ZXIsXHJcbiAgICBmaW5kT3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZE91dHB1dFBhcmFtZXRlcixcclxuICAgIGZpbmRBY3Rpdml0aVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEFjdGl2aXRpUHJvcGVydHksXHJcbiAgICBmaW5kQWN0aXZpdGlJbk91dCA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRBY3Rpdml0aUluT3V0O1xyXG5cclxudmFyIGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aVByb3BlcnR5LFxyXG4gICAgY3JlYXRlSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVJbnB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZU91dHB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW4gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluLFxyXG4gICAgY3JlYXRlQWN0aXZpdGlPdXQgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aU91dCxcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5LFxyXG4gICAgY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbiA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb247XHJcblxyXG52YXIgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSA9ICdhY3Rpdml0aTpwcm9wZXJ0eScsXHJcbiAgICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTppbnB1dFBhcmFtZXRlcicsXHJcbiAgICBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnYWN0aXZpdGk6b3V0cHV0UGFyYW1ldGVyJyxcclxuICAgIEFDVElWSVRJX0lOX1RZUEUgPSAnYWN0aXZpdGk6aW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX1RZUEUgPSAnYWN0aXZpdGk6b3V0JyxcclxuICAgIEFDVElWSVRJX0lOX0JVU0lORVNTX0tFWV9UWVBFID0gJ2FjdGl2aXRpOmluOmJ1c2luZXNzS2V5JyxcclxuICAgIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9UWVBFID0gJ2FjdGl2aXRpOmV4ZWN1dGlvbkxpc3RlbmVyJyxcclxuICAgIEFDVElWSVRJX0ZJRUxEID0gJ2FjdGl2aXRpOmZpZWxkJztcclxuXHJcbnZhciBCQVNJQ19NT0RETEVfVFlQRVMgPSBbXHJcbiAgJ0Jvb2xlYW4nLFxyXG4gICdJbnRlZ2VyJyxcclxuICAnU3RyaW5nJ1xyXG5dO1xyXG5cclxudmFyIEVYVEVOU0lPTl9CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX1BST1BFUlRZX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUsXHJcbiAgQUNUSVZJVElfRklFTERcclxuXTtcclxuXHJcbnZhciBJT19CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX0lOUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRVxyXG5dO1xyXG5cclxudmFyIElOX09VVF9CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEVcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBJbmplY3RzIGN1c3RvbSBwcm9wZXJ0aWVzIGludG8gdGhlIGdpdmVuIGdyb3VwLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgaWYgKCF0ZW1wbGF0ZSkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlbmRlckN1c3RvbUZpZWxkID0gZnVuY3Rpb24oaWQsIHAsIGlkeCkge1xyXG4gICAgdmFyIHByb3BlcnR5VHlwZSA9IHAudHlwZTtcclxuXHJcbiAgICB2YXIgZW50cnlPcHRpb25zID0ge1xyXG4gICAgICBpZDogaWQsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBwLmRlc2NyaXB0aW9uLFxyXG4gICAgICBsYWJlbDogcC5sYWJlbCA/IHRyYW5zbGF0ZShwLmxhYmVsKSA6IHAubGFiZWwsXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6IGlkLFxyXG4gICAgICBnZXQ6IHByb3BlcnR5R2V0dGVyKGlkLCBwKSxcclxuICAgICAgc2V0OiBwcm9wZXJ0eVNldHRlcihpZCwgcCwgYnBtbkZhY3RvcnkpLFxyXG4gICAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IoaWQsIHAsIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGVudHJ5O1xyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdCb29sZWFuJykge1xyXG4gICAgICBlbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdTdHJpbmcnKSB7XHJcbiAgICAgIGVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdUZXh0Jykge1xyXG4gICAgICBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KGVudHJ5T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ0Ryb3Bkb3duJykge1xyXG4gICAgICBlbnRyeU9wdGlvbnMuc2VsZWN0T3B0aW9ucyA9IHAuY2hvaWNlcztcclxuXHJcbiAgICAgIGVudHJ5ID0gZW50cnlGYWN0b3J5LnNlbGVjdEJveChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbnRyeTtcclxuICB9O1xyXG5cclxuICB2YXIgZ3JvdXBzID0gW107XHJcbiAgdmFyIGlkLCBlbnRyeTtcclxuXHJcbiAgdmFyIGN1c3RvbUZpZWxkc0dyb3VwID0ge1xyXG4gICAgaWQ6ICdjdXN0b21GaWVsZCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDdXN0b20gRmllbGRzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgdGVtcGxhdGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHAsIGlkeCkge1xyXG5cclxuICAgIGlkID0gJ2N1c3RvbS0nICsgdGVtcGxhdGUuaWQgKyAnLScgKyBpZHg7XHJcblxyXG4gICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChpZCwgcCwgaWR4KTtcclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBjdXN0b21GaWVsZHNHcm91cC5lbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIGlmIChjdXN0b21GaWVsZHNHcm91cC5lbnRyaWVzLmxlbmd0aCA+IDApIHtcclxuICAgIGdyb3Vwcy5wdXNoKGN1c3RvbUZpZWxkc0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGlmICh0ZW1wbGF0ZS5zY29wZXMpIHtcclxuICAgIGZvciAodmFyIHNjb3BlTmFtZSBpbiB0ZW1wbGF0ZS5zY29wZXMpIHtcclxuXHJcbiAgICAgIHZhciBzY29wZSA9IHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdO1xyXG4gICAgICB2YXIgaWRTY29wZU5hbWUgPSBzY29wZU5hbWUucmVwbGFjZSgvOi9nLCAnXycpO1xyXG5cclxuICAgICAgdmFyIGN1c3RvbVNjb3BlRmllbGRzR3JvdXAgPSB7XHJcbiAgICAgICAgaWQ6ICdjdXN0b21GaWVsZC0nICsgaWRTY29wZU5hbWUsXHJcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ3VzdG9tIEZpZWxkcyBmb3Igc2NvcGU6ICcpICsgc2NvcGVOYW1lLFxyXG4gICAgICAgIGVudHJpZXM6IFtdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBzY29wZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XHJcblxyXG4gICAgICAgIHZhciBwcm9wZXJ0eUlkID0gJ2N1c3RvbS0nICsgdGVtcGxhdGUuaWQgKyAnLScgKyBpZFNjb3BlTmFtZSArICctJyArIGlkeDtcclxuXHJcbiAgICAgICAgdmFyIHNjb3BlZFByb3BlcnR5ID0gcHJvcGVydHlXaXRoU2NvcGUocCwgc2NvcGVOYW1lKTtcclxuXHJcbiAgICAgICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChwcm9wZXJ0eUlkLCBzY29wZWRQcm9wZXJ0eSwgaWR4KTtcclxuICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgIGN1c3RvbVNjb3BlRmllbGRzR3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGN1c3RvbVNjb3BlRmllbGRzR3JvdXAuZW50cmllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JvdXBzLnB1c2goY3VzdG9tU2NvcGVGaWVsZHNHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBncm91cHM7XHJcbn07XHJcblxyXG5cclxuLy8gZ2V0dGVycywgc2V0dGVycyBhbmQgdmFsaWRhdG9ycyAvLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGEgZ2V0dGVyIHRoYXQgcmV0cmlldmVzIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHBhcmFtIHtQcm9wZXJ0eURlc2NyaXB0b3J9IHByb3BlcnR5XHJcbiAqXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIobmFtZSwgcHJvcGVydHkpIHtcclxuXHJcbiAgLyogZ2V0dGVyICovXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldChlbGVtZW50KSB7XHJcbiAgICB2YXIgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTtcclxuXHJcbiAgICByZXR1cm4gb2JqZWN0V2l0aEtleShuYW1lLCB2YWx1ZSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhIHNldHRlciB0aGF0IHVwZGF0ZXMgdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBwcm9wZXJ0eVNldHRlcihuYW1lLCBwcm9wZXJ0eSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgLyogc2V0dGVyICovXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldChlbGVtZW50LCB2YWx1ZXMpIHtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XHJcblxyXG4gICAgcmV0dXJuIHNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBicG1uRmFjdG9yeSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhIHZhbGlkYXRvciB0aGF0IGVuc3VyZXMgdGhlIHByb3BlcnR5IGlzIG9rLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IobmFtZSwgcHJvcGVydHksIHRyYW5zbGF0ZSkge1xyXG5cclxuICAvKiB2YWxpZGF0b3IgKi9cclxuICByZXR1cm4gZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XHJcblxyXG4gICAgdmFyIGVycm9yID0gdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBvYmplY3RXaXRoS2V5KG5hbWUsIGVycm9yKTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5cclxuLy8gZ2V0LCBzZXQgYW5kIHZhbGlkYXRlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBkZXNjcmlwdG9yLFxyXG4gKiBvbiB0aGUgcGFzc2VkIGRpYWdyYW0gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICpcclxuICogQHJldHVybiB7QW55fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxyXG4gICAgICBzY29wZSA9IHByb3BlcnR5LnNjb3BlO1xyXG5cclxuICB2YXIgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGUsXHJcbiAgICAgIGJpbmRpbmdOYW1lID0gYmluZGluZy5uYW1lO1xyXG5cclxuICB2YXIgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5LnZhbHVlIHx8ICcnO1xyXG5cclxuICBpZiAoc2NvcGUpIHtcclxuICAgIGJvID0gZmluZEV4dGVuc2lvbihibywgc2NvcGUubmFtZSk7XHJcbiAgICBpZiAoIWJvKSB7XHJcbiAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvcGVydHlcclxuICBpZiAoYmluZGluZ1R5cGUgPT09ICdwcm9wZXJ0eScpIHtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBiby5nZXQoYmluZGluZ05hbWUpO1xyXG5cclxuICAgIGlmIChiaW5kaW5nTmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5ib2R5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHJldHVybiBkZWZpbmVkIGRlZmF1bHRcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gcmV0dXJuIHZhbHVlOyBkZWZhdWx0IHRvIGRlZmluZWQgZGVmYXVsdFxyXG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHZhbHVlIDogcHJvcGVydHlWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydHk7XHJcblxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfUFJPUEVSVFlfVFlQRSkge1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydGllcyA9IGJvLmdldCgncHJvcGVydGllcycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihibywgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWN0aXZpdGlQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydHkgPSBmaW5kQWN0aXZpdGlQcm9wZXJ0eShhY3Rpdml0aVByb3BlcnRpZXMsIGJpbmRpbmcpO1xyXG5cclxuICAgICAgaWYgKGFjdGl2aXRpUHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gYWN0aXZpdGlQcm9wZXJ0eS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGlucHV0T3V0cHV0LFxyXG4gICAgICBpb1BhcmFtZXRlcjtcclxuXHJcbiAgaWYgKElPX0JJTkRJTkdfVFlQRVMuaW5kZXhPZihiaW5kaW5nVHlwZSkgIT09IC0xKSB7XHJcblxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGlucHV0T3V0cHV0ID0gYm8uZ2V0KCdpbnB1dE91dHB1dCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJvLCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlucHV0T3V0cHV0KSB7XHJcbiAgICAgIC8vIGlvUGFyYW1ldGVyIGNhbm5vdCBleGlzdCB5ZXQsIHJldHVybiBwcm9wZXJ0eSB2YWx1ZVxyXG4gICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFjdGl2aXRpIGlucHV0IHBhcmFtZXRlclxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUpIHtcclxuICAgIGlvUGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcclxuXHJcbiAgICBpZiAoaW9QYXJhbWV0ZXIpIHtcclxuICAgICAgaWYgKGJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKGlvUGFyYW1ldGVyLmRlZmluaXRpb24pIHtcclxuICAgICAgICAgIHJldHVybiBpb1BhcmFtZXRlci5kZWZpbml0aW9uLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaW9QYXJhbWV0ZXIudmFsdWUgfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIGFjdGl2aXRpIG91dHB1dCBwYXJhbWV0ZXJcclxuICBpZiAoYmluZGluZy50eXBlID09PSBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUpIHtcclxuICAgIGlvUGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XHJcblxyXG4gICAgaWYgKGlvUGFyYW1ldGVyKSB7XHJcbiAgICAgIHJldHVybiBpb1BhcmFtZXRlci5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIHZhciBpb0VsZW1lbnQ7XHJcblxyXG4gIGlmIChJTl9PVVRfQklORElOR19UWVBFUy5pbmRleE9mKGJpbmRpbmdUeXBlKSAhPSAtMSkge1xyXG4gICAgaW9FbGVtZW50ID0gZmluZEFjdGl2aXRpSW5PdXQoYm8sIGJpbmRpbmcpO1xyXG5cclxuICAgIGlmIChpb0VsZW1lbnQpIHtcclxuICAgICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9CVVNJTkVTU19LRVlfVFlQRSkge1xyXG4gICAgICAgIHJldHVybiBpb0VsZW1lbnQuYnVzaW5lc3NLZXk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcbiAgICAgICAgcmV0dXJuIGlvRWxlbWVudC50YXJnZXQ7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0lOX1RZUEUpIHtcclxuICAgICAgICByZXR1cm4gaW9FbGVtZW50W2JpbmRpbmcuZXhwcmVzc2lvbiA/ICdzb3VyY2VFeHByZXNzaW9uJyA6ICdzb3VyY2UnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfVFlQRSkge1xyXG4gICAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyO1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGV4ZWN1dGlvbkxpc3RlbmVyID0gYm8uZ2V0KCdleGVjdXRpb25MaXN0ZW5lcicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhlY3V0aW9uTGlzdGVuZXIgPSBmaW5kRXh0ZW5zaW9uKGJvLCAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXIuc2NyaXB0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGZpZWxkSW5qZWN0aW9uO1xyXG4gIGlmIChBQ1RJVklUSV9GSUVMRCA9PT0gYmluZGluZ1R5cGUpIHtcclxuICAgIHZhciBmaWVsZEluamVjdGlvbnMgPSBmaW5kRXh0ZW5zaW9ucyhibywgWyAnYWN0aXZpdGk6RmllbGQnIF0pO1xyXG4gICAgZmllbGRJbmplY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICBpZiAoaXRlbS5uYW1lID09PSBiaW5kaW5nLm5hbWUpIHtcclxuICAgICAgICBmaWVsZEluamVjdGlvbiA9IGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGZpZWxkSW5qZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaWVsZEluamVjdGlvbi5zdHJpbmcgfHwgZmllbGRJbmplY3Rpb24uZXhwcmVzc2lvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRocm93IHVua25vd25Qcm9wZXJ0eUJpbmRpbmcocHJvcGVydHkpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5nZXRQcm9wZXJ0eVZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGFuIHVwZGF0ZSBvcGVyYXRpb24gdGhhdCBjaGFuZ2VzIHRoZSBkaWFncmFtXHJcbiAqIGVsZW1lbnQncyBjdXN0b20gcHJvcGVydHkgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgcmVzcG9uc2Ugb2YgdGhpcyBtZXRob2Qgd2lsbCBiZSBwcm9jZXNzZWQgdmlhXHJcbiAqIHtAbGluayBQcm9wZXJ0aWVzUGFuZWwjYXBwbHlDaGFuZ2VzfS5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdHxBcnJheTxPYmplY3Q+fSByZXN1bHRzIHRvIGJlIHByb2Nlc3NlZFxyXG4gKi9cclxuZnVuY3Rpb24gc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBiaW5kaW5nID0gcHJvcGVydHkuYmluZGluZyxcclxuICAgICAgc2NvcGUgPSBwcm9wZXJ0eS5zY29wZTtcclxuXHJcbiAgdmFyIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlLFxyXG4gICAgICBiaW5kaW5nTmFtZSA9IGJpbmRpbmcubmFtZTtcclxuXHJcbiAgdmFyIHByb3BlcnR5VmFsdWU7XHJcblxyXG4gIHZhciB1cGRhdGVzID0gW107XHJcblxyXG4gIHZhciBleHRlbnNpb25FbGVtZW50cztcclxuXHJcbiAgaWYgKEVYVEVOU0lPTl9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBiby5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcblxyXG4gICAgLy8gY3JlYXRlIGV4dGVuc2lvbiBlbGVtZW50cywgaWYgdGhleSBkbyBub3QgZXhpc3QgKHlldClcclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCBudWxsLCBlbGVtZW50LCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KFxyXG4gICAgICAgIGVsZW1lbnQsIGJvLCBvYmplY3RXaXRoS2V5KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKVxyXG4gICAgICApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChzY29wZSkge1xyXG4gICAgYm8gPSBmaW5kRXh0ZW5zaW9uKGJvLCBzY29wZS5uYW1lKTtcclxuICAgIGlmICghYm8pIHtcclxuICAgICAgYm8gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoc2NvcGUubmFtZSwgbnVsbCwgZWxlbWVudCwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICBibywgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIGJvIF1cclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBwcm9wZXJ0eVxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5Jykge1xyXG5cclxuICAgIGlmIChiaW5kaW5nTmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XHJcblxyXG4gICAgICBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XHJcbiAgICAgICAgYm9keTogdmFsdWUsXHJcbiAgICAgICAgbGFuZ3VhZ2U6IGJpbmRpbmcuc2NyaXB0Rm9ybWF0XHJcbiAgICAgIH0sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdmFyIG1vZGRsZVByb3BlcnR5RGVzY3JpcHRvciA9IGJvLiRkZXNjcmlwdG9yLnByb3BlcnRpZXNCeU5hbWVbYmluZGluZ05hbWVdO1xyXG5cclxuICAgICAgdmFyIG1vZGRsZVR5cGUgPSBtb2RkbGVQcm9wZXJ0eURlc2NyaXB0b3IudHlwZTtcclxuXHJcbiAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBvbmx5IHVwZGF0ZSBTdHJpbmcsIEludGVnZXIsIFJlYWwgYW5kXHJcbiAgICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcyAoZG8gbm90IGFjY2lkZW50YWxseSBvdmVycmlkZSBjb21wbGV4IG9iamVjdHMuLi4pXHJcbiAgICAgIGlmIChCQVNJQ19NT0RETEVfVFlQRVMuaW5kZXhPZihtb2RkbGVUeXBlKSA9PT0gLTEpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgbW9kZGxlIHR5cGUgPCcgKyBtb2RkbGVUeXBlICsgJz4nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1vZGRsZVR5cGUgPT09ICdCb29sZWFuJykge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSAhIXZhbHVlO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYgKG1vZGRsZVR5cGUgPT09ICdJbnRlZ2VyJykge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG5cclxuICAgICAgICBpZiAoaXNOYU4ocHJvcGVydHlWYWx1ZSkpIHtcclxuICAgICAgICAgIC8vIGRvIG5vdCB3cml0ZSBOYU4gdmFsdWVcclxuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICBlbGVtZW50LCBibywgb2JqZWN0V2l0aEtleShiaW5kaW5nTmFtZSwgcHJvcGVydHlWYWx1ZSlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhY3Rpdml0aTpwcm9wZXJ0eVxyXG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXHJcbiAgICAgIGV4aXN0aW5nQWN0aXZpdGlQcm9wZXJ0eSxcclxuICAgICAgbmV3QWN0aXZpdGlQcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9QUk9QRVJUWV9UWVBFKSB7XHJcblxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydGllcyA9IGJvLmdldCgncHJvcGVydGllcycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFjdGl2aXRpUHJvcGVydGllcykge1xyXG4gICAgICBhY3Rpdml0aVByb3BlcnRpZXMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlByb3BlcnRpZXMnLCBudWxsLCBibywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICAgIGVsZW1lbnQsIGJvLCB7IHByb3BlcnRpZXM6IGFjdGl2aXRpUHJvcGVydGllcyB9XHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgWyBhY3Rpdml0aVByb3BlcnRpZXMgXVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhpc3RpbmdBY3Rpdml0aVByb3BlcnR5ID0gZmluZEFjdGl2aXRpUHJvcGVydHkoYWN0aXZpdGlQcm9wZXJ0aWVzLCBiaW5kaW5nKTtcclxuXHJcbiAgICBuZXdBY3Rpdml0aVByb3BlcnR5ID0gY3JlYXRlQWN0aXZpdGlQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzLFxyXG4gICAgICAndmFsdWVzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdBY3Rpdml0aVByb3BlcnR5IF0sXHJcbiAgICAgIGV4aXN0aW5nQWN0aXZpdGlQcm9wZXJ0eSA/IFsgZXhpc3RpbmdBY3Rpdml0aVByb3BlcnR5IF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICAvLyBhY3Rpdml0aTppbnB1dFBhcmFtZXRlclxyXG4gIC8vIGFjdGl2aXRpOm91dHB1dFBhcmFtZXRlclxyXG4gIHZhciBpbnB1dE91dHB1dCxcclxuICAgICAgZXhpc3RpbmdJb1BhcmFtZXRlcixcclxuICAgICAgbmV3SW9QYXJhbWV0ZXI7XHJcblxyXG4gIGlmIChJT19CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG5cclxuICAgIGlmIChzY29wZSkge1xyXG4gICAgICBpbnB1dE91dHB1dCA9IGJvLmdldCgnaW5wdXRPdXRwdXQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2FjdGl2aXRpOklucHV0T3V0cHV0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY3JlYXRlIGlucHV0T3V0cHV0IGVsZW1lbnQsIGlmIGl0IGRvIG5vdCBleGlzdCAoeWV0KVxyXG4gICAgaWYgKCFpbnB1dE91dHB1dCkge1xyXG4gICAgICBpbnB1dE91dHB1dCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6SW5wdXRPdXRwdXQnLCBudWxsLCBibywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICAgIGVsZW1lbnQsIGJvLCB7IGlucHV0T3V0cHV0OiBpbnB1dE91dHB1dCB9XHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgaW5wdXRPdXRwdXRcclxuICAgICAgICApKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW9QYXJhbWV0ZXIgPSBmaW5kSW5wdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xyXG5cclxuICAgIG5ld0lvUGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXHJcbiAgICAgIGVsZW1lbnQsXHJcbiAgICAgIGlucHV0T3V0cHV0LFxyXG4gICAgICAnaW5wdXRQYXJhbWV0ZXJzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdJb1BhcmFtZXRlciBdLFxyXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyID8gWyBleGlzdGluZ0lvUGFyYW1ldGVyIF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW9QYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcclxuXHJcbiAgICBuZXdJb1BhcmFtZXRlciA9IGNyZWF0ZU91dHB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgaW5wdXRPdXRwdXQsXHJcbiAgICAgICdvdXRwdXRQYXJhbWV0ZXJzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdJb1BhcmFtZXRlciBdLFxyXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyID8gWyBleGlzdGluZ0lvUGFyYW1ldGVyIF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gYWN0aXZpdGk6aW5cclxuICAvLyBhY3Rpdml0aTpvdXRcclxuICAvLyBhY3Rpdml0aTppbjpidXNpbmVzc0tleVxyXG4gIHZhciBleGlzdGluZ0luT3V0LFxyXG4gICAgICBuZXdJbk91dDtcclxuXHJcbiAgaWYgKElOX09VVF9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW5PdXQgPSBmaW5kQWN0aXZpdGlJbk91dChibywgYmluZGluZyk7XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9UWVBFKSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfSBlbHNlXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlPdXQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICd2YWx1ZXMnLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBbIG5ld0luT3V0IF0sXHJcbiAgICAgIGV4aXN0aW5nSW5PdXQgPyBbIGV4aXN0aW5nSW5PdXQgXSA6IFtdXHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfRklFTEQpIHtcclxuICAgIHZhciBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA9IGZpbmRFeHRlbnNpb25zKGJvLCBbICdhY3Rpdml0aTpGaWVsZCcgXSk7XHJcbiAgICB2YXIgbmV3RmllbGRJbmplY3Rpb25zID0gW107XHJcblxyXG4gICAgaWYgKGV4aXN0aW5nRmllbGRJbmplY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZXhpc3RpbmdGaWVsZEluamVjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gYmluZGluZy5uYW1lKSB7XHJcbiAgICAgICAgICBuZXdGaWVsZEluamVjdGlvbnMucHVzaChjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdGaWVsZEluamVjdGlvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RmllbGRJbmplY3Rpb25zLnB1c2goY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXHJcbiAgICAgIGVsZW1lbnQsXHJcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICAndmFsdWVzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgbmV3RmllbGRJbmplY3Rpb25zLFxyXG4gICAgICBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA/IGV4aXN0aW5nRmllbGRJbmplY3Rpb25zIDogW11cclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVwZGF0ZXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdXBkYXRlcztcclxuICB9XHJcblxyXG4gIC8vIHF1aWNrIHdhcm5pbmcgZm9yIGJldHRlciBkZWJ1Z2dpbmdcclxuICBjb25zb2xlLndhcm4oJ25vIHVwZGF0ZScsIGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnNldFByb3BlcnR5VmFsdWUgPSBzZXRQcm9wZXJ0eVZhbHVlO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIHZhbHVlIG9mIGEgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdH0gd2l0aCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgY29uc3RyYWludHMgPSBwcm9wZXJ0eS5jb25zdHJhaW50cyB8fCB7fTtcclxuXHJcbiAgaWYgKGNvbnN0cmFpbnRzLm5vdEVtcHR5ICYmIGlzRW1wdHkodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IG5vdCBiZSBlbXB0eScpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnN0cmFpbnRzLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBjb25zdHJhaW50cy5tYXhMZW5ndGgpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ011c3QgaGF2ZSBtYXggbGVuZ3RoIHtsZW5ndGh9JywgeyBsZW5ndGg6IGNvbnN0cmFpbnRzLm1heExlbmd0aCB9KTtcclxuICB9XHJcblxyXG4gIGlmIChjb25zdHJhaW50cy5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgY29uc3RyYWludHMubWluTGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWluIGxlbmd0aCB7bGVuZ3RofScsIHsgbGVuZ3RoOiBjb25zdHJhaW50cy5taW5MZW5ndGggfSk7XHJcbiAgfVxyXG5cclxuICB2YXIgcGF0dGVybiA9IGNvbnN0cmFpbnRzLnBhdHRlcm4sXHJcbiAgICAgIG1lc3NhZ2U7XHJcblxyXG4gIGlmIChwYXR0ZXJuKSB7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xyXG4gICAgICBtZXNzYWdlID0gcGF0dGVybi5tZXNzYWdlO1xyXG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKHZhbHVlLCBwYXR0ZXJuKSkge1xyXG4gICAgICByZXR1cm4gbWVzc2FnZSB8fCB0cmFuc2xhdGUoJ011c3QgbWF0Y2ggcGF0dGVybiB7cGF0dGVybn0nLCB7IHBhdHRlcm46IHBhdHRlcm4gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gbWlzYyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIHByb3BlcnR5V2l0aFNjb3BlKHByb3BlcnR5LCBzY29wZU5hbWUpIHtcclxuICBpZiAoIXNjb3BlTmFtZSkge1xyXG4gICAgcmV0dXJuIHByb3BlcnR5O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcclxuICAgIHNjb3BlOiB7XHJcbiAgICAgIG5hbWU6IHNjb3BlTmFtZVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleSAtPiB2YWx1ZSBhc3NvY2lhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxyXG4gKiBAcGFyYW0ge0FueX0gdmFsdWVcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxuZnVuY3Rpb24gb2JqZWN0V2l0aEtleShrZXksIHZhbHVlKSB7XHJcbiAgdmFyIG9iaiA9IHt9O1xyXG5cclxuICBvYmpba2V5XSA9IHZhbHVlO1xyXG5cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG4vKipcclxuICogRG9lcyB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybj9cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVyblxyXG4gKlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gbWF0Y2hlc1BhdHRlcm4oc3RyLCBwYXR0ZXJuKSB7XHJcbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcblxyXG4gIHJldHVybiByZWdleHAudGVzdChzdHIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VtcHR5KHN0cikge1xyXG4gIHJldHVybiAhc3RyIHx8IC9eXFxzKiQvLnRlc3Qoc3RyKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgRXJyb3J9IGluZGljYXRpbmcgYW4gdW5rbm93blxyXG4gKiBwcm9wZXJ0eSBiaW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICpcclxuICogQHJldHVybiB7RXJyb3J9XHJcbiAqL1xyXG5mdW5jdGlvbiB1bmtub3duUHJvcGVydHlCaW5kaW5nKHByb3BlcnR5KSB7XHJcbiAgdmFyIGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nO1xyXG5cclxuICByZXR1cm4gbmV3IEVycm9yKCd1bmtub3duIGJpbmRpbmc6IDwnICsgYmluZGluZy50eXBlICsgJz4nKTtcclxufVxyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuICBfX2RlcGVuZHNfXzogW1xyXG4gICAgcmVxdWlyZSgnLi9lbGVtZW50LXRlbXBsYXRlcy9pbmRleCcpLFxyXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XHJcbiAgXSxcclxuICBfX2luaXRfXzogWyAncHJvcGVydGllc1Byb3ZpZGVyJyBdLFxyXG4gIHByb3BlcnRpZXNQcm92aWRlcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXInKSBdXHJcbn07XHJcblxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgYXN5bmNDb250aW51YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0FzeW5jQ29udGludWF0aW9uJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6QXN5bmNDYXBhYmxlJykpIHtcclxuXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoYXN5bmNDb250aW51YXRpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjYWxsYWJsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FsbGFibGUnKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZmxhdHRlbkRlZXAgPSByZXF1aXJlKCdsb2Rhc2gvZmxhdHRlbkRlZXAnKTtcclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcclxuXHJcbmZ1bmN0aW9uIGdldENhbGxhYmxlVHlwZShlbGVtZW50KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBib0NhbGxlZEVsZW1lbnQgPSBiby5nZXQoJ2NhbGxlZEVsZW1lbnQnKSxcclxuICAgICAgYm9DYXNlUmVmID0gYm8uZ2V0KCdhY3Rpdml0aTpjYXNlUmVmJyk7XHJcblxyXG4gIHZhciBjYWxsQWN0aXZpdHlUeXBlID0gJyc7XHJcbiAgaWYgKHR5cGVvZiBib0NhbGxlZEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBjYWxsQWN0aXZpdHlUeXBlID0gJ2JwbW4nO1xyXG4gIH0gZWxzZVxyXG5cclxuICBpZiAodHlwZW9mIGJvQ2FzZVJlZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGNhbGxBY3Rpdml0eVR5cGUgPSAnY21tbic7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2FsbEFjdGl2aXR5VHlwZTtcclxufVxyXG5cclxudmFyIERFRkFVTFRfUFJPUFMgPSB7XHJcbiAgY2FsbGVkRWxlbWVudDogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50QmluZGluZyc6ICdsYXRlc3QnLFxyXG4gICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50VmVyc2lvbic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFRlbmFudElkJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycgOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicgOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOmNhc2VSZWYnOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOmNhc2VCaW5kaW5nJzogJ2xhdGVzdCcsXHJcbiAgJ2FjdGl2aXRpOmNhc2VWZXJzaW9uJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpjYXNlVGVuYW50SWQnOiB1bmRlZmluZWRcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYWN0aXZpdGk6Q2FsbEFjdGl2aXR5JykpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkIDogJ2NhbGxBY3Rpdml0eScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYWxsQWN0aXZpdHkgVHlwZScpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogW1xyXG4gICAgICB7IG5hbWU6ICdCUE1OJywgdmFsdWU6ICdicG1uJyB9LFxyXG4gICAgICB7IG5hbWU6ICdDTU1OJywgdmFsdWU6ICdjbW1uJyB9XHJcbiAgICBdLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FsbEFjdGl2aXR5VHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbEFjdGl2aXR5VHlwZTogZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gdmFsdWVzLmNhbGxBY3Rpdml0eVR5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUFJPUFMpO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09ICdicG1uJykge1xyXG4gICAgICAgIHByb3BzLmNhbGxlZEVsZW1lbnQgPSAnJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnY21tbicpIHtcclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6Y2FzZVJlZiddID0gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGNhbGxhYmxlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRDYWxsYWJsZVR5cGU6IGdldENhbGxhYmxlVHlwZVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZmxhdHRlbkRlZXAoZ3JvdXAuZW50cmllcyk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgY2FuZGlkYXRlU3RhcnRlciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FuZGlkYXRlU3RhcnRlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlByb2Nlc3MnKSB8fFxyXG4gICAgICBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGNhbmRpZGF0ZVN0YXJ0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgaXNBbnkgPSByZXF1aXJlKCdicG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCcpLmlzQW55LFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJykuZXNjYXBlSFRNTCxcclxuICAgIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBzY3JpcHRJbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vU2NyaXB0Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gIGlmICghKGlzKGVsZW1lbnQsICdicG1uOlNlcXVlbmNlRmxvdycpICYmIGlzQ29uZGl0aW9uYWxTb3VyY2UoZWxlbWVudC5zb3VyY2UpKVxyXG4gICAgJiYgIWNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ2xhbmd1YWdlJywgJ2JvZHknLCB0cnVlLCB0cmFuc2xhdGUpO1xyXG4gIGdyb3VwLmVudHJpZXMucHVzaCh7XHJcbiAgICBpZDogJ2NvbmRpdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25kaXRpb24nKSxcclxuICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWNvbmRpdGlvbi10eXBlXCI+JysgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ0NvbmRpdGlvbiBUeXBlJykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW0tY29uZGl0aW9uLXR5cGVcIiBuYW1lPVwiY29uZGl0aW9uVHlwZVwiIGRhdGEtdmFsdWU+JyArXHJcbiAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiZXhwcmVzc2lvblwiPicrIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdFeHByZXNzaW9uJykpICsgJzwvb3B0aW9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT1cInNjcmlwdFwiPicrIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdTY3JpcHQnKSkgKyAnPC9vcHRpb24+JyArXHJcbiAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+PC9vcHRpb24+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9zZWxlY3Q+JyArXHJcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcblxyXG4gICAgICAgICAgICAvLyBleHByZXNzaW9uXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWNvbmRpdGlvblwiIGRhdGEtc2hvdz1cImlzRXhwcmVzc2lvblwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiBkYXRhLXNob3c9XCJpc0V4cHJlc3Npb25cIj4nICtcclxuICAgICAgICAgICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tY29uZGl0aW9uXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiY29uZGl0aW9uXCIgLz4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiY2xlYXJcIiBkYXRhLWFjdGlvbj1cImNsZWFyXCIgZGF0YS1zaG93PVwiY2FuQ2xlYXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgJzxzcGFuPlg8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXHJcbiAgICAgICAgICAgICAgICBzY3JpcHQudGVtcGxhdGUgK1xyXG4gICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblxyXG4gICAgICAgID8gY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uY29uZGl0aW9uXHJcbiAgICAgICAgOiBiby5jb25kaXRpb25FeHByZXNzaW9uO1xyXG5cclxuICAgICAgdmFyIHZhbHVlcyA9IHt9LFxyXG4gICAgICAgICAgY29uZGl0aW9uVHlwZSA9ICcnO1xyXG5cclxuICAgICAgaWYgKGNvbmRpdGlvbkV4cHJlc3Npb24pIHtcclxuICAgICAgICB2YXIgY29uZGl0aW9uTGFuZ3VhZ2UgPSBjb25kaXRpb25FeHByZXNzaW9uLmxhbmd1YWdlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uTGFuZ3VhZ2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ3NjcmlwdCc7XHJcbiAgICAgICAgICB2YWx1ZXMgPSBzY3JpcHQuZ2V0KGVsZW1lbnQsIGNvbmRpdGlvbkV4cHJlc3Npb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ2V4cHJlc3Npb24nO1xyXG4gICAgICAgICAgdmFsdWVzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbkV4cHJlc3Npb24uZ2V0KCdib2R5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZXMuY29uZGl0aW9uVHlwZSA9IGNvbmRpdGlvblR5cGU7XHJcblxyXG4gICAgICByZXR1cm4gdmFsdWVzO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvblR5cGUgPSB2YWx1ZXMuY29uZGl0aW9uVHlwZTtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICB2YXIgY29uZGl0aW9uUHJvcHMgPSB7XHJcbiAgICAgICAgYm9keTogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoY29uZGl0aW9uVHlwZSA9PT0gJ3NjcmlwdCcpIHtcclxuICAgICAgICBjb25kaXRpb25Qcm9wcyA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY29uZGl0aW9uID0gdmFsdWVzLmNvbmRpdGlvbjtcclxuXHJcbiAgICAgICAgY29uZGl0aW9uUHJvcHMuYm9keSA9IGNvbmRpdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNvbmRpdGlvbk9yQ29uZGl0aW9uRXhwcmVzc2lvbjtcclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25UeXBlKSB7XHJcbiAgICAgICAgY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsXHJcbiAgICAgICAgICBjb25kaXRpb25Qcm9wcyxcclxuICAgICAgICAgIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uIHx8IGJvLFxyXG4gICAgICAgICAgYnBtbkZhY3RvcnlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB2YXIgc291cmNlID0gZWxlbWVudC5zb3VyY2U7XHJcblxyXG4gICAgICAgIC8vIGlmIGRlZmF1bHQtZmxvdywgcmVtb3ZlIGRlZmF1bHQtcHJvcGVydHkgZnJvbSBzb3VyY2VcclxuICAgICAgICBpZiAoc291cmNlICYmIHNvdXJjZS5idXNpbmVzc09iamVjdC5kZWZhdWx0ID09PSBibykge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhzb3VyY2UsIHsgJ2RlZmF1bHQnOiB1bmRlZmluZWQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHVwZGF0ZSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXHJcbiAgICAgICAgPyB7IGNvbmRpdGlvbjogY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uIH1cclxuICAgICAgICA6IHsgY29uZGl0aW9uRXhwcmVzc2lvbjogY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uIH07XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiB8fCBibywgdXBkYXRlKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHQgPSB7fTtcclxuXHJcbiAgICAgIGlmICghdmFsdWVzLmNvbmRpdGlvbiAmJiB2YWx1ZXMuY29uZGl0aW9uVHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5jb25kaXRpb24gPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWVzLmNvbmRpdGlvblR5cGUgPT09ICdzY3JpcHQnKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHNjcmlwdC52YWxpZGF0ZShlbGVtZW50LCB2YWx1ZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgaXNFeHByZXNzaW9uOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvblR5cGUgPSBkb21RdWVyeSgnc2VsZWN0W25hbWU9Y29uZGl0aW9uVHlwZV0nLCBpbnB1dE5vZGUpO1xyXG4gICAgICBpZiAoY29uZGl0aW9uVHlwZS5zZWxlY3RlZEluZGV4ID49IDApIHtcclxuICAgICAgICByZXR1cm4gY29uZGl0aW9uVHlwZS5vcHRpb25zW2NvbmRpdGlvblR5cGUuc2VsZWN0ZWRJbmRleF0udmFsdWUgPT09ICdleHByZXNzaW9uJztcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1NjcmlwdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICAgIHZhciBjb25kaXRpb25UeXBlID0gZG9tUXVlcnkoJ3NlbGVjdFtuYW1lPWNvbmRpdGlvblR5cGVdJywgaW5wdXROb2RlKTtcclxuICAgICAgaWYgKGNvbmRpdGlvblR5cGUuc2VsZWN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmRpdGlvblR5cGUub3B0aW9uc1tjb25kaXRpb25UeXBlLnNlbGVjdGVkSW5kZXhdLnZhbHVlID09PSAnc2NyaXB0JztcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICAgIC8vIGNsZWFyIHRleHQgaW5wdXRcclxuICAgICAgZG9tUXVlcnkoJ2lucHV0W25hbWU9Y29uZGl0aW9uXScsIGlucHV0Tm9kZSkudmFsdWU9Jyc7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FuQ2xlYXI6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1jb25kaXRpb25dJywgaW5wdXROb2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBpbnB1dC52YWx1ZSAhPT0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIHNjcmlwdCA6IHNjcmlwdCxcclxuXHJcbiAgICBjc3NDbGFzc2VzOiBbICdicHAtdGV4dGZpZWxkJyBdXHJcbiAgfSk7XHJcbn07XHJcblxyXG5cclxuLy8gdXRpbGl0aWVzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG52YXIgQ09ORElUSU9OQUxfU09VUkNFUyA9IFtcclxuICAnYnBtbjpBY3Rpdml0eScsXHJcbiAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXHJcbiAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheScsXHJcbiAgJ2JwbW46Q29tcGxleEdhdGV3YXknXHJcbl07XHJcblxyXG5mdW5jdGlvbiBpc0NvbmRpdGlvbmFsU291cmNlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXNBbnkoZWxlbWVudCwgQ09ORElUSU9OQUxfU09VUkNFUyk7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKSxcclxuICAgIElucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbmZ1bmN0aW9uIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSB7XHJcbiAgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb25uZWN0b3IoYm8pIHtcclxuICByZXR1cm4gSW5wdXRPdXRwdXRIZWxwZXIuZ2V0Q29ubmVjdG9yKGJvKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb25uZWN0b3IoZWxlbWVudCkge1xyXG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgPT09ICdjb25uZWN0b3InO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnY29ubmVjdG9ySWQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yIElkJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY29ubmVjdG9ySWQnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGNvbm5lY3RvciA9IGJvICYmIGdldENvbm5lY3Rvcihibyk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGNvbm5lY3RvciAmJiBjb25uZWN0b3IuZ2V0KCdjb25uZWN0b3JJZCcpO1xyXG4gICAgICByZXR1cm4geyBjb25uZWN0b3JJZDogdmFsdWUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IoYm8pO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbm5lY3Rvciwge1xyXG4gICAgICAgIGNvbm5lY3RvcklkOiB2YWx1ZXMuY29ubmVjdG9ySWQgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBpc0Nvbm5lY3RvcihlbGVtZW50KSAmJiAhdmFsdWVzLmNvbm5lY3RvcklkID8geyBjb25uZWN0b3JJZDogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNDb25uZWN0b3IoZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgaW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0UGFyYW1ldGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIG9wdGlvbnMgPSBhc3NpZ24oe1xyXG4gICAgaWRQcmVmaXg6ICdjb25uZWN0b3ItJyxcclxuICAgIGluc2lkZUNvbm5lY3RvcjogdHJ1ZVxyXG4gIH0sIG9wdGlvbnMpO1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlucHV0T3V0cHV0ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbnB1dE91dHB1dCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaW5wdXRPdXRwdXRFbnRyeSA9IGlucHV0T3V0cHV0KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZFByZWZpeDogJ2Nvbm5lY3Rvci0nLFxyXG4gICAgaW5zaWRlQ29ubmVjdG9yOiB0cnVlXHJcbiAgfSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGlucHV0T3V0cHV0RW50cnkuZW50cmllcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBnZXRTZWxlY3RlZFBhcmFtZXRlcjogaW5wdXRPdXRwdXRFbnRyeS5nZXRTZWxlY3RlZFBhcmFtZXRlclxyXG4gIH07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpLFxyXG4gICAgZXJyb3IgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uJyk7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZXJyb3JFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46RW5kRXZlbnQnXHJcbiAgXTtcclxuXHJcbiAgZm9yRWFjaChlcnJvckV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcclxuXHJcbiAgICAgIHZhciBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChlcnJvckV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIHZhciBpc0NhdGNoaW5nRXJyb3JFdmVudCA9IGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSB8fCBpcyAoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpO1xyXG5cclxuICAgICAgICB2YXIgc2hvd0Vycm9yQ29kZVZhcmlhYmxlID0gaXNDYXRjaGluZ0Vycm9yRXZlbnQsXHJcbiAgICAgICAgICAgIHNob3dFcnJvck1lc3NhZ2VWYXJpYWJsZSA9IGlzQ2F0Y2hpbmdFcnJvckV2ZW50O1xyXG5cclxuICAgICAgICBlcnJvcihcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGJwbW5GYWN0b3J5LFxyXG4gICAgICAgICAgZXJyb3JFdmVudERlZmluaXRpb24sXHJcbiAgICAgICAgICBzaG93RXJyb3JDb2RlVmFyaWFibGUsXHJcbiAgICAgICAgICBzaG93RXJyb3JNZXNzYWdlVmFyaWFibGUsXHJcbiAgICAgICAgICB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xyXG5cclxudmFyIGV4dGVybmFsVGFza1ByaW9yaXR5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlcm5hbFRhc2tQcmlvcml0eScpO1xyXG5cclxuZnVuY3Rpb24gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCkge1xyXG4gIHZhciBibyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgc2VydmljZVRhc2tMaWtlIGVsZW1lbnQsIGZldGNoIHRoZSBub3JtYWwgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgLy8gVGhpcyBhdm9pZHMgdGhlIGxvc3Mgb2YgdGhlIHByb2Nlc3MgLyBwYXJ0aWNpcGFudCBidXNpbmVzcyBvYmplY3RcclxuICBpZiAoIWJvKSB7XHJcbiAgICBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJvO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBibyA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoaXMoYm8sICdhY3Rpdml0aTpUYXNrUHJpb3JpemVkJykgfHwgKGlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV4dGVybmFsVGFza1ByaW9yaXR5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xyXG5cclxudmFyIGZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9GaWVsZEluamVjdGlvbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgYm8gPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBmaWVsZEluamVjdGlvbkVudHJ5ID0gZmllbGRJbmplY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSwgeyBidXNpbmVzc09iamVjdDogYm8gfSk7XHJcblxyXG4gIGlmIChmaWVsZEluamVjdGlvbkVudHJ5ICYmIGZpZWxkSW5qZWN0aW9uRW50cnkubGVuZ3RoID4gMCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGZpZWxkSW5qZWN0aW9uRW50cnkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50cyA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLmdldEV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgcmVtb3ZlRW50cnkgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKS5yZW1vdmVFbnRyeSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlbnNpb25FbGVtZW50cycpLFxyXG4gICAgcHJvcGVydGllcyA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vUHJvcGVydGllcycpLFxyXG4gICAgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZm9ybUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9Gb3JtSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKSxcclxuICAgIGVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVWYWx1ZUlkKCkge1xyXG4gIHJldHVybiB1dGlscy5uZXh0SWQoJ1ZhbHVlXycpO1xyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSBmb3JtIGZpZWxkIHNwZWNpZmljIHRleHRGaWVsZCB1c2luZyBlbnRyeUZhY3RvcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubGFiZWxcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm1vZGVsUHJvcGVydHlcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMudmFsaWRhdGVcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fSBhbiBlbnRyeUZhY3RvcnkudGV4dEZpZWxkIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZm9ybUZpZWxkVGV4dEZpZWxkKG9wdGlvbnMsIGdldFNlbGVjdGVkRm9ybUZpZWxkKSB7XHJcblxyXG4gIHZhciBpZCA9IG9wdGlvbnMuaWQsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcclxuICAgICAgdmFsaWRhdGUgPSBvcHRpb25zLnZhbGlkYXRlO1xyXG5cclxuICByZXR1cm4gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogaWQsXHJcbiAgICBsYWJlbDogbGFiZWwsXHJcbiAgICBtb2RlbFByb3BlcnR5OiBtb2RlbFByb3BlcnR5LFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9LFxyXG4gICAgICAgICAgdmFsdWVzID0ge307XHJcblxyXG4gICAgICB2YWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSBzZWxlY3RlZEZvcm1GaWVsZFttb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNldCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHZhciBjbWQgPSBvcHRpb25zLnNldChlbGVtZW50LCB2YWx1ZXMsIG5vZGUpO1xyXG5cclxuICAgICAgICBpZiAoY21kKSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzW21vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgcHJvcGVydGllcykpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVGb3JtS2V5QW5kRGF0YVN1cHBvcnRlZChlbGVtZW50KSB7XHJcbiAgcmV0dXJuIChcclxuICAgIGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJiAhaXMoZWxlbWVudC5wYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKVxyXG4gICkgfHwgaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICBpZiAoIWVuc3VyZUZvcm1LZXlBbmREYXRhU3VwcG9ydGVkKGVsZW1lbnQpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZm9ybSBmaWVsZCBxdWVyeWluZyB0aGUgZm9ybSBmaWVsZCBzZWxlY3QgYm94XHJcbiAgICogZnJvbSB0aGUgRE9NLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICAgKiBAcGFyYW0gIHtET01FbGVtZW50fSBub2RlIC0gRE9NIGVsZW1lbnQgb2YgYW55IGZvcm0gZmllbGQgdGV4dCBpbnB1dFxyXG4gICAqXHJcbiAgICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3JtIGZpZWxkXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGVkID0gZm9ybUZpZWxkc0VudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkLmlkeCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtSGVscGVyLmdldEZvcm1GaWVsZChlbGVtZW50LCBzZWxlY3RlZC5pZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8gW0Zvcm1LZXldIGZvcm0ga2V5IHRleHQgaW5wdXQgZmllbGRcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZCA6ICdmb3JtLWtleScsXHJcbiAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRm9ybSBLZXknKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdmb3JtS2V5JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9ybUtleTogYm8uZ2V0KCdhY3Rpdml0aTpmb3JtS2V5JylcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICAgIGZvcm1LZXkgPSB2YWx1ZXMuZm9ybUtleSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7ICdhY3Rpdml0aTpmb3JtS2V5JzogZm9ybUtleSB9KTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBzZWxlY3QgYm94XHJcbiAgdmFyIGZvcm1GaWVsZHNFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGRzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Zvcm0gRmllbGRzJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaWQnLFxyXG4gICAgcHJlZml4OiAnRm9ybVByb3BlcnR5JyxcclxuICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgY29tbWFuZHMgPSBbXTtcclxuXHJcbiAgICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgeyBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHMgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgLyogdmFyIGZvcm1EYXRhID0gZm9ybUhlbHBlci5nZXRGb3JtRGF0YShlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmICghZm9ybURhdGEpIHtcclxuICAgICAgICBmb3JtRGF0YSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6Rm9ybURhdGEnLCB7IGZpZWxkczogW10gfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgW2Zvcm1EYXRhXSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH0qL1xyXG4gICAgICAvKiphY3Rpdml0aSDmmK/lkJEgZXh0ZW5zaW9uRWxlbWVudHMg5LiL6L+95Yqg5YWD57Sg77yM6ICM5LiN5pivIGZvcm1EYXRhIOS4i++8jCovXHJcbiAgICAgIHZhciBmaWVsZCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6Rm9ybVByb3BlcnR5JywgeyBpZDogdmFsdWUgfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgaWYgKHR5cGVvZiBleHRlbnNpb25FbGVtZW50cy52YWx1ZXMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIGZpZWxkIF0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywge1xyXG4gICAgICAgICAgICB2YWx1ZXM6IFsgZmllbGQgXVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGZpZWxkcyA9IGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcclxuICAgICAgdmFyIGVudHJ5ID0gZmllbGRzW2lkeF0sXHJcbiAgICAgICAgICBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChyZW1vdmVFbnRyeShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgbnVsbCwgW2VudHJ5XSkpO1xyXG4gICAgICAgLyogaWYgKGVudHJ5LmlkID09PSBmb3JtRGF0YS5nZXQoJ2J1c2luZXNzS2V5JykpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB7ICdidXNpbmVzc0tleSc6IHVuZGVmaW5lZCB9KSk7XHJcbiAgICAgICAgfSovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRGb3JtRmllbGRzKGVsZW1lbnQpO1xyXG4gICAgfSxcclxuICAgIGhpZGVFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGZvcm1GaWVsZHNFbnRyeSk7XHJcblxyXG5cclxuICAvLyBbRm9ybURhdGFdIEZvcm0gRmllbGQgbGFiZWxcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC1oZWFkZXInLFxyXG4gICAgbGFiZWxUZXh0OiB0cmFuc2xhdGUoJ0Zvcm0gRmllbGQnKSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBpZCB0ZXh0IGlucHV0IGZpZWxkXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWlkJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0lEJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaWQnLFxyXG5cclxuICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9O1xyXG5cclxuICAgICAgcmV0dXJuIHNlbGVjdGVkRm9ybUZpZWxkLmlkO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcywgbm9kZSkge1xyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgcHJvcGVydGllcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcblxyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XHJcblxyXG4gICAgICAgIHZhciBpZFZhbHVlID0gdmFsdWVzLmlkO1xyXG5cclxuICAgICAgICBpZiAoIWlkVmFsdWUgfHwgaWRWYWx1ZS50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpZDogJ0Zvcm0gZmllbGQgaWQgbXVzdCBub3QgYmUgZW1wdHknIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm9ybUZpZWxkcyA9IGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGV4aXN0aW5nRm9ybUZpZWxkID0gZmluZChmb3JtRmllbGRzLCBmdW5jdGlvbihmKSB7XHJcbiAgICAgICAgICByZXR1cm4gZiAhPT0gZm9ybUZpZWxkICYmIGYuaWQgPT09IGlkVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleGlzdGluZ0Zvcm1GaWVsZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgaWQ6ICdGb3JtIGZpZWxkIGlkIGFscmVhZHkgdXNlZCBpbiBmb3JtIGRhdGEuJyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIHR5cGUgY29tYm8gYm94XHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5jb21ib0JveCh7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGQtdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ3N0cmluZycsIHZhbHVlOiAnc3RyaW5nJyB9LFxyXG4gICAgICB7IG5hbWU6ICdsb25nJywgdmFsdWU6ICdsb25nJyB9LFxyXG4gICAgICB7IG5hbWU6ICdib29sZWFuJywgdmFsdWU6ICdib29sZWFuJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkYXRlJywgdmFsdWU6ICdkYXRlJyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbnVtJywgdmFsdWU6ICdlbnVtJyB9XHJcbiAgICBdLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3R5cGUnLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdGVkRm9ybUZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogc2VsZWN0ZWRGb3JtRmllbGQudHlwZSB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgY29tbWFuZHMgPSBbXTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEZvcm1GaWVsZC50eXBlID09PSAnZW51bScgJiYgdmFsdWVzLnR5cGUgIT09ICdlbnVtJykge1xyXG4gICAgICAgIC8vIGRlbGV0ZSBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzIGZyb20gZm9ybUZpZWxkLnZhbHVlcyB3aGVuIHN3aXRjaGluZyBmcm9tIHR5cGUgZW51bVxyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHNlbGVjdGVkRm9ybUZpZWxkLCB7IHZhbHVlczogdW5kZWZpbmVkIH0pKTtcclxuICAgICAgfVxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBzZWxlY3RlZEZvcm1GaWVsZCwgdmFsdWVzKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgbGFiZWwgdGV4dCBpbnB1dCBmaWVsZFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChmb3JtRmllbGRUZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWxhYmVsJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xhYmVsJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbGFiZWwnXHJcbiAgfSwgZ2V0U2VsZWN0ZWRGb3JtRmllbGQpKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIGRlZmF1bHRWYWx1ZSB0ZXh0IGlucHV0IGZpZWxkXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGZvcm1GaWVsZFRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGQtZGVmYXVsdFZhbHVlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RlZmF1bHQgVmFsdWUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdkZWZhdWx0VmFsdWUnXHJcbiAgfSwgZ2V0U2VsZWN0ZWRGb3JtRmllbGQpKTtcclxuXHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBlbnVtIHZhbHVlcyBsYWJlbFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzLWhlYWRlcicsXHJcbiAgICBsYWJlbFRleHQ6IHRyYW5zbGF0ZSgnVmFsdWVzJyksXHJcbiAgICBkaXZpZGVyOiB0cnVlLFxyXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgcmV0dXJuIHNlbGVjdGVkRm9ybUZpZWxkICYmIHNlbGVjdGVkRm9ybUZpZWxkLnR5cGUgPT09ICdlbnVtJztcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBlbnVtIHZhbHVlcyB0YWJsZVxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzJyxcclxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ0lkJyksIHRyYW5zbGF0ZSgnTmFtZScpIF0sXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2lkJywgJ25hbWUnIF0sXHJcbiAgICBhZGRMYWJlbDp0cmFuc2xhdGUoJ0FkZCBWYWx1ZScpLFxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBzZWxlY3RlZEZvcm1GaWVsZCAmJiBzZWxlY3RlZEZvcm1GaWVsZC50eXBlID09PSAnZW51bSc7XHJcbiAgICB9LFxyXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkRm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRFbnVtVmFsdWVzKHNlbGVjdGVkRm9ybUZpZWxkKTtcclxuICAgIH0sXHJcbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgaWQgPSBnZW5lcmF0ZVZhbHVlSWQoKTtcclxuXHJcbiAgICAgIHZhciBlbnVtVmFsdWUgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgJ2FjdGl2aXRpOlZhbHVlJyxcclxuICAgICAgICB7IGlkOiBpZCwgbmFtZTogdW5kZWZpbmVkIH0sXHJcbiAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgYnBtbkZhY3RvcnlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgc2VsZWN0ZWRGb3JtRmllbGQsICd2YWx1ZXMnLCBbZW51bVZhbHVlXSk7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgZW51bVZhbHVlID0gc2VsZWN0ZWRGb3JtRmllbGQudmFsdWVzW2lkeF07XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgc2VsZWN0ZWRGb3JtRmllbGQsICd2YWx1ZXMnLCBudWxsLCBbZW51bVZhbHVlXSk7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGVudW1WYWx1ZSA9IHNlbGVjdGVkRm9ybUZpZWxkLnZhbHVlc1tpZHhdO1xyXG5cclxuICAgICAgdmFsdWUubmFtZSA9IHZhbHVlLm5hbWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGVudW1WYWx1ZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcblxyXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGVudW1WYWx1ZSA9IHNlbGVjdGVkRm9ybUZpZWxkLnZhbHVlc1tpZHhdO1xyXG5cclxuICAgICAgaWYgKGVudW1WYWx1ZSkge1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIGlkIGlzIHZhbGlkXHJcbiAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvciA9IHV0aWxzLmlzSWRWYWxpZChlbnVtVmFsdWUsIHZhbHVlLmlkLCB0cmFuc2xhdGUpO1xyXG5cclxuICAgICAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpZDogdmFsaWRhdGlvbkVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvLyBbRm9ybURhdGFdIFZhbGlkYXRpb24gbGFiZWxcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC12YWxpZGF0aW9uLWhlYWRlcicsXHJcbiAgICBsYWJlbFRleHQ6IHRyYW5zbGF0ZSgnVmFsaWRhdGlvbicpLFxyXG4gICAgZGl2aWRlcjogdHJ1ZSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBjb25zdHJhaW50cyB0YWJsZVxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6ICdjb25zdHJhaW50cy1saXN0JyxcclxuICAgIG1vZGVsUHJvcGVydGllczogWyAnbmFtZScsICdjb25maWcnIF0sXHJcbiAgICBsYWJlbHM6IFsgdHJhbnNsYXRlKCdOYW1lJyksIHRyYW5zbGF0ZSgnQ29uZmlnJykgXSxcclxuICAgIGFkZExhYmVsOiB0cmFuc2xhdGUoJ0FkZCBDb25zdHJhaW50JyksXHJcbiAgICBnZXRFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRDb25zdHJhaW50cyhmb3JtRmllbGQpO1xyXG4gICAgfSxcclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuXHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdLFxyXG4gICAgICAgICAgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICB2YWxpZGF0aW9uID0gZm9ybUZpZWxkLnZhbGlkYXRpb247XHJcblxyXG4gICAgICBpZiAoIXZhbGlkYXRpb24pIHtcclxuICAgICAgICAvLyBjcmVhdGUgdmFsaWRhdGlvbiBidXNpbmVzcyBvYmplY3QgYW5kIGFkZCBpdCB0byBmb3JtIGRhdGEsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuICAgICAgICB2YWxpZGF0aW9uID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpWYWxpZGF0aW9uJywge30sIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgeyAndmFsaWRhdGlvbic6IHZhbGlkYXRpb24gfSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbmV3Q29uc3RyYWludCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAnYWN0aXZpdGk6Q29uc3RyYWludCcsXHJcbiAgICAgICAgeyBuYW1lOiB1bmRlZmluZWQsIGNvbmZpZzogdW5kZWZpbmVkIH0sXHJcbiAgICAgICAgdmFsaWRhdGlvbixcclxuICAgICAgICBicG1uRmFjdG9yeVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgdmFsaWRhdGlvbiwgJ2NvbnN0cmFpbnRzJywgWyBuZXdDb25zdHJhaW50IF0pKTtcclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGNvbnN0cmFpbnQgPSBmb3JtSGVscGVyLmdldENvbnN0cmFpbnRzKGZvcm1GaWVsZClbaWR4XTtcclxuXHJcbiAgICAgIHZhbHVlLm5hbWUgPSB2YWx1ZS5uYW1lIHx8IHVuZGVmaW5lZDtcclxuICAgICAgdmFsdWUuY29uZmlnID0gdmFsdWUuY29uZmlnIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgY29uc3RyYWludCwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXSxcclxuICAgICAgICAgIGZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgY29uc3RyYWludHMgPSBmb3JtSGVscGVyLmdldENvbnN0cmFpbnRzKGZvcm1GaWVsZCksXHJcbiAgICAgICAgICBjdXJyZW50Q29uc3RyYWludCA9IGNvbnN0cmFpbnRzW2lkeF07XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgZm9ybUZpZWxkLnZhbGlkYXRpb24sXHJcbiAgICAgICAgJ2NvbnN0cmFpbnRzJyxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIFsgY3VycmVudENvbnN0cmFpbnQgXVxyXG4gICAgICApKTtcclxuXHJcbiAgICAgIGlmIChjb25zdHJhaW50cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAvLyByZW1vdmUgYWN0aXZpdGk6dmFsaWRhdGlvbiBpZiB0aGUgbGFzdCBleGlzdGluZyBjb25zdHJhaW50IGhhcyBiZWVuIHJlbW92ZWRcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBmb3JtRmllbGQsIHsgdmFsaWRhdGlvbjogdW5kZWZpbmVkIH0pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfSxcclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICEhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvLyBbRm9ybURhdGFdIFByb3BlcnRpZXMgbGFiZWxcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC1wcm9wZXJ0aWVzLWhlYWRlcicsXHJcbiAgICBsYWJlbFRleHQ6IHRyYW5zbGF0ZSgnUHJvcGVydGllcycpLFxyXG4gICAgZGl2aWRlcjogdHJ1ZSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gYWN0aXZpdGk6cHJvcGVydGllcyB0YWJsZVxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChwcm9wZXJ0aWVzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGQtcHJvcGVydGllcycsXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2lkJywgJ3ZhbHVlJyBdLFxyXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnSWQnKSwgdHJhbnNsYXRlKCdWYWx1ZScpIF0sXHJcbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICEhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSwgdHJhbnNsYXRlKSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgaGlzdG9yeVRpbWVUb0xpdmUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0hpc3RvcnlUaW1lVG9MaXZlJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6UHJvY2VzcycpIHx8XHJcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcclxuXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaGlzdG9yeVRpbWVUb0xpdmUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0UGFyYW1ldGVyJyk7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIGFzc2lnbih7fSwgb3B0aW9ucyksIHRyYW5zbGF0ZSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlucHV0T3V0cHV0ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbnB1dE91dHB1dCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaW5wdXRPdXRwdXRFbnRyeSA9IGlucHV0T3V0cHV0KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7fSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGlucHV0T3V0cHV0RW50cnkuZW50cmllcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBnZXRTZWxlY3RlZFBhcmFtZXRlcjogaW5wdXRPdXRwdXRFbnRyeS5nZXRTZWxlY3RlZFBhcmFtZXRlclxyXG4gIH07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGpvYlByaW9yaXR5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Kb2JQcmlvcml0eScpLFxyXG4gICAgam9iUmV0cnlUaW1lQ3ljbGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0pvYlJldHJ5VGltZUN5Y2xlJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6Sm9iUHJpb3JpemVkJykgfHxcclxuICAgICAgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG5cclxuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChqb2JQcmlvcml0eShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAoIWlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICAgICAgICByZXR1cm4gYm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpBc3luY0NhcGFibGUnKSkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdFxyXG4gICAgfSwgdHJhbnNsYXRlKSk7XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpLFxyXG5cclxuICAgIHNjcmlwdEltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9TY3JpcHQnKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBMSVNURU5FUl9UWVBFX0xBQkVMID0ge1xyXG4gICAgY2xhc3M6IHRyYW5zbGF0ZSgnSmF2YSBDbGFzcycpLFxyXG4gICAgZXhwcmVzc2lvbjogdHJhbnNsYXRlKCdFeHByZXNzaW9uJyksXHJcbiAgICBkZWxlZ2F0ZUV4cHJlc3Npb246IHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpLFxyXG4gICAgc2NyaXB0OiB0cmFuc2xhdGUoJ1NjcmlwdCcpXHJcbiAgfTtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZExpc3RlbmVyID0gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyO1xyXG5cclxuICB2YXIgY2xhc3NQcm9wID0gJ2NsYXNzJyxcclxuICAgICAgZXhwcmVzc2lvblByb3AgPSAnZXhwcmVzc2lvbicsXHJcbiAgICAgIGRlbGVnYXRlRXhwcmVzc2lvblByb3AgPSAnZGVsZWdhdGVFeHByZXNzaW9uJyxcclxuICAgICAgc2NyaXB0UHJvcCA9ICdzY3JpcHQnO1xyXG5cclxuICB2YXIgZXhlY3V0aW9uTGlzdGVuZXJFdmVudFR5cGVPcHRpb25zID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VxdWVuY2VGbG93KGVsZW1lbnQpID8gW1xyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ3Rha2UnKSwgdmFsdWU6ICd0YWtlJyB9XHJcbiAgXSA6IFtcclxuICAgIHsgbmFtZTogdHJhbnNsYXRlKCdzdGFydCcpLCB2YWx1ZTogJ3N0YXJ0JyB9LFxyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2VuZCcpLCB2YWx1ZTogJ2VuZCcgfVxyXG4gIF07XHJcblxyXG4gIHZhciB0YXNrTGlzdGVuZXJFdmVudFR5cGVPcHRpb25zID0gW1xyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2NyZWF0ZScpLCB2YWx1ZTogJ2NyZWF0ZScgfSxcclxuICAgIHsgbmFtZTogdHJhbnNsYXRlKCdhc3NpZ25tZW50JyksIHZhbHVlOiAnYXNzaWdubWVudCcgfSxcclxuICAgIHsgbmFtZTogdHJhbnNsYXRlKCdjb21wbGV0ZScpLCB2YWx1ZTogJ2NvbXBsZXRlJyB9LFxyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2RlbGV0ZScpLCB2YWx1ZTogJ2RlbGV0ZScgfVxyXG4gIF07XHJcblxyXG4gIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgcmV0dXJuIGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdsaXN0ZW5lci1ldmVudC10eXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V2ZW50IFR5cGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdldmVudFR5cGUnLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IGZhbHNlLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG5cclxuXHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgZXZlbnRUeXBlID0gbGlzdGVuZXIgJiYgbGlzdGVuZXIuZ2V0KCdldmVudCcpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgZXZlbnRUeXBlID0gdmFsdWVzLmV2ZW50VHlwZTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKSwgeyBldmVudDogZXZlbnRUeXBlIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZWxlY3RPcHRpb25zOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBldmVudFR5cGVPcHRpb25zO1xyXG5cclxuICAgICAgdmFyIHNlbGVjdGVkTGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICBpZiAoSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzVGFza0xpc3RlbmVyKHNlbGVjdGVkTGlzdGVuZXIpKSB7XHJcbiAgICAgICAgZXZlbnRUeXBlT3B0aW9ucyA9IHRhc2tMaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSBpZiAoSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXhlY3V0aW9uTGlzdGVuZXIoc2VsZWN0ZWRMaXN0ZW5lcikpIHtcclxuICAgICAgICBldmVudFR5cGVPcHRpb25zID0gZXhlY3V0aW9uTGlzdGVuZXJFdmVudFR5cGVPcHRpb25zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZXZlbnRUeXBlT3B0aW9ucztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkOiAnbGlzdGVuZXItdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lciBUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBbXHJcbiAgICAgIHsgdmFsdWU6IGNsYXNzUHJvcCwgbmFtZTogdHJhbnNsYXRlKCdKYXZhIENsYXNzJykgfSxcclxuICAgICAgeyB2YWx1ZTogZXhwcmVzc2lvblByb3AsIG5hbWU6IHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpIH0sXHJcbiAgICAgIHsgdmFsdWU6IGRlbGVnYXRlRXhwcmVzc2lvblByb3AsIG5hbWU6IHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpIH0sXHJcbiAgICAgIHsgdmFsdWU6IHNjcmlwdFByb3AsIG5hbWU6IHRyYW5zbGF0ZSgnU2NyaXB0JykgfVxyXG4gICAgXSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdsaXN0ZW5lclR5cGUnLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IGZhbHNlLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxpc3RlbmVyVHlwZTogSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcilcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGxpc3RlbmVyVHlwZSA9IHZhbHVlcy5saXN0ZW5lclR5cGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdXBkYXRlID0ge307XHJcblxyXG4gICAgICB1cGRhdGVbY2xhc3NQcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gY2xhc3NQcm9wID8gJycgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHVwZGF0ZVtleHByZXNzaW9uUHJvcF0gPSBsaXN0ZW5lclR5cGUgPT09IGV4cHJlc3Npb25Qcm9wID8gJycgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHVwZGF0ZVtkZWxlZ2F0ZUV4cHJlc3Npb25Qcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gZGVsZWdhdGVFeHByZXNzaW9uUHJvcCA/ICcnIDogdW5kZWZpbmVkO1xyXG4gICAgICB1cGRhdGVbc2NyaXB0UHJvcF0gPSBsaXN0ZW5lclR5cGUgPT09IHNjcmlwdFByb3AgPyBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlNjcmlwdCcpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsaXN0ZW5lciwgdXBkYXRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdsaXN0ZW5lci12YWx1ZScsXHJcbiAgICBkYXRhVmFsdWVMYWJlbDogJ2xpc3RlbmVyVmFsdWVMYWJlbCcsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbGlzdGVuZXJWYWx1ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHt9LFxyXG4gICAgICAgICAgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgbGlzdGVuZXJUeXBlID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcik7XHJcblxyXG4gICAgICB2YWx1ZS5saXN0ZW5lclZhbHVlTGFiZWwgPSBMSVNURU5FUl9UWVBFX0xBQkVMW2xpc3RlbmVyVHlwZV0gfHwgJyc7XHJcbiAgICAgIHZhbHVlLmxpc3RlbmVyVmFsdWUgPSAobGlzdGVuZXIgJiYgbGlzdGVuZXIuZ2V0KGxpc3RlbmVyVHlwZSkpIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHVwZGF0ZSA9IHt9LFxyXG4gICAgICAgICAgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgbGlzdGVuZXJUeXBlID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcik7XHJcblxyXG4gICAgICB1cGRhdGVbbGlzdGVuZXJUeXBlXSA9IHZhbHVlcy5saXN0ZW5lclZhbHVlIHx8ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsaXN0ZW5lciwgdXBkYXRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiAhbGlzdGVuZXIgfHwgbGlzdGVuZXIuc2NyaXB0O1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlcy5saXN0ZW5lclZhbHVlLFxyXG4gICAgICAgICAgdmFsaWRhdGUgPSB7fTtcclxuXHJcbiAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICB2YWxpZGF0ZS5saXN0ZW5lclZhbHVlID0gdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgdmFyIHNjcmlwdCA9IHNjcmlwdEltcGxlbWVudGF0aW9uKCdzY3JpcHRGb3JtYXQnLCAndmFsdWUnLCB0cnVlLCB0cmFuc2xhdGUpO1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6ICdsaXN0ZW5lci1zY3JpcHQtdmFsdWUnLFxyXG4gICAgaHRtbDogJzxkaXYgZGF0YS1zaG93PVwiaXNTY3JpcHRcIj4nICtcclxuICAgICAgICAgICAgc2NyaXB0LnRlbXBsYXRlICtcclxuICAgICAgICAgICc8L2Rpdj4nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gbGlzdGVuZXIgJiYgbGlzdGVuZXIuc2NyaXB0ID8gc2NyaXB0LmdldChlbGVtZW50LCBsaXN0ZW5lci5zY3JpcHQpIDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciB1cGRhdGUgPSBzY3JpcHQuc2V0KGVsZW1lbnQsIHZhbHVlcywgbGlzdGVuZXIpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxpc3RlbmVyLnNjcmlwdCwgdXBkYXRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gbGlzdGVuZXIgJiYgbGlzdGVuZXIuc2NyaXB0ID8gc2NyaXB0LnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlcykgOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaXNTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGxpc3RlbmVyICYmIGxpc3RlbmVyLnNjcmlwdDtcclxuICAgIH0sXHJcblxyXG4gICAgc2NyaXB0OiBzY3JpcHRcclxuXHJcbiAgfSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxudmFyIGZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9GaWVsZEluamVjdGlvbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBvcHRpb25zID0gYXNzaWduKHtcclxuICAgIGlkUHJlZml4OiAnbGlzdGVuZXItJyxcclxuICAgIGluc2lkZUxpc3RlbmVyOiB0cnVlXHJcbiAgfSwgb3B0aW9ucyk7XHJcblxyXG4gIHZhciBmaWVsZEluamVjdGlvbkVudHJ5ID0gZmllbGRJbmplY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSwgb3B0aW9ucyk7XHJcblxyXG4gIGlmIChmaWVsZEluamVjdGlvbkVudHJ5ICYmIGZpZWxkSW5qZWN0aW9uRW50cnkubGVuZ3RoID4gMCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGZpZWxkSW5qZWN0aW9uRW50cnkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBsaXN0ZW5lciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTGlzdGVuZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRW50cnkgPSBsaXN0ZW5lcihlbGVtZW50LCBicG1uRmFjdG9yeSwge30sIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChsaXN0ZW5lckVudHJ5LmVudHJpZXMpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZ2V0U2VsZWN0ZWRMaXN0ZW5lcjogbGlzdGVuZXJFbnRyeS5nZXRTZWxlY3RlZExpc3RlbmVyXHJcbiAgfTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgbXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL011bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzJyk7XHJcblxyXG52YXIgam9iUmV0cnlUaW1lQ3ljbGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0pvYlJldHJ5VGltZUN5Y2xlJyksXHJcbiAgICBhc3luY0NvbnRpbnVhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQXN5bmNDb250aW51YXRpb24nKTtcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICByZXR1cm4gYm8ubG9vcENoYXJhY3RlcmlzdGljcztcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGVuc3VyZU11bHRpSW5zdGFuY2VTdXBwb3J0ZWQoZWxlbWVudCkge1xyXG4gIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcclxuICByZXR1cm4gISFsb29wQ2hhcmFjdGVyaXN0aWNzICYmIGlzKGxvb3BDaGFyYWN0ZXJpc3RpY3MsICdhY3Rpdml0aTpDb2xsZWN0YWJsZScpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmICghZW5zdXJlTXVsdGlJbnN0YW5jZVN1cHBvcnRlZChlbGVtZW50KSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8gbXVsdGkgaW5zdGFuY2UgcHJvcGVydGllc1xyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChtdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSk7XHJcblxyXG4gIC8vIGFzeW5jIGNvbnRpbnVhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGFzeW5jQ29udGludWF0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0TG9vcENoYXJhY3RlcmlzdGljcyxcclxuICAgIGlkUHJlZml4OiAnbXVsdGlJbnN0YW5jZS0nLFxyXG4gICAgbGFiZWxQcmVmaXg6IHRyYW5zbGF0ZSgnTXVsdGkgSW5zdGFuY2UgJylcclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcblxyXG4gIC8vIHJldHJ5IHRpbWUgY3ljbGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChqb2JSZXRyeVRpbWVDeWNsZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MsXHJcbiAgICBpZFByZWZpeDogJ211bHRpSW5zdGFuY2UtJyxcclxuICAgIGxhYmVsUHJlZml4OiB0cmFuc2xhdGUoJ011bHRpIEluc3RhbmNlICcpXHJcbiAgfSwgdHJhbnNsYXRlKSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBwcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Qcm9wZXJ0aWVzJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzRW50cnkgPSBwcm9wZXJ0aWVzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ3Byb3BlcnRpZXMnLFxyXG4gICAgbW9kZWxQcm9wZXJ0aWVzOiBbICduYW1lJywgJ3ZhbHVlJyBdLFxyXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnTmFtZScpLCB0cmFuc2xhdGUoJ1ZhbHVlJykgXSxcclxuXHJcbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGJvKSB7XHJcbiAgICAgIHJldHVybiBiby5leHRlbnNpb25FbGVtZW50cztcclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlUGFyZW50OiBmdW5jdGlvbihlbGVtZW50LCBibykge1xyXG4gICAgICB2YXIgcGFyZW50ID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtdIH0sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgIHZhciBjbWQgPSBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IHBhcmVudCB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjbWQ6IGNtZCxcclxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH0sIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGlmIChwcm9wZXJ0aWVzRW50cnkpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChwcm9wZXJ0aWVzRW50cnkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgc2NyaXB0SW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1NjcmlwdCcpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYm87XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTY3JpcHRUYXNrJykpIHtcclxuICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ3NjcmlwdEZvcm1hdCcsICdzY3JpcHQnLCBmYWxzZSwgdHJhbnNsYXRlKTtcclxuICBncm91cC5lbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6ICdzY3JpcHQtaW1wbGVtZW50YXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2NyaXB0JyksXHJcbiAgICBodG1sOiBzY3JpcHQudGVtcGxhdGUsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBzY3JpcHQuZ2V0KGVsZW1lbnQsIGJvKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSBzY3JpcHQuc2V0KGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcGVydGllcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgcmV0dXJuIHNjcmlwdC52YWxpZGF0ZShlbGVtZW50LCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzY3JpcHQgOiBzY3JpcHQsXHJcblxyXG4gICAgY3NzQ2xhc3NlczogWydicHAtdGV4dGZpZWxkJ11cclxuXHJcbiAgfSk7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkIDogJ3NjcmlwdFJlc3VsdFZhcmlhYmxlJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdSZXN1bHQgVmFyaWFibGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHkgOiAnc2NyaXB0UmVzdWx0VmFyaWFibGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIHZhciBib1Jlc3VsdFZhcmlhYmxlID0gYm8uZ2V0KCdhY3Rpdml0aTpyZXN1bHRWYXJpYWJsZScpO1xyXG5cclxuICAgICAgcmV0dXJuIHsgc2NyaXB0UmVzdWx0VmFyaWFibGUgOiBib1Jlc3VsdFZhcmlhYmxlIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJzogdmFsdWVzLnNjcmlwdFJlc3VsdFZhcmlhYmxlLmxlbmd0aFxyXG4gICAgICAgICAgPyB2YWx1ZXMuc2NyaXB0UmVzdWx0VmFyaWFibGVcclxuICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpLFxyXG4gICAgSW5wdXRPdXRwdXRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW5wdXRPdXRwdXRIZWxwZXInKTtcclxuXHJcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBlc2NhcGVIVE1MID0gdXRpbHMuZXNjYXBlSFRNTCxcclxuICAgIHRyaWdnZXJDbGlja0V2ZW50ID0gdXRpbHMudHJpZ2dlckNsaWNrRXZlbnQ7XHJcblxyXG52YXIgaW1wbGVtZW50YXRpb25UeXBlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbXBsZW1lbnRhdGlvblR5cGUnKSxcclxuICAgIGRlbGVnYXRlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9EZWxlZ2F0ZScpLFxyXG4gICAgZXh0ZXJuYWwgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0V4dGVybmFsJyksXHJcbiAgICBjYWxsYWJsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FsbGFibGUnKSxcclxuICAgIHJlc3VsdFZhcmlhYmxlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9SZXN1bHRWYXJpYWJsZScpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXHJcbiAgICBkb21DbG9zZXN0ID0gcmVxdWlyZSgnbWluLWRvbScpLmNsb3Nlc3QsXHJcbiAgICBkb21DbGFzc2VzID0gcmVxdWlyZSgnbWluLWRvbScpLmNsYXNzZXM7XHJcblxyXG5mdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkge1xyXG4gIHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSB7XHJcbiAgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEbW5DYXBhYmxlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRG1uQ2FwYWJsZShlbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFeHRlcm5hbENhcGFibGUoZWxlbWVudCkge1xyXG4gIHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNFeHRlcm5hbENhcGFibGUoZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2VydmljZVRhc2tMaWtlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VydmljZVRhc2tMaWtlKGVsZW1lbnQpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmICghaXNTZXJ2aWNlVGFza0xpa2UoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgaGFzRG1uU3VwcG9ydCA9IGlzRG1uQ2FwYWJsZShlbGVtZW50KTtcclxuICB2YXIgaGFzRXh0ZXJuYWxTdXBwb3J0ID0gaXNFeHRlcm5hbENhcGFibGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpO1xyXG5cclxuICAvLyBpbXBsZW1lbnRhdGlvbiB0eXBlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRJbXBsZW1lbnRhdGlvblR5cGU6IGdldEltcGxlbWVudGF0aW9uVHlwZSxcclxuICAgIGhhc0RtblN1cHBvcnQ6IGhhc0RtblN1cHBvcnQsXHJcbiAgICBoYXNFeHRlcm5hbFN1cHBvcnQ6IGhhc0V4dGVybmFsU3VwcG9ydCxcclxuICAgIGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQ6IHRydWVcclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcblxyXG4gIC8vIGRlbGVnYXRlIChjbGFzcywgZXhwcmVzc2lvbiwgZGVsZWdhdGVFeHByZXNzaW9uKSAvLy8vLy8vLy8vXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChkZWxlZ2F0ZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZ2V0SW1wbGVtZW50YXRpb25UeXBlOiBnZXRJbXBsZW1lbnRhdGlvblR5cGVcclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcblxyXG4gIC8vIHJlc3VsdCB2YXJpYWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQocmVzdWx0VmFyaWFibGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldEltcGxlbWVudGF0aW9uVHlwZTogZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxyXG4gICAgaGlkZVJlc3VsdFZhcmlhYmxlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgIT09ICdleHByZXNzaW9uJztcclxuICAgIH1cclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgLy8gZXh0ZXJuYWwgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgaWYgKGhhc0V4dGVybmFsU3VwcG9ydCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV4dGVybmFsKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcclxuICAgICAgZ2V0SW1wbGVtZW50YXRpb25UeXBlOiBnZXRJbXBsZW1lbnRhdGlvblR5cGVcclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIGRtbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBpZiAoaGFzRG1uU3VwcG9ydCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGNhbGxhYmxlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldENhbGxhYmxlVHlwZTogZ2V0SW1wbGVtZW50YXRpb25UeXBlXHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBjb25uZWN0b3IgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIHZhciBpc0Nvbm5lY3RvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgPT09ICdjb25uZWN0b3InO1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGluayh7XHJcbiAgICBpZDogJ2NvbmZpZ3VyZUNvbm5lY3RvckxpbmsnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29uZmlndXJlIENvbm5lY3RvcicpLFxyXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50KSB7XHJcblxyXG4gICAgICB2YXIgY29ubmVjdG9yVGFiRWwgPSBnZXRUYWJOb2RlKG5vZGUsICdjb25uZWN0b3InKTtcclxuXHJcbiAgICAgIGlmIChjb25uZWN0b3JUYWJFbCkge1xyXG4gICAgICAgIHRyaWdnZXJDbGlja0V2ZW50KGNvbm5lY3RvclRhYkVsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc3VwcHJlc3MgYWN0dWFsIGxpbmsgY2xpY2tcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuICAgIHNob3dMaW5rOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBsaW5rID0gZG9tUXVlcnkoJ2EnLCBub2RlKTtcclxuICAgICAgbGluay50ZXh0Q29udGVudCA9ICcnO1xyXG5cclxuICAgICAgZG9tQ2xhc3NlcyhsaW5rKS5yZW1vdmUoJ2JwcC1lcnJvci1tZXNzYWdlJyk7XHJcblxyXG4gICAgICBpZiAoaXNDb25uZWN0b3IoZWxlbWVudCkpIHtcclxuICAgICAgICB2YXIgY29ubmVjdG9ySWQgPSBJbnB1dE91dHB1dEhlbHBlci5nZXRDb25uZWN0b3IoZWxlbWVudCkuZ2V0KCdjb25uZWN0b3JJZCcpO1xyXG4gICAgICAgIGlmIChjb25uZWN0b3JJZCkge1xyXG4gICAgICAgICAgbGluay50ZXh0Q29udGVudCA9IHRyYW5zbGF0ZSgnQ29uZmlndXJlIENvbm5lY3RvcicpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsaW5rLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cImJwcC1pY29uLXdhcm5pbmdcIj48L3NwYW4+ICcgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnTXVzdCBjb25maWd1cmUgQ29ubmVjdG9yJykpO1xyXG4gICAgICAgICAgZG9tQ2xhc3NlcyhsaW5rKS5hZGQoJ2JwcC1lcnJvci1tZXNzYWdlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbn07XHJcblxyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBnZXRUYWJOb2RlKGVsLCBpZCkge1xyXG4gIHZhciBjb250YWluZXJFbCA9IGRvbUNsb3Nlc3QoZWwsICcuYnBwLXByb3BlcnRpZXMtcGFuZWwnKTtcclxuXHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KCdhW2RhdGEtdGFiLXRhcmdldD1cIicgKyBpZCArICdcIl0nLCBjb250YWluZXJFbCk7XHJcbn0iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6SW5pdGlhdG9yJykgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQ6ICdpbml0aWF0b3InLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbml0aWF0b3InKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2luaXRpYXRvcidcclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgdGFza2xpc3QgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1Rhc2tsaXN0Jyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6UHJvY2VzcycpIHx8XHJcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcclxuXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQodGFza2xpc3QoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkFzc2lnbmFibGUnKSkge1xyXG5cclxuICAgIC8vIEFzc2lnbmVlXHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgIGlkIDogJ2Fzc2lnbmVlJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0Fzc2lnbmVlJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnYXNzaWduZWUnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gQ2FuZGlkYXRlIFVzZXJzXHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgIGlkIDogJ2NhbmRpZGF0ZVVzZXJzJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBVc2VycycpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2NhbmRpZGF0ZVVzZXJzJ1xyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIENhbmRpZGF0ZSBHcm91cHNcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnY2FuZGlkYXRlR3JvdXBzJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBHcm91cHMnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdjYW5kaWRhdGVHcm91cHMnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gRHVlIERhdGVcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnZHVlRGF0ZScsXHJcbiAgICAgIGRlc2NyaXB0aW9uIDogdHJhbnNsYXRlKCdUaGUgZHVlIGRhdGUgYXMgYW4gRUwgZXhwcmVzc2lvbiAoZS5nLiAke3NvbWVEYXRlfSBvciBhbiBJU08gZGF0ZSAoZS5nLiAyMDE1LTA2LTI2VDA5OjU0OjAwKScpLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRHVlIERhdGUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdkdWVEYXRlJ1xyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIEZvbGxvd1VwIERhdGVcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnZm9sbG93VXBEYXRlJyxcclxuICAgICAgZGVzY3JpcHRpb24gOiB0cmFuc2xhdGUoJ1RoZSBmb2xsb3cgdXAgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICdJU08gZGF0ZSAoZS5nLiAyMDE1LTA2LTI2VDA5OjU0OjAwKScpLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRm9sbG93IFVwIERhdGUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdmb2xsb3dVcERhdGUnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gcHJpb3JpdHlcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAncHJpb3JpdHknLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnUHJpb3JpdHknKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdwcmlvcml0eSdcclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnksXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZmlsdGVyID0gcmVxdWlyZSgnbG9kYXNoL2ZpbHRlcicpO1xyXG5cclxudmFyIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKTtcclxuXHJcbnZhciBleHRlbnNpb25FbGVtZW50c0VudHJ5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICAqIHJldHVybiBkZXBlbmQgb24gcGFyYW1ldGVyICd0eXBlJyBhY3Rpdml0aTppbiBvciBhY3Rpdml0aTpvdXQgZXh0ZW5zaW9uIGVsZW1lbnRzXHJcbiAgKi9cclxuZnVuY3Rpb24gZ2V0QWN0aXZpdGlJbk91dE1hcHBpbmdzKGVsZW1lbnQsIHR5cGUpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24oYm8pO1xyXG5cclxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoc2lnbmFsRXZlbnREZWZpbml0aW9uIHx8IGJvLCB0eXBlKSB8fCBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAgKiByZXR1cm4gZGVwZW5kIG9uIHBhcmFtZXRlciAndHlwZScgYWN0aXZpdGk6aW4gb3IgYWN0aXZpdGk6b3V0IGV4dGVuc2lvbiBlbGVtZW50c1xyXG4gICogd2l0aCBzb3VyY2Ugb3Igc291cmNlRXhwcmVzc2lvbiBhdHRyaWJ1dGVcclxuICAqL1xyXG5mdW5jdGlvbiBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIHR5cGUpIHtcclxuICB2YXIgYWN0aXZpdGlNYXBwaW5ncyA9IGdldEFjdGl2aXRpSW5PdXRNYXBwaW5ncyhlbGVtZW50LCB0eXBlKTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlcihhY3Rpdml0aU1hcHBpbmdzLCBmdW5jdGlvbihtYXBwaW5nKSB7XHJcbiAgICByZXR1cm4gIW1hcHBpbmcuYnVzaW5lc3NLZXk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEluT3V0VHlwZShtYXBwaW5nKSB7XHJcbiAgdmFyIGluT3V0VHlwZSA9ICdzb3VyY2UnO1xyXG5cclxuICBpZiAobWFwcGluZy52YXJpYWJsZXMgPT09ICdhbGwnKSB7XHJcbiAgICBpbk91dFR5cGUgPSAndmFyaWFibGVzJztcclxuICB9XHJcbiAgZWxzZSBpZiAodHlwZW9mIG1hcHBpbmcuc291cmNlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgaW5PdXRUeXBlID0gJ3NvdXJjZSc7XHJcbiAgfVxyXG4gIGVsc2UgaWYgKHR5cGVvZiBtYXBwaW5nLnNvdXJjZUV4cHJlc3Npb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpbk91dFR5cGUgPSAnc291cmNlRXhwcmVzc2lvbic7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaW5PdXRUeXBlO1xyXG59XHJcblxyXG52YXIgQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQgPSAnYWN0aXZpdGk6SW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UID0gJ2FjdGl2aXRpOk91dCc7XHJcblxyXG52YXIgV0hJVEVTUEFDRV9SRUdFWCA9IC9cXHMvO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGluT3V0VHlwZU9wdGlvbnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnU291cmNlJyksXHJcbiAgICAgIHZhbHVlOiAnc291cmNlJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCdTb3VyY2UgRXhwcmVzc2lvbicpLFxyXG4gICAgICB2YWx1ZTogJ3NvdXJjZUV4cHJlc3Npb24nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ0FsbCcpLFxyXG4gICAgICB2YWx1ZTogJ3ZhcmlhYmxlcydcclxuICAgIH1cclxuICBdO1xyXG5cclxuICB2YXIgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYWN0aXZpdGk6Q2FsbEFjdGl2aXR5JykgJiYgIXNpZ25hbEV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNpZ25hbEV2ZW50RGVmaW5pdGlvbiAmJiAhKGlzQW55KGVsZW1lbnQsIFtcclxuICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxyXG4gICAgJ2JwbW46RW5kRXZlbnQnXHJcbiAgXSkpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiAhIWdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gIH07XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xyXG4gICAgdmFyIHNlbGVjdGlvbiA9IGluRW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgcGFyZW50Tm9kZSk7XHJcblxyXG4gICAgdmFyIHBhcmFtZXRlciA9IGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpW3NlbGVjdGlvbi5pZHhdO1xyXG5cclxuICAgIGlmICghcGFyYW1ldGVyICYmIG91dEVudHJ5KSB7XHJcbiAgICAgIHNlbGVjdGlvbiA9IG91dEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIHBhcmVudE5vZGUpO1xyXG4gICAgICBwYXJhbWV0ZXIgPSBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVClbc2VsZWN0aW9uLmlkeF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIHZhciB2YXJpYWJsZU1hcHBpbmdzID0gZ2V0VmFyaWFibGVNYXBwaW5ncyhlbGVtZW50LCB0eXBlKTtcclxuICAgICAgdmFyIG1hcHBpbmdWYWx1ZSA9IHZhcmlhYmxlTWFwcGluZ3NbaWR4XTtcclxuICAgICAgdmFyIGxhYmVsID0gKG1hcHBpbmdWYWx1ZS50YXJnZXQgfHwgJzx1bmRlZmluZWQ+JykgKyAnIDo9ICc7XHJcbiAgICAgIHZhciBtYXBwaW5nVHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nVmFsdWUpO1xyXG5cclxuICAgICAgaWYgKG1hcHBpbmdUeXBlID09PSAndmFyaWFibGVzJykge1xyXG4gICAgICAgIGxhYmVsID0gJ2FsbCc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobWFwcGluZ1R5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgICAgbGFiZWwgPSBsYWJlbCArIChtYXBwaW5nVmFsdWUuc291cmNlIHx8ICc8ZW1wdHk+Jyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobWFwcGluZ1R5cGUgPT09ICdzb3VyY2VFeHByZXNzaW9uJykge1xyXG4gICAgICAgIGxhYmVsID0gbGFiZWwgKyAobWFwcGluZ1ZhbHVlLnNvdXJjZUV4cHJlc3Npb24gfHwgJzxlbXB0eT4nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsYWJlbCA9IGxhYmVsICsgJzxlbXB0eT4nO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvcHRpb24udGV4dCA9IGxhYmVsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgbmV3RWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUpIHtcclxuICAgICAgdmFyIG5ld0VsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgeyBzb3VyY2U6ICcnIH0sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgWyBuZXdFbGVtIF0pO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgdmFyaWFibGVzTWFwcGluZ3M9IGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgdHlwZSk7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gdmFyaWFibGVzTWFwcGluZ3NbaWR4XTtcclxuXHJcbiAgICAgIGlmIChtYXBwaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyXHJcbiAgICAgICAgICAucmVtb3ZlRW50cnkoc2lnbmFsRXZlbnREZWZpbml0aW9uIHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCBlbGVtZW50LCBtYXBwaW5nKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvLyBpbiBtYXBwaW5nIGZvciBzb3VyY2UgYW5kIHNvdXJjZUV4cHJlc3Npb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIHZhciBpbkVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctaW4nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW4gTWFwcGluZycpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3NvdXJjZScsXHJcbiAgICBwcmVmaXg6ICdJbicsXHJcbiAgICBpZEdlbmVyYXRpb246IGZhbHNlLFxyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgYnVzaW5lc3NPYmplY3Q6IHNpZ25hbEV2ZW50RGVmaW5pdGlvbiB8fCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuXHJcbiAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKSxcclxuICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpLFxyXG5cclxuICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgICBvdXRFbnRyeSAmJiBvdXRFbnRyeS5kZXNlbGVjdChlbGVtZW50LCBub2RlLnBhcmVudE5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKVxyXG4gIH0pO1xyXG4gIGdyb3VwLmVudHJpZXMucHVzaChpbkVudHJ5KTtcclxuXHJcbiAgLy8gb3V0IG1hcHBpbmcgZm9yIHNvdXJjZSBhbmQgc291cmNlRXhwcmVzc2lvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGlmICghc2lnbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICB2YXIgb3V0RW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLW91dCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dCBNYXBwaW5nJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6ICdzb3VyY2UnLFxyXG4gICAgICBwcmVmaXg6ICdPdXQnLFxyXG4gICAgICBpZEdlbmVyYXRpb246IGZhbHNlLFxyXG4gICAgICByZXNpemFibGU6IHRydWUsXHJcblxyXG4gICAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVCksXHJcbiAgICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKSxcclxuXHJcbiAgICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpIHtcclxuICAgICAgICBpbkVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVClcclxuICAgIH0pO1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKG91dEVudHJ5KTtcclxuICB9XHJcblxyXG4gIC8vIGxhYmVsIGZvciBzZWxlY3RlZCBtYXBwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5sYWJlbCh7XHJcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy10eXBlTGFiZWwnLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsdWUgPSAnJztcclxuICAgICAgaWYgKGlzKG1hcHBpbmcsIEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKSkge1xyXG4gICAgICAgIHZhbHVlID0gdHJhbnNsYXRlKCdJbiBNYXBwaW5nJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaXMobWFwcGluZywgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKSkge1xyXG4gICAgICAgIHZhbHVlID0gdHJhbnNsYXRlKCdPdXQgTWFwcGluZycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxhYmVsOiB2YWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93TGFiZWw6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctaW5PdXRUeXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IGluT3V0VHlwZU9wdGlvbnMsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaW5PdXRUeXBlJyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9O1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGluT3V0VHlwZTogZ2V0SW5PdXRUeXBlKG1hcHBpbmcpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGluT3V0VHlwZSA9IHZhbHVlcy5pbk91dFR5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ3NvdXJjZScgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgJ3NvdXJjZUV4cHJlc3Npb24nIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICd2YXJpYWJsZXMnIDogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlJykge1xyXG4gICAgICAgIHByb3BzLnNvdXJjZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGluT3V0VHlwZSA9PT0gJ3NvdXJjZUV4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgcHJvcHMuc291cmNlRXhwcmVzc2lvbiA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGluT3V0VHlwZSA9PT0gJ3ZhcmlhYmxlcycpIHtcclxuICAgICAgICBwcm9wcy52YXJpYWJsZXMgPSAnYWxsJztcclxuICAgICAgICBwcm9wcy50YXJnZXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbWFwcGluZywgcHJvcHMpO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLXNvdXJjZScsXHJcbiAgICBkYXRhVmFsdWVMYWJlbDogJ3NvdXJjZUxhYmVsJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdzb3VyY2UnLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge307XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSAnJztcclxuICAgICAgdmFyIGluT3V0VHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nKTtcclxuICAgICAgaWYgKGluT3V0VHlwZSA9PT0gJ3NvdXJjZScpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnU291cmNlJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnU291cmNlIEV4cHJlc3Npb24nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzb3VyY2U6IG1hcHBpbmdbaW5PdXRUeXBlXSxcclxuICAgICAgICBzb3VyY2VMYWJlbDogbGFiZWxcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YWx1ZXMuc291cmNlID0gdmFsdWVzLnNvdXJjZSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgaW5PdXRUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2luT3V0VHlwZV0gPSB2YWx1ZXMuc291cmNlIHx8ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBtYXBwaW5nLCBwcm9wcyk7XHJcbiAgICB9LFxyXG4gICAgLy8gb25lIG9mIGJvdGggKHNvdXJjZSBvciBzb3VyY2VFeHByZXNzaW9uKSBtdXN0IGhhdmUgYSB2YWx1ZSB0byBtYWtlXHJcbiAgICAvLyB0aGUgY29uZmlndXJhdGlvbiBlYXNpZXIgYW5kIG1vcmUgdW5kZXJzdGFuZGFibGVcclxuICAgIC8vIGl0IGlzIG5vdCBlbmdpbmUgY29uZm9ybVxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHZhbGlkYXRpb24gPSB7fTtcclxuICAgICAgaWYgKG1hcHBpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlcy5zb3VyY2UpIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24uc291cmNlID1cclxuICAgICAgICAgIHZhbGlkYXRpb24uc291cmNlID0gdmFsdWVzLnNvdXJjZUxhYmVsID9cclxuICAgICAgICAgICAgdHJhbnNsYXRlKCdNYXBwaW5nIG11c3QgaGF2ZSBhIHt2YWx1ZX0nLCB7IHZhbHVlOiB2YWx1ZXMuc291cmNlTGFiZWwudG9Mb3dlckNhc2UoKSB9KSA6XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZSgnTWFwcGluZyBtdXN0IGhhdmUgYSB2YWx1ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGluT3V0VHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKFdISVRFU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZXMuc291cmNlKSAmJiBpbk91dFR5cGUgIT09ICdzb3VyY2VFeHByZXNzaW9uJykge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5zb3VyY2UgPSB0cmFuc2xhdGUoJ3tsYWJlbH0gbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlJywgeyBsYWJlbDogdmFsdWVzLnNvdXJjZUxhYmVsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkYXRpb247XHJcbiAgICB9LFxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZE1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuICFzZWxlY3RlZE1hcHBpbmcgfHwgKHNlbGVjdGVkTWFwcGluZyAmJiBzZWxlY3RlZE1hcHBpbmcudmFyaWFibGVzKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy10YXJnZXQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFyZ2V0JyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAndGFyZ2V0JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRhcmdldDogKGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS50YXJnZXRcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YWx1ZXMudGFyZ2V0ID0gdmFsdWVzLnRhcmdldCB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbWFwcGluZywgdmFsdWVzKTtcclxuICAgIH0sXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xyXG4gICAgICBpZiAobWFwcGluZykge1xyXG4gICAgICAgIHZhciBtYXBwaW5nVHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZXMudGFyZ2V0ICYmIG1hcHBpbmdUeXBlICE9PSAndmFyaWFibGVzJykge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi50YXJnZXQgPSB0cmFuc2xhdGUoJ01hcHBpbmcgbXVzdCBoYXZlIGEgdGFyZ2V0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWVzLnRhcmdldFxyXG4gICAgICAgICAgJiYgV0hJVEVTUEFDRV9SRUdFWC50ZXN0KHZhbHVlcy50YXJnZXQpXHJcbiAgICAgICAgICAmJiBtYXBwaW5nVHlwZSAhPT0gJ3ZhcmlhYmxlcycpIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24udGFyZ2V0ID0gdHJhbnNsYXRlKCdUYXJnZXQgbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICAgIH0sXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkTWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gIXNlbGVjdGVkTWFwcGluZyB8fCAoc2VsZWN0ZWRNYXBwaW5nICYmIHNlbGVjdGVkTWFwcGluZy52YXJpYWJsZXMpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctbG9jYWwnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTG9jYWwnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdsb2NhbCcsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBsb2NhbDogKGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS5sb2NhbFxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhbHVlcy5sb2NhbCA9IHZhbHVlcy5sb2NhbCB8fCBmYWxzZTtcclxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBtYXBwaW5nLCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgdmFyIHZlcnNpb25UYWdFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZDogJ3ZlcnNpb25UYWcnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uIFRhZycpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAndmVyc2lvblRhZydcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGluIHBhcnRpY2lwYW50cyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXQgYW5kIGdldFxyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgdmVyc2lvblRhZ0VudHJ5LmdldCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgcHJvY2Vzc0JvID0gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB2ZXJzaW9uVGFnOiBwcm9jZXNzQm8uZ2V0KCdhY3Rpdml0aTp2ZXJzaW9uVGFnJylcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmVyc2lvblRhZ0VudHJ5LnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgIHZhciBwcm9jZXNzQm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBwcm9jZXNzQm8sIHtcclxuICAgICAgICAgICdhY3Rpdml0aTp2ZXJzaW9uVGFnJzogdmFsdWVzLnZlcnNpb25UYWcgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKHZlcnNpb25UYWdFbnRyeSk7XHJcblxyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGFzeW5jQ2FwYWJsZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXInKSxcclxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbmZ1bmN0aW9uIGlzQXN5bmNCZWZvcmUoYm8pIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNCZWZvcmUoYm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jQWZ0ZXIoYm8pIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNBZnRlcihibyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRXhjbHVzaXZlKGJvKSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5pc0V4Y2x1c2l2ZShibyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5yZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhblJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gIWV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRUaW1lckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIHZhciBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJycsXHJcbiAgICAgIGxhYmVsUHJlZml4ID0gb3B0aW9ucy5sYWJlbFByZWZpeCB8fCAnJztcclxuXHJcblxyXG4gIHZhciBhc3luY0JlZm9yZUVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgIGlkOiBpZFByZWZpeCArICdhc3luY0JlZm9yZScsXHJcbiAgICBsYWJlbDogbGFiZWxQcmVmaXggKyB0cmFuc2xhdGUoJ0FzeW5jaHJvbm91cyBCZWZvcmUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdhc3luY0JlZm9yZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGFzeW5jQmVmb3JlOiBpc0FzeW5jQmVmb3JlKGJvKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGFzeW5jQmVmb3JlID0gISF2YWx1ZXMuYXN5bmNCZWZvcmU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmFzeW5jQmVmb3JlJzogYXN5bmNCZWZvcmUsXHJcbiAgICAgICAgJ2FjdGl2aXRpOmFzeW5jJzogZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG4gICAgICBpZiAoIWlzQXN5bmNBZnRlcihibykgJiYgIWFzeW5jQmVmb3JlKSB7XHJcbiAgICAgICAgcHJvcHMgPSBhc3NpZ24oeyAnYWN0aXZpdGk6ZXhjbHVzaXZlJyA6IHRydWUgfSwgcHJvcHMpO1xyXG4gICAgICAgIGlmIChjYW5SZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShlbGVtZW50KSkge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChyZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BzKSk7XHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIHZhciBhc3luY0FmdGVyRW50cnkgPSBlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2FzeW5jQWZ0ZXInLFxyXG4gICAgbGFiZWw6IGxhYmVsUHJlZml4ICsgdHJhbnNsYXRlKCdBc3luY2hyb25vdXMgQWZ0ZXInKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdhc3luY0FmdGVyJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYXN5bmNBZnRlcjogaXNBc3luY0FmdGVyKGJvKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGFzeW5jQWZ0ZXIgPSAhIXZhbHVlcy5hc3luY0FmdGVyO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge1xyXG4gICAgICAgICdhY3Rpdml0aTphc3luY0FmdGVyJzogYXN5bmNBZnRlclxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcbiAgICAgIGlmICghaXNBc3luY0JlZm9yZShibykgJiYgIWFzeW5jQWZ0ZXIpIHtcclxuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTpleGNsdXNpdmUnIDogdHJ1ZSB9LCBwcm9wcyk7XHJcbiAgICAgICAgaWYgKGNhblJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpKTtcclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgdmFyIGV4Y2x1c2l2ZUVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgIGlkOiBpZFByZWZpeCArICdleGNsdXNpdmUnLFxyXG4gICAgbGFiZWw6IGxhYmVsUHJlZml4ICsgdHJhbnNsYXRlKCdFeGNsdXNpdmUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdleGNsdXNpdmUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIHsgZXhjbHVzaXZlOiBpc0V4Y2x1c2l2ZShibykgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgJ2FjdGl2aXRpOmV4Y2x1c2l2ZSc6ICEhdmFsdWVzLmV4Y2x1c2l2ZSB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgIWlzQXN5bmNBZnRlcihibykgJiYgIWlzQXN5bmNCZWZvcmUoYm8pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyBhc3luY0JlZm9yZUVudHJ5LCBhc3luY0FmdGVyRW50cnksIGV4Y2x1c2l2ZUVudHJ5IF07XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBleHRlbnNpb25FbGVtZW50c0hlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpO1xyXG5cclxuXHJcbnZhciByZXN1bHRWYXJpYWJsZSA9IHJlcXVpcmUoJy4vUmVzdWx0VmFyaWFibGUnKTtcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG52YXIgYXR0cmlidXRlSW5mbyA9IHtcclxuICBicG1uOiB7XHJcbiAgICBlbGVtZW50OiAnY2FsbGVkRWxlbWVudCcsXHJcbiAgICBiaW5kaW5nOiAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudEJpbmRpbmcnLFxyXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmNhbGxlZEVsZW1lbnRWZXJzaW9uJyxcclxuICAgIHZlcnNpb25UYWc6ICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50VmVyc2lvblRhZycsXHJcbiAgICB0ZW5hbnRJZDogJ2FjdGl2aXRpOmNhbGxlZEVsZW1lbnRUZW5hbnRJZCdcclxuICB9LFxyXG5cclxuICBjbW1uOiB7XHJcbiAgICBlbGVtZW50OiAnYWN0aXZpdGk6Y2FzZVJlZicsXHJcbiAgICBiaW5kaW5nOiAnYWN0aXZpdGk6Y2FzZUJpbmRpbmcnLFxyXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmNhc2VWZXJzaW9uJyxcclxuICAgIHRlbmFudElkOiAnYWN0aXZpdGk6Y2FzZVRlbmFudElkJ1xyXG4gIH0sXHJcblxyXG4gIGRtbjoge1xyXG4gICAgZWxlbWVudDogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmJyxcclxuICAgIGJpbmRpbmc6ICdhY3Rpdml0aTpkZWNpc2lvblJlZkJpbmRpbmcnLFxyXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVmVyc2lvbicsXHJcbiAgICB2ZXJzaW9uVGFnOiAnYWN0aXZpdGk6ZGVjaXNpb25SZWZWZXJzaW9uVGFnJyxcclxuICAgIHRlbmFudElkOiAnYWN0aXZpdGk6ZGVjaXNpb25SZWZUZW5hbnRJZCdcclxuICB9XHJcbn07XHJcblxyXG52YXIgbWFwRGVjaXNpb25SZXN1bHRPcHRpb25zID0gW1xyXG4gIHtcclxuICAgIG5hbWU6ICdzaW5nbGVFbnRyeSAoVHlwZWRWYWx1ZSknLFxyXG4gICAgdmFsdWU6ICdzaW5nbGVFbnRyeSdcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6J3NpbmdsZVJlc3VsdCAoTWFwPFN0cmluZywgT2JqZWN0PiknLFxyXG4gICAgdmFsdWU6J3NpbmdsZVJlc3VsdCdcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6J2NvbGxlY3RFbnRyaWVzIChMaXN0PE9iamVjdD4pJyxcclxuICAgIHZhbHVlOidjb2xsZWN0RW50cmllcydcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6J3Jlc3VsdExpc3QgKExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4pJyxcclxuICAgIHZhbHVlOidyZXN1bHRMaXN0J1xyXG4gIH1cclxuXTtcclxuXHJcbnZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ09wdGlvbnMgPSBbXHJcbiAge1xyXG4gICAgbmFtZTogJ3ZhcmlhYmxlTWFwcGluZ0NsYXNzJyxcclxuICAgIHZhbHVlOiAndmFyaWFibGVNYXBwaW5nQ2xhc3MnXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiAndmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyxcclxuICAgIHZhbHVlOiAndmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJ1xyXG4gIH1cclxuXTtcclxuXHJcbmZ1bmN0aW9uIGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCkge1xyXG4gIHZhciBhY3Rpdml0aUluID0gW10sXHJcbiAgICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBhY3Rpdml0aUluUGFyYW1zID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpJbicpO1xyXG4gIGlmIChhY3Rpdml0aUluUGFyYW1zKSB7XHJcbiAgICBmb3JFYWNoKGFjdGl2aXRpSW5QYXJhbXMsIGZ1bmN0aW9uKHBhcmFtKSB7XHJcbiAgICAgIGlmIChwYXJhbS5idXNpbmVzc0tleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWN0aXZpdGlJbi5wdXNoKHBhcmFtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBhY3Rpdml0aUluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCB0ZXh0LCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBjb21tYW5kcyA9IFtdO1xyXG5cclxuICB2YXIgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleSA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XHJcblxyXG4gIGlmIChhY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5Lmxlbmd0aCkge1xyXG4gICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleVswXSwge1xyXG4gICAgICBidXNpbmVzc0tleTogdGV4dFxyXG4gICAgfSkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7IHZhbHVlczogW10gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50cyB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGFjdGl2aXRpSW4gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICdhY3Rpdml0aTpJbicsXHJcbiAgICAgIHsgJ2J1c2luZXNzS2V5JzogdGV4dCB9LFxyXG4gICAgICBleHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgYnBtbkZhY3RvcnlcclxuICAgICk7XHJcblxyXG4gICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICBbIGFjdGl2aXRpSW4gXSxbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29tbWFuZHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZUJ1c2luZXNzS2V5KGVsZW1lbnQpIHtcclxuICB2YXIgYWN0aXZpdGlJbkV4dGVuc2lvbnMgPSBnZXRBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xyXG4gIHZhciBjb21tYW5kcyA9IFtdO1xyXG4gIGZvckVhY2goYWN0aXZpdGlJbkV4dGVuc2lvbnMsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGVsZW1lbnQsIGVsZW0pKTtcclxuICB9KTtcclxuICByZXR1cm4gY29tbWFuZHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpIHtcclxuICByZXR1cm4gWyAnYnBtbicsICdjbW1uJywgJ2RtbicgXS5pbmRleE9mKHR5cGUpICE9PSAtMTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBiaW5kaW5nT3B0aW9ucyA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCdsYXRlc3QnKSxcclxuICAgICAgdmFsdWU6ICdsYXRlc3QnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ2RlcGxveW1lbnQnKSxcclxuICAgICAgdmFsdWU6ICdkZXBsb3ltZW50J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCd2ZXJzaW9uJyksXHJcbiAgICAgIHZhbHVlOiAndmVyc2lvbidcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgndmVyc2lvblRhZycpLFxyXG4gICAgICB2YWx1ZTogJ3ZlcnNpb25UYWcnXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIGdldENhbGxhYmxlVHlwZSA9IG9wdGlvbnMuZ2V0Q2FsbGFibGVUeXBlO1xyXG5cclxuICB2YXIgZW50cmllcyA9IFtdO1xyXG5cclxuICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgcHJvcCkge1xyXG4gICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcbiAgICByZXR1cm4gKGF0dHJpYnV0ZUluZm9bdHlwZV0gfHwge30pW3Byb3BdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpIHtcclxuICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICB2YXIgYXR0ciA9IChhdHRyaWJ1dGVJbmZvW3R5cGVdIHx8IHt9KS5iaW5kaW5nO1xyXG4gICAgcmV0dXJuIGJvLmdldChhdHRyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZShlbGVtZW50KSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICB2YXIgYm9WYXJpYWJsZU1hcHBpbmdDbGFzcyA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nQ2xhc3MnKSxcclxuICAgICAgICBib1ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbiA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyk7XHJcblxyXG4gICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9ICcnO1xyXG4gICAgaWYgKHR5cGVvZiBib1ZhcmlhYmxlTWFwcGluZ0NsYXNzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPSAndmFyaWFibGVNYXBwaW5nQ2xhc3MnO1xyXG4gICAgfSBlbHNlXHJcblxyXG4gICAgaWYgKHR5cGVvZiBib1ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlID0gJ3ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbic7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZTtcclxuICB9XHJcblxyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2NhbGxhYmxlLWVsZW1lbnQtcmVmJyxcclxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnY2FsbGFibGVFbGVtZW50TGFiZWwnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2NhbGxhYmxlRWxlbWVudFJlZicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBjYWxsYWJsZUVsZW1lbnRSZWY7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnZWxlbWVudCcpO1xyXG4gICAgICBpZiAoYXR0cikge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICAgIGNhbGxhYmxlRWxlbWVudFJlZiA9IGJvLmdldChhdHRyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGxhYmVsID0gJyc7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2JwbW4nKSB7XHJcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0NhbGxlZCBFbGVtZW50Jyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2NtbW4nKSB7XHJcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0Nhc2UgUmVmJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2RtbicpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnRGVjaXNpb24gUmVmJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbGFibGVFbGVtZW50UmVmOiBjYWxsYWJsZUVsZW1lbnRSZWYsXHJcbiAgICAgICAgY2FsbGFibGVFbGVtZW50TGFiZWw6IGxhYmVsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBuZXdDYWxsYWJsZUVsZW1lbnRSZWYgPSB2YWx1ZXMuY2FsbGFibGVFbGVtZW50UmVmO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnZWxlbWVudCcpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2F0dHJdID0gbmV3Q2FsbGFibGVFbGVtZW50UmVmIHx8ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgZWxlbWVudFJlZiA9IHZhbHVlcy5jYWxsYWJsZUVsZW1lbnRSZWY7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgJiYgIWVsZW1lbnRSZWYgPyB7IGNhbGxhYmxlRWxlbWVudFJlZjogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ2NhbGxhYmxlLWJpbmRpbmcnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQmluZGluZycpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuICAgICAgdmFyIG9wdGlvbnM7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gJ2NtbW4nKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IGJpbmRpbmdPcHRpb25zLmZpbHRlcihmdW5jdGlvbihiaW5kaW5nT3B0aW9uKSB7XHJcbiAgICAgICAgICByZXR1cm4gYmluZGluZ09wdGlvbi52YWx1ZSAhPT0gJ3ZlcnNpb25UYWcnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSBiaW5kaW5nT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH0sXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FsbGFibGVCaW5kaW5nJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGNhbGxhYmxlQmluZGluZztcclxuXHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICdiaW5kaW5nJyk7XHJcbiAgICAgIGlmIChhdHRyKSB7XHJcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgICAgY2FsbGFibGVCaW5kaW5nID0gYm8uZ2V0KGF0dHIpIHx8ICdsYXRlc3QnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbGxhYmxlQmluZGluZzogY2FsbGFibGVCaW5kaW5nXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBiaW5kaW5nID0gdmFsdWVzLmNhbGxhYmxlQmluZGluZztcclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2JpbmRpbmcnKSxcclxuICAgICAgICAgIGF0dHJWZXIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb24nKSxcclxuICAgICAgICAgIGF0dHJWZXJUYWcgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb25UYWcnKTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG4gICAgICBwcm9wc1thdHRyXSA9IGJpbmRpbmc7XHJcblxyXG4gICAgICAvLyBzZXQgdmVyc2lvbiBhbmQgdmVyc2lvblRhZyB2YWx1ZXMgYWx3YXlzIHRvIHVuZGVmaW5lZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIHZhbHVlXHJcbiAgICAgIHByb3BzW2F0dHJWZXJdID0gdW5kZWZpbmVkO1xyXG4gICAgICBwcm9wc1thdHRyVmVyVGFnXSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKGdldENhbGxhYmxlVHlwZShlbGVtZW50KSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdjYWxsYWJsZS12ZXJzaW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZlcnNpb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjYWxsYWJsZVZlcnNpb24nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgY2FsbGFibGVWZXJzaW9uO1xyXG5cclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb24nKTtcclxuICAgICAgaWYgKGF0dHIpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgICBjYWxsYWJsZVZlcnNpb24gPSBiby5nZXQoYXR0cik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbGFibGVWZXJzaW9uOiBjYWxsYWJsZVZlcnNpb25cclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHZlcnNpb24gPSB2YWx1ZXMuY2FsbGFibGVWZXJzaW9uO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvbicpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2F0dHJdID0gdmVyc2lvbiB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB2ZXJzaW9uID0gdmFsdWVzLmNhbGxhYmxlVmVyc2lvbjtcclxuXHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpICYmXHJcbiAgICAgICAgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpID09PSAndmVyc2lvbicgJiYgKFxyXG4gICAgICAgICAgIXZlcnNpb24gPyB7IGNhbGxhYmxlVmVyc2lvbjogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gIWlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpIHx8IGdldENhbGxBY3Rpdml0eUJpbmRpbmdWYWx1ZShlbGVtZW50KSAhPT0gJ3ZlcnNpb24nO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnY2FsbGFibGUtdmVyc2lvbi10YWcnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbiBUYWcnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICd2ZXJzaW9uVGFnJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHZlcnNpb25UYWc7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvblRhZycpO1xyXG5cclxuICAgICAgaWYgKGF0dHIpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdmVyc2lvblRhZyA9IGJvLmdldChhdHRyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB2ZXJzaW9uVGFnOiB2ZXJzaW9uVGFnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB2ZXJzaW9uVGFnID0gdmFsdWVzLnZlcnNpb25UYWc7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvblRhZycpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcblxyXG4gICAgICBwcm9wc1thdHRyXSA9IHZlcnNpb25UYWcgfHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgdmVyc2lvblRhZyA9IHZhbHVlcy52ZXJzaW9uVGFnO1xyXG5cclxuICAgICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpICYmXHJcbiAgICAgICAgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpID09PSAndmVyc2lvblRhZycgJiYgKFxyXG4gICAgICAgICAgIXZlcnNpb25UYWcgPyB7IHZlcnNpb25UYWc6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge31cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgfHwgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpICE9PSAndmVyc2lvblRhZyc7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICd0ZW5hbnQtaWQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGVuYW50IElkJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAndGVuYW50SWQnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgdGVuYW50SWQ7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndGVuYW50SWQnKTtcclxuICAgICAgaWYgKGF0dHIpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgICB0ZW5hbnRJZCA9IGJvLmdldChhdHRyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0ZW5hbnRJZDogdGVuYW50SWRcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHRlbmFudElkID0gdmFsdWVzLnRlbmFudElkO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndGVuYW50SWQnKTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG4gICAgICBwcm9wc1thdHRyXSA9IHRlbmFudElkIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuICAgICAgcmV0dXJuICFpc1N1cHBvcnRlZENhbGxhYmxlVHlwZSh0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBpZiAoaXMoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksICdicG1uOkNhbGxBY3Rpdml0eScpKSB7XHJcbiAgICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgICAgaWQ6ICdjYWxsYWJsZS1idXNpbmVzcy1rZXknLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdCdXNpbmVzcyBLZXknKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2NhbGxhYmxlQnVzaW5lc3NLZXknLFxyXG5cclxuICAgICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgICAgdmFyIGFjdGl2aXRpSW4gPSBnZXRBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY2FsbGFibGVCdXNpbmVzc0tleTogISEoYWN0aXZpdGlJbiAmJiBhY3Rpdml0aUluLmxlbmd0aCA+IDApXHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlcy5jYWxsYWJsZUJ1c2luZXNzS2V5KSB7XHJcbiAgICAgICAgICByZXR1cm4gc2V0QnVzaW5lc3NLZXkoZWxlbWVudCwgJyN7ZXhlY3V0aW9uLnByb2Nlc3NCdXNpbmVzc0tleX0nLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBkZWxldGVCdXNpbmVzc0tleShlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnYnVzaW5lc3Mta2V5LWV4cHJlc3Npb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQnVzaW5lc3MgS2V5IEV4cHJlc3Npb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdidXNpbmVzc0tleScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5ID0gZ2V0QWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShlbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYnVzaW5lc3NLZXk6IChcclxuICAgICAgICAgIGFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkubGVuZ3RoID9cclxuICAgICAgICAgICAgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleVswXS5nZXQoJ2FjdGl2aXRpOmJ1c2luZXNzS2V5JykgOlxyXG4gICAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBidXNpbmVzc0tleSA9IHZhbHVlcy5idXNpbmVzc0tleTtcclxuXHJcbiAgICAgIHJldHVybiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCBidXNpbmVzc0tleSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBidXNpbmVzc0tleSA9IHZhbHVlcy5idXNpbmVzc0tleTtcclxuXHJcbiAgICAgIHJldHVybiBidXNpbmVzc0tleSA9PT0gJycgPyB7IGJ1c2luZXNzS2V5OiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFnZXRBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBlbnRyaWVzID0gZW50cmllcy5jb25jYXQocmVzdWx0VmFyaWFibGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZG1uLXJlc3VsdFZhcmlhYmxlJyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldEltcGxlbWVudGF0aW9uVHlwZTogZ2V0Q2FsbGFibGVUeXBlLFxyXG4gICAgaGlkZVJlc3VsdFZhcmlhYmxlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgIT09ICdkbW4nO1xyXG4gICAgfVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ2Rtbi1tYXAtZGVjaXNpb24tcmVzdWx0JyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01hcCBEZWNpc2lvbiBSZXN1bHQnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IG1hcERlY2lzaW9uUmVzdWx0T3B0aW9ucyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdtYXBEZWNpc2lvblJlc3VsdCcsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG1hcERlY2lzaW9uUmVzdWx0OiBiby5nZXQoJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JykgfHwgJ3Jlc3VsdExpc3QnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JzogdmFsdWVzLm1hcERlY2lzaW9uUmVzdWx0IHx8ICdyZXN1bHRMaXN0J1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgcmVzdWx0VmFyaWFibGUgPSBiby5nZXQoJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJyk7XHJcbiAgICAgIHJldHVybiAhKGdldENhbGxhYmxlVHlwZShlbGVtZW50KSA9PT0gJ2RtbicgJiYgdHlwZW9mIHJlc3VsdFZhcmlhYmxlICE9PSAndW5kZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkOiAnZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIFZhcmlhYmxlIE1hcHBpbmcnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nT3B0aW9ucyxcclxuICAgIGVtcHR5UGFyYW1ldGVyOiB0cnVlLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2RlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlIDogZ2V0RGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlKGVsZW1lbnQpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPSB2YWx1ZXMuZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge1xyXG4gICAgICAgICdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicgOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPT09ICd2YXJpYWJsZU1hcHBpbmdDbGFzcycpIHtcclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nQ2xhc3MnXSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9PT0gJ3ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJ10gPSAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpICE9PSAnYnBtbicpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmcnLFxyXG4gICAgZGF0YVZhbHVlTGFiZWw6ICdkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ0xhYmVsJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZycsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGxhYmVsID0gJyc7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IHVuZGVmaW5lZDtcclxuICAgICAgdmFyIHR5cGUgPSBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gJ3ZhcmlhYmxlTWFwcGluZ0NsYXNzJykge1xyXG4gICAgICAgIGxhYmVsID0gdHJhbnNsYXRlKCdDbGFzcycpO1xyXG4gICAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gYm8uZ2V0KCdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICd2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKTtcclxuICAgICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmc6IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nLFxyXG4gICAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nTGFiZWw6IGxhYmVsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IHZhbHVlcy5kZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZztcclxuXHJcbiAgICAgIHZhciBhdHRyID0gJ2FjdGl2aXRpOicgKyBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuICAgICAgcHJvcHNbYXR0cl0gPSBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IHZhbHVlcy5kZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZztcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgPT09ICdicG1uJyAmJiAoXHJcbiAgICAgICAgICAhZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmcgPyB7IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICEoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpID09PSAnYnBtbicgJiYgZ2V0RGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlKGVsZW1lbnQpICE9PSAnJyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgY2FuZGlkYXRlU3RhcnRlckdyb3Vwc0VudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2NhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgR3JvdXBzJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FuZGlkYXRlU3RhcnRlckdyb3VwcycsXHJcbiAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKCdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nKSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBjYW5kaWRhdGVTdGFydGVyR3JvdXBzID0gYm8uZ2V0KCdhY3Rpdml0aTpjYW5kaWRhdGVTdGFydGVyR3JvdXBzJyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHM6IGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMgPyBjYW5kaWRhdGVTdGFydGVyR3JvdXBzIDogJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6Y2FuZGlkYXRlU3RhcnRlckdyb3Vwcyc6IHZhbHVlcy5jYW5kaWRhdGVTdGFydGVyR3JvdXBzIHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHZhciBjYW5kaWRhdGVTdGFydGVyVXNlcnNFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdjYW5kaWRhdGVTdGFydGVyVXNlcnMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgVXNlcnMnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjYW5kaWRhdGVTdGFydGVyVXNlcnMnLFxyXG4gICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnU3BlY2lmeSBtb3JlIHRoYW4gb25lIHVzZXIgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nKSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBjYW5kaWRhdGVTdGFydGVyVXNlcnMgPSBiby5nZXQoJ2FjdGl2aXRpOmNhbmRpZGF0ZVN0YXJ0ZXJVc2VycycpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjYW5kaWRhdGVTdGFydGVyVXNlcnM6IGNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyA/IGNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyA6ICcnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmNhbmRpZGF0ZVN0YXJ0ZXJVc2Vycyc6IHZhbHVlcy5jYW5kaWRhdGVTdGFydGVyVXNlcnMgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHNFbnRyeSxcclxuICAgIGNhbmRpZGF0ZVN0YXJ0ZXJVc2Vyc0VudHJ5XHJcbiAgXTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgREVMRUdBVEVfVFlQRVMgPSBbXHJcbiAgJ2NsYXNzJyxcclxuICAnZXhwcmVzc2lvbicsXHJcbiAgJ2RlbGVnYXRlRXhwcmVzc2lvbidcclxuXTtcclxuXHJcbnZhciBQUk9QRVJUSUVTID0ge1xyXG4gIGNsYXNzOiAnYWN0aXZpdGk6Y2xhc3MnLFxyXG4gIGV4cHJlc3Npb246ICdhY3Rpdml0aTpleHByZXNzaW9uJyxcclxuICBkZWxlZ2F0ZUV4cHJlc3Npb246ICdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nXHJcbn07XHJcblxyXG5mdW5jdGlvbiBpc0RlbGVnYXRlKHR5cGUpIHtcclxuICByZXR1cm4gREVMRUdBVEVfVFlQRVMuaW5kZXhPZih0eXBlKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZSh0eXBlKSB7XHJcbiAgcmV0dXJuIFBST1BFUlRJRVNbdHlwZV07XHJcbn1cclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEltcGxlbWVudGF0aW9uVHlwZSA9IG9wdGlvbnMuZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIGZ1bmN0aW9uIGdldERlbGVnYXRpb25MYWJlbCh0eXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgIGNhc2UgJ2NsYXNzJzpcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnSmF2YSBDbGFzcycpO1xyXG4gICAgY2FzZSAnZXhwcmVzc2lvbic6XHJcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKTtcclxuICAgIGNhc2UgJ2RlbGVnYXRlRXhwcmVzc2lvbic6XHJcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKTtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBkZWxlZ2F0ZUVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2RlbGVnYXRlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhbHVlJyksXHJcbiAgICBkYXRhVmFsdWVMYWJlbDogJ2RlbGVnYXRpb25MYWJlbCcsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZGVsZWdhdGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIHR5cGUgPSBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCk7XHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKHR5cGUpO1xyXG4gICAgICB2YXIgbGFiZWwgPSBnZXREZWxlZ2F0aW9uTGFiZWwodHlwZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVsZWdhdGU6IGJvLmdldChhdHRyKSxcclxuICAgICAgICBkZWxlZ2F0aW9uTGFiZWw6IGxhYmVsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgdHlwZSA9IGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUodHlwZSk7XHJcbiAgICAgIHZhciBwcm9wID0ge307XHJcbiAgICAgIHByb3BbYXR0cl0gPSB2YWx1ZXMuZGVsZWdhdGUgfHwgJyc7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3ApO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBpc0RlbGVnYXRlKGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSkgJiYgIXZhbHVlcy5kZWxlZ2F0ZSA/IHsgZGVsZWdhdGU6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzRGVsZWdhdGUoZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIGRlbGVnYXRlRW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FbGVtZW50UmVmZXJlbmNlUHJvcGVydHknKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oXHJcbiAgICBncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVycm9yRXZlbnREZWZpbml0aW9uLFxyXG4gICAgc2hvd0Vycm9yQ29kZVZhcmlhYmxlLCBzaG93RXJyb3JNZXNzYWdlVmFyaWFibGUsIHRyYW5zbGF0ZVxyXG4pIHtcclxuXHJcblxyXG4gIHZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uKG1vZGVsUHJvcGVydHkpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHZhciBtb2RlbFByb3BlcnR5VmFsdWUgPSBlcnJvckV2ZW50RGVmaW5pdGlvbi5nZXQoJ2FjdGl2aXRpOicgKyBtb2RlbFByb3BlcnR5KTtcclxuICAgICAgdmFyIHZhbHVlID0ge307XHJcblxyXG4gICAgICB2YWx1ZVttb2RlbFByb3BlcnR5XSA9IG1vZGVsUHJvcGVydHlWYWx1ZTtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbihtb2RlbFByb3BlcnR5KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG5cclxuICAgICAgcHJvcHNbJ2FjdGl2aXRpOicgKyBtb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGVycm9yRXZlbnREZWZpbml0aW9uLCBwcm9wcyk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoXHJcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGlkOiAnZXJyb3ItZWxlbWVudC1tZXNzYWdlJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgTWVzc2FnZScpLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2Vycm9yUmVmJyxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2Vycm9yTWVzc2FnZSdcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgaWYgKHNob3dFcnJvckNvZGVWYXJpYWJsZSkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZDogJ2Vycm9yQ29kZVZhcmlhYmxlJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgQ29kZSBWYXJpYWJsZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2Vycm9yQ29kZVZhcmlhYmxlJyxcclxuXHJcbiAgICAgIGdldDogZ2V0VmFsdWUoJ2Vycm9yQ29kZVZhcmlhYmxlJyksXHJcbiAgICAgIHNldDogc2V0VmFsdWUoJ2Vycm9yQ29kZVZhcmlhYmxlJylcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGlmIChzaG93RXJyb3JNZXNzYWdlVmFyaWFibGUpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQ6ICdlcnJvck1lc3NhZ2VWYXJpYWJsZScsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yIE1lc3NhZ2UgVmFyaWFibGUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJyxcclxuXHJcbiAgICAgIGdldDogZ2V0VmFsdWUoJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJyksXHJcbiAgICAgIHNldDogc2V0VmFsdWUoJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJylcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxyXG4gICAgZG9tQ2xvc2VzdCA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbG9zZXN0LFxyXG4gICAgZG9taWZ5ID0gcmVxdWlyZSgnbWluLWRvbScpLmRvbWlmeSxcclxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLFxyXG4gICAgZXNjYXBlSFRNTCA9IHV0aWxzLmVzY2FwZUhUTUw7XHJcblxyXG5mdW5jdGlvbiBnZXRTZWxlY3RCb3gobm9kZSwgaWQpIHtcclxuICB2YXIgY3VycmVudFRhYiA9IGRvbUNsb3Nlc3Qobm9kZSwgJ2Rpdi5icHAtcHJvcGVydGllcy10YWInKTtcclxuICB2YXIgcXVlcnkgPSAnc2VsZWN0W25hbWU9c2VsZWN0ZWRFeHRlbnNpb25FbGVtZW50XScgKyAoaWQgPyAnW2lkPWNhbS1leHRlbnNpb25FbGVtZW50cy0nICsgaWQgKyAnXScgOiAnJyk7XHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KHF1ZXJ5LCBjdXJyZW50VGFiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VsZWN0ZWQobm9kZSwgaWQpIHtcclxuICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcclxuICByZXR1cm4ge1xyXG4gICAgdmFsdWU6IChzZWxlY3RCb3ggfHwge30pLnZhbHVlLFxyXG4gICAgaWR4OiAoc2VsZWN0Qm94IHx8IHt9KS5zZWxlY3RlZEluZGV4XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVFbGVtZW50SWQocHJlZml4KSB7XHJcbiAgcHJlZml4ID0gcHJlZml4ICsgJ18nO1xyXG4gIHJldHVybiB1dGlscy5uZXh0SWQocHJlZml4KTtcclxufVxyXG5cclxudmFyIENSRUFURV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04gPSAnY3JlYXRlLWV4dGVuc2lvbi1lbGVtZW50JyxcclxuICAgIFJFTU9WRV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04gPSAncmVtb3ZlLWV4dGVuc2lvbi1lbGVtZW50JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaWQgPSBvcHRpb25zLmlkLFxyXG4gICAgICBwcmVmaXggPSBvcHRpb25zLnByZWZpeCB8fCAnZWxlbScsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCBpZCxcclxuICAgICAgaWRHZW5lcmF0aW9uID0gKG9wdGlvbnMuaWRHZW5lcmF0aW9uID09PSBmYWxzZSkgPyBvcHRpb25zLmlkR2VuZXJhdGlvbiA6IHRydWUsXHJcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5idXNpbmVzc09iamVjdCB8fCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHkgfHwgJ2lkJztcclxuXHJcbiAgdmFyIGdldEVsZW1lbnRzID0gb3B0aW9ucy5nZXRFeHRlbnNpb25FbGVtZW50cztcclxuXHJcbiAgdmFyIGNyZWF0ZUVsZW1lbnQgPSBvcHRpb25zLmNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQsXHJcbiAgICAgIGNhbkNyZWF0ZSA9IHR5cGVvZiBjcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IG9wdGlvbnMucmVtb3ZlRXh0ZW5zaW9uRWxlbWVudCxcclxuICAgICAgY2FuUmVtb3ZlID0gdHlwZW9mIHJlbW92ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XHJcblxyXG4gIHZhciBvblNlbGVjdGlvbkNoYW5nZSA9IG9wdGlvbnMub25TZWxlY3Rpb25DaGFuZ2U7XHJcblxyXG4gIHZhciBoaWRlRWxlbWVudHMgPSBvcHRpb25zLmhpZGVFeHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSB0eXBlb2YgaGlkZUVsZW1lbnRzID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IG9wdGlvbnMuc2V0T3B0aW9uTGFiZWxWYWx1ZTtcclxuXHJcbiAgdmFyIGRlZmF1bHRTaXplID0gb3B0aW9ucy5zaXplIHx8IDUsXHJcbiAgICAgIHJlc2l6YWJsZSA9IG9wdGlvbnMucmVzaXphYmxlO1xyXG5cclxuICB2YXIgcmVmZXJlbmNlID0gb3B0aW9ucy5yZWZlcmVuY2UgfHwgdW5kZWZpbmVkO1xyXG5cclxuICB2YXIgc2VsZWN0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgaWYgKHR5cGVvZiBvblNlbGVjdGlvbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gb25TZWxlY3Rpb25DaGFuZ2UoZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB2YXIgY3JlYXRlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiAnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKHZhbHVlKSArICdcIiBkYXRhLXZhbHVlIGRhdGEtbmFtZT1cImV4dGVuc2lvbkVsZW1lbnRWYWx1ZVwiPicgKyBlc2NhcGVIVE1MKHZhbHVlKSArICc8L29wdGlvbj4nO1xyXG4gIH07XHJcblxyXG4gIHZhciBpbml0U2VsZWN0aW9uU2l6ZSA9IGZ1bmN0aW9uKHNlbGVjdEJveCwgb3B0aW9uc0xlbmd0aCkge1xyXG4gICAgaWYgKHJlc2l6YWJsZSkge1xyXG4gICAgICBzZWxlY3RCb3guc2l6ZSA9IG9wdGlvbnNMZW5ndGggPiBkZWZhdWx0U2l6ZSA/IG9wdGlvbnNMZW5ndGggOiBkZWZhdWx0U2l6ZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgaHRtbDogJzxkaXYgY2xhc3M9XCJicHAtcm93IGJwcC1lbGVtZW50LWxpc3RcIiAnICtcclxuICAgICAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImhpZGVFbGVtZW50c1wiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLScgKyBlc2NhcGVIVE1MKGlkKSArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICAgICAgICc8c2VsZWN0IGlkPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLScgKyBlc2NhcGVIVE1MKGlkKSArICdcIicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ25hbWU9XCJzZWxlY3RlZEV4dGVuc2lvbkVsZW1lbnRcIiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICdzaXplPVwiJyArIGVzY2FwZUhUTUwoZGVmYXVsdFNpemUpICsgJ1wiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtbGlzdC1lbnRyeS1jb250YWluZXIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1vbi1jaGFuZ2U9XCJzZWxlY3RFbGVtZW50XCI+JyArXHJcbiAgICAgICAgICAgICAgJzwvc2VsZWN0PicgK1xyXG4gICAgICAgICAgICAgIChjYW5DcmVhdGUgPyAnPGJ1dHRvbiBjbGFzcz1cImFkZFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZD1cImNhbS1leHRlbnNpb25FbGVtZW50cy1jcmVhdGUtJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWFjdGlvbj1cImNyZWF0ZUVsZW1lbnRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+Kzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgOiAnJykgK1xyXG4gICAgICAgICAgICAgIChjYW5SZW1vdmUgPyAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLXJlbW92ZS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtYWN0aW9uPVwicmVtb3ZlRWxlbWVudFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWRpc2FibGU9XCJkaXNhYmxlUmVtb3ZlXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPi08L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nIDogJycpICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBlbGVtZW50cyA9IGdldEVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudFZhbHVlOiBlbGVtLmdldChtb2RlbFByb3BlcnR5KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3gobm9kZS5wYXJlbnROb2RlLCBpZCk7XHJcbiAgICAgIGluaXRTZWxlY3Rpb25TaXplKHNlbGVjdEJveCwgcmVzdWx0Lmxlbmd0aCk7XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYWN0aW9uID0gdGhpcy5fX2FjdGlvbjtcclxuICAgICAgZGVsZXRlIHRoaXMuX19hY3Rpb247XHJcblxyXG4gICAgICBidXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGJvID1cclxuICAgICAgICAocmVmZXJlbmNlICYmIGJ1c2luZXNzT2JqZWN0LmdldChyZWZlcmVuY2UpKVxyXG4gICAgICAgICAgPyBidXNpbmVzc09iamVjdC5nZXQocmVmZXJlbmNlKVxyXG4gICAgICAgICAgOiBidXNpbmVzc09iamVjdDtcclxuXHJcbiAgICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaWQgPT09IENSRUFURV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04pIHtcclxuICAgICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuICAgICAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjcmVhdGVFbGVtZW50KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCBhY3Rpb24udmFsdWUsIG5vZGUpKTtcclxuICAgICAgICByZXR1cm4gY29tbWFuZHM7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFjdGlvbi5pZCA9PT0gUkVNT1ZFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTikge1xyXG4gICAgICAgIHJldHVybiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCBhY3Rpb24udmFsdWUsIGFjdGlvbi5pZHgsIG5vZGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVMaXN0RW50cnlUZW1wbGF0ZTogZnVuY3Rpb24odmFsdWUsIGluZGV4LCBzZWxlY3RCb3gpIHtcclxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCBzZWxlY3RCb3gub3B0aW9ucy5sZW5ndGggKyAxKTtcclxuICAgICAgcmV0dXJuIGNyZWF0ZU9wdGlvbih2YWx1ZS5leHRlbnNpb25FbGVtZW50VmFsdWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZXNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcclxuICAgICAgc2VsZWN0Qm94LnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkKG5vZGUsIGlkKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgIGlmICghc2V0T3B0aW9uTGFiZWxWYWx1ZSkge1xyXG4gICAgICAgIG5vZGUudGV4dCA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldE9wdGlvbkxhYmVsVmFsdWUoZWxlbWVudCwgbm9kZSwgb3B0aW9uLCBwcm9wZXJ0eSwgdmFsdWUsIGlkeCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICAvLyBjcmVhdGUgb3B0aW9uIHRlbXBsYXRlXHJcbiAgICAgIHZhciBnZW5lcmF0ZWRJZDtcclxuICAgICAgaWYgKGlkR2VuZXJhdGlvbikge1xyXG4gICAgICAgIGdlbmVyYXRlZElkID0gZ2VuZXJhdGVFbGVtZW50SWQocHJlZml4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHNlbGVjdEJveCA9IGdldFNlbGVjdEJveChub2RlLCBpZCk7XHJcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvbWlmeShjcmVhdGVPcHRpb24oZ2VuZXJhdGVkSWQpKTtcclxuXHJcbiAgICAgIC8vIGFkZCBuZXcgZW1wdHkgb3B0aW9uIGFzIGxhc3QgY2hpbGQgZWxlbWVudFxyXG4gICAgICBzZWxlY3RCb3guYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xyXG5cclxuICAgICAgLy8gc2VsZWN0IGxhc3QgY2hpbGQgZWxlbWVudFxyXG4gICAgICBzZWxlY3RCb3gubGFzdENoaWxkLnNlbGVjdGVkID0gJ3NlbGVjdGVkJztcclxuICAgICAgc2VsZWN0aW9uQ2hhbmdlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3QgYm94IHNpemVcclxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCBzZWxlY3RCb3gub3B0aW9ucy5sZW5ndGgpO1xyXG5cclxuICAgICAgdGhpcy5fX2FjdGlvbiA9IHtcclxuICAgICAgICBpZDogQ1JFQVRFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTixcclxuICAgICAgICB2YWx1ZTogZ2VuZXJhdGVkSWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBnZXRTZWxlY3RlZChub2RlLCBpZCk7XHJcblxyXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcclxuICAgICAgc2VsZWN0Qm94LnJlbW92ZUNoaWxkKHNlbGVjdEJveC5vcHRpb25zW3NlbGVjdGlvbi5pZHhdKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3QgYm94IHNpemVcclxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCBzZWxlY3RCb3gub3B0aW9ucy5sZW5ndGgpO1xyXG5cclxuICAgICAgdGhpcy5fX2FjdGlvbiA9IHtcclxuICAgICAgICBpZDogUkVNT1ZFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTixcclxuICAgICAgICB2YWx1ZTogc2VsZWN0aW9uLnZhbHVlLFxyXG4gICAgICAgIGlkeDogc2VsZWN0aW9uLmlkeFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGVFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgcmV0dXJuICFoaWRlRWxlbWVudHMoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkaXNhYmxlUmVtb3ZlOiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICByZXR1cm4gKGdldFNlbGVjdGVkKGVudHJ5Tm9kZSwgaWQpIHx8IHt9KS5pZHggPCAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZWxlY3RFbGVtZW50OiBzZWxlY3Rpb25DaGFuZ2VkXHJcbiAgfTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRJbXBsZW1lbnRhdGlvblR5cGUgPSBvcHRpb25zLmdldEltcGxlbWVudGF0aW9uVHlwZSxcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICBmdW5jdGlvbiBpc0V4dGVybmFsKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgPT09ICdleHRlcm5hbCc7XHJcbiAgfVxyXG5cclxuICB2YXIgdG9waWNFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdleHRlcm5hbFRvcGljJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RvcGljJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZXh0ZXJuYWxUb3BpYycsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4geyBleHRlcm5hbFRvcGljOiBiby5nZXQoJ2FjdGl2aXRpOnRvcGljJykgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6dG9waWMnOiB2YWx1ZXMuZXh0ZXJuYWxUb3BpY1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICByZXR1cm4gaXNFeHRlcm5hbChlbGVtZW50KSAmJiAhdmFsdWVzLmV4dGVybmFsVG9waWMgPyB7IGV4dGVybmFsVG9waWM6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzRXh0ZXJuYWwoZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyB0b3BpY0VudHJ5IF07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGV4dGVybmFsVGFza1ByaW9yaXR5RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnZXh0ZXJuYWxUYXNrUHJpb3JpdHknLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFzayBQcmlvcml0eScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3Rhc2tQcmlvcml0eScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRhc2tQcmlvcml0eTogYm8uZ2V0KCdhY3Rpdml0aTp0YXNrUHJpb3JpdHknKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywge1xyXG4gICAgICAgICdhY3Rpdml0aTp0YXNrUHJpb3JpdHknOiB2YWx1ZXMudGFza1ByaW9yaXR5IHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIGV4dGVybmFsVGFza1ByaW9yaXR5RW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBleHRlbnNpb25FbGVtZW50c0hlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxyXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbnZhciBNb2RlbFV0aWwgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxuXHJcbnZhciBERUZBVUxUX1BST1BTID0ge1xyXG4gICdzdHJpbmdWYWx1ZSc6IHVuZGVmaW5lZCxcclxuICAnc3RyaW5nJzogdW5kZWZpbmVkLFxyXG4gICdleHByZXNzaW9uJzogdW5kZWZpbmVkXHJcbn07XHJcblxyXG52YXIgQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQgPSAnYWN0aXZpdGk6RmllbGQnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlLCBvcHRpb25zKSB7XHJcblxyXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICB2YXIgaW5zaWRlTGlzdGVuZXIgPSAhIW9wdGlvbnMuaW5zaWRlTGlzdGVuZXIsXHJcbiAgICAgIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJyxcclxuICAgICAgZ2V0U2VsZWN0ZWRMaXN0ZW5lciA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRMaXN0ZW5lcixcclxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmJ1c2luZXNzT2JqZWN0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZW50cmllcyA9IFtdO1xyXG5cclxuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGVkID0gZmllbGRFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlLnBhcmVudE5vZGUpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZC5pZHggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZmllbGRzID0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkc1tzZWxlY3RlZC5pZHhdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgaWYgKCFpbnNpZGVMaXN0ZW5lcikge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ICYmXHJcbiAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYnVzaW5lc3NPYmplY3QsIEFDVElWSVRJX0ZJRUxEX0VYVEVOU0lPTl9FTEVNRU5UKVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdldEFjdGl2aXRpTGlzdGVuZXJGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRBY3Rpdml0aUxpc3RlbmVyRmllbGRzKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBzZWxlY3RlZExpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgIHJldHVybiBzZWxlY3RlZExpc3RlbmVyICYmIHNlbGVjdGVkTGlzdGVuZXIuZmllbGRzIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RmllbGRUeXBlKGJvKSB7XHJcbiAgICB2YXIgZmllbGRUeXBlID0gJ3N0cmluZyc7XHJcblxyXG4gICAgdmFyIGV4cHJlc3Npb25WYWx1ZSA9IGJvICYmIGJvLmV4cHJlc3Npb247XHJcbiAgICB2YXIgc3RyaW5nVmFsdWUgPSBibyAmJiAoYm8uc3RyaW5nIHx8IGJvLnN0cmluZ1ZhbHVlKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHN0cmluZ1ZhbHVlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBmaWVsZFR5cGUgPSAnc3RyaW5nJztcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cHJlc3Npb25WYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgZmllbGRUeXBlID0gJ2V4cHJlc3Npb24nO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWVsZFR5cGU7XHJcbiAgfVxyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG9wdGlvbiwgcHJvcGVydHksIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGFjdGl2aXRpRmllbGRzID0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBmaWVsZCA9IGFjdGl2aXRpRmllbGRzW2lkeF07XHJcblxyXG4gICAgICB2YWx1ZSA9IChmaWVsZC5uYW1lKSA/IGZpZWxkLm5hbWUgOiAnPGVtcHR5Pic7XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSBpZHggKyAnIDogJyArIHZhbHVlO1xyXG5cclxuICAgICAgb3B0aW9uLnRleHQgPSBsYWJlbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIG5ld0VsZW1lbnQgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIG5vZGUpIHtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICBzdHJpbmc6ICcnXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgbmV3RmllbGRFbGVtO1xyXG5cclxuICAgICAgaWYgKCFpbnNpZGVMaXN0ZW5lcikge1xyXG5cclxuICAgICAgICBuZXdGaWVsZEVsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQsIHByb3BzLCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgIHJldHVybiBjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIG5ld0ZpZWxkRWxlbSBdKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZExpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgICBuZXdGaWVsZEVsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQsIHByb3BzLCBzZWxlY3RlZExpc3RlbmVyLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBzZWxlY3RlZExpc3RlbmVyLCAnZmllbGRzJywgWyBuZXdGaWVsZEVsZW0gXSk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSwgaWR4LCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpdml0aUZpZWxkcz0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBmaWVsZCA9IGFjdGl2aXRpRmllbGRzW2lkeF07XHJcbiAgICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAgIGlmICghaW5zaWRlTGlzdGVuZXIpIHtcclxuICAgICAgICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShidXNpbmVzc09iamVjdCwgZWxlbWVudCwgZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZWN0ZWRMaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIHNlbGVjdGVkTGlzdGVuZXIsICdmaWVsZHMnLCBudWxsLCBbIGZpZWxkIF0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICB2YXIgZmllbGRFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkIDogaWRQcmVmaXggKyAnZmllbGRzJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdGaWVsZHMnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdmaWVsZE5hbWUnLFxyXG4gICAgaWRHZW5lcmF0aW9uOiAnZmFsc2UnLFxyXG5cclxuICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuXHJcbiAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KCksXHJcbiAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KCksXHJcblxyXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldEFjdGl2aXRpRmllbGRzKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKClcclxuXHJcbiAgfSk7XHJcbiAgZW50cmllcy5wdXNoKGZpZWxkRW50cnkpO1xyXG5cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2ZpZWxkLW5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTmFtZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2ZpZWxkTmFtZScsXHJcblxyXG4gICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIChnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS5uYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZpZWxkID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBzZWxlY3RlZEZpZWxkLCB7IG5hbWUgOiB2YWx1ZXMuZmllbGROYW1lIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xyXG4gICAgICBpZiAoYm8pIHtcclxuICAgICAgICB2YXIgbmFtZVZhbHVlID0gdmFsdWVzLmZpZWxkTmFtZTtcclxuXHJcbiAgICAgICAgaWYgKG5hbWVWYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHV0aWxzLmNvbnRhaW5zU3BhY2UobmFtZVZhbHVlKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkTmFtZSA9IHRyYW5zbGF0ZSgnTmFtZSBtdXN0IG5vdCBjb250YWluIHNwYWNlcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkTmFtZSA9IHRyYW5zbGF0ZSgnUGFyYW1ldGVyIG11c3QgaGF2ZSBhIG5hbWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIHZhciBmaWVsZFR5cGVPcHRpb25zID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ1N0cmluZycpLFxyXG4gICAgICB2YWx1ZTogJ3N0cmluZydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpLFxyXG4gICAgICB2YWx1ZTogJ2V4cHJlc3Npb24nXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2ZpZWxkLXR5cGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogZmllbGRUeXBlT3B0aW9ucyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdmaWVsZFR5cGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZShibyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpZWxkVHlwZTogZmllbGRUeXBlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgREVGQVVMVF9QUk9QUyk7XHJcblxyXG4gICAgICB2YXIgZmllbGRUeXBlID0gdmFsdWVzLmZpZWxkVHlwZTtcclxuXHJcbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcHJvcHMuc3RyaW5nID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZmllbGRUeXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wcy5leHByZXNzaW9uID0gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKSwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRCb3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2ZpZWxkLXZhbHVlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhbHVlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZmllbGRWYWx1ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBmaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGUoYm8pO1xyXG5cclxuICAgICAgdmFyIGZpZWxkVmFsdWU7XHJcblxyXG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGZpZWxkVmFsdWUgPSBibyAmJiAoYm8uc3RyaW5nIHx8IGJvLnN0cmluZ1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChmaWVsZFR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgIGZpZWxkVmFsdWUgPSBibyAmJiBiby5leHByZXNzaW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpZWxkVmFsdWU6IGZpZWxkVmFsdWVcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZShibyk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUFJPUFMpO1xyXG5cclxuICAgICAgdmFyIGZpZWxkVmFsdWUgPSB2YWx1ZXMuZmllbGRWYWx1ZSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHByb3BzLnN0cmluZyA9IGZpZWxkVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZmllbGRUeXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wcy5leHByZXNzaW9uID0gZmllbGRWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHZhbGlkYXRpb24gPSB7fTtcclxuICAgICAgaWYgKGJvKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZXMuZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5maWVsZFZhbHVlID0gdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkYXRpb247XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGhpc3RvcnlUaW1lVG9MaXZlRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnaGlzdG9yeVRpbWVUb0xpdmUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSGlzdG9yeSBUaW1lIFRvIExpdmUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdoaXN0b3J5VGltZVRvTGl2ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgaGlzdG9yeVRpbWVUb0xpdmUgPSBiby5nZXQoJ2FjdGl2aXRpOmhpc3RvcnlUaW1lVG9MaXZlJyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhpc3RvcnlUaW1lVG9MaXZlOiBoaXN0b3J5VGltZVRvTGl2ZSA/IGhpc3RvcnlUaW1lVG9MaXZlIDogJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6aGlzdG9yeVRpbWVUb0xpdmUnOiB2YWx1ZXMuaGlzdG9yeVRpbWVUb0xpdmUgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgaGlzdG9yeVRpbWVUb0xpdmVFbnRyeSBdO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcbnZhciBtYXAgPSByZXF1aXJlKCdsb2Rhc2gvbWFwJyk7XHJcblxyXG52YXIgREVGQVVMVF9ERUxFR0FURV9QUk9QUyA9IFsgJ2NsYXNzJywgJ2V4cHJlc3Npb24nLCAnZGVsZWdhdGVFeHByZXNzaW9uJyBdO1xyXG5cclxudmFyIERFTEVHQVRFX1BST1BTID0ge1xyXG4gICdhY3Rpdml0aTpjbGFzcyc6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6ZXhwcmVzc2lvbic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6ZGVsZWdhdGVFeHByZXNzaW9uJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpyZXN1bHRWYXJpYWJsZSc6IHVuZGVmaW5lZFxyXG59O1xyXG5cclxudmFyIERNTl9DQVBBQkxFX1BST1BTID0ge1xyXG4gICdhY3Rpdml0aTpkZWNpc2lvblJlZic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6ZGVjaXNpb25SZWZCaW5kaW5nJzogJ2xhdGVzdCcsXHJcbiAgJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVmVyc2lvbic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6bWFwRGVjaXNpb25SZXN1bHQnOiAncmVzdWx0TGlzdCcsXHJcbiAgJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVGVuYW50SWQnOiB1bmRlZmluZWRcclxufTtcclxuXHJcblxyXG52YXIgRVhURVJOQUxfQ0FQQUJMRV9QUk9QUyA9IHtcclxuICAnYWN0aXZpdGk6dHlwZSc6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6dG9waWMnOiB1bmRlZmluZWRcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgREVGQVVMVF9PUFRJT05TID0gW1xyXG4gICAgeyB2YWx1ZTogJ2NsYXNzJywgbmFtZTogdHJhbnNsYXRlKCdKYXZhIENsYXNzJykgfSxcclxuICAgIHsgdmFsdWU6ICdleHByZXNzaW9uJywgbmFtZTogdHJhbnNsYXRlKCdFeHByZXNzaW9uJykgfSxcclxuICAgIHsgdmFsdWU6ICdkZWxlZ2F0ZUV4cHJlc3Npb24nLCBuYW1lOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIERNTl9PUFRJT04gPSBbXHJcbiAgICB7IHZhbHVlOiAnZG1uJywgbmFtZTogdHJhbnNsYXRlKCdETU4nKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIEVYVEVSTkFMX09QVElPTiA9IFtcclxuICAgIHsgdmFsdWU6ICdleHRlcm5hbCcsIG5hbWU6IHRyYW5zbGF0ZSgnRXh0ZXJuYWwnKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIENPTk5FQ1RPUl9PUFRJT04gPSBbXHJcbiAgICB7IHZhbHVlOiAnY29ubmVjdG9yJywgbmFtZTogdHJhbnNsYXRlKCdDb25uZWN0b3InKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIFNDUklQVF9PUFRJT04gPSBbXHJcbiAgICB7IHZhbHVlOiAnc2NyaXB0JywgbmFtZTogdHJhbnNsYXRlKCdTY3JpcHQnKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIGdldFR5cGUgPSBvcHRpb25zLmdldEltcGxlbWVudGF0aW9uVHlwZSxcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgaGFzRG1uU3VwcG9ydCA9IG9wdGlvbnMuaGFzRG1uU3VwcG9ydCxcclxuICAgICAgaGFzRXh0ZXJuYWxTdXBwb3J0ID0gb3B0aW9ucy5oYXNFeHRlcm5hbFN1cHBvcnQsXHJcbiAgICAgIGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQgPSBvcHRpb25zLmhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQsXHJcbiAgICAgIGhhc1NjcmlwdFN1cHBvcnQgPSBvcHRpb25zLmhhc1NjcmlwdFN1cHBvcnQ7XHJcblxyXG4gIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gIHZhciBzZWxlY3RPcHRpb25zID0gREVGQVVMVF9PUFRJT05TLmNvbmNhdChbXSk7XHJcblxyXG4gIGlmIChoYXNEbW5TdXBwb3J0KSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoRE1OX09QVElPTik7XHJcbiAgfVxyXG5cclxuICBpZiAoaGFzRXh0ZXJuYWxTdXBwb3J0KSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoRVhURVJOQUxfT1BUSU9OKTtcclxuICB9XHJcblxyXG4gIGlmIChoYXNTZXJ2aWNlVGFza0xpa2VTdXBwb3J0KSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoQ09OTkVDVE9SX09QVElPTik7XHJcbiAgfVxyXG5cclxuICBpZiAoaGFzU2NyaXB0U3VwcG9ydCkge1xyXG4gICAgc2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KFNDUklQVF9PUFRJT04pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0T3B0aW9ucy5wdXNoKHsgdmFsdWU6ICcnIH0pO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZCA6ICdpbXBsZW1lbnRhdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbXBsZW1lbnRhdGlvbicpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogc2VsZWN0T3B0aW9ucyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdpbXBsVHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaW1wbFR5cGU6IGdldFR5cGUoZWxlbWVudCkgfHwgJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBvbGRUeXBlID0gZ2V0VHlwZShlbGVtZW50KTtcclxuICAgICAgdmFyIG5ld1R5cGUgPSB2YWx1ZXMuaW1wbFR5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIERFTEVHQVRFX1BST1BTKTtcclxuXHJcbiAgICAgIGlmIChERUZBVUxUX0RFTEVHQVRFX1BST1BTLmluZGV4T2YobmV3VHlwZSkgIT09IC0xKSB7XHJcblxyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChERUZBVUxUX0RFTEVHQVRFX1BST1BTLmluZGV4T2Yob2xkVHlwZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9IGJvLmdldCgnYWN0aXZpdGk6JyArIG9sZFR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6JyArIG5ld1R5cGVdID0gbmV3VmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChoYXNEbW5TdXBwb3J0KSB7XHJcbiAgICAgICAgcHJvcHMgPSBhc3NpZ24ocHJvcHMsIERNTl9DQVBBQkxFX1BST1BTKTtcclxuICAgICAgICBpZiAobmV3VHlwZSA9PT0gJ2RtbicpIHtcclxuICAgICAgICAgIHByb3BzWydhY3Rpdml0aTpkZWNpc2lvblJlZiddID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaGFzRXh0ZXJuYWxTdXBwb3J0KSB7XHJcbiAgICAgICAgcHJvcHMgPSBhc3NpZ24ocHJvcHMsIEVYVEVSTkFMX0NBUEFCTEVfUFJPUFMpO1xyXG4gICAgICAgIGlmIChuZXdUeXBlID09PSAnZXh0ZXJuYWwnKSB7XHJcbiAgICAgICAgICBwcm9wc1snYWN0aXZpdGk6dHlwZSddID0gJ2V4dGVybmFsJztcclxuICAgICAgICAgIHByb3BzWydhY3Rpdml0aTp0b3BpYyddID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaGFzU2NyaXB0U3VwcG9ydCkge1xyXG4gICAgICAgIHByb3BzWydhY3Rpdml0aTpzY3JpcHQnXSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKG5ld1R5cGUgPT09ICdzY3JpcHQnKSB7XHJcbiAgICAgICAgICBwcm9wc1snYWN0aXZpdGk6c2NyaXB0J10gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlNjcmlwdCcsIHt9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wcykpO1xyXG5cclxuICAgICAgaWYgKGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQpIHtcclxuICAgICAgICB2YXIgY29ubmVjdG9ycyA9IGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzKGJvLCAnYWN0aXZpdGk6Q29ubmVjdG9yJyk7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChtYXAoY29ubmVjdG9ycywgZnVuY3Rpb24oY29ubmVjdG9yKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYm8sIGVsZW1lbnQsIGNvbm5lY3Rvcik7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAobmV3VHlwZSA9PT0gJ2Nvbm5lY3RvcicpIHtcclxuICAgICAgICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuICAgICAgICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7IHZhbHVlczogW10gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBjb25uZWN0b3IgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOkNvbm5lY3RvcicsIHt9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgICBbIGNvbm5lY3RvciBdLFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICAgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcblxyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcclxuICAgIGlucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0SW5wdXRPdXRwdXQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29ubmVjdG9yKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRJbnB1dFBhcmFtZXRlcnMoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldElucHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5nZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldElucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldElucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIGlkeCk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHBhcmVudCwgZmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSW5wdXRPdXRwdXQocGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpJbnB1dE91dHB1dCcsIHBhcmVudCwgYnBtbkZhY3RvcnksIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQYXJhbWV0ZXIodHlwZSwgcGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KHR5cGUsIHBhcmVudCwgYnBtbkZhY3RvcnksIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZW5zdXJlSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmlzSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5zdXJlT3V0cGFyYW1ldGVyU3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5hcmVPdXRwdXRQYXJhbWV0ZXJzU3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgVFlQRV9MQUJFTCA9IHtcclxuICAgICdhY3Rpdml0aTpNYXAnOiB0cmFuc2xhdGUoJ01hcCcpLFxyXG4gICAgJ2FjdGl2aXRpOkxpc3QnOiB0cmFuc2xhdGUoJ0xpc3QnKSxcclxuICAgICdhY3Rpdml0aTpTY3JpcHQnOiB0cmFuc2xhdGUoJ1NjcmlwdCcpXHJcbiAgfTtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHZhciBpbnNpZGVDb25uZWN0b3IgPSAhIW9wdGlvbnMuaW5zaWRlQ29ubmVjdG9yLFxyXG4gICAgICBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJyc7XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBzZWxlY3Rpb24gPSAoaW5wdXRFbnRyeSAmJiBpbnB1dEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpKSB8fCB7IGlkeDogLTEgfTtcclxuXHJcbiAgICB2YXIgcGFyYW1ldGVyID0gZ2V0SW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBzZWxlY3Rpb24uaWR4KTtcclxuICAgIGlmICghcGFyYW1ldGVyICYmIG91dHB1dEVudHJ5KSB7XHJcbiAgICAgIHNlbGVjdGlvbiA9IG91dHB1dEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICBwYXJhbWV0ZXIgPSBnZXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBzZWxlY3Rpb24uaWR4KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbWV0ZXI7XHJcbiAgfTtcclxuXHJcbiAgdmFyIHJlc3VsdCA9IHtcclxuICAgIGdldFNlbGVjdGVkUGFyYW1ldGVyOiBnZXRTZWxlY3RlZFxyXG4gIH07XHJcblxyXG4gIHZhciBlbnRyaWVzID0gcmVzdWx0LmVudHJpZXMgPSBbXTtcclxuXHJcbiAgaWYgKCFlbnN1cmVJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50KSkge1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHZhciBuZXdFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwgcHJvcCwgZmFjdG9yeSkge1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUpIHtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICB2YXIgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gICAgICBpZiAoIWlucHV0T3V0cHV0KSB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9ICFpbnNpZGVDb25uZWN0b3IgPyBleHRlbnNpb25FbGVtZW50cyA6IGdldENvbm5lY3RvcihlbGVtZW50KTtcclxuICAgICAgICBpbnB1dE91dHB1dCA9IGNyZWF0ZUlucHV0T3V0cHV0KHBhcmVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgICAgIGlucHV0UGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgICBvdXRwdXRQYXJhbWV0ZXJzOiBbXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWluc2lkZUNvbm5lY3Rvcikge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgICBbIGlucHV0T3V0cHV0IF0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcGFyZW50LCB7IGlucHV0T3V0cHV0OiBpbnB1dE91dHB1dCB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbmV3RWxlbSA9IGNyZWF0ZVBhcmFtZXRlcih0eXBlLCBpbnB1dE91dHB1dCwgYnBtbkZhY3RvcnksIHsgbmFtZTogdmFsdWUgfSk7XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGlucHV0T3V0cHV0LCBwcm9wLCBbIG5ld0VsZW0gXSkpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKGdldHRlciwgcHJvcCwgb3RoZXJQcm9wKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGlucHV0T3V0cHV0ID0gZ2V0SW5wdXRPdXRwdXQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxuICAgICAgdmFyIHBhcmFtZXRlciA9IGdldHRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIGlkeCk7XHJcblxyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBpbnB1dE91dHB1dCwgcHJvcCwgbnVsbCwgWyBwYXJhbWV0ZXIgXSkpO1xyXG5cclxuICAgICAgdmFyIGZpcnN0TGVuZ3RoID0gaW5wdXRPdXRwdXQuZ2V0KHByb3ApLmxlbmd0aC0xO1xyXG4gICAgICB2YXIgc2Vjb25kTGVuZ3RoID0gKGlucHV0T3V0cHV0LmdldChvdGhlclByb3ApIHx8IFtdKS5sZW5ndGg7XHJcblxyXG4gICAgICBpZiAoIWZpcnN0TGVuZ3RoICYmICFzZWNvbmRMZW5ndGgpIHtcclxuXHJcbiAgICAgICAgaWYgKCFpbnNpZGVDb25uZWN0b3IpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGVsZW1lbnQsIGlucHV0T3V0cHV0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IoZWxlbWVudCk7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb25uZWN0b3IsIHsgaW5wdXRPdXRwdXQ6IHVuZGVmaW5lZCB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKGdldHRlcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG9wdGlvbiwgcHJvcGVydHksIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIHBhcmFtZXRlciA9IGdldHRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIGlkeCk7XHJcblxyXG4gICAgICB2YXIgc3VmZml4ID0gJ1RleHQnO1xyXG5cclxuICAgICAgdmFyIGRlZmluaXRpb24gPSBwYXJhbWV0ZXIuZ2V0KCdkZWZpbml0aW9uJyk7XHJcbiAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB2YXIgdHlwZSA9IGRlZmluaXRpb24uJHR5cGU7XHJcbiAgICAgICAgc3VmZml4ID0gVFlQRV9MQUJFTFt0eXBlXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgb3B0aW9uLnRleHQgPSAodmFsdWUgfHwgJycpICsgJyA6ICcgKyBzdWZmaXg7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBpbnB1dCBwYXJhbWV0ZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICB2YXIgaW5wdXRFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiBpZFByZWZpeCArICdpbnB1dHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW5wdXQgUGFyYW1ldGVycycpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgcHJlZml4OiAnSW5wdXQnLFxyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG5cclxuICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoJ2FjdGl2aXRpOklucHV0UGFyYW1ldGVyJywgJ2lucHV0UGFyYW1ldGVycycpLFxyXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChnZXRJbnB1dFBhcmFtZXRlciwgJ2lucHV0UGFyYW1ldGVycycsICdvdXRwdXRQYXJhbWV0ZXJzJyksXHJcblxyXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XHJcbiAgICAgIG91dHB1dEVudHJ5ICYmIG91dHB1dEVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKGdldElucHV0UGFyYW1ldGVyKVxyXG5cclxuICB9KTtcclxuICBlbnRyaWVzLnB1c2goaW5wdXRFbnRyeSk7XHJcblxyXG5cclxuICAvLyBvdXRwdXQgcGFyYW1ldGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGlmIChlbnN1cmVPdXRwYXJhbWV0ZXJTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSkge1xyXG4gICAgdmFyIG91dHB1dEVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICBpZDogaWRQcmVmaXggKyAnb3V0cHV0cycsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dHB1dCBQYXJhbWV0ZXJzJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgICAgcHJlZml4OiAnT3V0cHV0JyxcclxuICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG5cclxuICAgICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudCgnYWN0aXZpdGk6T3V0cHV0UGFyYW1ldGVyJywgJ291dHB1dFBhcmFtZXRlcnMnKSxcclxuICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChnZXRPdXRwdXRQYXJhbWV0ZXIsICdvdXRwdXRQYXJhbWV0ZXJzJywgJ2lucHV0UGFyYW1ldGVycycpLFxyXG5cclxuICAgICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZ2V0T3V0cHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgICAgIGlucHV0RW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKGdldE91dHB1dFBhcmFtZXRlcilcclxuXHJcbiAgICB9KTtcclxuICAgIGVudHJpZXMucHVzaChvdXRwdXRFbnRyeSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcclxuXHJcbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGlucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIHNjcmlwdEltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9TY3JpcHQnKTtcclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHBhcmVudCwgZmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY3JpcHQoZWxlbSkge1xyXG4gIHJldHVybiBpcyhlbGVtLCAnYWN0aXZpdGk6U2NyaXB0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGlzdChlbGVtKSB7XHJcbiAgcmV0dXJuIGlzKGVsZW0sICdhY3Rpdml0aTpMaXN0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTWFwKGVsZW0pIHtcclxuICByZXR1cm4gaXMoZWxlbSwgJ2FjdGl2aXRpOk1hcCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuaXNJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIHR5cGVJbmZvID0ge1xyXG4gICAgJ2FjdGl2aXRpOk1hcCc6IHtcclxuICAgICAgdmFsdWU6ICdtYXAnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdNYXAnKVxyXG4gICAgfSxcclxuICAgICdhY3Rpdml0aTpMaXN0Jzoge1xyXG4gICAgICB2YWx1ZTogJ2xpc3QnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0JylcclxuICAgIH0sXHJcbiAgICAnYWN0aXZpdGk6U2NyaXB0Jzoge1xyXG4gICAgICB2YWx1ZTogJ3NjcmlwdCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NjcmlwdCcpXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHZhciBpbnNpZGVDb25uZWN0b3IgPSAhIW9wdGlvbnMuaW5zaWRlQ29ubmVjdG9yLFxyXG4gICAgICBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJyc7XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZCA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRQYXJhbWV0ZXI7XHJcblxyXG4gIGlmICghZW5zdXJlSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgdmFyIGVudHJpZXMgPSBbXTtcclxuXHJcbiAgdmFyIGlzU2VsZWN0ZWQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciBuYW1lIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkKHtcclxuICAgIGlkOiBpZFByZWZpeCArICdwYXJhbWV0ZXJOYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuXHJcbiAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gKGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS5uYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJhbSA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmFtLCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHZhbGlkYXRpb24gPSB7fTtcclxuICAgICAgaWYgKGJvKSB7XHJcbiAgICAgICAgdmFyIG5hbWVWYWx1ZSA9IHZhbHVlcy5uYW1lO1xyXG5cclxuICAgICAgICBpZiAobmFtZVZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAodXRpbHMuY29udGFpbnNTcGFjZShuYW1lVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24ubmFtZSA9IHRyYW5zbGF0ZSgnTmFtZSBtdXN0IG5vdCBjb250YWluIHNwYWNlcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLm5hbWUgPSB0cmFuc2xhdGUoJ1BhcmFtZXRlciBtdXN0IGhhdmUgYSBuYW1lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICAvLyBwYXJhbWV0ZXIgdHlwZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgdmFyIHNlbGVjdE9wdGlvbnMgPSBbXHJcbiAgICB7IHZhbHVlOiAndGV4dCcsIG5hbWU6IHRyYW5zbGF0ZSgnVGV4dCcpIH0sXHJcbiAgICB7IHZhbHVlOiAnc2NyaXB0JywgbmFtZTogdHJhbnNsYXRlKCdTY3JpcHQnKSB9LFxyXG4gICAgeyB2YWx1ZTogJ2xpc3QnLCBuYW1lOiB0cmFuc2xhdGUoJ0xpc3QnKSB9LFxyXG4gICAgeyB2YWx1ZTogJ21hcCcsIG5hbWU6IHRyYW5zbGF0ZSgnTWFwJykgfVxyXG4gIF07XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkIDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3BhcmFtZXRlclR5cGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciBwYXJhbWV0ZXJUeXBlID0gJ3RleHQnO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBibyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB2YXIgZGVmaW5pdGlvbiA9IGJvLmdldCgnZGVmaW5pdGlvbicpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgIHZhciB0eXBlID0gZGVmaW5pdGlvbi4kdHlwZTtcclxuICAgICAgICAgIHBhcmFtZXRlclR5cGUgPSB0eXBlSW5mb1t0eXBlXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFyYW1ldGVyVHlwZTogcGFyYW1ldGVyVHlwZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZGVmaW5pdGlvbjogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgY3JlYXRlUGFyYW1ldGVyVHlwZUVsZW0gPSBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodHlwZSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBwYXJhbWV0ZXJUeXBlID0gdmFsdWVzLnBhcmFtZXRlclR5cGU7XHJcblxyXG4gICAgICBpZiAocGFyYW1ldGVyVHlwZSA9PT0gJ3NjcmlwdCcpIHtcclxuICAgICAgICBwcm9wZXJ0aWVzLmRlZmluaXRpb24gPSBjcmVhdGVQYXJhbWV0ZXJUeXBlRWxlbSgnYWN0aXZpdGk6U2NyaXB0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocGFyYW1ldGVyVHlwZSA9PT0gJ2xpc3QnKSB7XHJcbiAgICAgICAgcHJvcGVydGllcy5kZWZpbml0aW9uID0gY3JlYXRlUGFyYW1ldGVyVHlwZUVsZW0oJ2FjdGl2aXRpOkxpc3QnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYXJhbWV0ZXJUeXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIHByb3BlcnRpZXMuZGVmaW5pdGlvbiA9IGNyZWF0ZVBhcmFtZXRlclR5cGVFbGVtKCdhY3Rpdml0aTpNYXAnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcGVydGllcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IHRleHQpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0Qm94KHtcclxuICAgIGlkIDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZS10ZXh0JyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdWYWx1ZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3ZhbHVlJyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHZhbHVlOiAoZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge30pLnZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJhbSA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YWx1ZXMudmFsdWUgPSB2YWx1ZXMudmFsdWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmFtLCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgIWJvLmRlZmluaXRpb247XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IHNjcmlwdCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHZhciBzY3JpcHQgPSBzY3JpcHRJbXBsZW1lbnRhdGlvbignc2NyaXB0Rm9ybWF0JywgJ3ZhbHVlJywgdHJ1ZSwgdHJhbnNsYXRlKTtcclxuICBlbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ3BhcmFtZXRlclR5cGUtc2NyaXB0JyxcclxuICAgIGh0bWw6ICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXHJcbiAgICAgICAgICAgIHNjcmlwdC50ZW1wbGF0ZSArXHJcbiAgICAgICAgICAnPC9kaXY+JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGJvICYmIGlzU2NyaXB0KGJvLmRlZmluaXRpb24pID8gc2NyaXB0LmdldChlbGVtZW50LCBiby5kZWZpbml0aW9uKSA6IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIHVwZGF0ZSA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgaXNTY3JpcHQoYm8uZGVmaW5pdGlvbikgPyBzY3JpcHQudmFsaWRhdGUoZWxlbWVudCwgYm8uZGVmaW5pdGlvbikgOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaXNTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBibyAmJiBpc1NjcmlwdChiby5kZWZpbml0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2NyaXB0OiBzY3JpcHRcclxuXHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBwYXJhbWV0ZXIgdmFsdWUgKHR5cGUgPSBsaXN0KSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ3BhcmFtZXRlclR5cGUtbGlzdCcsXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ3ZhbHVlJyBdLFxyXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnVmFsdWUnKSBdLFxyXG4gICAgYWRkTGFiZWw6IHRyYW5zbGF0ZSgnQWRkIFZhbHVlJyksXHJcblxyXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICBpZiAoYm8gJiYgaXNMaXN0KGJvLmRlZmluaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGJvLmRlZmluaXRpb24uaXRlbXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBpdGVtID0gYm8uZGVmaW5pdGlvbi5pdGVtc1tpZHhdO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGl0ZW0sIHZhbHVlcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBuZXdWYWx1ZSA9IGNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlZhbHVlJywgYm8uZGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHsgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCAnaXRlbXMnLCBbIG5ld1ZhbHVlIF0pO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCAnaXRlbXMnLCBudWxsLCBbIGJvLmRlZmluaXRpb24uaXRlbXNbaWR4XSBdKTtcclxuICAgIH0sXHJcblxyXG4gICAgZWRpdGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIHByb3AsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGl0ZW0gPSBiby5kZWZpbml0aW9uLml0ZW1zW2lkeF07XHJcbiAgICAgIHJldHVybiAhaXNNYXAoaXRlbSkgJiYgIWlzTGlzdChpdGVtKSAmJiAhaXNTY3JpcHQoaXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldENvbnRyb2xWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBpdGVtID0gYm8uZGVmaW5pdGlvbi5pdGVtc1tpZHhdO1xyXG5cclxuICAgICAgaWYgKCFpc01hcChpdGVtKSAmJiAhaXNMaXN0KGl0ZW0pICYmICFpc1NjcmlwdChpdGVtKSkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSB0eXBlSW5mb1tpdGVtLiR0eXBlXS5sYWJlbDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgYm8uZGVmaW5pdGlvbiAmJiBpc0xpc3QoYm8uZGVmaW5pdGlvbik7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IG1hcCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRhYmxlKHtcclxuICAgIGlkOiBpZFByZWZpeCArICdwYXJhbWV0ZXJUeXBlLW1hcCcsXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2tleScsICd2YWx1ZScgXSxcclxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ0tleScpLCB0cmFuc2xhdGUoJ1ZhbHVlJykgXSxcclxuICAgIGFkZExhYmVsOiB0cmFuc2xhdGUoJ0FkZCBFbnRyeScpLFxyXG5cclxuICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgaWYgKGJvICYmIGlzTWFwKGJvLmRlZmluaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGJvLmRlZmluaXRpb24uZW50cmllcztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGVudHJ5ID0gYm8uZGVmaW5pdGlvbi5lbnRyaWVzW2lkeF07XHJcblxyXG4gICAgICBpZiAoaXNNYXAoZW50cnkuZGVmaW5pdGlvbikgfHwgaXNMaXN0KGVudHJ5LmRlZmluaXRpb24pIHx8IGlzU2NyaXB0KGVudHJ5LmRlZmluaXRpb24pKSB7XHJcbiAgICAgICAgdmFsdWVzID0ge1xyXG4gICAgICAgICAga2V5OiB2YWx1ZXMua2V5XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBlbnRyeSwgdmFsdWVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIG5ld0VudHJ5ID0gY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6RW50cnknLCBiby5kZWZpbml0aW9uLCBicG1uRmFjdG9yeSwgeyBrZXk6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCAnZW50cmllcycsIFsgbmV3RW50cnkgXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sICdlbnRyaWVzJywgbnVsbCwgWyBiby5kZWZpbml0aW9uLmVudHJpZXNbaWR4XSBdKTtcclxuICAgIH0sXHJcblxyXG4gICAgZWRpdGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIHByb3AsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGVudHJ5ID0gYm8uZGVmaW5pdGlvbi5lbnRyaWVzW2lkeF07XHJcbiAgICAgIHJldHVybiBwcm9wID09PSAna2V5JyB8fCAoIWlzTWFwKGVudHJ5LmRlZmluaXRpb24pICYmICFpc0xpc3QoZW50cnkuZGVmaW5pdGlvbikgJiYgIWlzU2NyaXB0KGVudHJ5LmRlZmluaXRpb24pKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGVudHJ5ID0gYm8uZGVmaW5pdGlvbi5lbnRyaWVzW2lkeF07XHJcblxyXG4gICAgICBpZiAocHJvcCA9PT0gJ2tleScgfHwgKCFpc01hcChlbnRyeS5kZWZpbml0aW9uKSAmJiAhaXNMaXN0KGVudHJ5LmRlZmluaXRpb24pICYmICFpc1NjcmlwdChlbnRyeS5kZWZpbml0aW9uKSkpIHtcclxuICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gdHlwZUluZm9bZW50cnkuZGVmaW5pdGlvbi4kdHlwZV0ubGFiZWw7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGJvICYmIGJvLmRlZmluaXRpb24gJiYgaXNNYXAoYm8uZGVmaW5pdGlvbik7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGpvYlByaW9yaXR5RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnam9iUHJpb3JpdHknLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSm9iIFByaW9yaXR5JyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnam9iUHJpb3JpdHknLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBqb2JQcmlvcml0eTogYm8uZ2V0KCdhY3Rpdml0aTpqb2JQcmlvcml0eScpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmpvYlByaW9yaXR5JzogdmFsdWVzLmpvYlByaW9yaXR5IHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIGpvYlByaW9yaXR5RW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBhc3luY0NhcGFibGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQXN5bmNDYXBhYmxlSGVscGVyJyk7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJvKSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQmVmb3JlKGJvKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJvKSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQWZ0ZXIoYm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibykge1xyXG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIuZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCkge1xyXG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIucmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyhwYXJlbnQsIGJwbW5GYWN0b3J5KSB7XHJcbiAgcmV0dXJuIGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUocGFyZW50LCBicG1uRmFjdG9yeSwgY3ljbGUpIHtcclxuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScsIHsgYm9keTogY3ljbGUgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgaWRQcmVmaXggPSBvcHRpb25zLmlkUHJlZml4IHx8ICcnLFxyXG4gICAgICBsYWJlbFByZWZpeCA9IG9wdGlvbnMubGFiZWxQcmVmaXggfHwgJyc7XHJcblxyXG4gIHZhciByZXRyeVRpbWVDeWNsZUVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAncmV0cnlUaW1lQ3ljbGUnLFxyXG4gICAgbGFiZWw6IGxhYmVsUHJlZml4ICsgdHJhbnNsYXRlKCdSZXRyeSBUaW1lIEN5Y2xlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY3ljbGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcmV0cnlUaW1lQ3ljbGUgPSBnZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHJldHJ5VGltZUN5Y2xlICYmIHJldHJ5VGltZUN5Y2xlLmdldCgnYm9keScpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGN5Y2xlOiB2YWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgbmV3Q3ljbGUgPSB2YWx1ZXMuY3ljbGU7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgaWYgKG5ld0N5Y2xlID09PSAnJyB8fCB0eXBlb2YgbmV3Q3ljbGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHJldHJ5IHRpbWUgY3ljbGUgZWxlbWVudChzKVxyXG4gICAgICAgIHJldHVybiByZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciByZXRyeVRpbWVDeWNsZSA9IGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKTtcclxuXHJcbiAgICAgIGlmICghcmV0cnlUaW1lQ3ljbGUpIHtcclxuICAgICAgICAvLyBhZGQgbmV3IHJldHJ5IHRpbWUgY3ljbGUgZWxlbWVudFxyXG4gICAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBiby5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcbiAgICAgICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyhibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHJ5VGltZUN5Y2xlID0gY3JlYXRlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5LCBuZXdDeWNsZSk7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgJ2V4dGVuc2lvbkVsZW1lbnRzJyxcclxuICAgICAgICAgIFsgcmV0cnlUaW1lQ3ljbGUgXSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIHJldHJ5IHRpbWUgY3ljbGUgZWxlbWVudFxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHJldHJ5VGltZUN5Y2xlLCB7IGJvZHk6IG5ld0N5Y2xlIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoYm8gJiYgKGlzQXN5bmNCZWZvcmUoYm8pIHx8IGlzQXN5bmNBZnRlcihibykpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSkge1xyXG4gICAgICAgIHJldHVybiAhZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIHJldHJ5VGltZUN5Y2xlRW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHMnKSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcnMoYm8sIHR5cGUpIHtcclxuICByZXR1cm4gYm8gJiYgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sIHR5cGUpIHx8IFtdO1xyXG59XHJcblxyXG52YXIgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQgPSAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInO1xyXG52YXIgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5UID0gJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcic7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIExJU1RFTkVSX1RZUEVfTEFCRUwgPSB7XHJcbiAgICBjbGFzczogdHJhbnNsYXRlKCdKYXZhIENsYXNzJyksXHJcbiAgICBleHByZXNzaW9uOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKSxcclxuICAgIGRlbGVnYXRlRXhwcmVzc2lvbjogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBFeHByZXNzaW9uJyksXHJcbiAgICBzY3JpcHQ6IHRyYW5zbGF0ZSgnU2NyaXB0JylcclxuICB9O1xyXG5cclxuICB2YXIgYm87XHJcblxyXG4gIHZhciByZXN1bHQgPSB7XHJcbiAgICBnZXRTZWxlY3RlZExpc3RlbmVyOiBnZXRTZWxlY3RlZExpc3RlbmVyXHJcbiAgfTtcclxuXHJcbiAgdmFyIGVudHJpZXMgPSByZXN1bHQuZW50cmllcyA9IFtdO1xyXG5cclxuICB2YXIgaXNTZXF1ZW5jZUZsb3cgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNTZXF1ZW5jZUZsb3coZWxlbWVudCk7XHJcblxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGlvbiA9IChleGVjdXRpb25MaXN0ZW5lckVudHJ5ICYmIGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkpIHx8IHsgaWR4OiAtMSB9O1xyXG5cclxuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVycyhibywgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQpW3NlbGVjdGlvbi5pZHhdO1xyXG4gICAgaWYgKCFsaXN0ZW5lciAmJiB0YXNrTGlzdGVuZXJFbnRyeSkge1xyXG4gICAgICBzZWxlY3Rpb24gPSB0YXNrTGlzdGVuZXJFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcnMoYm8sIEFDVElWSVRJX1RBU0tfTElTVEVORVJfRUxFTUVOVClbc2VsZWN0aW9uLmlkeF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGlzdGVuZXI7XHJcbiAgfVxyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnMoYm8sIHR5cGUpO1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaWR4XTtcclxuICAgICAgdmFyIGxpc3RlbmVyVHlwZSA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUobGlzdGVuZXIpO1xyXG5cclxuICAgICAgdmFyIGV2ZW50ID0gKGxpc3RlbmVyLmdldCgnZXZlbnQnKSkgPyBsaXN0ZW5lci5nZXQoJ2V2ZW50JykgOiAnPGVtcHR5Pic7XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSAoZXZlbnQgfHwgJyonKSArICcgOiAnICsgKExJU1RFTkVSX1RZUEVfTEFCRUxbbGlzdGVuZXJUeXBlXSB8fCAnJyk7XHJcblxyXG4gICAgICBvcHRpb24udGV4dCA9IGxhYmVsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgbmV3RWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGluaXRpYWxFdmVudCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgZXZlbnQ6IGluaXRpYWxFdmVudCxcclxuICAgICAgICBjbGFzczogJydcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBuZXdFbGVtID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFsgbmV3RWxlbSBdKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGxpc3RlbmVycyA9IGdldExpc3RlbmVycyhibywgdHlwZSk7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpZHhdO1xyXG4gICAgICBpZiAobGlzdGVuZXIpIHtcclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYm8sIGVsZW1lbnQsIGxpc3RlbmVyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuXHJcbiAgLy8gRXhlY3V0aW9uIExpc3RlbmVyXHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpGbG93RWxlbWVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucHJvY2Vzc1JlZjtcclxuICAgICAgYm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYm8pIHtcclxuXHJcbiAgICAgIHZhciBleGVjdXRpb25MaXN0ZW5lckVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICAgIGlkIDogJ2V4ZWN1dGlvbkxpc3RlbmVycycsXHJcbiAgICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0V4ZWN1dGlvbiBMaXN0ZW5lcicpLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgICAgICBpZEdlbmVyYXRpb246ICdmYWxzZScsXHJcbiAgICAgICAgcmVmZXJlbmNlOiAncHJvY2Vzc1JlZicsXHJcblxyXG4gICAgICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQsIChpc1NlcXVlbmNlRmxvdykgPyAndGFrZScgOiAnc3RhcnQnKSxcclxuICAgICAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKSxcclxuXHJcbiAgICAgICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcnMoYm8sIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XHJcbiAgICAgICAgICB0YXNrTGlzdGVuZXJFbnRyeSAmJiB0YXNrTGlzdGVuZXJFbnRyeS5kZXNlbGVjdChlbGVtZW50LCBub2RlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKVxyXG5cclxuICAgICAgfSk7XHJcbiAgICAgIGVudHJpZXMucHVzaChleGVjdXRpb25MaXN0ZW5lckVudHJ5KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gVGFzayBMaXN0ZW5lclxyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKSkge1xyXG4gICAgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICB2YXIgdGFza0xpc3RlbmVyRW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGlkIDogJ3Rhc2tMaXN0ZW5lcnMnLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnVGFzayBMaXN0ZW5lcicpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXHJcbiAgICAgIGlkR2VuZXJhdGlvbjogJ2ZhbHNlJyxcclxuXHJcbiAgICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5ULCAnY3JlYXRlJyksXHJcbiAgICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5UKSxcclxuXHJcbiAgICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGdldExpc3RlbmVycyhibywgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5UKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpIHtcclxuICAgICAgICBleGVjdXRpb25MaXN0ZW5lckVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2V0T3B0aW9uTGFiZWxWYWx1ZTogc2V0T3B0aW9uTGFiZWxWYWx1ZShBQ1RJVklUSV9UQVNLX0xJU1RFTkVSX0VMRU1FTlQpXHJcblxyXG4gICAgfSk7XHJcbiAgICBlbnRyaWVzLnB1c2godGFza0xpc3RlbmVyRW50cnkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xyXG5cclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGRvbUNsYXNzZXMgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xhc3NlcztcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHthbnl9IHRoZSBwcm9wZXJ0eSB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xyXG4gIHJldHVybiBsb29wQ2hhcmFjdGVyaXN0aWNzICYmIGxvb3BDaGFyYWN0ZXJpc3RpY3MuZ2V0KHByb3BlcnR5TmFtZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGJvZHkgb2YgYSBnaXZlbiBleHByZXNzaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gZXhwcmVzc2lvblxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBib2R5ICh2YWx1ZSkgb2YgdGhlIGV4cHJlc3Npb25cclxuICovXHJcbmZ1bmN0aW9uIGdldEJvZHkoZXhwcmVzc2lvbikge1xyXG4gIHJldHVybiBleHByZXNzaW9uICYmIGV4cHJlc3Npb24uZ2V0KCdib2R5Jyk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogR2V0IHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcyBvZiBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz59IHRoZSBsb29wIGNoYXJhY3RlcmlzdGljc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGJvLmxvb3BDaGFyYWN0ZXJpc3RpY3M7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGxvb3AgY2FyZGluYWxpdHkgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGxvb3AgY2FyZGluYWxpdHlcclxuICovXHJcbmZ1bmN0aW9uIGdldExvb3BDYXJkaW5hbGl0eShlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGdldFByb3BlcnR5KGVsZW1lbnQsICdsb29wQ2FyZGluYWxpdHknKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbG9vcCBjYXJkaW5hbGl0eSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgbG9vcCBjYXJkaW5hbGl0eSB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUoZWxlbWVudCkge1xyXG4gIHZhciBsb29wQ2FyZGluYWxpdHkgPSBnZXRMb29wQ2FyZGluYWxpdHkoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGdldEJvZHkobG9vcENhcmRpbmFsaXR5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgY29tcGxldGlvbiBjb25kaXRpb24gb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBsZXRpb24gY29uZGl0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2NvbXBsZXRpb25Db25kaXRpb24nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgY29tcGxldGlvbiBjb25kaXRpb24gdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGNvbXBsZXRpb24gY29uZGl0aW9uIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uVmFsdWUoZWxlbWVudCkge1xyXG4gIHZhciBjb21wbGV0aW9uQ29uZGl0aW9uID0gZ2V0Q29tcGxldGlvbkNvbmRpdGlvbihlbGVtZW50KTtcclxuICByZXR1cm4gZ2V0Qm9keShjb21wbGV0aW9uQ29uZGl0aW9uKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgJ2FjdGl2aXRpOmVsZW1lbnRWYXJpYWJsZScgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSAnYWN0aXZpdGk6ZWxlbWVudFZhcmlhYmxlJyB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0RWxlbWVudFZhcmlhYmxlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2FjdGl2aXRpOmVsZW1lbnRWYXJpYWJsZScpO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBwYXJlbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGJvZHlcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJlc3VsdCB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhIGZvcm1hbCBleHByZXNzaW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVGb3JtYWxFeHByZXNzaW9uKHBhcmVudCwgYm9keSwgYnBtbkZhY3RvcnkpIHtcclxuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7IGJvZHk6IGJvZHkgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVcGRhdGVzIGEgc3BlY2lmaWMgZm9ybWFsIGV4cHJlc3Npb24gb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcclxuICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVGb3JtYWxFeHByZXNzaW9uKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgbmV3VmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZXhwcmVzc2lvblByb3BzID0ge307XHJcblxyXG4gIGlmICghbmV3VmFsdWUpIHtcclxuICAgIC8vIHJlbW92ZSBmb3JtYWwgZXhwcmVzc2lvblxyXG4gICAgZXhwcmVzc2lvblByb3BzW3Byb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxvb3BDaGFyYWN0ZXJpc3RpY3MsIGV4cHJlc3Npb25Qcm9wcyk7XHJcbiAgfVxyXG5cclxuICB2YXIgZXhpc3RpbmdFeHByZXNzaW9uID0gbG9vcENoYXJhY3RlcmlzdGljcy5nZXQocHJvcGVydHlOYW1lKTtcclxuXHJcbiAgaWYgKCFleGlzdGluZ0V4cHJlc3Npb24pIHtcclxuICAgIC8vIGFkZCBmb3JtYWwgZXhwcmVzc2lvblxyXG4gICAgZXhwcmVzc2lvblByb3BzW3Byb3BlcnR5TmFtZV0gPSBjcmVhdGVGb3JtYWxFeHByZXNzaW9uKGxvb3BDaGFyYWN0ZXJpc3RpY3MsIG5ld1ZhbHVlLCBicG1uRmFjdG9yeSk7XHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxvb3BDaGFyYWN0ZXJpc3RpY3MsIGV4cHJlc3Npb25Qcm9wcyk7XHJcbiAgfVxyXG5cclxuICAvLyBlZGl0IGV4aXN0aW5nIGZvcm1hbCBleHByZXNzaW9uXHJcbiAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBleGlzdGluZ0V4cHJlc3Npb24sIHtcclxuICAgIGJvZHk6IG5ld1ZhbHVlXHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGVudHJpZXMgPSBbXTtcclxuXHJcbiAgLy8gZXJyb3IgbWVzc2FnZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWVycm9yTWVzc2FnZScsXHJcbiAgICBodG1sOiAnPGRpdiBkYXRhLXNob3c9XCJpc1ZhbGlkXCI+JyArXHJcbiAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJicHAtaWNvbi13YXJuaW5nXCI+PC9zcGFuPiAnICtcclxuICAgICAgICAgICAgIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgZWl0aGVyIGxvb3AgY2FyZGluYWxpdHkgb3IgY29sbGVjdGlvbicpKSArXHJcbiAgICAgICAgICAnPC9kaXY+JyxcclxuXHJcbiAgICBpc1ZhbGlkOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBub3RpZmljYXRpb24sIHNjb3BlKSB7XHJcbiAgICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcclxuXHJcbiAgICAgIHZhciBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgaWYgKGxvb3BDaGFyYWN0ZXJpc3RpY3MpIHtcclxuICAgICAgICB2YXIgbG9vcENhcmRpbmFsaXR5ID0gZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUoZWxlbWVudCk7XHJcbiAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpc1ZhbGlkID0gIWxvb3BDYXJkaW5hbGl0eSAmJiAhY29sbGVjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9tQ2xhc3Nlcyhub2RlKS50b2dnbGUoJ2JwcC1oaWRkZW4nLCAhaXNWYWxpZCk7XHJcbiAgICAgIGRvbUNsYXNzZXMobm90aWZpY2F0aW9uKS50b2dnbGUoJ2JwcC1lcnJvci1tZXNzYWdlJywgaXNWYWxpZCk7XHJcblxyXG4gICAgICByZXR1cm4gaXNWYWxpZDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gbG9vcCBjYXJkaW5hbGl0eSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtbG9vcENhcmRpbmFsaXR5JyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xvb3AgQ2FyZGluYWxpdHknKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdsb29wQ2FyZGluYWxpdHknLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxvb3BDYXJkaW5hbGl0eTogZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUoZWxlbWVudClcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgcmV0dXJuIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgJ2xvb3BDYXJkaW5hbGl0eScsIHZhbHVlcy5sb29wQ2FyZGluYWxpdHksIGJwbW5GYWN0b3J5KTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICAvLyBjb2xsZWN0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtY29sbGVjdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb2xsZWN0aW9uJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY29sbGVjdGlvbicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY29sbGVjdGlvbjogZ2V0Q29sbGVjdGlvbihlbGVtZW50KVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywge1xyXG4gICAgICAgICdhY3Rpdml0aTpjb2xsZWN0aW9uJzogdmFsdWVzLmNvbGxlY3Rpb24gfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0Q29sbGVjdGlvbihlbGVtZW50KTtcclxuICAgICAgdmFyIGVsZW1lbnRWYXJpYWJsZSA9IGdldEVsZW1lbnRWYXJpYWJsZShlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmICghY29sbGVjdGlvbiAmJiBlbGVtZW50VmFyaWFibGUpIHtcclxuICAgICAgICByZXR1cm4geyBjb2xsZWN0aW9uIDogJ011c3QgcHJvdmlkZSBhIHZhbHVlJyB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgLy8gZWxlbWVudCB2YXJpYWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWVsZW1lbnRWYXJpYWJsZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFbGVtZW50IFZhcmlhYmxlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZWxlbWVudFZhcmlhYmxlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBlbGVtZW50VmFyaWFibGU6IGdldEVsZW1lbnRWYXJpYWJsZShlbGVtZW50KVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywge1xyXG4gICAgICAgICdhY3Rpdml0aTplbGVtZW50VmFyaWFibGUnOiB2YWx1ZXMuZWxlbWVudFZhcmlhYmxlIHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICAvLyBDb21wbGV0aW9uIENvbmRpdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWNvbXBsZXRpb25Db25kaXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29tcGxldGlvbiBDb25kaXRpb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjb21wbGV0aW9uQ29uZGl0aW9uJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb21wbGV0aW9uQ29uZGl0aW9uOiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uVmFsdWUoZWxlbWVudClcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgcmV0dXJuIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgJ2NvbXBsZXRpb25Db25kaXRpb24nLCB2YWx1ZXMuY29tcGxldGlvbkNvbmRpdGlvbiwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xyXG5cclxudmFyIGZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKTtcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyksXHJcbiAgICBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcclxuICAgIGZpbmQgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVQcm9wZXJ0eUlkKCkge1xyXG4gIHJldHVybiB1dGlscy5uZXh0SWQoJ1Byb3BlcnR5XycpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IGFsbCBhY3Rpdml0aTpwcm9wZXJ0eSBvYmplY3RzIGZvciBhIHNwZWNpZmljIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBwYXJlbnRcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiBhY3Rpdml0aTpwcm9wZXJ0eSBvYmplY3RzXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpIHtcclxuICB2YXIgcHJvcGVydGllcyA9IHBhcmVudCAmJiBnZXRQcm9wZXJ0aWVzRWxlbWVudChwYXJlbnQpO1xyXG4gIGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMudmFsdWVzKSB7XHJcbiAgICByZXR1cm4gcHJvcGVydGllcy52YWx1ZXM7XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgYWN0aXZpdGk6UHJvcGVydGllcyBvYmplY3QgZm9yIGEgc3BlY2lmaWMgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IHBhcmVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBhIGFjdGl2aXRpOlByb3BlcnRpZXMgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzRWxlbWVudChlbGVtZW50KSB7XHJcbiAgaWYgKCFpc0V4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpKSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5wcm9wZXJ0aWVzO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gZ2V0UHJvcGVydGllc0VsZW1lbnRJbnNpZGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgZmlyc3QgYWN0aXZpdGk6UHJvcGVydGllcyBvYmplY3QgZm9yIGEgc3BlY2lmaWMgYnBtbjpFeHRlbnNpb25FbGVtZW50c1xyXG4gKiBidXNpbmVzcyBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZXh0ZW5zaW9uRWxlbWVudHNcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gYSBhY3Rpdml0aTpQcm9wZXJ0aWVzIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydGllc0VsZW1lbnRJbnNpZGVFeHRlbnNpb25FbGVtZW50cyhleHRlbnNpb25FbGVtZW50cykge1xyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLnZhbHVlcywgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgcmV0dXJuIGlzKGVsZW0sICdhY3Rpdml0aTpQcm9wZXJ0aWVzJyk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBidXNpbmVzcyBvYmplY3QgaXMgYSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0V4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGFjdGl2aXRpOnByb3BlcnR5IGVudHJ5IHVzaW5nIHRhYmxlRW50cnlGYWN0b3J5XHJcbiAqXHJcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkXHJcbiAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IG9wdGlvbnMubW9kZWxQcm9wZXJ0aWVzXHJcbiAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IG9wdGlvbnMubGFiZWxzXHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLmdldFBhcmVudCBHZXRzIHRoZSBwYXJlbnQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLnNob3cgSW5kaWNhdGUgd2hlbiB0aGUgZW50cnkgd2lsbCBiZSBzaG93biwgc2hvdWxkIHJldHVybiBib29sZWFuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldFBhcmVudCA9IG9wdGlvbnMuZ2V0UGFyZW50O1xyXG5cclxuICB2YXIgbW9kZWxQcm9wZXJ0aWVzID0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXMsXHJcbiAgICAgIGNyZWF0ZVBhcmVudCA9IG9wdGlvbnMuY3JlYXRlUGFyZW50O1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgYm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuICB9XHJcblxyXG4gIC8vIGJ1aWxkIHByb3BlcnRpZXMgZ3JvdXAgb25seSB3aGVuIHRoZSBwYXJ0aWNpcGFudCBoYXZlIGEgcHJvY2Vzc1JlZlxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzc2lnbihvcHRpb25zLCB7XHJcbiAgICBhZGRMYWJlbDogdHJhbnNsYXRlKCdBZGQgUHJvcGVydHknKSxcclxuICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pO1xyXG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZXMocGFyZW50KTtcclxuICAgIH0sXHJcbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdLFxyXG4gICAgICAgICAgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW1lbnQsIG5vZGUsIGJvKTtcclxuXHJcbiAgICAgIGlmICghcGFyZW50ICYmIHR5cGVvZiBjcmVhdGVQYXJlbnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlUGFyZW50KGVsZW1lbnQsIGJvKTtcclxuICAgICAgICBwYXJlbnQgPSByZXN1bHQucGFyZW50O1xyXG4gICAgICAgIGNvbW1hbmRzLnB1c2gocmVzdWx0LmNtZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc0VsZW1lbnQocGFyZW50KTtcclxuICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgcHJvcGVydGllcyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6UHJvcGVydGllcycsIHt9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICAgICAgaWYgKCFpc0V4dGVuc2lvbkVsZW1lbnRzKHBhcmVudCkpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmVudCwgeyAncHJvcGVydGllcyc6IHByb3BlcnRpZXMgfSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgICBbIHByb3BlcnRpZXMgXSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICAgICkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHByb3BlcnR5UHJvcHMgPSB7fTtcclxuICAgICAgZm9yRWFjaChtb2RlbFByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3ApIHtcclxuICAgICAgICBwcm9wZXJ0eVByb3BzW3Byb3BdID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZSBpZCBpZiBuZWNlc3NhcnlcclxuICAgICAgaWYgKG1vZGVsUHJvcGVydGllcy5pbmRleE9mKCdpZCcpID49IDApIHtcclxuICAgICAgICBwcm9wZXJ0eVByb3BzLmlkID0gZ2VuZXJhdGVQcm9wZXJ0eUlkKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwcm9wZXJ0eSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6UHJvcGVydHknLCBwcm9wZXJ0eVByb3BzLCBwcm9wZXJ0aWVzLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIHByb3BlcnRpZXMsICd2YWx1ZXMnLCBbIHByb3BlcnR5IF0pKTtcclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pLFxyXG4gICAgICAgICAgcHJvcGVydHkgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpW2lkeF07XHJcblxyXG4gICAgICBmb3JFYWNoKG1vZGVsUHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgICAgIHZhbHVlW3Byb3BdID0gdmFsdWVbcHJvcF0gfHwgdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xyXG4gICAgICAvLyB2YWxpZGF0ZSBpZCBpZiBuZWNlc3NhcnlcclxuICAgICAgaWYgKG1vZGVsUHJvcGVydGllcy5pbmRleE9mKCdpZCcpID49IDApIHtcclxuXHJcbiAgICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChlbGVtZW50LCBub2RlLCBibyksXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaWR4XTtcclxuXHJcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAvLyBjaGVjayBpZiBpZCBpcyB2YWxpZFxyXG4gICAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvciA9IHV0aWxzLmlzSWRWYWxpZChwcm9wZXJ0eSwgdmFsdWUuaWQsIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4geyBpZDogdmFsaWRhdGlvbkVycm9yIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdLFxyXG4gICAgICAgICAgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW1lbnQsIG5vZGUsIGJvKSxcclxuICAgICAgICAgIHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzRWxlbWVudChwYXJlbnQpLFxyXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZXMgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpLFxyXG4gICAgICAgICAgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlWYWx1ZXNbaWR4XTtcclxuXHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgcHJvcGVydGllcywgJ3ZhbHVlcycsIG51bGwsIFsgY3VycmVudFByb3BlcnR5IF0pKTtcclxuXHJcbiAgICAgIGlmIChwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAvLyByZW1vdmUgYWN0aXZpdGk6cHJvcGVydGllcyBpZiB0aGUgbGFzdCBleGlzdGluZyBwcm9wZXJ0eSBoYXMgYmVlbiByZW1vdmVkXHJcbiAgICAgICAgaWYgKCFpc0V4dGVuc2lvbkVsZW1lbnRzKHBhcmVudCkpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmVudCwgeyBwcm9wZXJ0aWVzOiB1bmRlZmluZWQgfSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JFYWNoKHBhcmVudC52YWx1ZXMsIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChpcyh2YWx1ZSwgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKSkge1xyXG4gICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYm8sIGVsZW1lbnQsIHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZmFjdG9yeS50YWJsZShvcHRpb25zKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgICBoaWRlUmVzdWx0VmFyaWFibGUgPSBvcHRpb25zLmhpZGVSZXN1bHRWYXJpYWJsZSxcclxuICAgICAgaWQgPSBvcHRpb25zLmlkIHx8ICdyZXN1bHRWYXJpYWJsZSc7XHJcblxyXG5cclxuICB2YXIgcmVzdWx0VmFyaWFibGVFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUmVzdWx0IFZhcmlhYmxlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAncmVzdWx0VmFyaWFibGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIHsgcmVzdWx0VmFyaWFibGU6IGJvLmdldCgnYWN0aXZpdGk6cmVzdWx0VmFyaWFibGUnKSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgIHZhciByZXN1bHRWYXJpYWJsZSA9IHZhbHVlcy5yZXN1bHRWYXJpYWJsZSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJzogcmVzdWx0VmFyaWFibGVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChpcyhibywgJ2FjdGl2aXRpOkRtbkNhcGFibGUnKSAmJiAhcmVzdWx0VmFyaWFibGUpIHtcclxuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTptYXBEZWNpc2lvblJlc3VsdCc6ICdyZXN1bHRMaXN0JyB9LCBwcm9wcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgaGlkZVJlc3VsdFZhcmlhYmxlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGhpZGVSZXN1bHRWYXJpYWJsZS5hcHBseShyZXN1bHRWYXJpYWJsZUVudHJ5LCBhcmd1bWVudHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyByZXN1bHRWYXJpYWJsZUVudHJ5IF07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXHJcbiAgICBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKS5lc2NhcGVIVE1MLFxyXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldFNjcmlwdFR5cGUobm9kZSkge1xyXG4gIHJldHVybiB1dGlscy5zZWxlY3RlZFR5cGUoJ3NlbGVjdFtuYW1lPXNjcmlwdFR5cGVdJywgbm9kZS5wYXJlbnRFbGVtZW50KTtcclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc2NyaXB0TGFuZ3VhZ2VQcm9wTmFtZSwgc2NyaXB0VmFsdWVQcm9wTmFtZSwgaXNGb3JtYXRSZXF1aXJlZCwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvdyBicHAtdGV4dGZpZWxkXCI+JyArXHJcbiAgICAgICc8bGFiZWwgZm9yPVwiY2FtLXNjcmlwdC1mb3JtYXRcIj4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ1NjcmlwdCBGb3JtYXQnKSkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tc2NyaXB0LWZvcm1hdFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNjcmlwdEZvcm1hdFwiIC8+JyArXHJcbiAgICAgICAgJzxidXR0b24gY2xhc3M9XCJjbGVhclwiIGRhdGEtYWN0aW9uPVwic2NyaXB0LmNsZWFyU2NyaXB0Rm9ybWF0XCIgZGF0YS1zaG93PVwic2NyaXB0LmNhbkNsZWFyU2NyaXB0Rm9ybWF0XCI+JyArXHJcbiAgICAgICAgICAnPHNwYW4+WDwvc3Bhbj4nICtcclxuICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICc8L2Rpdj4nICtcclxuICAgICc8L2Rpdj4nICtcclxuXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3dcIj4nICtcclxuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LXR5cGVcIj4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ1NjcmlwdCBUeXBlJykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIj4nICtcclxuICAgICAgICAnPHNlbGVjdCBpZD1cImNhbS1zY3JpcHQtdHlwZVwiIG5hbWU9XCJzY3JpcHRUeXBlXCIgZGF0YS12YWx1ZT4nICtcclxuICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwic2NyaXB0XCIgc2VsZWN0ZWQ+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdJbmxpbmUgU2NyaXB0JykpICsgJzwvb3B0aW9uPicgK1xyXG4gICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJzY3JpcHRSZXNvdXJjZVwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnRXh0ZXJuYWwgUmVzb3VyY2UnKSkgKyAnPC9vcHRpb24+JyArXHJcbiAgICAgICAgJzwvc2VsZWN0PicgK1xyXG4gICAgICAnPC9kaXY+JyArXHJcbiAgICAnPC9kaXY+JyArXHJcblxyXG4gICAgJzxkaXYgY2xhc3M9XCJicHAtcm93IGJwcC10ZXh0ZmllbGRcIj4nICtcclxuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LXJlc291cmNlLXZhbFwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFJlc291cmNlXCI+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdSZXNvdXJjZScpKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgZGF0YS1zaG93PVwic2NyaXB0LmlzU2NyaXB0UmVzb3VyY2VcIj4nICtcclxuICAgICAgICAnPGlucHV0IGlkPVwiY2FtLXNjcmlwdC1yZXNvdXJjZS12YWxcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJzY3JpcHRSZXNvdXJjZVZhbHVlXCIgLz4nICtcclxuICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJzY3JpcHQuY2xlYXJTY3JpcHRSZXNvdXJjZVwiIGRhdGEtc2hvdz1cInNjcmlwdC5jYW5DbGVhclNjcmlwdFJlc291cmNlXCI+JyArXHJcbiAgICAgICAgICAnPHNwYW4+WDwvc3Bhbj4nICtcclxuICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICc8L2Rpdj4nICtcclxuICAgICc8L2Rpdj4nICtcclxuXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3dcIj4nICtcclxuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LXZhbFwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnU2NyaXB0JykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiBkYXRhLXNob3c9XCJzY3JpcHQuaXNTY3JpcHRcIj4nICtcclxuICAgICAgICAnPHRleHRhcmVhIGlkPVwiY2FtLXNjcmlwdC12YWxcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJzY3JpcHRWYWx1ZVwiPjwvdGV4dGFyZWE+JyArXHJcbiAgICAgICc8L2Rpdj4nK1xyXG4gICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBibykge1xyXG4gICAgICB2YXIgdmFsdWVzID0ge307XHJcblxyXG4gICAgICAvLyByZWFkIHZhbHVlcyBmcm9tIHhtbDpcclxuICAgICAgdmFyIGJvU2NyaXB0UmVzb3VyY2UgPSBiby5nZXQoJ2FjdGl2aXRpOnJlc291cmNlJyksXHJcbiAgICAgICAgICBib1NjcmlwdCA9IGJvLmdldChzY3JpcHRWYWx1ZVByb3BOYW1lKSxcclxuICAgICAgICAgIGJvU2NyaXB0Rm9ybWF0ID0gYm8uZ2V0KHNjcmlwdExhbmd1YWdlUHJvcE5hbWUpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBib1NjcmlwdFJlc291cmNlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHZhbHVlcy5zY3JpcHRSZXNvdXJjZVZhbHVlID0gYm9TY3JpcHRSZXNvdXJjZTtcclxuICAgICAgICB2YWx1ZXMuc2NyaXB0VHlwZSA9ICdzY3JpcHRSZXNvdXJjZSc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsdWVzLnNjcmlwdFZhbHVlID0gYm9TY3JpcHQ7XHJcbiAgICAgICAgdmFsdWVzLnNjcmlwdFR5cGUgPSAnc2NyaXB0JztcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFsdWVzLnNjcmlwdEZvcm1hdCA9IGJvU2NyaXB0Rm9ybWF0O1xyXG5cclxuICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdmFyIHNjcmlwdEZvcm1hdCA9IHZhbHVlcy5zY3JpcHRGb3JtYXQsXHJcbiAgICAgICAgICBzY3JpcHRUeXBlID0gdmFsdWVzLnNjcmlwdFR5cGUsXHJcbiAgICAgICAgICBzY3JpcHRSZXNvdXJjZVZhbHVlID0gdmFsdWVzLnNjcmlwdFJlc291cmNlVmFsdWUsXHJcbiAgICAgICAgICBzY3JpcHRWYWx1ZSA9IHZhbHVlcy5zY3JpcHRWYWx1ZTtcclxuXHJcbiAgICAgIC8vIGluaXQgdXBkYXRlXHJcbiAgICAgIHZhciB1cGRhdGUgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnJlc291cmNlJzogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcbiAgICAgIHVwZGF0ZVtzY3JpcHRWYWx1ZVByb3BOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgdXBkYXRlW3NjcmlwdExhbmd1YWdlUHJvcE5hbWVdID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgaWYgKGlzRm9ybWF0UmVxdWlyZWQpIHtcclxuICAgICAgICAvLyBhbHdheXMgc2V0IGxhbmd1YWdlXHJcbiAgICAgICAgdXBkYXRlW3NjcmlwdExhbmd1YWdlUHJvcE5hbWVdID0gc2NyaXB0Rm9ybWF0IHx8ICcnO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgLy8gc2V0IGxhbmd1YWdlIG9ubHkgd2hlbiBzY3JpcHRGb3JtYXQgaGFzIGEgdmFsdWVcclxuICAgICAgaWYgKHNjcmlwdEZvcm1hdCAhPT0gJycpIHtcclxuICAgICAgICB1cGRhdGVbc2NyaXB0TGFuZ3VhZ2VQcm9wTmFtZV0gPSBzY3JpcHRGb3JtYXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNldCBlaXRoZXIgaW5saW5lIHNjcmlwdCBvciByZXNvdXJjZVxyXG4gICAgICBpZiAoJ3NjcmlwdFJlc291cmNlJyA9PT0gc2NyaXB0VHlwZSkge1xyXG4gICAgICAgIHVwZGF0ZVsnYWN0aXZpdGk6cmVzb3VyY2UnXSA9IHNjcmlwdFJlc291cmNlVmFsdWUgfHwgJyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlW3NjcmlwdFZhbHVlUHJvcE5hbWVdID0gc2NyaXB0VmFsdWUgfHwgJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB1cGRhdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHQgPSB7fTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZXMuc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdCcgJiYgIXZhbHVlcy5zY3JpcHRWYWx1ZSkge1xyXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuc2NyaXB0VmFsdWUgPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZXMuc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdFJlc291cmNlJyAmJiAhdmFsdWVzLnNjcmlwdFJlc291cmNlVmFsdWUpIHtcclxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnNjcmlwdFJlc291cmNlVmFsdWUgPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0Zvcm1hdFJlcXVpcmVkICYmICghdmFsdWVzLnNjcmlwdEZvcm1hdCB8fCB2YWx1ZXMuc2NyaXB0Rm9ybWF0Lmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnNjcmlwdEZvcm1hdCA9IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyU2NyaXB0Rm9ybWF0OiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICBkb21RdWVyeSgnaW5wdXRbbmFtZT1zY3JpcHRGb3JtYXRdJywgc2NvcGVOb2RlKS52YWx1ZT0nJztcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYW5DbGVhclNjcmlwdEZvcm1hdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9c2NyaXB0Rm9ybWF0XScsIHNjb3BlTm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhclNjcmlwdFJlc291cmNlOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICBkb21RdWVyeSgnaW5wdXRbbmFtZT1zY3JpcHRSZXNvdXJjZVZhbHVlXScsIHNjb3BlTm9kZSkudmFsdWU9Jyc7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FuQ2xlYXJTY3JpcHRSZXNvdXJjZTogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9c2NyaXB0UmVzb3VyY2VWYWx1ZV0nLCBzY29wZU5vZGUpO1xyXG5cclxuICAgICAgcmV0dXJuIGlucHV0LnZhbHVlICE9PSAnJztcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXJTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIGRvbVF1ZXJ5KCd0ZXh0YXJlYVtuYW1lPXNjcmlwdFZhbHVlXScsIHNjb3BlTm9kZSkudmFsdWU9Jyc7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FuQ2xlYXJTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIHZhciBpbnB1dCA9IGRvbVF1ZXJ5KCd0ZXh0YXJlYVtuYW1lPXNjcmlwdFZhbHVlXScsIHNjb3BlTm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1NjcmlwdFJlc291cmNlOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgc2NyaXB0VHlwZSA9IGdldFNjcmlwdFR5cGUoc2NvcGVOb2RlKTtcclxuICAgICAgcmV0dXJuIHNjcmlwdFR5cGUgPT09ICdzY3JpcHRSZXNvdXJjZSc7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzU2NyaXB0OiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgc2NyaXB0VHlwZSA9IGdldFNjcmlwdFR5cGUoc2NvcGVOb2RlKTtcclxuICAgICAgcmV0dXJuIHNjcmlwdFR5cGUgPT09ICdzY3JpcHQnO1xyXG4gICAgfVxyXG5cclxuICB9O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIHZhciBpc1N0YXJ0YWJsZUluVGFza2xpc3RFbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XHJcbiAgICBpZDogJ2lzU3RhcnRhYmxlSW5UYXNrbGlzdCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTdGFydGFibGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdpc1N0YXJ0YWJsZUluVGFza2xpc3QnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGlzU3RhcnRhYmxlSW5UYXNrbGlzdCA9IGJvLmdldCgnYWN0aXZpdGk6aXNTdGFydGFibGVJblRhc2tsaXN0Jyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzU3RhcnRhYmxlSW5UYXNrbGlzdDogaXNTdGFydGFibGVJblRhc2tsaXN0ID8gaXNTdGFydGFibGVJblRhc2tsaXN0IDogJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6aXNTdGFydGFibGVJblRhc2tsaXN0JzogISF2YWx1ZXMuaXNTdGFydGFibGVJblRhc2tsaXN0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGlzU3RhcnRhYmxlSW5UYXNrbGlzdEVudHJ5XHJcbiAgXTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgTW9kZWxVdGlsID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKSxcclxuICAgIGlzID0gTW9kZWxVdGlsLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0VmFsdWUgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIGRvY3VtZW50YXRpb25zID0gYnVzaW5lc3NPYmplY3QgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdkb2N1bWVudGF0aW9uJyksXHJcbiAgICAgICAgICB0ZXh0ID0gKGRvY3VtZW50YXRpb25zICYmIGRvY3VtZW50YXRpb25zLmxlbmd0aCA+IDApID8gZG9jdW1lbnRhdGlvbnNbMF0udGV4dCA6ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIHsgZG9jdW1lbnRhdGlvbjogdGV4dCB9O1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgbmV3T2JqZWN0TGlzdCA9IFtdO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMuZG9jdW1lbnRhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWVzLmRvY3VtZW50YXRpb24gIT09ICcnKSB7XHJcbiAgICAgICAgbmV3T2JqZWN0TGlzdC5wdXNoKGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpEb2N1bWVudGF0aW9uJywge1xyXG4gICAgICAgICAgdGV4dDogdmFsdWVzLmRvY3VtZW50YXRpb25cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIuc2V0TGlzdChlbGVtZW50LCBidXNpbmVzc09iamVjdCwgJ2RvY3VtZW50YXRpb24nLCBuZXdPYmplY3RMaXN0KTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gRWxlbWVudCBEb2N1bWVudGF0aW9uXHJcbiAgdmFyIGVsZW1lbnREb2N1RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEJveCh7XHJcbiAgICBpZDogJ2RvY3VtZW50YXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRWxlbWVudCBEb2N1bWVudGF0aW9uJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZG9jdW1lbnRhdGlvbidcclxuICB9KTtcclxuXHJcbiAgZWxlbWVudERvY3VFbnRyeS5zZXQgPSBzZXRWYWx1ZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSk7XHJcblxyXG4gIGVsZW1lbnREb2N1RW50cnkuZ2V0ID0gZ2V0VmFsdWUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpO1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZWxlbWVudERvY3VFbnRyeSk7XHJcblxyXG5cclxuICB2YXIgcHJvY2Vzc1JlZjtcclxuXHJcbiAgLy8gUHJvY2VzcyBEb2N1bWVudGF0aW9uIHdoZW4gaGF2aW5nIGEgQ29sbGFib3JhdGlvbiBEaWFncmFtXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuXHJcbiAgICBwcm9jZXNzUmVmID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZjtcclxuXHJcbiAgICAvLyBkbyBub3Qgc2hvdyBmb3IgY29sbGFwc2VkIFBvb2xzL1BhcnRpY2lwYW50c1xyXG4gICAgaWYgKHByb2Nlc3NSZWYpIHtcclxuICAgICAgdmFyIHByb2Nlc3NEb2N1RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEJveCh7XHJcbiAgICAgICAgaWQ6ICdwcm9jZXNzLWRvY3VtZW50YXRpb24nLFxyXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgRG9jdW1lbnRhdGlvbicpLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICdkb2N1bWVudGF0aW9uJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHByb2Nlc3NEb2N1RW50cnkuc2V0ID0gc2V0VmFsdWUocHJvY2Vzc1JlZik7XHJcblxyXG4gICAgICBwcm9jZXNzRG9jdUVudHJ5LmdldCA9IGdldFZhbHVlKHByb2Nlc3NSZWYpO1xyXG5cclxuICAgICAgZ3JvdXAuZW50cmllcy5wdXNoKHByb2Nlc3NEb2N1RW50cnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnksXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyk7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG52YXIgbWVzc2FnZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgc2lnbmFsID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9TaWduYWxFdmVudERlZmluaXRpb24nKSxcclxuICAgIGVycm9yID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FcnJvckV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgZXNjYWxhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgdGltZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1RpbWVyRXZlbnREZWZpbml0aW9uJyksXHJcbiAgICBjb21wZW5zYXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0NvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKSxcclxuICAgIGNvbmRpdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgZXZlbnRzID0gW1xyXG4gICAgJ2JwbW46U3RhcnRFdmVudCcsXHJcbiAgICAnYnBtbjpFbmRFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCdcclxuICBdO1xyXG5cclxuICAvLyBNZXNzYWdlIGFuZCBTaWduYWwgRXZlbnQgRGVmaW5pdGlvblxyXG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xyXG5cclxuICAgICAgdmFyIG1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSxcclxuICAgICAgICAgIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAobWVzc2FnZUV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIG1lc3NhZ2UoZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBtZXNzYWdlRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2lnbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICAgICAgc2lnbmFsKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgc2lnbmFsRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBTcGVjaWFsIENhc2U6IFJlY2VpdmUgVGFza1xyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpSZWNlaXZlVGFzaycpKSB7XHJcbiAgICBtZXNzYWdlKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIHRyYW5zbGF0ZSk7XHJcbiAgfVxyXG5cclxuICAvLyBFcnJvciBFdmVudCBEZWZpbml0aW9uXHJcbiAgdmFyIGVycm9yRXZlbnRzID0gW1xyXG4gICAgJ2JwbW46U3RhcnRFdmVudCcsXHJcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcclxuICAgICdicG1uOkVuZEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIGZvckVhY2goZXJyb3JFdmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XHJcblxyXG4gICAgICB2YXIgZXJyb3JFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb24pIHtcclxuXHJcbiAgICAgICAgZXJyb3IoZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBFc2NhbGF0aW9uIEV2ZW50IERlZmluaXRpb25cclxuICB2YXIgZXNjYWxhdGlvbkV2ZW50cyA9IFtcclxuICAgICdicG1uOlN0YXJ0RXZlbnQnLFxyXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcclxuICAgICdicG1uOkVuZEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIGZvckVhY2goZXNjYWxhdGlvbkV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcclxuXHJcbiAgICAgIHZhciBzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSA9IGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XHJcblxyXG4gICAgICAvLyBnZXQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgICAgIHZhciBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVzY2FsYXRpb25FdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIGVzY2FsYXRpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSxcclxuICAgICAgICAgIHRyYW5zbGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIC8vIFRpbWVyIEV2ZW50IERlZmluaXRpb25cclxuICB2YXIgdGltZXJFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCdcclxuICBdO1xyXG5cclxuICBmb3JFYWNoKHRpbWVyRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xyXG5cclxuICAgICAgLy8gZ2V0IGJ1c2luZXNzIG9iamVjdFxyXG4gICAgICB2YXIgdGltZXJFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0VGltZXJFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAodGltZXJFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgICB0aW1lcihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRpbWVyRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIENvbXBlbnNhdGUgRXZlbnQgRGVmaW5pdGlvblxyXG4gIHZhciBjb21wZW5zYXRpb25FdmVudHMgPSBbXHJcbiAgICAnYnBtbjpFbmRFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xyXG4gIF07XHJcblxyXG4gIGZvckVhY2goY29tcGVuc2F0aW9uRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xyXG5cclxuICAgICAgLy8gZ2V0IGJ1c2luZXNzIG9iamVjdFxyXG4gICAgICB2YXIgY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgICAgaWYgKGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgICBjb21wZW5zYXRpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIENvbmRpdGlvbmFsIEV2ZW50IERlZmluaXRpb25cclxuICB2YXIgY29uZGl0aW9uYWxFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIGlmIChpc0FueShlbGVtZW50LCBjb25kaXRpb25hbEV2ZW50cykpIHtcclxuXHJcbiAgICAvLyBnZXQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgICB2YXIgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgaWYgKGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICAgIGNvbmRpdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIHBhcnRpY2lwYW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL1BhcnRpY2lwYW50SGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYm8uZ2V0KCdwcm9jZXNzUmVmJykpKSB7XHJcblxyXG4gICAgdmFyIGV4ZWN1dGFibGVFbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XHJcbiAgICAgIGlkOiAncHJvY2Vzcy1pcy1leGVjdXRhYmxlJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXhlY3V0YWJsZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnaXNFeGVjdXRhYmxlJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gaW4gcGFydGljaXBhbnRzIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldCBhbmQgZ2V0XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICBleGVjdXRhYmxlRW50cnkuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5nZXRQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ2lzRXhlY3V0YWJsZScpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZXhlY3V0YWJsZUVudHJ5LnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5tb2RpZnlQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ2lzRXhlY3V0YWJsZScsIHZhbHVlcyk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGV4ZWN1dGFibGVFbnRyeSk7XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUsIG9wdGlvbnMpIHtcclxuXHJcbiAgdmFyIGRlc2NyaXB0aW9uID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuICAvLyBJZFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkKHtcclxuICAgIGlkOiAnaWQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSWQnKSxcclxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiAmJiB0cmFuc2xhdGUoZGVzY3JpcHRpb24pLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2lkJyxcclxuICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5pZDtcclxuICAgIH0sXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcykge1xyXG5cclxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQubGFiZWxUYXJnZXQgfHwgZWxlbWVudDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wZXJ0aWVzKTtcclxuICAgIH0sXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBpZFZhbHVlID0gdmFsdWVzLmlkO1xyXG5cclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgaWRFcnJvciA9IHV0aWxzLmlzSWRWYWxpZChibywgaWRWYWx1ZSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgICAgIHJldHVybiBpZEVycm9yID8geyBpZDogaWRFcnJvciB9IDoge307XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG5mdW5jdGlvbiBnZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBsaW5rRXZlbnREZWZpbml0aW9uID0gbnVsbDtcclxuICBpZiAoYm8uZXZlbnREZWZpbml0aW9ucykge1xyXG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudERlZmluaXRpb24pIHtcclxuICAgICAgaWYgKGlzKGV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgICAgbGlua0V2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbGlua0V2ZW50RGVmaW5pdGlvbjtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGxpbmtFdmVudHMgPSBbICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyBdO1xyXG5cclxuICBmb3JFYWNoKGxpbmtFdmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XHJcblxyXG4gICAgICB2YXIgbGlua0V2ZW50RGVmaW5pdGlvbiA9IGdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAobGlua0V2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICAgICAgaWQ6ICdsaW5rLWV2ZW50JyxcclxuICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpbmsgTmFtZScpLFxyXG4gICAgICAgICAgbW9kZWxQcm9wZXJ0eTogJ2xpbmstbmFtZSdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZW50cnkuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAnbGluay1uYW1lJzogbGlua0V2ZW50RGVmaW5pdGlvbi5nZXQoJ25hbWUnKSB9O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVudHJ5LnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgICAgdmFyIG5ld1Byb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHZhbHVlc1snbGluay1uYW1lJ11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxpbmtFdmVudERlZmluaXRpb24sIG5ld1Byb3BlcnRpZXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufTtcclxuXHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBuYW1lRW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9OYW1lJyksXHJcbiAgICBjcmVhdGVDYXRlZ29yeVZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NhdGVnb3J5SGVscGVyJykuY3JlYXRlQ2F0ZWdvcnlWYWx1ZSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjYW52YXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBmdW5jdGlvbiBpbml0aWFsaXplQ2F0ZWdvcnkoc2VtYW50aWMpIHtcclxuICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxyXG4gICAgICAgIGRlZmluaXRpb25zID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdEVsZW1lbnQpLiRwYXJlbnQsXHJcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICBzZW1hbnRpYy5jYXRlZ29yeVZhbHVlUmVmID0gY2F0ZWdvcnlWYWx1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRHcm91cE5hbWUoZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICBjYXRlZ29yeVZhbHVlUmVmID0gYm8uY2F0ZWdvcnlWYWx1ZVJlZjtcclxuXHJcbiAgICBpZiAoIWNhdGVnb3J5VmFsdWVSZWYpIHtcclxuICAgICAgaW5pdGlhbGl6ZUNhdGVnb3J5KGJvKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBuZWVkcyBkaXJlY3QgY2FsbCB0byB1cGRhdGUgY2F0ZWdvcnlWYWx1ZSBwcm9wZXJseVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVMYWJlbCcsXHJcbiAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIG5ld0xhYmVsOiB2YWx1ZXMuY2F0ZWdvcnlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0R3JvdXBOYW1lKGVsZW1lbnQpIHtcclxuICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICAgIHZhbHVlID0gKGJvLmNhdGVnb3J5VmFsdWVSZWYgfHwge30pLnZhbHVlO1xyXG5cclxuICAgIHJldHVybiB7IGNhdGVnb3J5VmFsdWU6IHZhbHVlIH07XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xyXG5cclxuICAgIHZhciBvcHRpb25zO1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcclxuICAgICAgb3B0aW9ucyA9IHsgbW9kZWxQcm9wZXJ0eTogJ3RleHQnLCBsYWJlbDogdHJhbnNsYXRlKCdUZXh0JykgfTtcclxuICAgIH0gZWxzZSBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSkge1xyXG4gICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICdjYXRlZ29yeVZhbHVlJyxcclxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdDYXRlZ29yeSBWYWx1ZScpLFxyXG4gICAgICAgIGdldDogZ2V0R3JvdXBOYW1lLFxyXG4gICAgICAgIHNldDogc2V0R3JvdXBOYW1lXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbmFtZVxyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KG5hbWVFbnRyeUZhY3RvcnkoZWxlbWVudCwgb3B0aW9ucywgdHJhbnNsYXRlKSk7XHJcblxyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgcGFydGljaXBhbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvUGFydGljaXBhbnRIZWxwZXInKSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIG5hbWVFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL05hbWUnKSxcclxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vVXRpbHMnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSwgb3B0aW9ucykge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgcHJvY2Vzc0lkRGVzY3JpcHRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMucHJvY2Vzc0lkRGVzY3JpcHRpb247XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBwcm9jZXNzSWRcclxuICAgICAqL1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgdmFyIGlkRW50cnkgPSBlbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkKHtcclxuICAgICAgICBpZDogJ3Byb2Nlc3MtaWQnLFxyXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgSWQnKSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzc0lkRGVzY3JpcHRpb24gJiYgdHJhbnNsYXRlKHByb2Nlc3NJZERlc2NyaXB0aW9uKSxcclxuICAgICAgICBtb2RlbFByb3BlcnR5OiAncHJvY2Vzc0lkJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIGluIHBhcnRpY2lwYW50cyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXQgYW5kIGdldFxyXG4gICAgICBpZEVudHJ5LmdldCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHBhcnRpY2lwYW50SGVscGVyLmdldFByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnaWQnKTtcclxuICAgICAgICByZXR1cm4geyBwcm9jZXNzSWQ6IHByb3BlcnRpZXMuaWQgfTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlkRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLm1vZGlmeVByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnaWQnLCB7IGlkOiB2YWx1ZXMucHJvY2Vzc0lkIH0pO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWRFbnRyeS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgIHZhciBpZFZhbHVlID0gdmFsdWVzLnByb2Nlc3NJZDtcclxuXHJcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHZhciBwcm9jZXNzSWRFcnJvciA9IHV0aWxzLmlzSWRWYWxpZChiby5wcm9jZXNzUmVmLCBpZFZhbHVlLCB0cmFuc2xhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvY2Vzc0lkRXJyb3IgPyB7IHByb2Nlc3NJZDogcHJvY2Vzc0lkRXJyb3IgfSA6IHt9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ3JvdXAuZW50cmllcy5wdXNoKGlkRW50cnkpO1xyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBwcm9jZXNzIG5hbWVcclxuICAgICAgICovXHJcbiAgICAgIHZhciBwcm9jZXNzTmFtZUVudHJ5ID0gbmFtZUVudHJ5RmFjdG9yeShlbGVtZW50LCB7XHJcbiAgICAgICAgaWQ6ICdwcm9jZXNzLW5hbWUnLFxyXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgTmFtZScpXHJcbiAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgLy8gaW4gcGFydGljaXBhbnRzIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldCBhbmQgZ2V0XHJcbiAgICAgIHByb2Nlc3NOYW1lRW50cnkuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5nZXRQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ25hbWUnKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHByb2Nlc3NOYW1lRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLm1vZGlmeVByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnbmFtZScsIHZhbHVlcyk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBncm91cC5lbnRyaWVzLnB1c2gocHJvY2Vzc05hbWVFbnRyeSk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyk7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xyXG5cclxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyksXHJcbiAgICBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyk7XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGFpbmVkQWN0aXZpdGllcyhlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb250YWluZWRCb3VuZGFyeUV2ZW50cyhlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCB0eXBlKSB7XHJcbiAgcmV0dXJuIHV0aWxzLmZpbHRlckVsZW1lbnRzQnlUeXBlKGVsZW1lbnQuZmxvd0VsZW1lbnRzLCB0eXBlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25FdmVudEF0dGFjaGVkVG9BY3Rpdml0eShhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpIHtcclxuICB2YXIgYWN0aXZpdHlJZCA9IGFjdGl2aXR5LmlkO1xyXG4gIHZhciBib3VuZGFyeUV2ZW50ID0gZmluZChib3VuZGFyeUV2ZW50cywgZnVuY3Rpb24oYm91bmRhcnlFdmVudCkge1xyXG4gICAgdmFyIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbihib3VuZGFyeUV2ZW50KTtcclxuICAgIHZhciBhdHRhY2hlZFRvUmVmID0gYm91bmRhcnlFdmVudC5hdHRhY2hlZFRvUmVmO1xyXG4gICAgcmV0dXJuIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24gJiYgYXR0YWNoZWRUb1JlZiAmJiBhdHRhY2hlZFRvUmVmLmlkID09PSBhY3Rpdml0eUlkO1xyXG4gIH0pO1xyXG4gIHJldHVybiAhIWJvdW5kYXJ5RXZlbnQ7XHJcbn1cclxuXHJcbi8vIHN1YnByb2Nlc3M6IG9ubHkgd2hlbiBpdCBpcyBub3QgdHJpZ2dlcmVkQnlFdmVudFxyXG4vLyBhY3Rpdml0eTogb25seSB3aGVuIGl0IGF0dGFjaCBhIGNvbXBlbnNhdGlvbiBib3VuZGFyeSBldmVudFxyXG4vLyBjYWxsQWN0aXZpdHk6IG5vIGxpbWl0YXRpb25cclxuZnVuY3Rpb24gY2FuQWN0aXZpdHlCZUNvbXBlbnNhdGVkKGFjdGl2aXR5LCBib3VuZGFyeUV2ZW50cykge1xyXG4gIHJldHVybiAoaXMoYWN0aXZpdHksICdicG1uOlN1YlByb2Nlc3MnKSAmJiAhYWN0aXZpdHkudHJpZ2dlcmVkQnlFdmVudCkgfHxcclxuICAgICAgICAgIGlzKGFjdGl2aXR5LCAnYnBtbjpDYWxsQWN0aXZpdHknKSB8fFxyXG4gICAgICAgICAgaXNDb21wZW5zYXRpb25FdmVudEF0dGFjaGVkVG9BY3Rpdml0eShhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBY3Rpdml0aWVzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYm91bmRhcnlFdmVudHMgPSBnZXRDb250YWluZWRCb3VuZGFyeUV2ZW50cyhlbGVtZW50KTtcclxuICByZXR1cm4gZmlsdGVyKGdldENvbnRhaW5lZEFjdGl2aXRpZXMoZWxlbWVudCksIGZ1bmN0aW9uKGFjdGl2aXR5KSB7XHJcbiAgICByZXR1cm4gY2FuQWN0aXZpdHlCZUNvbXBlbnNhdGVkKGFjdGl2aXR5LCBib3VuZGFyeUV2ZW50cyk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFjdGl2aXRpZXNGb3JBY3Rpdml0eVJlZihlbGVtZW50KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgdmFyIHBhcmVudCA9IGJvLiRwYXJlbnQ7XHJcblxyXG4gIHZhciBhY3Rpdml0aWVzRm9yQWN0aXZpdHlSZWYgPSBnZXRBY3Rpdml0aWVzRm9yQ29tcGVuc2F0aW9uKHBhcmVudCk7XHJcblxyXG4gIC8vIGlmIHRocm93aW5nIGNvbXBlbnNhdGlvbiBldmVudCBpcyBpbiBhbiBldmVudCBzdWIgcHJvY2VzczpcclxuICAvLyBnZXQgYWxzbyBhbGwgYWN0aXZpdGllcyBvdXRzaWRlIG9mIHRoZSBldmVudCBzdWIgcHJvY2Vzc1xyXG4gIGlmIChpcyhwYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBwYXJlbnQudHJpZ2dlcmVkQnlFdmVudCkge1xyXG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XHJcbiAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgIGFjdGl2aXRpZXNGb3JBY3Rpdml0eVJlZiA9IGFjdGl2aXRpZXNGb3JBY3Rpdml0eVJlZi5jb25jYXQoZ2V0QWN0aXZpdGllc0ZvckNvbXBlbnNhdGlvbihwYXJlbnQpKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0eVJlZk9wdGlvbnMoZWxlbWVudCkge1xyXG4gIHZhciBvcHRpb25zID0gWyB7IHZhbHVlOiAnJyB9IF07XHJcblxyXG4gIHZhciBhY3Rpdml0aWVzID0gZ2V0QWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmKGVsZW1lbnQpO1xyXG4gIGZvckVhY2goYWN0aXZpdGllcywgZnVuY3Rpb24oYWN0aXZpdHkpIHtcclxuICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkuaWQ7XHJcbiAgICB2YXIgbmFtZSA9IChhY3Rpdml0eS5uYW1lID8gKGFjdGl2aXR5Lm5hbWUgKyAnICcpIDogJycpICsgJyhpZD0nICsgYWN0aXZpdHlJZCArICcpJztcclxuICAgIG9wdGlvbnMucHVzaCh7IHZhbHVlOiBhY3Rpdml0eUlkLCBuYW1lOiBuYW1lIH0pO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgIGlkOiAnd2FpdC1mb3ItY29tcGxldGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdXYWl0IGZvciBDb21wbGV0aW9uJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnd2FpdEZvckNvbXBsZXRpb24nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHdhaXRGb3JDb21wbGV0aW9uOiBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLndhaXRGb3JDb21wbGV0aW9uXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhbHVlcy53YWl0Rm9yQ29tcGxldGlvbiA9IHZhbHVlcy53YWl0Rm9yQ29tcGxldGlvbiB8fCBmYWxzZTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCB2YWx1ZXMpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdhY3Rpdml0eS1yZWYnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQWN0aXZpdHkgUmVmJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBjcmVhdGVBY3Rpdml0eVJlZk9wdGlvbnMoZWxlbWVudCksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnYWN0aXZpdHlSZWYnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYWN0aXZpdHlSZWYgPSBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLmFjdGl2aXR5UmVmO1xyXG4gICAgICBhY3Rpdml0eVJlZiA9IGFjdGl2aXR5UmVmICYmIGFjdGl2aXR5UmVmLmlkO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGFjdGl2aXR5UmVmOiBhY3Rpdml0eVJlZiB8fCAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYWN0aXZpdHlSZWYgPSB2YWx1ZXMuYWN0aXZpdHlSZWYgfHwgdW5kZWZpbmVkO1xyXG4gICAgICBhY3Rpdml0eVJlZiA9IGFjdGl2aXR5UmVmICYmIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnRSZWdpc3RyeS5nZXQoYWN0aXZpdHlSZWYpKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCB7XHJcbiAgICAgICAgYWN0aXZpdHlSZWY6IGFjdGl2aXR5UmVmXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGlzRXZlbnRTdWJQcm9jZXNzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwnKS5pc0V2ZW50U3ViUHJvY2VzcztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldFZhbHVlID0gZnVuY3Rpb24obW9kZWxQcm9wZXJ0eSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIG1vZGVsUHJvcGVydHlWYWx1ZSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLmdldCgnY2FtdW5kYTonICsgbW9kZWxQcm9wZXJ0eSk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHt9O1xyXG5cclxuICAgICAgdmFsdWVbbW9kZWxQcm9wZXJ0eV0gPSBtb2RlbFByb3BlcnR5VmFsdWU7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIHNldFZhbHVlID0gZnVuY3Rpb24obW9kZWxQcm9wZXJ0eSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuXHJcbiAgICAgIHByb3BzWydjYW11bmRhOicgKyBtb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLCBwcm9wcyk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAndmFyaWFibGVOYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhcmlhYmxlIE5hbWUnKSxcclxuICAgIG1vZGVsUHJvcGVydHkgOiAndmFyaWFibGVOYW1lJyxcclxuXHJcbiAgICBnZXQ6IGdldFZhbHVlKCd2YXJpYWJsZU5hbWUnKSxcclxuICAgIHNldDogc2V0VmFsdWUoJ3ZhcmlhYmxlTmFtZScpXHJcbiAgfSkpO1xyXG5cclxuICB2YXIgaXNDb25kaXRpb25hbFN0YXJ0RXZlbnQgPVxyXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50LnBhcmVudCk7XHJcblxyXG4gIGlmICghaXNDb25kaXRpb25hbFN0YXJ0RXZlbnQpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQ6ICd2YXJpYWJsZUV2ZW50JyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGUgRXZlbnQnKSxcclxuICAgICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnU3BlY2lmeSBtb3JlIHRoYW4gb25lIHZhcmlhYmxlIGNoYW5nZSBldmVudCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LicpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ3ZhcmlhYmxlRXZlbnQnLFxyXG5cclxuICAgICAgZ2V0OiBnZXRWYWx1ZSgndmFyaWFibGVFdmVudCcpLFxyXG4gICAgICBzZXQ6IHNldFZhbHVlKCd2YXJpYWJsZUV2ZW50JylcclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gZW50cnkgdG8gbW9kaWZ5IGEgcHJvcGVydHkgb2YgYW4gZWxlbWVudCB3aGljaFxyXG4gKiBpcyByZWZlcmVuY2VkIGJ5IGEgZXZlbnQgZGVmaW5pdGlvbi5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvblxyXG4gKiBAcGFyYW0gIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZCB0aGUgaWQgb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5sYWJlbCB0aGUgbGFiZWwgb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5yZWZlcmVuY2VQcm9wZXJ0eSB0aGUgbmFtZSBvZiByZWZlcmVuY2luZyBwcm9wZXJ0eVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSB0aGUgbmFtZSBvZiBwcm9wZXJ0eSB0byBtb2RpZnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnNob3VsZFZhbGlkYXRlIGEgZmxhZyBpbmRpY2F0ZSB3aGV0aGVyIHRvIHZhbGlkYXRlIG9yIG5vdFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgZW50cmllc1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBkZWZpbml0aW9uLCBicG1uRmFjdG9yeSwgb3B0aW9ucykge1xyXG5cclxuICB2YXIgaWQgPSBvcHRpb25zLmlkIHx8ICdlbGVtZW50LXByb3BlcnR5JztcclxuICB2YXIgbGFiZWwgPSBvcHRpb25zLmxhYmVsO1xyXG4gIHZhciByZWZlcmVuY2VQcm9wZXJ0eSA9IG9wdGlvbnMucmVmZXJlbmNlUHJvcGVydHk7XHJcbiAgdmFyIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHkgfHwgJ25hbWUnO1xyXG4gIHZhciBzaG91bGRWYWxpZGF0ZSA9IG9wdGlvbnMuc2hvdWxkVmFsaWRhdGUgfHwgZmFsc2U7XHJcblxyXG4gIHZhciBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogbW9kZWxQcm9wZXJ0eSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW21vZGVsUHJvcGVydHldID0gcmVmZXJlbmNlICYmIHJlZmVyZW5jZS5nZXQobW9kZWxQcm9wZXJ0eSk7XHJcbiAgICAgIHJldHVybiBwcm9wcztcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW21vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCByZWZlcmVuY2UsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhZGVmaW5pdGlvbi5nZXQocmVmZXJlbmNlUHJvcGVydHkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoc2hvdWxkVmFsaWRhdGUpIHtcclxuICAgIGVudHJ5LnZhbGlkYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciByZWZlcmVuY2UgPSBkZWZpbml0aW9uLmdldChyZWZlcmVuY2VQcm9wZXJ0eSk7XHJcbiAgICAgIGlmIChyZWZlcmVuY2UgJiYgIXZhbHVlc1ttb2RlbFByb3BlcnR5XSkge1xyXG4gICAgICAgIHZhciB2YWxpZGF0aW9uRXJyb3JzID0ge307XHJcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yc1ttb2RlbFByb3BlcnR5XSA9ICdNdXN0IHByb3ZpZGUgYSB2YWx1ZSc7XHJcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcnM7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gWyBlbnRyeSBdO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcclxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVycm9yRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpIHtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChldmVudERlZmluaXRpb25SZWZlcmVuY2UoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvcicpLFxyXG4gICAgZWxlbWVudE5hbWU6ICdlcnJvcicsXHJcbiAgICBlbGVtZW50VHlwZTogJ2JwbW46RXJyb3InLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdlcnJvclJlZicsXHJcbiAgICBuZXdFbGVtZW50SWRQcmVmaXg6ICdFcnJvcl8nXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZXJyb3ItZWxlbWVudC1uYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yIE5hbWUnKSxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXJyb3JSZWYnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgc2hvdWxkVmFsaWRhdGU6IHRydWVcclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIGVycm9yRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICdlcnJvci1lbGVtZW50LWNvZGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgQ29kZScpLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdlcnJvclJlZicsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZXJyb3JDb2RlJ1xyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZSA9IHJlcXVpcmUoJy4vRXZlbnREZWZpbml0aW9uUmVmZXJlbmNlJyksXHJcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkgPSByZXF1aXJlKCcuL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eScpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChldmVudERlZmluaXRpb25SZWZlcmVuY2UoZWxlbWVudCwgZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VzY2FsYXRpb24nKSxcclxuICAgIGVsZW1lbnROYW1lOiAnZXNjYWxhdGlvbicsXHJcbiAgICBlbGVtZW50VHlwZTogJ2JwbW46RXNjYWxhdGlvbicsXHJcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2VzY2FsYXRpb25SZWYnLFxyXG4gICAgbmV3RWxlbWVudElkUHJlZml4OiAnRXNjYWxhdGlvbl8nXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICdlc2NhbGF0aW9uLWVsZW1lbnQtbmFtZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFc2NhbGF0aW9uIE5hbWUnKSxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXNjYWxhdGlvblJlZicsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXHJcbiAgICBzaG91bGRWYWxpZGF0ZTogdHJ1ZVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZXNjYWxhdGlvbi1lbGVtZW50LWNvZGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXNjYWxhdGlvbiBDb2RlJyksXHJcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2VzY2FsYXRpb25SZWYnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2VzY2FsYXRpb25Db2RlJ1xyXG4gIH0pKTtcclxuXHJcblxyXG4gIGlmIChzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZCA6ICdlc2NhbGF0aW9uQ29kZVZhcmlhYmxlJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0VzY2FsYXRpb24gQ29kZSBWYXJpYWJsZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2VzY2FsYXRpb25Db2RlVmFyaWFibGUnLFxyXG5cclxuICAgICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIGNvZGVWYXJpYWJsZSA9IGVzY2FsYXRpb25FdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOmVzY2FsYXRpb25Db2RlVmFyaWFibGUnKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZXNjYWxhdGlvbkNvZGVWYXJpYWJsZTogY29kZVZhcmlhYmxlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCB7XHJcbiAgICAgICAgICAnY2FtdW5kYTplc2NhbGF0aW9uQ29kZVZhcmlhYmxlJzogdmFsdWVzLmVzY2FsYXRpb25Db2RlVmFyaWFibGUgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXHJcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxyXG4gICAgZG9tQXR0ciA9IHJlcXVpcmUoJ21pbi1kb20nKS5hdHRyO1xyXG5cclxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyk7XHJcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBlc2NhcGVIVE1MID0gdXRpbHMuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBzZWxlY3RvciA9ICdzZWxlY3RbbmFtZT1zZWxlY3RlZEVsZW1lbnRdJztcclxuXHJcbi8qKlxyXG4gKiBHZXQgc2VsZWN0IGJveCBjb250YWluaW5nIGFsbCBlbGVtZW50cy5cclxuICpcclxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXHJcbiAqXHJcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBzZWxlY3QgYm94XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTZWxlY3RCb3gobm9kZSkge1xyXG4gIHJldHVybiBkb21RdWVyeShzZWxlY3Rvciwgbm9kZS5wYXJlbnRFbGVtZW50KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZpbmQgZWxlbWVudCBieSBnaXZlbiBpZC5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBldmVudERlZmluaXRpb25cclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gYW4gZWxlbWVudFxyXG4gKi9cclxuZnVuY3Rpb24gZmluZEVsZW1lbnRCeUlkKGV2ZW50RGVmaW5pdGlvbiwgdHlwZSwgaWQpIHtcclxuICB2YXIgZWxlbWVudHMgPSB1dGlscy5maW5kUm9vdEVsZW1lbnRzQnlUeXBlKGV2ZW50RGVmaW5pdGlvbiwgdHlwZSk7XHJcbiAgcmV0dXJuIGZpbmQoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50LmlkID09PSBpZDtcclxuICB9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBlbnRyeSB0byBtb2RpZnkgdGhlIHJlZmVyZW5jZSB0byBhbiBlbGVtZW50IGZyb20gYW5cclxuICogZXZlbnQgZGVmaW5pdGlvbi5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvblxyXG4gKiBAcGFyYW0gIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5sYWJlbCB0aGUgbGFiZWwgb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5kZXNjcmlwdGlvbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5lbGVtZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnJlZmVyZW5jZVByb3BlcnR5IHRoZSBuYW1lIG9mIHJlZmVyZW5jaW5nIHByb3BlcnR5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5uZXdFbGVtZW50SWRQcmVmaXggdGhlIHByZWZpeCBvZiBhIG5ldyBjcmVhdGVkIGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGVudHJpZXNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgZGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIG9wdGlvbnMpIHtcclxuXHJcbiAgdmFyIGVsZW1lbnROYW1lID0gb3B0aW9ucy5lbGVtZW50TmFtZSB8fCAnJyxcclxuICAgICAgZWxlbWVudFR5cGUgPSBvcHRpb25zLmVsZW1lbnRUeXBlLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eSA9IG9wdGlvbnMucmVmZXJlbmNlUHJvcGVydHk7XHJcblxyXG4gIHZhciBuZXdFbGVtZW50SWRQcmVmaXggPSBvcHRpb25zLm5ld0VsZW1lbnRJZFByZWZpeCB8fCAnZWxlbV8nO1xyXG5cclxuICB2YXIgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8ICcnLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb24gfHwgJyc7XHJcblxyXG4gIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gIGVudHJpZXMucHVzaCh7XHJcblxyXG4gICAgaWQ6ICdldmVudC1kZWZpbml0aW9ucy0nICsgZWxlbWVudE5hbWUsXHJcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXHJcbiAgICBodG1sOiAnPGRpdiBjbGFzcz1cImJwcC1yb3cgYnBwLXNlbGVjdFwiPicgK1xyXG4gICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJjYW11bmRhLScgKyBlc2NhcGVIVE1MKGVsZW1lbnROYW1lKSArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIj4nICtcclxuICAgICAgICAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW11bmRhLScgKyBlc2NhcGVIVE1MKGVsZW1lbnROYW1lKSArICdcIiBuYW1lPVwic2VsZWN0ZWRFbGVtZW50XCIgZGF0YS12YWx1ZT4nICtcclxuICAgICAgICAgICAgICAgJzwvc2VsZWN0PicgK1xyXG4gICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImFkZFwiIGlkPVwiYWRkRWxlbWVudFwiIGRhdGEtYWN0aW9uPVwiYWRkRWxlbWVudFwiPjxzcGFuPis8L3NwYW4+PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAnPC9kaXY+JyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGVudHJ5Tm9kZSkge1xyXG4gICAgICB1dGlscy51cGRhdGVPcHRpb25zRHJvcERvd24oc2VsZWN0b3IsIGRlZmluaXRpb24sIGVsZW1lbnRUeXBlLCBlbnRyeU5vZGUpO1xyXG4gICAgICB2YXIgcmVmZXJlbmNlID0gZGVmaW5pdGlvbi5nZXQocmVmZXJlbmNlUHJvcGVydHkpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudDogKHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuaWQpIHx8ICcnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBzZWxlY3Rpb24gPSB2YWx1ZXMuc2VsZWN0ZWRFbGVtZW50O1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcblxyXG4gICAgICBpZiAoIXNlbGVjdGlvbiB8fCB0eXBlb2Ygc2VsZWN0aW9uID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gZWxlbWVudFxyXG4gICAgICAgIHByb3BzW3JlZmVyZW5jZVByb3BlcnR5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGRlZmluaXRpb24sIHByb3BzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICB2YXIgc2VsZWN0ZWRFbGVtZW50ID0gZmluZEVsZW1lbnRCeUlkKGRlZmluaXRpb24sIGVsZW1lbnRUeXBlLCBzZWxlY3Rpb24pO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICAgIHZhciByb290ID0gdXRpbHMuZ2V0Um9vdChkZWZpbml0aW9uKTtcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGVsZW1lbnRcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGUsIHsgbmFtZTogc2VsZWN0aW9uIH0sIHJvb3QsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIHJvb3QsICdyb290RWxlbWVudHMnLCBudWxsLCBbIHNlbGVjdGVkRWxlbWVudCBdKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHVwZGF0ZSByZWZlcmVuY2UgdG8gZWxlbWVudFxyXG4gICAgICBwcm9wc1tyZWZlcmVuY2VQcm9wZXJ0eV0gPSBzZWxlY3RlZEVsZW1lbnQ7XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGRlZmluaXRpb24sIHByb3BzKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgICAvLyBub3RlOiB0aGlzIGdlbmVyYXRlZCBpZCB3aWxsIGJlIHVzZWQgYXMgbmFtZVxyXG4gICAgICAvLyBvZiB0aGUgZWxlbWVudCBhbmQgbm90IGFzIGlkXHJcbiAgICAgIHZhciBpZCA9IHV0aWxzLm5leHRJZChuZXdFbGVtZW50SWRQcmVmaXgpO1xyXG5cclxuICAgICAgdmFyIG9wdGlvblRlbXBsYXRlID0gZG9taWZ5KCc8b3B0aW9uIHZhbHVlPVwiJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiPiAoaWQ9Jytlc2NhcGVIVE1MKGlkKSsnKScgKyAnPC9vcHRpb24+Jyk7XHJcblxyXG4gICAgICAvLyBhZGQgbmV3IG9wdGlvblxyXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KGlucHV0Tm9kZSk7XHJcbiAgICAgIHNlbGVjdEJveC5pbnNlcnRCZWZvcmUob3B0aW9uVGVtcGxhdGUsIHNlbGVjdEJveC5maXJzdENoaWxkKTtcclxuXHJcbiAgICAgIC8vIHNlbGVjdCBuZXcgZWxlbWVudCBpbiB0aGUgc2VsZWN0IGJveFxyXG4gICAgICBmb3JFYWNoKHNlbGVjdEJveCwgZnVuY3Rpb24ob3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gaWQpIHtcclxuICAgICAgICAgIGRvbUF0dHIob3B0aW9uLCAnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZG9tQXR0cihvcHRpb24sICdzZWxlY3RlZCcsIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBlbnRyaWVzO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZSA9IHJlcXVpcmUoJy4vRXZlbnREZWZpbml0aW9uUmVmZXJlbmNlJyksXHJcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkgPSByZXF1aXJlKCcuL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eScpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBtZXNzYWdlRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBtZXNzYWdlRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWVzc2FnZScpLFxyXG4gICAgZWxlbWVudE5hbWU6ICdtZXNzYWdlJyxcclxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpNZXNzYWdlJyxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnbWVzc2FnZVJlZicsXHJcbiAgICBuZXdFbGVtZW50SWRQcmVmaXg6ICdNZXNzYWdlXydcclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIG1lc3NhZ2VFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ21lc3NhZ2UtZWxlbWVudC1uYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01lc3NhZ2UgTmFtZScpLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdtZXNzYWdlUmVmJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgIHNob3VsZFZhbGlkYXRlOiB0cnVlXHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGVudHJ5IHRvIG1vZGlmeSB0aGUgbmFtZSBvZiBhbiBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkIHRoZSBpZCBvZiB0aGUgZW50cnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsIHRoZSBsYWJlbCBvZiB0aGUgZW50cnlcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmdcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVudHJ5IHRvIG1vZGlmeSB0aGUgbmFtZVxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgdmFyIGlkID0gb3B0aW9ucy5pZCB8fCAnbmFtZScsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCB0cmFuc2xhdGUoJ05hbWUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSB8fCAnbmFtZSc7XHJcblxyXG4gIHZhciBuYW1lRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEJveCh7XHJcbiAgICBpZDogaWQsXHJcbiAgICBsYWJlbDogbGFiZWwsXHJcbiAgICBtb2RlbFByb3BlcnR5OiBtb2RlbFByb3BlcnR5LFxyXG4gICAgZ2V0OiBvcHRpb25zLmdldCxcclxuICAgIHNldDogb3B0aW9ucy5zZXRcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgbmFtZUVudHJ5IF07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcclxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChldmVudERlZmluaXRpb25SZWZlcmVuY2UoZWxlbWVudCwgc2lnbmFsRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2lnbmFsJyksXHJcbiAgICBlbGVtZW50TmFtZTogJ3NpZ25hbCcsXHJcbiAgICBlbGVtZW50VHlwZTogJ2JwbW46U2lnbmFsJyxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnc2lnbmFsUmVmJyxcclxuICAgIG5ld0VsZW1lbnRJZFByZWZpeDogJ1NpZ25hbF8nXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBzaWduYWxFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ3NpZ25hbC1lbGVtZW50LW5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2lnbmFsIE5hbWUnKSxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnc2lnbmFsUmVmJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgIHNob3VsZFZhbGlkYXRlOiB0cnVlXHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogR2V0IHRoZSB0aW1lciBkZWZpbml0aW9uIHR5cGUgZm9yIGEgZ2l2ZW4gdGltZXIgZXZlbnQgZGVmaW5pdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PGJwbW46VGltZXJFdmVudERlZmluaXRpb24+fSB0aW1lclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfSB0aGUgdGltZXIgZGVmaW5pdGlvbiB0eXBlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyKSB7XHJcbiAgdmFyIHRpbWVEYXRlID0gdGltZXIuZ2V0KCd0aW1lRGF0ZScpO1xyXG4gIGlmICh0eXBlb2YgdGltZURhdGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICByZXR1cm4gJ3RpbWVEYXRlJztcclxuICB9XHJcblxyXG4gIHZhciB0aW1lQ3ljbGUgPSB0aW1lci5nZXQoJ3RpbWVDeWNsZScpO1xyXG4gIGlmICh0eXBlb2YgdGltZUN5Y2xlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgcmV0dXJuICd0aW1lQ3ljbGUnO1xyXG4gIH1cclxuXHJcbiAgdmFyIHRpbWVEdXJhdGlvbiA9IHRpbWVyLmdldCgndGltZUR1cmF0aW9uJyk7XHJcbiAgaWYgKHR5cGVvZiB0aW1lRHVyYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICByZXR1cm4gJ3RpbWVEdXJhdGlvbic7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyAnYnBtbjpGb3JtYWxFeHByZXNzaW9uJyBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHBhcmVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9keVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50PGJwbW46Rm9ybWFsRXhwcmVzc2lvbj59IGEgZm9ybWFsIGV4cHJlc3Npb25cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUZvcm1hbEV4cHJlc3Npb24ocGFyZW50LCBib2R5LCBicG1uRmFjdG9yeSkge1xyXG4gIGJvZHkgPSBib2R5IHx8IHVuZGVmaW5lZDtcclxuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7IGJvZHk6IGJvZHkgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFRpbWVyRXZlbnREZWZpbml0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdGltZXJFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgc2VsZWN0T3B0aW9ucyA9IFtcclxuICAgIHsgdmFsdWU6ICd0aW1lRGF0ZScsIG5hbWU6IHRyYW5zbGF0ZSgnRGF0ZScpIH0sXHJcbiAgICB7IHZhbHVlOiAndGltZUR1cmF0aW9uJywgbmFtZTogdHJhbnNsYXRlKCdEdXJhdGlvbicpIH0sXHJcbiAgICB7IHZhbHVlOiAndGltZUN5Y2xlJywgbmFtZTogdHJhbnNsYXRlKCdDeWNsZScpIH1cclxuICBdO1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ3RpbWVyLWV2ZW50LWRlZmluaXRpb24tdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUaW1lciBEZWZpbml0aW9uIFR5cGUnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IHNlbGVjdE9wdGlvbnMsXHJcbiAgICBlbXB0eVBhcmFtZXRlcjogdHJ1ZSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICd0aW1lckRlZmluaXRpb25UeXBlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aW1lckRlZmluaXRpb25UeXBlOiBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKSB8fCAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgdGltZUR1cmF0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGltZURhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgICB0aW1lQ3ljbGU6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIG5ld1R5cGUgPSB2YWx1ZXMudGltZXJEZWZpbml0aW9uVHlwZTtcclxuICAgICAgaWYgKHZhbHVlcy50aW1lckRlZmluaXRpb25UeXBlKSB7XHJcbiAgICAgICAgdmFyIG9sZFR5cGUgPSBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIGlmIChvbGRUeXBlKSB7XHJcbiAgICAgICAgICB2YXIgZGVmaW5pdGlvbiA9IHRpbWVyRXZlbnREZWZpbml0aW9uLmdldChvbGRUeXBlKTtcclxuICAgICAgICAgIHZhbHVlID0gZGVmaW5pdGlvbi5nZXQoJ2JvZHknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByb3BzW25ld1R5cGVdID0gY3JlYXRlRm9ybWFsRXhwcmVzc2lvbih0aW1lckV2ZW50RGVmaW5pdGlvbiwgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCB0aW1lckV2ZW50RGVmaW5pdGlvbiwgcHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ3RpbWVyLWV2ZW50LWRlZmluaXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGltZXIgRGVmaW5pdGlvbicpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3RpbWVyRGVmaW5pdGlvbicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbik7XHJcbiAgICAgIHZhciBkZWZpbml0aW9uID0gdHlwZSAmJiB0aW1lckV2ZW50RGVmaW5pdGlvbi5nZXQodHlwZSk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5nZXQoJ2JvZHknKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aW1lckRlZmluaXRpb246IHZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbik7XHJcbiAgICAgIHZhciBkZWZpbml0aW9uID0gdHlwZSAmJiB0aW1lckV2ZW50RGVmaW5pdGlvbi5nZXQodHlwZSk7XHJcblxyXG4gICAgICBpZiAoZGVmaW5pdGlvbikge1xyXG4gICAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZGVmaW5pdGlvbiwge1xyXG4gICAgICAgICAgYm9keTogdmFsdWVzLnRpbWVyRGVmaW5pdGlvbiB8fCB1bmRlZmluZWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xyXG4gICAgICB2YXIgZGVmaW5pdGlvbiA9IHR5cGUgJiYgdGltZXJFdmVudERlZmluaXRpb24uZ2V0KHR5cGUpO1xyXG4gICAgICBpZiAoZGVmaW5pdGlvbikge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluaXRpb24uZ2V0KCdib2R5Jyk7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZXJEZWZpbml0aW9uOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gIWdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbWVyRXZlbnREZWZpbml0aW9uO1xyXG4iLCIvKipcclxuICogQGRlc2NyaXB0aW9uIOWFqOWxgOWKn+iDveWwgeijhVxyXG4gKiBAYXV0aG9yIHpyXHJcbiAqIEB0eXBlIHt7cmVnaXN0ZXJGaWxlRHJvcCgqLCAqKTogdm9pZCwgc2F2ZUJwbW4oT2JqZWN0KTogdm9pZCwgaGFuZGxlRHJhZ092ZXIoKik6IHZvaWQsIHNldENvbG9yKE9iamVjdCk6IHZvaWQsIGRvd25Mb2FkKE9iamVjdCk6IHZvaWQsIHVwbG9hZChPYmplY3QsIE9iamVjdCwgT2JqZWN0KTogdm9pZCwgaGFuZGxlRmlsZVNlbGVjdCgqKTogdm9pZCwgc2V0RW5jb2RlZChPYmplY3QsIHN0cmluZywgc3RyaW5nKTogdm9pZCwgb3BlbkZyb21VcmwoT2JqZWN0LCBPYmplY3QsIE9iamVjdCwgc3RyaW5nKTogdm9pZCwgY3JlYXRlRGlhZ3JhbShzdHJpbmcsIE9iamVjdCwgT2JqZWN0KTogUHJvbWlzZTx2b2lkPiwgZ2V0VXJsUGFyYW06IHRvb2xzLmdldFVybFBhcmFtfX1cclxuICovXHJcblxyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5jb25zdCBwcm9Ib3N0ID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbmNvbnN0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcImJwbW5qc1wiKVswXTtcclxuY29uc3Qga2V5ID0gaHJlZi5zcGxpdCh3aW5kb3cubG9jYXRpb24uaG9zdClbMV07XHJcbmNvbnN0IHB1YmxpY3VybCA9IHByb0hvc3QgKyBrZXk7XHJcbmNvbnN0IHRvb2xzID0ge1xyXG4gICAgcmVnaXN0ZXJGaWxlRHJvcChjb250YWluZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29udGFpbmVyLmdldCgwKS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRvb2xzLmhhbmRsZURyYWdPdmVyLCBmYWxzZSk7XHJcbiAgICAgICAgY29udGFpbmVyLmdldCgwKS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdG9vbHMuaGFuZGxlRmlsZVNlbGVjdCwgZmFsc2UpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5Zyw5Z2A5qCP5Y+C5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgZ2V0VXJsUGFyYW06IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgb2JqZWN0ID0ge307XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwiP1wiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB2YXIgc3RyID0gdXJsLnNwbGl0KFwiP1wiKVsxXTtcclxuICAgICAgICAgICAgdmFyIHN0cnMgPSBzdHIuc3BsaXQoXCImXCIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFtzdHJzW2ldLnNwbGl0KFwiPVwiKVswXV0gPSBzdHJzW2ldLnNwbGl0KFwiPVwiKVsxXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFt1cmxdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6YCa6L+HeG1s5Yib5bu6YnBtblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHhtbCDliJvlu7picG1zIHhtbFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250YWluZXIg5a655Zmo5a+56LGhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZURpYWdyYW0oeG1sLCBicG1uTW9kZWxlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgYnBtbk1vZGVsZXIuaW1wb3J0WE1MKHhtbCk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDbGFzcygnd2l0aC1lcnJvcicpLmFkZENsYXNzKCd3aXRoLWRpYWdyYW0nKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWRpYWdyYW0nKS5hZGRDbGFzcygnd2l0aC1lcnJvcicpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLmVycm9yIHByZScpLnRleHQoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6YCa6L+HSnNvbuiuvue9ruminOiJslxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGpzb24ganNvbiDlrZfnrKbkuLJcclxuICAgICAqL1xyXG4gICAgc2V0Q29sb3IoanNvbixicG1uTW9kZWxlcikge1xyXG4gICAgICAgIHZhciBtb2RlbGluZyA9IGJwbW5Nb2RlbGVyLmdldCgnbW9kZWxpbmcnKTtcclxuICAgICAgICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gYnBtbk1vZGVsZXIuZ2V0KCdlbGVtZW50UmVnaXN0cnknKVxyXG4gICAgICAgIHZhciBlbGVtZW50VG9Db2xvciA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoanNvbi5uYW1lKTtcclxuICAgICAgICBpZihlbGVtZW50VG9Db2xvcil7XHJcbiAgICAgICAgICAgIG1vZGVsaW5nLnNldENvbG9yKFtlbGVtZW50VG9Db2xvcl0sIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZToganNvbi5zdHJva2UsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBqc29uLmZpbGxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5L+d5a2YYnBtbuWvueixoVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqL1xyXG4gICAgc2F2ZUJwbW4oYnBtbk1vZGVsZXIpIHtcclxuICAgICAgICBicG1uTW9kZWxlci5zYXZlWE1MKHsgZm9ybWF0OiB0cnVlIH0sIGZ1bmN0aW9uIChlcnIsIHhtbCkge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcign5L+d5a2Y5aSx6LSl77yM6K+36YeN6K+VJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh4bWwpXHJcbiAgICAgICAgICAgIHZhciBwYXJhbT17XHJcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdCUE1OXCI6eG1sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vYWRkRGVwbG95bWVudEJ5U3RyaW5nJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOlwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0sXHJcbiAgICAgICAgICAgICAgICAvL2hlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmOCd9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5tc2c9PSfmiJDlip8nKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuc3loaWRlKCdhbGVydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCfkv53lrZjmiJDlip8nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydChyZXN1bHQubXNnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDkuIvovb1icG1uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYnBtbk1vZGVsZXIgYnBtbuWvueixoVxyXG4gICAgICovXHJcbiAgICBkb3duTG9hZChicG1uTW9kZWxlcikge1xyXG4gICAgICAgIHZhciBkb3dubG9hZExpbmsgPSAkKFwiI2Rvd25sb2FkQnBtblwiKVxyXG4gICAgICAgIGJwbW5Nb2RlbGVyLnNhdmVYTUwoeyBmb3JtYXQ6IHRydWUgfSwgZnVuY3Rpb24gKGVyciwgeG1sKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKCdjb3VsZCBub3Qgc2F2ZSBCUE1OIDIuMCBkaWFncmFtJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b29scy5zZXRFbmNvZGVkKGRvd25sb2FkTGluaywgJ2RpYWdyYW0uYnBtbicsIGVyciA/IG51bGwgOiB4bWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6L2s56CBeG1s5bm25LiL6L29XHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbGluayDmjInpkq5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIOS4i+i9veWQjeensFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgYmFzZTY0WE1MXHJcbiAgICAgKi9cclxuICAgIHNldEVuY29kZWQobGluaywgbmFtZSwgZGF0YSkge1xyXG4gICAgICAgIHZhciBlbmNvZGVkRGF0YSA9IGVuY29kZVVSSUNvbXBvbmVudChkYXRhKTtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBsaW5rLmFkZENsYXNzKCdhY3RpdmUnKS5hdHRyKHtcclxuICAgICAgICAgICAgICAgICdocmVmJzogJ2RhdGE6YXBwbGljYXRpb24vYnBtbjIwLXhtbDtjaGFyc2V0PVVURi04LCcgKyBlbmNvZGVkRGF0YSxcclxuICAgICAgICAgICAgICAgICdkb3dubG9hZCc6IG5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGluay5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5LiK5LygYnBtblxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250YWluZXIg5a655Zmo5a+56LGhXHJcbiAgICAgKi9cclxuICAgIHVwbG9hZChicG1uTW9kZWxlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIEZpbGVVcGxvYWQgPSBkb2N1bWVudC5teUZvcm0udXBsb2FkRmlsZS5maWxlc1swXTtcclxuICAgICAgICB2YXIgZm0gPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICBmbS5hcHBlbmQoJ3Byb2Nlc3NGaWxlJywgRmlsZVVwbG9hZCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBwdWJsaWN1cmwrJ3Byb2Nlc3NEZWZpbml0aW9uL3VwbG9hZCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgZGF0YTogZm0sXHJcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLCAvL+emgeatouiuvue9ruivt+axguexu+Wei1xyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsIC8v56aB5q2ianF1ZXJ55a+5REF0YeaVsOaNrueahOWkhOeQhizpu5jorqTkvJrlpITnkIZcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHB1YmxpY3VybCsnYnBtbi8nICsgcmVzdWx0Lm9ialxyXG4gICAgICAgICAgICAgICAgdG9vbHMub3BlbkZyb21VcmwoYnBtbk1vZGVsZXIsIGNvbnRhaW5lciwgdXJsKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIB4bWwgIFVybCDlnLDlnYBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBicG1uTW9kZWxlciBicG1u5a+56LGhXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29udGFpbmVyIOWuueWZqOWvueixoVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCB1cmzlnLDlnYBcclxuICAgICAqL1xyXG4gICAgb3BlbkZyb21VcmwoYnBtbk1vZGVsZXIsIGNvbnRhaW5lciwgdXJsKSB7XHJcbiAgICAgICAgJC5hamF4KHVybCwgeyBkYXRhVHlwZTogJ3RleHQnIH0pLmRvbmUoYXN5bmMgZnVuY3Rpb24gKHhtbCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYnBtbk1vZGVsZXIuaW1wb3J0WE1MKHhtbCk7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3dpdGgtZXJyb3InKS5hZGRDbGFzcygnd2l0aC1kaWFncmFtJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIDlvLnlh7rmoYZcclxuICAgICAqIEBwYXJhbSBpZFxyXG4gICAgICovXHJcbiAgICBzeW9wZW4oaWQpIHtcclxuICAgICAgICB2YXIgZG9tID0gJChcIiNcIiArIGlkKTtcclxuICAgICAgICB0aGlzLnN5Y2VudGVyKGRvbSk7XHJcbiAgICAgICAgZG9tLmFkZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGRvbS5zaG93KCk7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgICQoXCIuc3ktbWFza1wiKS5mYWRlSW4oMzAwKVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhuYW1lKVxyXG4gICAgICAgIH0sIDMwMCk7XHJcblxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6ZqQ6JeP5by55Ye65qGGXHJcbiAgICAgKiBAcGFyYW0gaWRcclxuICAgICAqL1xyXG4gICAgc3loaWRlKGlkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpZCA9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHZhciBkb20gPSAkKFwiLnN5LWFsZXJ0XCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGRvbSA9ICQoXCIjXCIgKyBpZClcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5hbWUgPSBkb20uYXR0cihcInN5LWxlYXZlXCIpO1xyXG4gICAgICAgIGRvbS5hZGRDbGFzcyhuYW1lKTtcclxuICAgICAgICAkKFwiLnN5LW1hc2tcIikuZmFkZU91dCgzMDApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGRvbS5oaWRlKCk7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhuYW1lKTtcclxuICAgICAgICB9LCAzMDApXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDlvLnlh7rmoYblsYXkuK1cclxuICAgICAqIEBwYXJhbSBkb21cclxuICAgICAqL1xyXG4gICAgc3ljZW50ZXIoZG9tKSB7XHJcbiAgICAgICAgdmFyIG1ndG9wID0gcGFyc2VGbG9hdChkb20uaGVpZ2h0KCkgLyAyKTtcclxuICAgICAgICBkb20uY3NzKHtcclxuICAgICAgICAgICAgXCJ0b3BcIjogXCI1MCVcIixcclxuICAgICAgICAgICAgXCJtYXJnaW4tdG9wXCI6IFwiLVwiICsgbWd0b3AgKyBcInB4XCJcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5Yik5pat5piv5ZCm5piv5pWw57uEXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqIEByZXR1cm5zIHthcmcgaXMgQXJyYXk8YW55Pnxib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0FycmF5Rm4odmFsdWUpe1xyXG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBBcnJheV1cIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmoLnmja7mlbDmja7orr7nva7popzoibJcclxuICAgICAqIEBwYXJhbSBkYXRhXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIGdldEJ5Q29sb3IoZGF0YSl7XHJcblxyXG4gICAgICAgIHZhciBDb2xvckpzb249W11cclxuICAgICAgICBmb3IodmFyIGsgaW4gZGF0YVsnaGlnaExpbmUnXSl7XHJcbiAgICAgICAgICAgIHZhciBwYXI9e1xyXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IGRhdGFbJ2hpZ2hMaW5lJ11ba10sXHJcbiAgICAgICAgICAgICAgICBcInN0cm9rZVwiOlwiZ3JlZW5cIixcclxuICAgICAgICAgICAgICAgIFwiZmlsbFwiOlwiZ3JlZW5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIENvbG9ySnNvbi5wdXNoKHBhcilcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKHZhciBrIGluIGRhdGFbJ2hpZ2hQb2ludCddKXtcclxuICAgICAgICAgICAgdmFyIHBhcj17XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogZGF0YVsnaGlnaFBvaW50J11ba10sXHJcbiAgICAgICAgICAgICAgICBcInN0cm9rZVwiOlwiZ3JheVwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCIjZWFlOWU5XCJcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQ29sb3JKc29uLnB1c2gocGFyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IodmFyIGsgaW4gZGF0YVsnaURvJ10pe1xyXG4gICAgICAgICAgICB2YXIgcGFyPXtcclxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBkYXRhWydpRG8nXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCIjYTNkNjhlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBDb2xvckpzb24ucHVzaChwYXIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcih2YXIgayBpbiBkYXRhWyd3YWl0aW5nVG9EbyddKXtcclxuICAgICAgICAgICAgdmFyIHBhcj17XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogZGF0YVsnd2FpdGluZ1RvRG8nXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCJ5ZWxsb3dcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIENvbG9ySnNvbi5wdXNoKHBhcilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIENvbG9ySnNvblxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCB0b29scyJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhcHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvUHJvcGVydGllc1BhbmVsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvVXRpbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvQ3JlYXRlQW5kUmVmZXJlbmNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2NtZC9DcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL011bHRpQ29tbWFuZEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL1VwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9oZWxwZXIvRWxlbWVudEhlbHBlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VNb2RlbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvTW9kZWxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9OYXZpZ2F0ZWRWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvVmlld2VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2NvcmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9CcG1uUmVuZGVyVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L0JwbW5SZW5kZXJlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L1BhdGhNYXAuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9UZXh0UmVuZGVyZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9CcG1uQXV0b1BsYWNlVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQvQ29udGV4dFBhZFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQnBtbkNvcHlQYXN0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL01vZGRsZUNvcHkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29weS1wYXN0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9CcG1uRGlPcmRlcmluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0JwbW5EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9CcG1uRWRpdG9yQWN0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL0JwbW5HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9BdXRvUGxhY2VCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9CcG1uSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0JwbW5LZXlib2FyZEJpbmRpbmdzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxFZGl0aW5nUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsRWRpdGluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvY21kL1VwZGF0ZUxhYmVsSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5MYXlvdXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uVXBkYXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9FbGVtZW50RmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9Nb2RlbGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BcHBlbmRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Bc3NvY2lhdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0F0dGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQm91bmRhcnlFdmVudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZURhdGFPYmplY3RCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGF0YVN0b3JlQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGVsZXRlTGFuZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RldGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRHJvcE9uRmxvd0JlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRml4SG92ZXJCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Hcm91cEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0ltcG9ydERvY2tpbmdGaXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvSXNIb3Jpem9udGFsRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0xhYmVsQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvTW9kZWxpbmdGZWVkYmFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZW1vdmVFbGVtZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1JlcGxhY2VFbGVtZW50QmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUxhbmVCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1NwYWNlVG9vbEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1VuY2xhaW1JZEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0dlb21ldHJpY1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MYWJlbExheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lQXR0YWNobWVudFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lSW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL3V0aWwvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQWRkTGFuZUhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0lkQ2xhaW1IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZXNpemVMYW5lSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvU2V0Q29sb3JIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGxpdExhbmVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9VcGRhdGVDYW52YXNSb290SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlUHJvcGVydGllc0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL0xhbmVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL0JwbW5PcmRlcmluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvUGFsZXR0ZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9SZXBsYWNlTWVudVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS91dGlsL1R5cGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UtcHJldmlldy9CcG1uUmVwbGFjZVByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS1wcmV2aWV3L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvQnBtblJlcGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3J1bGVzL0JwbW5SdWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zZWFyY2gvQnBtblNlYXJjaFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9CcG1uQ29ubmVjdFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0JwbW5DcmVhdGVNb3ZlU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvQnBtbkltcG9ydGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ltcG9ydC9CcG1uVHJlZVdhbGtlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvSW1wb3J0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9MYWJlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Qb3dlcmVkQnlVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvRGlhZ3JhbS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRTdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudEZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FbGVtZW50UmVnaXN0cnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL0dyYXBoaWNzRmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvQmFzZVJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvRGVmYXVsdFJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYWxpZ24tZWxlbWVudHMvQWxpZ25FbGVtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdHRhY2gtc3VwcG9ydC9BdHRhY2hTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F0dGFjaC1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9BdXRvUGxhY2VVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvQXV0b1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1zY3JvbGwvQXV0b1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXNjcm9sbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9CZW5kcG9pbnRNb3ZlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMvQmVuZHBvaW50VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9Db25uZWN0aW9uU2VnbWVudE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jaGFuZ2Utc3VwcG9ydC9DaGFuZ2VTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NsaXBib2FyZC9DbGlwYm9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2xpcGJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvQ29ubmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0L0Nvbm5lY3RQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3L0Nvbm5lY3Rpb25QcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3Rpb24tcHJldmlldy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQ29weVBhc3RlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlL0NyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvQ3JlYXRlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9EcmFnZ2luZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9Ib3ZlckZpeC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dsb2JhbC1jb25uZWN0L0dsb2JhbENvbm5lY3QuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ2xvYmFsLWNvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvYmVoYXZpb3IvU3BhY2VUb29sQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2hhbmQtdG9vbC9IYW5kVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9oYW5kLXRvb2wvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbi9LZXlib2FyZE1vdmVTZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQtbW92ZS1zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmRCaW5kaW5ncy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9MYWJlbFN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL0xhc3NvVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9BbGlnbkVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQXBwZW5kU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQ3JlYXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVMYWJlbEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0NyZWF0ZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0RlbGV0ZUVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9EaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9MYXlvdXRDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvTW92ZUNvbm5lY3Rpb25IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVwbGFjZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVzaXplU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGFjZVRvb2xIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlQXR0YWNobWVudEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVdheXBvaW50c0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9BbmNob3JzSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9oZWxwZXIvTW92ZUNsb3N1cmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9Nb3ZlSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL01vdXNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvTW92ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb3ZlL01vdmVQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3JkZXJpbmcvT3JkZXJpbmdQcm92aWRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdXRsaW5lL091dGxpbmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3V0bGluZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9PdmVybGF5cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wYWxldHRlL1BhbGV0dGUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcGFsZXR0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3ByZXZpZXctc3VwcG9ydC9QcmV2aWV3U3VwcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wcmV2aWV3LXN1cHBvcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplSGFuZGxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMvUnVsZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL1J1bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvU2VhcmNoUGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWxlY3Rpb24vU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvblZpc3VhbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0NyZWF0ZU1vdmVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9SZXNpemVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbFByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9TcGFjZVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy90b29sLW1hbmFnZXIvVG9vbE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbC1tYW5hZ2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL1Rvb2x0aXBzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG91Y2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvdHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2xheW91dC9CYXNlTGF5b3V0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9tb2RlbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL2tleWJvYXJkLW1vdmUvS2V5Ym9hcmRNb3ZlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvTW92ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi90b3VjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQXR0YWNoVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NsaWNrVHJhcC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQ3Vyc29yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Fc2NhcGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRXZlbnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9HZW9tZXRyeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0dyYXBoaWNzVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0lkR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvTGluZUludGVyc2VjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL01hdGguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb3VzZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1BsYXRmb3JtLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUG9zaXRpb25VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUmVtb3ZhbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLW1vZGRsZS9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9jc3MuZXNjYXBlL2Nzcy5lc2NhcGUuanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzLWRpcmVjdC1lZGl0aW5nL2xpYi9EaXJlY3RFZGl0aW5nLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcvbGliL1RleHRCb3guanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlL3RyYW5zbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2RpZGkvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvaGFtbWVyanMvaGFtbWVyLmpzIiwibm9kZV9tb2R1bGVzL2lkcy9ub2RlX21vZHVsZXMvaGF0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lkcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlc1dpdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0RGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmlxLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VYb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RGdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRWFjaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VGb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUh5YnJpZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVBhcnRpYWwuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlU2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlV3JhcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXREYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRIb2xkZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0V3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZWFsTmFtZXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldERhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRXcmFwVG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fdXBkYXRlV3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvYmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW5EZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlCeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvbWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub29wLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub3cuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlckxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gveG9yLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kYXNoL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kb20vZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvbWl0dC9kaXN0L21pdHQuZXMuanMiLCJub2RlX21vZHVsZXMvbW9kZGxlLXhtbC9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9tb2RkbGUvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL2NvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL3JlZnMuanMiLCJub2RlX21vZHVsZXMvcGF0aC1pbnRlcnNlY3Rpb24vaW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL3NheGVuL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL3Njcm9sbC10YWJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlbGVjdGlvbi11cGRhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGlueS1zdmcvZGlzdC9pbmRleC5lc20uanMiLCJyZXNvdXJjZXMvYWN0aXZpdGkuanNvbiIsInJlc291cmNlcy9jdXN0b21Db250cm9scy9DdXN0b21Db250ZXh0UGFkLmpzIiwicmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzL0N1c3RvbVBhbGV0dGUuanMiLCJyZXNvdXJjZXMvY3VzdG9tQ29udHJvbHMvaW5kZXguanMiLCJyZXNvdXJjZXMvY3VzdG9tVHJhbnNsYXRlL2N1c3RvbVRyYW5zbGF0ZS5qcyIsInJlc291cmNlcy9jdXN0b21UcmFuc2xhdGUvdHJhbnNsYXRpb25zR2VybWFuLmpzIiwicmVzb3VyY2VzL25ld0RpYWdyYW0uYnBtbiIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL1Byb3BlcnRpZXNBY3RpdmF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9VdGlscy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvQ2hlY2tib3hFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0NvbWJvRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9FbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0VudHJ5RmllbGREZXNjcmlwdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvTGFiZWxGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9MaW5rRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9TZWxlY3RFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L1RhYmxlRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9UZXh0Qm94RW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9UZXh0SW5wdXRFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L1ZhbGlkYXRpb25Bd2FyZVRleHRJbnB1dC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvQ2F0ZWdvcnlIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvQ21kSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0VsZW1lbnRIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0Zvcm1IZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0lucHV0T3V0cHV0SGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL1BhcnRpY2lwYW50SGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9DcmVhdGVIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9DdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9FbGVtZW50VGVtcGxhdGVzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvRWxlbWVudFRlbXBsYXRlc0xvYWRlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL0hlbHBlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL1ZhbGlkYXRvci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL2NtZC9DaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvY21kL2luZGV4LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvaW5kZXguanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9wYXJ0cy9DaG9vc2VyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9wYXJ0cy9DdXN0b21Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2luZGV4LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvQXN5bmNocm9ub3VzQ29udGludWF0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9DYWxsQWN0aXZpdHlQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0NhbmRpZGF0ZVN0YXJ0ZXJQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0NvbmRpdGlvbmFsUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Db25uZWN0b3JEZXRhaWxQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Db25uZWN0b3JJbnB1dE91dHB1dFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRXJyb3JFdmVudFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRXh0ZXJuYWxUYXNrQ29uZmlndXJhdGlvblByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRmllbGRJbmplY3Rpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Zvcm1Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0hpc3RvcnlUaW1lVG9MaXZlUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9JbnB1dE91dHB1dFBhcmFtZXRlclByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvSW5wdXRPdXRwdXRQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0pvYkNvbmZpZ3VyYXRpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0xpc3RlbmVyRGV0YWlsUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9MaXN0ZW5lckZpZWxkSW5qZWN0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9MaXN0ZW5lclByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvTXVsdGlJbnN0YW5jZUxvb3BQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1Byb3BlcnRpZXNQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1NjcmlwdFRhc2tQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1NlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1N0YXJ0RXZlbnRJbml0aWF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9UYXNrbGlzdFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvVXNlclRhc2tQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1ZhcmlhYmxlTWFwcGluZ1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvVmVyc2lvblRhZ1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vQXN5bmNDb250aW51YXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9DYWxsYWJsZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0NhbmRpZGF0ZVN0YXJ0ZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9EZWxlZ2F0ZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRXh0ZW5zaW9uRWxlbWVudHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FeHRlcm5hbC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0V4dGVybmFsVGFza1ByaW9yaXR5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRmllbGRJbmplY3Rpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9IaXN0b3J5VGltZVRvTGl2ZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0ltcGxlbWVudGF0aW9uVHlwZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vSW5wdXRPdXRwdXRQYXJhbWV0ZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9Kb2JQcmlvcml0eS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0pvYlJldHJ5VGltZUN5Y2xlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vTGlzdGVuZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9NdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1Byb3BlcnRpZXMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9SZXN1bHRWYXJpYWJsZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1NjcmlwdC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1Rhc2tsaXN0LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9Eb2N1bWVudGF0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL0V2ZW50UHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL0V4ZWN1dGFibGVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvSWRQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvTGlua1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9OYW1lUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL1Byb2Nlc3NQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vQ29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vRXJyb3JFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0VzY2FsYXRpb25FdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0V2ZW50RGVmaW5pdGlvblJlZmVyZW5jZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vTWVzc2FnZUV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vTmFtZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vU2lnbmFsRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9UaW1lckV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy90b29scy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0FDQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFQQTtBQVFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFQLENBQWdCLFFBQWhCLEdBQTJCLElBQTNCLEdBQWtDLE1BQU0sQ0FBQyxRQUFQLENBQWdCLElBQWxFO0FBQ0EsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsSUFBaEIsQ0FBcUIsS0FBckIsQ0FBMkIsUUFBM0IsRUFBcUMsQ0FBckMsQ0FBYjtBQUNBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsSUFBM0IsRUFBaUMsQ0FBakMsQ0FBWjtBQUNBLE1BQU0sU0FBUyxHQUFHLE9BQU8sR0FBRyxHQUE1QixDLENBRUE7O0FBQ0EsSUFBSSxxQkFBcUIsR0FBRztBQUN4QixFQUFBLFNBQVMsRUFBRSxDQUFDLE9BQUQsRUFBVSx3QkFBVjtBQURhLENBQTVCO0FBR0E7QUFDQSxJQUFJLFNBQVMsR0FBRyxxQkFBRSxlQUFGLENBQWhCO0FBQ0EsSUFBSSxNQUFNLEdBQUcscUJBQUUsWUFBRixDQUFiO0FBQ0EsSUFBSSxXQUFXLEdBQUcsSUFBSSxnQkFBSixDQUFnQjtBQUM5QixFQUFBLFNBQVMsRUFBRSxNQURtQjtBQUU5QixFQUFBLGVBQWUsRUFBRTtBQUNiLElBQUEsTUFBTSxFQUFFO0FBREssR0FGYTtBQUs5QixFQUFBLGlCQUFpQixFQUFFLENBQ2YsOEJBRGUsRUFFZixpQkFGZSxF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QXBCLEVBQThCLFlBQVk7QUFDdEMsbUJBQU0sTUFBTixDQUFhLFdBQWIsRUFBeUIsU0FBekI7QUFDSCxHQUZEO0FBR0gsQ0FoR0Q7OztBQy9DQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3J2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNubEZBLE1BQUksR0FBRyxHQUFHLE1BQUEsQ0FBQSxPQUFBLEdBQWlCLFVB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4blZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RKQSxTQUFTLGNBQVQsQ0FBd0IsT0FBeEIsRUFBaUMsTUFBakMsRUFBeUM7QUFFdkMsTUFBSSxPQUFPLENBQUMsYUFBUixLQUEwQixNQUFNLENBQUMsYUFBckMsRUFBb0Q7QUFDbEQsUUFBSTtBQUNGO0FBQ0EsYUFBTyxNQUFNLENBQUMsYUFBUCxDQUFxQixV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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5aEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdmRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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LFNBQVMsQ0FBQyxJQUFWLENBQWUsR0FBZjtBQUNIOztBQUNELFNBQUksSUFBSSxDQUFSLElBQWEsSUFBSSxDQUFDLGFBQUQsQ0FBakIsRUFBaUM7QUFDN0IsVUFBSSxHQUFHLEdBQUM7QUFDSixnQkFBUSxJQUFJLENBQUMsYUFBRCxDQUFKLENBQW9CLENBQXBCLENBREo7QUFFSixrQkFBUyxPQUZMO0FBR0osZ0JBQU87QUFISCxPQUFSO0FBS0EsTUFBQSxTQUFTLENBQUMsSUFBVixDQUFlLEdBQWY7QUFDSDs7QUFDRCxXQUFPLFNBQVA7QUFDSDs7QUEvUFMsQ0FBZDtlQXFRZSxLIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiXHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCBCcG1uTW9kZWxlciBmcm9tICdicG1uLWpzL2xpYi9Nb2RlbGVyJztcclxuLy9pbXBvcnQgcHJvcGVydGllc1BhbmVsTW9kdWxlIGZyb20gJy4uL3Jlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsJztcclxuaW1wb3J0IHByb3BlcnRpZXNQYW5lbE1vZHVsZSBmcm9tICdicG1uLWpzLXByb3BlcnRpZXMtcGFuZWwnO1xyXG5pbXBvcnQgcHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlIGZyb20gJy4uL3Jlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpJztcclxuaW1wb3J0IGFjdGl2aXRpTW9kZGxlRGVzY3JpcHRvciBmcm9tICcuLi9yZXNvdXJjZXMvYWN0aXZpdGkuanNvbic7XHJcbmltcG9ydCBjdXN0b21UcmFuc2xhdGUgZnJvbSAnLi4vcmVzb3VyY2VzL2N1c3RvbVRyYW5zbGF0ZS9jdXN0b21UcmFuc2xhdGUnO1xyXG5pbXBvcnQgY3VzdG9tQ29udHJvbHNNb2R1bGUgZnJvbSAnLi4vcmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzJztcclxuaW1wb3J0IHRvb2xzIGZyb20gJy4uL3Jlc291cmNlcy90b29scydcclxuaW1wb3J0IGRpYWdyYW1YTUwgZnJvbSAnLi4vcmVzb3VyY2VzL25ld0RpYWdyYW0uYnBtbic7XHJcbmNvbnN0IHByb0hvc3QgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuY29uc3QgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiYnBtbmpzXCIpWzBdO1xyXG5jb25zdCBrZXkgPSBocmVmLnNwbGl0KHdpbmRvdy5sb2NhdGlvbi5ob3N0KVsxXTtcclxuY29uc3QgcHVibGljdXJsID0gcHJvSG9zdCArIGtleTtcclxuXHJcbi8vIOa3u+WKoOe/u+ivkee7hOS7tlxyXG52YXIgY3VzdG9tVHJhbnNsYXRlTW9kdWxlID0ge1xyXG4gICAgdHJhbnNsYXRlOiBbJ3ZhbHVlJywgY3VzdG9tVHJhbnNsYXRlXVxyXG59O1xyXG5kZWJ1Z2dlclxyXG52YXIgY29udGFpbmVyID0gJCgnI2pzLWRyb3Atem9uZScpO1xyXG52YXIgY2FudmFzID0gJCgnI2pzLWNhbnZhcycpO1xyXG52YXIgYnBtbk1vZGVsZXIgPSBuZXcgQnBtbk1vZGVsZXIoe1xyXG4gICAgY29udGFpbmVyOiBjYW52YXMsXHJcbiAgICBwcm9wZXJ0aWVzUGFuZWw6IHtcclxuICAgICAgICBwYXJlbnQ6ICcjanMtcHJvcGVydGllcy1wYW5lbCdcclxuICAgIH0sXHJcbiAgICBhZGRpdGlvbmFsTW9kdWxlczogW1xyXG4gICAgICAgIHByb3BlcnRpZXNQYW5lbE1vZHVsZSxcclxuICAgICAgICBwcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUsXHJcbiAgICAgICAgY3VzdG9tQ29udHJvbHNNb2R1bGUsXHJcbiAgICAgICAgY3VzdG9tVHJhbnNsYXRlTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgbW9kZGxlRXh0ZW5zaW9uczoge1xyXG4gICAgICAgIGFjdGl2aXRpOmFjdGl2aXRpTW9kZGxlRGVzY3JpcHRvclxyXG4gICAgfVxyXG59KTtcclxuY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWRpYWdyYW0nKTtcclxuLy8g5Yik5pat5rWP6KeI5Zmo5pSv5oyB56iL5bqmXHJcbmlmICghd2luZG93LkZpbGVMaXN0IHx8ICF3aW5kb3cuRmlsZVJlYWRlcikge1xyXG4gICAgd2luZG93LmFsZXJ0KCfor7fkvb/nlKjosLfmrYzjgIHngavni5DjgIFJRTEwK+a1j+iniOWZqCcpO1xyXG59IGVsc2Uge1xyXG4gICAgdG9vbHMucmVnaXN0ZXJGaWxlRHJvcChjb250YWluZXIsIHRvb2xzLmNyZWF0ZURpYWdyYW0oZGlhZ3JhbVhNTCwgYnBtbk1vZGVsZXIsIGNvbnRhaW5lcikpO1xyXG59XHJcblxyXG5cclxuJChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyDliJvlu7picG1uXHJcbiAgICB2YXIgcGFyYW0gPSB0b29scy5nZXRVcmxQYXJhbSh3aW5kb3cubG9jYXRpb24uaHJlZilcclxuICAgICAgICAkKCcuaXRlbScpLnNob3coKVxyXG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdhZGRCcG1uJykge1xyXG4gICAgICAgIHRvb2xzLmNyZWF0ZURpYWdyYW0oZGlhZ3JhbVhNTCwgYnBtbk1vZGVsZXIsIGNvbnRhaW5lcik7XHJcbiAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdsb29rQnBtbicpIHsgLy/nvJbovpFicG1uXHJcbiAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAkKCcuaXRlbScpLmhpZGUoKVxyXG4gICAgICAgICQoJy5kb3dubG9hZCcpLnNob3coKVxyXG4gICAgICAgIGNvbnN0IElkID0gcGFyYW0uZGVwbG95bWVudEZpbGVVVUlEIHx8ICc2ZDRhZjJkYy1iYWIwLTExZWEtYjU4NC0zY2YwMTFlYWFmY2EnXHJcbiAgICAgICAgY29uc3QgTmFtZT1wYXJhbS5kZXBsb3ltZW50TmFtZSB8fCAnU3RyaW5nLmJwbW4nXHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VJZD1wYXJhbS5pbnN0YW5jZUlkXHJcbiAgICAgICAgdmFyIHBhcmFtPXtcclxuICAgICAgICAgICAgXCJkZXBsb3ltZW50SWRcIjpJZCxcclxuICAgICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjpkZWNvZGVVUkkoTmFtZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaW5zdGFuY2VJZCl7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbTE9e1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VJZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsnYWN0aXZpdGlIaXN0b3J5L2dldGhpZ2hMaW5lJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0xLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6J2pzb24nLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgQ29sb3JKc29uPXRvb2xzLmdldEJ5Q29sb3IocmVzdWx0Lm9iailcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vZ2V0RGVmaW5pdGlvblhNTCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6J3RleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3WG1sRGF0YSA9IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShuZXdYbWxEYXRhLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gQ29sb3JKc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLnNldENvbG9yKENvbG9ySnNvbltpXSxicG1uTW9kZWxlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIC8v5Yqg6L295ZCO5Y+w5pa55rOV6I635Y+WeG1sXHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vZ2V0RGVmaW5pdGlvblhNTCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6J3RleHQnLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdYbWxEYXRhID0gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShuZXdYbWxEYXRhLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmKHBhcmFtLnR5cGUgPT09IFwiaGlzdG9yeUJwbW5cIikgeyAvLyBicG1u5Y6G5Y+yXHJcbiAgICAgICAgJCgnLml0ZW0nKS5oaWRlKClcclxuICAgICAgICAkKCcuZG93bmxvYWQnKS5zaG93KClcclxuICAgIH1cclxuICAgIC8vIOeCueWHu+aWsOWinlxyXG4gICAgJCgnI2pzLWRvd25sb2FkLWRpYWdyYW0nKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgIHRvb2xzLnN5b3BlbignYWxlcnQnKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyDngrnlh7vlj5bmtohcclxuICAgICQoJy5jYW5jZWwnKS5vbihcImNsaWNrXCIsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvb2xzLnN5aGlkZSgnYWxlcnQnKVxyXG4gICAgfSlcclxuICAgIC8vIOeCueWHu+ehruWumlxyXG4gICAgJCgnI3N1cmUnKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAvLyBjb25zdCB0ZXh0PSQoXCIjZGVwbG95bWVudE5hbWVcIikudmFsKClcclxuICAgICAgICB0b29scy5zYXZlQnBtbihicG1uTW9kZWxlcilcclxuICAgIH0pXHJcblxyXG5cclxuXHJcbiAgICAvLyDngrnlh7vkuIvovb1cclxuICAgICQoXCIjZG93bmxvYWRCcG1uXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvb2xzLmRvd25Mb2FkKGJwbW5Nb2RlbGVyKVxyXG4gICAgfSlcclxuICAgIC8vIOeCueWHu+S4iuS8oFxyXG4gICAgJChcIiN1cGxvYWRGaWxlXCIpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b29scy51cGxvYWQoYnBtbk1vZGVsZXIsY29udGFpbmVyKVxyXG4gICAgfSlcclxufSk7XHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWInKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuL1V0aWxzJykuZXNjYXBlSFRNTDtcblxudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXG4gICAgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXG4gICAgZG9tUXVlcnlBbGwgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnlBbGwsXG4gICAgZG9tUmVtb3ZlID0gcmVxdWlyZSgnbWluLWRvbScpLnJlbW92ZSxcbiAgICBkb21DbGFzc2VzID0gcmVxdWlyZSgnbWluLWRvbScpLmNsYXNzZXMsXG4gICAgZG9tQ2xvc2VzdCA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbG9zZXN0LFxuICAgIGRvbUF0dHIgPSByZXF1aXJlKCdtaW4tZG9tJykuYXR0cixcbiAgICBkb21EZWxlZ2F0ZSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kZWxlZ2F0ZSxcbiAgICBkb21NYXRjaGVzID0gcmVxdWlyZSgnbWluLWRvbScpLm1hdGNoZXM7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcbiAgICBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoL2dldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpLFxuICAgIGlzRW1wdHkgPSByZXF1aXJlKCdsb2Rhc2gvaXNFbXB0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheScpLFxuICAgIHhvciA9IHJlcXVpcmUoJ2xvZGFzaC94b3InKSxcbiAgICBkZWJvdW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kZWJvdW5jZScpO1xuXG52YXIgdXBkYXRlU2VsZWN0aW9uID0gcmVxdWlyZSgnc2VsZWN0aW9uLXVwZGF0ZScpO1xuXG52YXIgc2Nyb2xsVGFicyA9IHJlcXVpcmUoJ3Njcm9sbC10YWJzJykuZGVmYXVsdDtcblxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcblxudmFyIEhJREVfQ0xBU1MgPSAnYnBwLWhpZGRlbic7XG52YXIgREVCT1VOQ0VfREVMQVkgPSAzMDA7XG5cblxuZnVuY3Rpb24gaXNUb2dnbGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnY2hlY2tib3gnIHx8IG5vZGUudHlwZSA9PT0gJ3JhZGlvJztcbn1cblxuZnVuY3Rpb24gaXNTZWxlY3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnc2VsZWN0LW9uZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGVudEVkaXRhYmxlKG5vZGUpIHtcbiAgcmV0dXJuIGRvbUF0dHIobm9kZSwgJ2NvbnRlbnRlZGl0YWJsZScpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVBsYWNlaG9sZGVycyhub2RlKSB7XG4gIHZhciBzZWxlY3RvciA9ICdpbnB1dFtuYW1lXSwgdGV4dGFyZWFbbmFtZV0sIFtkYXRhLXZhbHVlXSwgW2NvbnRlbnRlZGl0YWJsZV0nO1xuICB2YXIgcGxhY2Vob2xkZXJzID0gZG9tUXVlcnlBbGwoc2VsZWN0b3IsIG5vZGUpO1xuICBpZiAoKCFwbGFjZWhvbGRlcnMgfHwgIXBsYWNlaG9sZGVycy5sZW5ndGgpICYmIGRvbU1hdGNoZXMobm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcGxhY2Vob2xkZXJzID0gWyBub2RlIF07XG4gIH1cbiAgcmV0dXJuIHBsYWNlaG9sZGVycztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGFjdGl2ZSBmb3JtIGNvbnRyb2xzLlxuICogVGhpcyBleGNsdWRlcyB0aGUgaW52aXNpYmxlIGNvbnRyb2xzIHVubGVzcyBhbGwgaXMgdHJ1ZVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsPWZhbHNlXVxuICovXG5mdW5jdGlvbiBnZXRGb3JtQ29udHJvbHMobm9kZSwgYWxsKSB7XG4gIHZhciBjb250cm9scyA9IGRvbVF1ZXJ5QWxsKCdpbnB1dFtuYW1lXSwgdGV4dGFyZWFbbmFtZV0sIHNlbGVjdFtuYW1lXSwgW2NvbnRlbnRlZGl0YWJsZV0nLCBub2RlKTtcblxuICBpZiAoIWNvbnRyb2xzIHx8ICFjb250cm9scy5sZW5ndGgpIHtcbiAgICBjb250cm9scyA9IGRvbU1hdGNoZXMobm9kZSwgJ29wdGlvbicpID8gWyBub2RlIF0gOiBjb250cm9scztcbiAgfVxuXG4gIGlmICghYWxsKSB7XG4gICAgY29udHJvbHMgPSBmaWx0ZXIoY29udHJvbHMsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHJldHVybiAhZG9tQ2xvc2VzdChub2RlLCAnLicgKyBISURFX0NMQVNTKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb250cm9scztcbn1cblxuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGVudHJ5Tm9kZSkge1xuICB2YXIgdmFsdWVzID0ge307XG5cbiAgdmFyIGNvbnRyb2xOb2RlcyA9IGdldEZvcm1Db250cm9scyhlbnRyeU5vZGUpO1xuXG4gIGZvckVhY2goY29udHJvbE5vZGVzLCBmdW5jdGlvbihjb250cm9sTm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IGNvbnRyb2xOb2RlLnZhbHVlO1xuXG4gICAgdmFyIG5hbWUgPSBkb21BdHRyKGNvbnRyb2xOb2RlLCAnbmFtZScpIHx8IGRvbUF0dHIoY29udHJvbE5vZGUsICdkYXRhLW5hbWUnKTtcblxuICAgIC8vIHRha2UgdG9nZ2xlIHN0YXRlIGludG8gYWNjb3VudCBmb3IgcmFkaW8gLyBjaGVja2JveGVzXG4gICAgaWYgKGlzVG9nZ2xlKGNvbnRyb2xOb2RlKSkge1xuICAgICAgaWYgKGNvbnRyb2xOb2RlLmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKCFkb21BdHRyKGNvbnRyb2xOb2RlLCAndmFsdWUnKSkge1xuICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGNvbnRyb2xOb2RlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKGNvbnRyb2xOb2RlKSkge1xuICAgICAgdmFsdWUgPSBjb250cm9sTm9kZS5pbm5lclRleHQ7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgLy8gaGFuZGxlIHNlcmlhbGl6YXRpb24gaW4gZW50cnkgcHJvdmlkZXJcbiAgICAgIC8vIChpZS4gaWYgZW1wdHkgc3RyaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkIG9yIG5vdClcbiAgICAgIHZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcblxufVxuXG4vKipcbiAqIEV4dHJhY3QgaW5wdXQgdmFsdWVzIGZyb20gZW50cnkgbm9kZVxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IGVudHJ5Tm9kZVxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKSB7XG5cbiAgdmFyIHZhbHVlcztcblxuICB2YXIgbGlzdENvbnRhaW5lciA9IGRvbVF1ZXJ5KCdbZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcl0nLCBlbnRyeU5vZGUpO1xuICBpZiAobGlzdENvbnRhaW5lcikge1xuICAgIHZhbHVlcyA9IFtdO1xuICAgIHZhciBsaXN0Tm9kZXMgPSBsaXN0Q29udGFpbmVyLmNoaWxkcmVuIHx8IFtdO1xuICAgIGZvckVhY2gobGlzdE5vZGVzLCBmdW5jdGlvbihsaXN0Tm9kZSkge1xuICAgICAgdmFsdWVzLnB1c2goZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGxpc3ROb2RlKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGVudHJ5Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBmb3JtIGV4dHJhY3RlZCB2YWx1ZSBlcXVhbHNcbiAqIHRvIGFuIG9sZCBjYWNoZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRWYWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdmFsdWVFcXVhbCh2YWx1ZSwgb2xkVmFsdWUpIHtcblxuICBpZiAodmFsdWUgJiYgIW9sZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGFsbEtleXMgPSBrZXlzKHZhbHVlKS5jb25jYXQoa2V5cyhvbGRWYWx1ZSkpO1xuXG4gIHJldHVybiBhbGxLZXlzLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiB2YWx1ZVtrZXldID09PSBvbGRWYWx1ZVtrZXldO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZm9ybSBleHRyYWN0ZWQgdmFsdWUocylcbiAqIGVxdWFsIGFuIG9sZCBjYWNoZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD58T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0PnxPYmplY3R9IG9sZFZhbHVlc1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdmFsdWVzRXF1YWwodmFsdWVzLCBvbGRWYWx1ZXMpIHtcblxuICBpZiAoaXNBcnJheSh2YWx1ZXMpKSB7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCAhPT0gb2xkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXMuZXZlcnkoZnVuY3Rpb24odiwgaWR4KSB7XG4gICAgICByZXR1cm4gdmFsdWVFcXVhbCh2LCBvbGRWYWx1ZXNbaWR4XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVFcXVhbCh2YWx1ZXMsIG9sZFZhbHVlcyk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbWFwcGluZyBvZiB7IGlkOiBlbnRyeSB9IGZvciBhbGwgZW50cmllcyBpbiB0aGUgZ2l2ZW4gZ3JvdXBzIGluIHRoZSBnaXZlbiB0YWJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YWJzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RFbnRyaWVzKHRhYnMpIHtcbiAgcmV0dXJuIGtleUJ5KGZsYXR0ZW5EZWVwKG1hcChmbGF0dGVuRGVlcChtYXAodGFicywgJ2dyb3VwcycpKSwgJ2VudHJpZXMnKSksICdpZCcpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIG1hcHBpbmcgb2YgeyBpZDogZ3JvdXAgfSBmb3IgYWxsIGdyb3VwcyBpbiB0aGUgZ2l2ZW4gdGFicy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFic1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBleHRyYWN0R3JvdXBzKHRhYnMpIHtcbiAgcmV0dXJuIGtleUJ5KGZsYXR0ZW5EZWVwKG1hcCh0YWJzLCAnZ3JvdXBzJykpLCAnaWQnKTtcbn1cblxuLyoqXG4gKiBBIHByb3BlcnRpZXMgcGFuZWwgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVG8gdXNlIGl0IHByb3ZpZGUgYSBgcHJvcGVydGllc1Byb3ZpZGVyYCBjb21wb25lbnQgdGhhdCBrbm93c1xuICogYWJvdXQgd2hpY2ggcHJvcGVydGllcyB0byBkaXNwbGF5LlxuICpcbiAqIFByb3BlcnRpZXMgZWRpdCBzdGF0ZSAvIHZpc2liaWxpdHkgY2FuIGJlIGludGVyY2VwdGVkXG4gKiB2aWEgYSBjdXN0b20ge0BsaW5rIFByb3BlcnRpZXNBY3RpdmF0b3J9LlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXNQcm92aWRlcn0gcHJvcGVydGllc1Byb3ZpZGVyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbmZ1bmN0aW9uIFByb3BlcnRpZXNQYW5lbChjb25maWcsIGV2ZW50QnVzLCBtb2RlbGluZywgcHJvcGVydGllc1Byb3ZpZGVyLCBjb21tYW5kU3RhY2ssIGNhbnZhcykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9wcm9wZXJ0aWVzUHJvdmlkZXIgPSBwcm9wZXJ0aWVzUHJvdmlkZXI7XG5cbiAgdGhpcy5faW5pdChjb25maWcpO1xufVxuXG5Qcm9wZXJ0aWVzUGFuZWwuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5wcm9wZXJ0aWVzUGFuZWwnLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAncHJvcGVydGllc1Byb3ZpZGVyJyxcbiAgJ2NvbW1hbmRTdGFjaycsXG4gICdjYW52YXMnXG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3BlcnRpZXNQYW5lbDtcblxuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oY29uZmlnKSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcyxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIHJvb3QgZWxlbWVudCBvbmNlIGl0IGlzIGFkZGVkIHRvIHRoZSBjYW52YXNcbiAgICovXG4gIGV2ZW50QnVzLm9uKCdyb290LmFkZGVkJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlbGVtZW50ID0gZS5lbGVtZW50O1xuXG4gICAgaWYgKGlzSW1wbGljaXRSb290KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGUoZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IGUubmV3U2VsZWN0aW9uWzBdO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAoaXNJbXBsaWNpdFJvb3Qocm9vdEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGUobmV3RWxlbWVudCk7XG4gIH0pO1xuXG4gIC8vIGFkZCAvIHVwZGF0ZSB0YWItYmFyIHNjcm9sbGluZ1xuICBldmVudEJ1cy5vbihbXG4gICAgJ3Byb3BlcnRpZXNQYW5lbC5jaGFuZ2VkJyxcbiAgICAncHJvcGVydGllc1BhbmVsLnJlc2l6ZWQnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgdGFiQmFyTm9kZSA9IGRvbVF1ZXJ5KCcuYnBwLXByb3BlcnRpZXMtdGFiLWJhcicsIHNlbGYuX2NvbnRhaW5lcik7XG5cbiAgICBpZiAoIXRhYkJhck5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2Nyb2xsZXIgPSBzY3JvbGxUYWJzLmdldCh0YWJCYXJOb2RlKTtcblxuICAgIGlmICghc2Nyb2xsZXIpIHtcblxuICAgICAgLy8gd2UgZGlkIG5vdCBpbml0aWFsaXplIHlldCwgZG8gdGhhdFxuICAgICAgLy8gbm93IGFuZCBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBhY3RpdmVcbiAgICAgIC8vIHRhYiBvbiBzY3JvbGwgdXBkYXRlXG4gICAgICBzY3JvbGxlciA9IHNjcm9sbFRhYnModGFiQmFyTm9kZSwge1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICB0YWJzQ29udGFpbmVyOiAnLmJwcC1wcm9wZXJ0aWVzLXRhYnMtbGlua3MnLFxuICAgICAgICAgIHRhYjogJy5icHAtcHJvcGVydGllcy10YWJzLWxpbmtzIGxpJyxcbiAgICAgICAgICBpZ25vcmU6ICcuYnBwLWhpZGRlbicsXG4gICAgICAgICAgYWN0aXZlOiAnLmJwcC1hY3RpdmUnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG5cbiAgICAgIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCBmdW5jdGlvbihuZXdBY3RpdmVOb2RlLCBvbGRBY3RpdmVOb2RlLCBkaXJlY3Rpb24pIHtcblxuICAgICAgICB2YXIgbGlua05vZGUgPSBkb21RdWVyeSgnW2RhdGEtdGFiLXRhcmdldF0nLCBuZXdBY3RpdmVOb2RlKTtcblxuICAgICAgICB2YXIgdGFiSWQgPSBkb21BdHRyKGxpbmtOb2RlLCAnZGF0YS10YWItdGFyZ2V0Jyk7XG5cbiAgICAgICAgc2VsZi5hY3RpdmF0ZVRhYih0YWJJZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZWFjdCBvbiB0YWIgY2hhbmdlcyBhbmQgb3IgdGFiQ29udGFpbmVyIHJlc2l6ZVxuICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhlIGFjdGl2ZSB0YWIgaXMgc2hvd24gY29tcGxldGVseVxuICAgIHNjcm9sbGVyLnVwZGF0ZSgpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudHMuY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjdXJyZW50ID0gc2VsZi5fY3VycmVudDtcbiAgICB2YXIgZWxlbWVudCA9IGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGlmIChlLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xKSB7XG4gICAgICAgIHNlbGYudXBkYXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnRUZW1wbGF0ZXMuY2hhbmdlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VsZi5fY3VycmVudDtcbiAgICB2YXIgZWxlbWVudCA9IGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHNlbGYudXBkYXRlKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZGV0YWNoKCk7XG4gIH0pO1xuXG4gIHRoaXMuX2NvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXBhbmVsXCI+PC9kaXY+Jyk7XG5cbiAgdGhpcy5fYmluZExpc3RlbmVycyh0aGlzLl9jb250YWluZXIpO1xuXG4gIGlmIChjb25maWcgJiYgY29uZmlnLnBhcmVudCkge1xuICAgIHRoaXMuYXR0YWNoVG8oY29uZmlnLnBhcmVudCk7XG4gIH1cbn07XG5cblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKHBhcmVudE5vZGUpIHtcblxuICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudE5vZGUgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBkZXRhY2ggZnJvbSB0aGVcbiAgLy8gcHJldmlvdXMsIG9sZCBwYXJlbnRcbiAgdGhpcy5kZXRhY2goKTtcblxuICAvLyB1bndyYXAgalF1ZXJ5IGlmIHByb3ZpZGVkXG4gIGlmIChwYXJlbnROb2RlLmdldCAmJiBwYXJlbnROb2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXQoMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmVudE5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyZW50Tm9kZSA9IGRvbVF1ZXJ5KHBhcmVudE5vZGUpO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcblxuICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgdGhpcy5fZW1pdCgnYXR0YWNoJyk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsXG4gICAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZW1pdCgnZGV0YWNoJyk7XG5cbiAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIFNlbGVjdCB0aGUgZ2l2ZW4gdGFiIHdpdGhpbiB0aGUgcHJvcGVydGllcyBwYW5lbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHRhYlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmFjdGl2YXRlVGFiID0gZnVuY3Rpb24odGFiKSB7XG5cbiAgdmFyIHRhYklkID0gdHlwZW9mIHRhYiA9PT0gJ3N0cmluZycgPyB0YWIgOiB0YWIuaWQ7XG5cbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIHZhciBwYW5lbE5vZGUgPSBjdXJyZW50LnBhbmVsO1xuXG4gIHZhciBhbGxUYWJOb2RlcyA9IGRvbVF1ZXJ5QWxsKCcuYnBwLXByb3BlcnRpZXMtdGFiJywgcGFuZWxOb2RlKSxcbiAgICAgIGFsbFRhYkxpbmtOb2RlcyA9IGRvbVF1ZXJ5QWxsKCcuYnBwLXByb3BlcnRpZXMtdGFiLWxpbmsnLCBwYW5lbE5vZGUpO1xuXG4gIGZvckVhY2goYWxsVGFiTm9kZXMsIGZ1bmN0aW9uKHRhYk5vZGUpIHtcblxuICAgIHZhciBjdXJyZW50VGFiSWQgPSBkb21BdHRyKHRhYk5vZGUsICdkYXRhLXRhYicpO1xuXG4gICAgZG9tQ2xhc3Nlcyh0YWJOb2RlKS50b2dnbGUoJ2JwcC1hY3RpdmUnLCB0YWJJZCA9PT0gY3VycmVudFRhYklkKTtcbiAgfSk7XG5cbiAgZm9yRWFjaChhbGxUYWJMaW5rTm9kZXMsIGZ1bmN0aW9uKHRhYkxpbmtOb2RlKSB7XG5cbiAgICB2YXIgdGFiTGluayA9IGRvbVF1ZXJ5KCdbZGF0YS10YWItdGFyZ2V0XScsIHRhYkxpbmtOb2RlKSxcbiAgICAgICAgY3VycmVudFRhYklkID0gZG9tQXR0cih0YWJMaW5rLCAnZGF0YS10YWItdGFyZ2V0Jyk7XG5cbiAgICBkb21DbGFzc2VzKHRhYkxpbmtOb2RlKS50b2dnbGUoJ2JwcC1hY3RpdmUnLCB0YWJJZCA9PT0gY3VycmVudFRhYklkKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsXG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgLy8gbm8gYWN0dWFsIHNlbGVjdGlvbiBjaGFuZ2VcbiAgdmFyIG5lZWRzQ3JlYXRlID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAvLyB1c2UgUm9vdEVsZW1lbnQgb2YgQlBNTiBkaWFncmFtIHRvIGdlbmVyYXRlIHByb3BlcnRpZXMgcGFuZWwgaWYgbm8gZWxlbWVudCBpcyBzZWxlY3RlZFxuICAgIGVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcbiAgfVxuXG4gIHZhciBuZXdUYWJzID0gdGhpcy5fcHJvcGVydGllc1Byb3ZpZGVyLmdldFRhYnMoZWxlbWVudCk7XG5cbiAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50ID09PSBlbGVtZW50KSB7XG4gICAgLy8gc2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgcGFuZWxcblxuICAgIG5lZWRzQ3JlYXRlID0gdGhpcy5fZW50cmllc0NoYW5nZWQoY3VycmVudCwgbmV3VGFicyk7XG4gIH1cblxuICBpZiAobmVlZHNDcmVhdGUpIHtcblxuICAgIGlmIChjdXJyZW50KSB7XG5cbiAgICAgIC8vIGdldCBhY3RpdmUgdGFiIGZyb20gdGhlIGV4aXN0aW5nIHBhbmVsIGJlZm9yZSByZW1vdmUgaXRcbiAgICAgIHZhciBhY3RpdmVUYWJOb2RlID0gZG9tUXVlcnkoJy5icHAtcHJvcGVydGllcy10YWIuYnBwLWFjdGl2ZScsIGN1cnJlbnQucGFuZWwpO1xuXG4gICAgICB2YXIgYWN0aXZlVGFiSWQ7XG4gICAgICBpZiAoYWN0aXZlVGFiTm9kZSkge1xuICAgICAgICBhY3RpdmVUYWJJZCA9IGRvbUF0dHIoYWN0aXZlVGFiTm9kZSwgJ2RhdGEtdGFiJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBvbGQgcGFuZWxcbiAgICAgIGRvbVJlbW92ZShjdXJyZW50LnBhbmVsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50ID0gdGhpcy5fY3JlYXRlKGVsZW1lbnQsIG5ld1RhYnMpO1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIHNhdmVkIGFjdGl2ZSB0YWIgZnJvbSB0aGUgcmVtb3ZlIHBhbmVsIG9yIHRoZSBmaXJzdCB0YWJcbiAgICAoYWN0aXZlVGFiSWQpID8gdGhpcy5hY3RpdmF0ZVRhYihhY3RpdmVUYWJJZCkgOiB0aGlzLmFjdGl2YXRlVGFiKHRoaXMuX2N1cnJlbnQudGFic1swXSk7XG5cbiAgfVxuXG4gIGlmICh0aGlzLl9jdXJyZW50KSB7XG4gICAgLy8gbWFrZSBzdXJlIGNvcnJlY3QgdGFiIGNvbnRlbnRzIGFyZSB2aXNpYmxlXG4gICAgdGhpcy5fdXBkYXRlQWN0aXZhdGlvbih0aGlzLl9jdXJyZW50KTtcblxuICB9XG5cbiAgdGhpcy5fZW1pdCgnY2hhbmdlZCcpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvbmUgb2YgdHdvIGdyb3VwcyBoYXMgZGlmZmVyZW50IGVudHJpZXMgdGhhbiB0aGUgb3RoZXIuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjdXJyZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IG5ld1RhYnNcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2VudHJpZXNDaGFuZ2VkID0gZnVuY3Rpb24oY3VycmVudCwgbmV3VGFicykge1xuXG4gIHZhciBvbGRFbnRyeUlkcyA9IGtleXMoY3VycmVudC5lbnRyaWVzKSxcbiAgICAgIG5ld0VudHJ5SWRzID0ga2V5cyhleHRyYWN0RW50cmllcyhuZXdUYWJzKSk7XG5cbiAgcmV0dXJuICFpc0VtcHR5KHhvcihvbGRFbnRyeUlkcywgbmV3RW50cnlJZHMpKTtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuJyArIGV2ZW50LCB7IHBhbmVsOiB0aGlzLCBjdXJyZW50OiB0aGlzLl9jdXJyZW50IH0pO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fYmluZExpc3RlbmVycyA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBoYW5kbGVzIGEgY2hhbmdlIGZvciBhIGdpdmVuIGV2ZW50XG4gIHZhciBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcblxuICAgIC8vIHNlZSBpZiB3ZSBoYW5kbGUgYSBjaGFuZ2UgaW5zaWRlIGEgW2RhdGEtZW50cnldIGVsZW1lbnQuXG4gICAgLy8gaWYgbm90LCBkcm9wIG91dFxuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCxcbiAgICAgICAgZW50cnlOb2RlID0gZG9tQ2xvc2VzdChpbnB1dE5vZGUsICdbZGF0YS1lbnRyeV0nKSxcbiAgICAgICAgZW50cnlJZCwgZW50cnk7XG5cbiAgICAvLyBjaGFuZ2UgZnJvbSBvdXRzaWRlIGEgW2RhdGEtZW50cnldIGVsZW1lbnQsIHNpbXBseSBpZ25vcmVcbiAgICBpZiAoIWVudHJ5Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVudHJ5SWQgPSBkb21BdHRyKGVudHJ5Tm9kZSwgJ2RhdGEtZW50cnknKTtcbiAgICBlbnRyeSA9IHNlbGYuZ2V0RW50cnkoZW50cnlJZCk7XG5cbiAgICB2YXIgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKTtcblxuICAgIGlmIChldmVudC50eXBlID09PSAnY2hhbmdlJykge1xuXG4gICAgICAvLyAtIGlmIHRoZSBcImRhdGEtb24tY2hhbmdlXCIgYXR0cmlidXRlIGlzIHByZXNlbnQgYW5kIGEgdmFsdWUgaXMgY2hhbmdlZCxcbiAgICAgIC8vICAgdGhlbiB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gaXMgcGVyZm9ybWVkLlxuICAgICAgLy8gLSBpZiB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gcmV0dXJucyBcInRydWVcIiB0aGVuIGFuIHVwZGF0ZSB0byB0aGUgYnVzaW5lc3NcbiAgICAgIC8vICAgb2JqZWN0IGlzIGRvbmVcbiAgICAgIC8vIC0gaWYgaXQgZG9lcyBub3QgcmV0dXJuIFwidHJ1ZVwiLCB0aGVuIG9ubHkgdGhlIERPTSBjb250ZW50IGlzIHVwZGF0ZWRcbiAgICAgIHZhciBvbkNoYW5nZUFjdGlvbiA9IGRvbUF0dHIoaW5wdXROb2RlLCAnZGF0YS1vbi1jaGFuZ2UnKTtcblxuICAgICAgaWYgKG9uQ2hhbmdlQWN0aW9uKSB7XG4gICAgICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgb25DaGFuZ2VBY3Rpb24sIGV2ZW50KTtcblxuICAgICAgICBpZiAoIWlzRW50cnlEaXJ0eSkge1xuICAgICAgICAgIHJldHVybiBzZWxmLnVwZGF0ZShzZWxmLl9jdXJyZW50LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHNlbGYuYXBwbHlDaGFuZ2VzKGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG4gICAgc2VsZi51cGRhdGVTdGF0ZShlbnRyeSwgZW50cnlOb2RlKTtcbiAgfTtcblxuICAvLyBkZWJvdW5jZSB1cGRhdGUgb25seSBlbGVtZW50cyB0aGF0IGFyZSB0YXJnZXQgb2Yga2V5IGV2ZW50cyxcbiAgLy8gaS5lLiBJTlBVVCBhbmQgVEVYVEFSRUEuIFNFTEVDVHMgd2lsbCB0cmlnZ2VyIGFuIGltbWVkaWF0ZSB1cGRhdGUgYW55d2F5LlxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJ2lucHV0LCB0ZXh0YXJlYSwgW2NvbnRlbnRlZGl0YWJsZV0nLCAnaW5wdXQnLCBkZWJvdW5jZShoYW5kbGVDaGFuZ2UsIERFQk9VTkNFX0RFTEFZKSk7XG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIFtjb250ZW50ZWRpdGFibGVdJywgJ2NoYW5nZScsIGhhbmRsZUNoYW5nZSk7XG5cbiAgLy8gaGFuZGxlIGtleSBldmVudHNcbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdzZWxlY3QnLCAna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIERFTFxuICAgIGlmIChlLmtleUNvZGUgPT09IDQ2KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdbZGF0YS1hY3Rpb25dJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuXG4gICAgLy8gdHJpZ2dlcnMgb24gYWxsIGlucHV0c1xuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCxcbiAgICAgICAgZW50cnlOb2RlID0gZG9tQ2xvc2VzdChpbnB1dE5vZGUsICdbZGF0YS1lbnRyeV0nKTtcblxuICAgIHZhciBhY3Rpb25JZCA9IGRvbUF0dHIoaW5wdXROb2RlLCAnZGF0YS1hY3Rpb24nKSxcbiAgICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZW50cnlOb2RlLCAnZGF0YS1lbnRyeScpO1xuXG4gICAgdmFyIGVudHJ5ID0gc2VsZi5nZXRFbnRyeShlbnRyeUlkKTtcblxuICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgYWN0aW9uSWQsIGV2ZW50KTtcblxuICAgIGlmIChpc0VudHJ5RGlydHkpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuXG4gICAgICBzZWxmLmFwcGx5Q2hhbmdlcyhlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50LCBlbGVtZW50KSB7XG4gICAgLy8gdHJpZ2dlcnMgb24gYWxsIGlucHV0c1xuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldDtcblxuICAgIHZhciBlbnRyeU5vZGUgPSBkb21DbG9zZXN0KGlucHV0Tm9kZSwgJ1tkYXRhLWVudHJ5XScpO1xuXG4gICAgLy8gb25seSB3b3JrIG9uIGRhdGEgZW50cmllc1xuICAgIGlmICghZW50cnlOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50SGFuZGxlcklkID0gZG9tQXR0cihpbnB1dE5vZGUsICdkYXRhLWJsdXInKSxcbiAgICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZW50cnlOb2RlLCAnZGF0YS1lbnRyeScpO1xuXG4gICAgdmFyIGVudHJ5ID0gc2VsZi5nZXRFbnRyeShlbnRyeUlkKTtcblxuICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgZXZlbnRIYW5kbGVySWQsIGV2ZW50KTtcblxuICAgIGlmIChpc0VudHJ5RGlydHkpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuXG4gICAgICBzZWxmLmFwcGx5Q2hhbmdlcyhlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gIH1cblxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJ1tkYXRhLWJsdXJdJywgJ2JsdXInLCBoYW5kbGVJbnB1dCwgdHJ1ZSk7XG5cbiAgLy8gbWFrZSB0YWIgbGlua3MgaW50ZXJhY3RpdmVcbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICcuYnBwLXByb3BlcnRpZXMtdGFicy1saW5rcyBbZGF0YS10YWItdGFyZ2V0XScsICdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHZhciBkZWxlZ2F0ZVRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgdmFyIHRhYklkID0gZG9tQXR0cihkZWxlZ2F0ZVRhcmdldCwgJ2RhdGEtdGFiLXRhcmdldCcpO1xuXG4gICAgLy8gYWN0aXZhdGUgdGFiIG9uIGxpbmsgY2xpY2tcbiAgICBzZWxmLmFjdGl2YXRlVGFiKHRhYklkKTtcbiAgfSk7XG5cbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUudXBkYXRlU3RhdGUgPSBmdW5jdGlvbihlbnRyeSwgZW50cnlOb2RlKSB7XG4gIHRoaXMudXBkYXRlU2hvdyhlbnRyeSwgZW50cnlOb2RlKTtcbiAgdGhpcy51cGRhdGVEaXNhYmxlKGVudHJ5LCBlbnRyeU5vZGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGVudHJ5IG5vZGUgaW4gdGhlIERPTVxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZVNob3cgPSBmdW5jdGlvbihlbnRyeSwgbm9kZSkge1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudDtcblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hvd05vZGVzID0gZG9tUXVlcnlBbGwoJ1tkYXRhLXNob3ddJywgbm9kZSkgfHwgW107XG5cbiAgZm9yRWFjaChzaG93Tm9kZXMsIGZ1bmN0aW9uKHNob3dOb2RlKSB7XG5cbiAgICB2YXIgZXhwciA9IGRvbUF0dHIoc2hvd05vZGUsICdkYXRhLXNob3cnKTtcbiAgICB2YXIgZm4gPSBnZXQoZW50cnksIGV4cHIpO1xuICAgIGlmIChmbikge1xuICAgICAgdmFyIHNjb3BlID0gZG9tQ2xvc2VzdChzaG93Tm9kZSwgJ1tkYXRhLXNjb3BlXScpIHx8IG5vZGU7XG4gICAgICB2YXIgc2hvdWxkU2hvdyA9IGZuKGN1cnJlbnQuZWxlbWVudCwgbm9kZSwgc2hvd05vZGUsIHNjb3BlKSB8fCBmYWxzZTtcbiAgICAgIGlmIChzaG91bGRTaG93KSB7XG4gICAgICAgIGRvbUNsYXNzZXMoc2hvd05vZGUpLnJlbW92ZShISURFX0NMQVNTKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbUNsYXNzZXMoc2hvd05vZGUpLmFkZChISURFX0NMQVNTKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBnaXZlbiBmdW5jdGlvbi4gSWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZVxuICogbm9kZSBpcyBtYXJrZWQgYXMgXCJkaXNhYmxlZFwiLlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZURpc2FibGUgPSBmdW5jdGlvbihlbnRyeSwgbm9kZSkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgaWYgKCFjdXJyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vZGVzID0gZG9tUXVlcnlBbGwoJ1tkYXRhLWRpc2FibGVdJywgbm9kZSkgfHwgW107XG5cbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24oY3VycmVudE5vZGUpIHtcbiAgICB2YXIgZXhwciA9IGRvbUF0dHIoY3VycmVudE5vZGUsICdkYXRhLWRpc2FibGUnKTtcbiAgICB2YXIgZm4gPSBnZXQoZW50cnksIGV4cHIpO1xuICAgIGlmIChmbikge1xuICAgICAgdmFyIHNjb3BlID0gZG9tQ2xvc2VzdChjdXJyZW50Tm9kZSwgJ1tkYXRhLXNjb3BlXScpIHx8IG5vZGU7XG4gICAgICB2YXIgc2hvdWxkRGlzYWJsZSA9IGZuKGN1cnJlbnQuZWxlbWVudCwgbm9kZSwgY3VycmVudE5vZGUsIHNjb3BlKSB8fCBmYWxzZTtcbiAgICAgIGRvbUF0dHIoY3VycmVudE5vZGUsICdkaXNhYmxlZCcsIHNob3VsZERpc2FibGUgPyAnJyA6IG51bGwpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmV4ZWN1dGVBY3Rpb24gPSBmdW5jdGlvbihlbnRyeSwgZW50cnlOb2RlLCBhY3Rpb25JZCwgZXZlbnQpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIGlmICghY3VycmVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmbiA9IGdldChlbnRyeSwgYWN0aW9uSWQpO1xuICBpZiAoZm4pIHtcbiAgICB2YXIgc2NvcGVOb2RlID0gZG9tQ2xvc2VzdChldmVudC50YXJnZXQsICdbZGF0YS1zY29wZV0nKSB8fCBlbnRyeU5vZGU7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGVudHJ5LCBbIGN1cnJlbnQuZWxlbWVudCwgZW50cnlOb2RlLCBldmVudCwgc2NvcGVOb2RlIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGx5IGNoYW5nZXMgdG8gdGhlIGJ1c2luZXNzIG9iamVjdCBieSBleGVjdXRpbmcgYSBjb21tYW5kXG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuYXBwbHlDaGFuZ2VzID0gZnVuY3Rpb24oZW50cnksIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY3VycmVudC5lbGVtZW50O1xuXG4gIC8vIGVuc3VyZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgbW9kZWwgaWYgd2UgZ290IGRpcnR5IGNoYW5nZXNcbiAgaWYgKHZhbHVlc0VxdWFsKHZhbHVlcywgZW50cnkub2xkVmFsdWVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb21tYW5kID0gZW50cnkuc2V0KGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCk7XG5cbiAgdmFyIGNvbW1hbmRUb0V4ZWN1dGU7XG5cbiAgaWYgKGlzQXJyYXkoY29tbWFuZCkpIHtcbiAgICBpZiAoY29tbWFuZC5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRUb0V4ZWN1dGUgPSB7XG4gICAgICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsXG4gICAgICAgIGNvbnRleHQ6IGZsYXR0ZW5EZWVwKGNvbW1hbmQpXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb21tYW5kVG9FeGVjdXRlID0gY29tbWFuZDtcbiAgfVxuXG4gIGlmIChjb21tYW5kVG9FeGVjdXRlKSB7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZFRvRXhlY3V0ZS5jbWQsIGNvbW1hbmRUb0V4ZWN1dGUuY29udGV4dCB8fCB7IGVsZW1lbnQgOiBlbGVtZW50IH0pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMudXBkYXRlKGVsZW1lbnQpO1xuICB9XG59O1xuXG5cbi8qKlxuICogYXBwbHkgdmFsaWRhdGlvbiBlcnJvcnMgaW4gdGhlIERPTSBhbmQgc2hvdyBvciByZW1vdmUgYW4gZXJyb3IgbWVzc2FnZSBuZWFyIHRoZSBlbnRyeSBub2RlLlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmFwcGx5VmFsaWRhdGlvbkVycm9ycyA9IGZ1bmN0aW9uKHZhbGlkYXRpb25FcnJvcnMsIGVudHJ5Tm9kZSkge1xuXG4gIHZhciB2YWxpZCA9IHRydWU7XG5cbiAgdmFyIGNvbnRyb2xOb2RlcyA9IGdldEZvcm1Db250cm9scyhlbnRyeU5vZGUsIHRydWUpO1xuXG4gIGZvckVhY2goY29udHJvbE5vZGVzLCBmdW5jdGlvbihjb250cm9sTm9kZSkge1xuXG4gICAgdmFyIG5hbWUgPSBkb21BdHRyKGNvbnRyb2xOb2RlLCAnbmFtZScpIHx8IGRvbUF0dHIoY29udHJvbE5vZGUsICdkYXRhLW5hbWUnKTtcblxuICAgIHZhciBlcnJvciA9IHZhbGlkYXRpb25FcnJvcnMgJiYgdmFsaWRhdGlvbkVycm9yc1tuYW1lXTtcblxuICAgIHZhciBlcnJvck1lc3NhZ2VOb2RlID0gZG9tUXVlcnkoJy5icHAtZXJyb3ItbWVzc2FnZScsIGNvbnRyb2xOb2RlLnBhcmVudE5vZGUpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWVycm9yTWVzc2FnZU5vZGUpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlTm9kZSA9IGRvbWlmeSgnPGRpdj48L2Rpdj4nKTtcblxuICAgICAgICBkb21DbGFzc2VzKGVycm9yTWVzc2FnZU5vZGUpLmFkZCgnYnBwLWVycm9yLW1lc3NhZ2UnKTtcblxuICAgICAgICAvLyBpbnNlcnQgZXJyb3JNZXNzYWdlTm9kZSBhZnRlciBjb250cm9sTm9kZVxuICAgICAgICBjb250cm9sTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlcnJvck1lc3NhZ2VOb2RlLCBjb250cm9sTm9kZS5uZXh0U2libGluZyk7XG4gICAgICB9XG5cbiAgICAgIGVycm9yTWVzc2FnZU5vZGUudGV4dENvbnRlbnQgPSBlcnJvcjtcblxuICAgICAgZG9tQ2xhc3Nlcyhjb250cm9sTm9kZSkuYWRkKCdpbnZhbGlkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbUNsYXNzZXMoY29udHJvbE5vZGUpLnJlbW92ZSgnaW52YWxpZCcpO1xuXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlTm9kZSkge1xuICAgICAgICBjb250cm9sTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycm9yTWVzc2FnZU5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZhbGlkO1xufTtcblxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBlbnRyeSBjb250YWlucyB2YWxpZCBpbnB1dFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW50cnksIHZhbHVlcywgZW50cnlOb2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgdmFyIHZhbGlkID0gdHJ1ZTtcblxuICBlbnRyeU5vZGUgPSBlbnRyeU5vZGUgfHwgZG9tUXVlcnkoJ1tkYXRhLWVudHJ5PVwiJyArIGVudHJ5LmlkICsgJ1wiXScsIGN1cnJlbnQucGFuZWwpO1xuXG4gIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHZhciBsaXN0Q29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWxpc3QtZW50cnktY29udGFpbmVyXScsIGVudHJ5Tm9kZSksXG4gICAgICAgIGxpc3RFbnRyeU5vZGVzID0gbGlzdENvbnRhaW5lci5jaGlsZHJlbiB8fCBbXTtcblxuICAgIC8vIGNyZWF0ZSBuZXcgZWxlbWVudHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RWYWx1ZSA9IHZhbHVlc1tpXTtcblxuICAgICAgaWYgKGVudHJ5LnZhbGlkYXRlTGlzdEl0ZW0pIHtcblxuICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9ycyA9IGVudHJ5LnZhbGlkYXRlTGlzdEl0ZW0oY3VycmVudC5lbGVtZW50LCBsaXN0VmFsdWUsIGVudHJ5Tm9kZSwgaSksXG4gICAgICAgICAgICBsaXN0RW50cnlOb2RlID0gbGlzdEVudHJ5Tm9kZXNbaV07XG5cbiAgICAgICAgdmFsaWQgPSBzZWxmLmFwcGx5VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0aW9uRXJyb3JzLCBsaXN0RW50cnlOb2RlKSAmJiB2YWxpZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVudHJ5LnZhbGlkYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBlbnRyeS52YWxpZGF0ZShjdXJyZW50LmVsZW1lbnQsIHZhbHVlcywgZW50cnlOb2RlKTtcblxuICAgICAgdmFsaWQgPSBzZWxmLmFwcGx5VmFsaWRhdGlvbkVycm9ycyh0aGlzLnZhbGlkYXRpb25FcnJvcnMsIGVudHJ5Tm9kZSkgJiYgdmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5nZXRFbnRyeSA9IGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiB0aGlzLl9jdXJyZW50ICYmIHRoaXMuX2N1cnJlbnQuZW50cmllc1tpZF07XG59O1xuXG52YXIgZmxhdHRlbkRlZXAgPSByZXF1aXJlKCdsb2Rhc2gvZmxhdHRlbkRlZXAnKSxcbiAgICBrZXlCeSA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlCeScpLFxuICAgIG1hcCA9IHJlcXVpcmUoJ2xvZGFzaC9tYXAnKTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fY3JlYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgdGFicykge1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lck5vZGUgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgdmFyIHBhbmVsTm9kZSA9IHRoaXMuX2NyZWF0ZVBhbmVsKGVsZW1lbnQsIHRhYnMpO1xuXG4gIGNvbnRhaW5lck5vZGUuYXBwZW5kQ2hpbGQocGFuZWxOb2RlKTtcblxuICB2YXIgZW50cmllcyA9IGV4dHJhY3RFbnRyaWVzKHRhYnMpO1xuICB2YXIgZ3JvdXBzID0gZXh0cmFjdEdyb3Vwcyh0YWJzKTtcblxuICByZXR1cm4ge1xuICAgIHRhYnM6IHRhYnMsXG4gICAgZ3JvdXBzOiBncm91cHMsXG4gICAgZW50cmllczogZW50cmllcyxcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIHBhbmVsOiBwYW5lbE5vZGVcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHZhcmlhYmxlIHBhcnRzIG9mIHRoZSBlbnRyeSBub2RlIG9uIGVsZW1lbnQgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge0VudHJ5RGVzY3JpcHRvcn0gZW50cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVudHJ5Tm9kZVxuICogQHBhcmFtIHtOdW1iZXJ9IGlkeFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUgPSBmdW5jdGlvbihlbGVtZW50LCBlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUsIGlkeCkge1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIGZ1bmN0aW9uIGlzUHJvcGVydHlFZGl0YWJsZShlbnRyeSwgcHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5pc1Byb3BlcnR5RWRpdGFibGUnLCB7XG4gICAgICBlbnRyeTogZW50cnksXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBpbnB1dE5vZGVzID0gZ2V0UHJvcGVydHlQbGFjZWhvbGRlcnMoZW50cnlOb2RlKTtcblxuICBmb3JFYWNoKGlucHV0Tm9kZXMsIGZ1bmN0aW9uKG5vZGUpIHtcblxuICAgIHZhciBuYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgZWRpdGFibGU7XG5cbiAgICAvLyB3ZSBkZWFsIHdpdGggYW4gaW5wdXQgZWxlbWVudFxuICAgIGlmICgndmFsdWUnIGluIG5vZGUgfHwgaXNDb250ZW50RWRpdGFibGUobm9kZSkgPT09ICd0cnVlJykge1xuICAgICAgbmFtZSA9IGRvbUF0dHIobm9kZSwgJ25hbWUnKSB8fCBkb21BdHRyKG5vZGUsICdkYXRhLW5hbWUnKTtcbiAgICAgIG5ld1ZhbHVlID0gdmFsdWVzW25hbWVdO1xuXG4gICAgICBlZGl0YWJsZSA9IGlzUHJvcGVydHlFZGl0YWJsZShlbnRyeSwgbmFtZSk7XG4gICAgICBpZiAoZWRpdGFibGUgJiYgZW50cnkuZWRpdGFibGUpIHtcbiAgICAgICAgZWRpdGFibGUgPSBlbnRyeS5lZGl0YWJsZShlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIG5hbWUsIG5ld1ZhbHVlLCBpZHgpO1xuICAgICAgfVxuXG4gICAgICBkb21BdHRyKG5vZGUsICdyZWFkb25seScsIGVkaXRhYmxlID8gbnVsbCA6ICcnKTtcbiAgICAgIGRvbUF0dHIobm9kZSwgJ2Rpc2FibGVkJywgZWRpdGFibGUgPyBudWxsIDogJycpO1xuXG4gICAgICAvLyB0YWtlIGZ1bGwgY29udHJvbCBvdmVyIHNldHRpbmcgdGhlIHZhbHVlXG4gICAgICAvLyBhbmQgcG9zc2libHkgdXBkYXRpbmcgdGhlIGlucHV0IGluIGVudHJ5I3NldENvbnRyb2xWYWx1ZVxuICAgICAgaWYgKGVudHJ5LnNldENvbnRyb2xWYWx1ZSkge1xuICAgICAgICBlbnRyeS5zZXRDb250cm9sVmFsdWUoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBuYW1lLCBuZXdWYWx1ZSwgaWR4KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUb2dnbGUobm9kZSkpIHtcbiAgICAgICAgc2V0VG9nZ2xlVmFsdWUobm9kZSwgbmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChpc1NlbGVjdChub2RlKSkge1xuICAgICAgICBzZXRTZWxlY3RWYWx1ZShub2RlLCBuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKG5vZGUsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBkZWFsIHdpdGggc29tZSBub24tZWRpdGFibGUgaHRtbCBlbGVtZW50XG4gICAgZWxzZSB7XG4gICAgICBuYW1lID0gZG9tQXR0cihub2RlLCAnZGF0YS12YWx1ZScpO1xuICAgICAgbmV3VmFsdWUgPSB2YWx1ZXNbbmFtZV07XG4gICAgICBpZiAoZW50cnkuc2V0Q29udHJvbFZhbHVlKSB7XG4gICAgICAgIGVudHJ5LnNldENvbnRyb2xWYWx1ZShlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIG5hbWUsIG5ld1ZhbHVlLCBpZHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGV4dFZhbHVlKG5vZGUsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLy8gVE9ETyhuaWtrdSk6IFdURiBmcmVha2luZyBuYW1lPyBDaGFuZ2UgLyBjbGFyaWZ5LlxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fdXBkYXRlQWN0aXZhdGlvbiA9IGZ1bmN0aW9uKGN1cnJlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBlbGVtZW50ID0gY3VycmVudC5lbGVtZW50O1xuXG4gIGZ1bmN0aW9uIGlzRW50cnlWaXNpYmxlKGVudHJ5KSB7XG4gICAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5pc0VudHJ5VmlzaWJsZScsIHtcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzR3JvdXBWaXNpYmxlKGdyb3VwLCBlbGVtZW50LCBncm91cE5vZGUpIHtcbiAgICBpZiAodHlwZW9mIGdyb3VwLmVuYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBncm91cC5lbmFibGVkKGVsZW1lbnQsIGdyb3VwTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVGFiVmlzaWJsZSh0YWIsIGVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIHRhYi5lbmFibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGFiLmVuYWJsZWQoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVZpc2libGUobm9kZSwgdmlzaWJsZSkge1xuICAgIGRvbUNsYXNzZXMobm9kZSkudG9nZ2xlKEhJREVfQ0xBU1MsICF2aXNpYmxlKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGFjdGl2ZSB0YWIgaXMgdmlzaWJsZVxuICAvLyBpZiBub3Q6IHNldCB0aGUgZmlyc3QgdGFiIGFzIGFjdGl2ZSB0YWJcbiAgZnVuY3Rpb24gY2hlY2tBY3RpdmVUYWJWaXNpYmlsaXR5KG5vZGUsIHZpc2libGUpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBkb21DbGFzc2VzKG5vZGUpLmhhcygnYnBwLWFjdGl2ZScpO1xuICAgIGlmICghdmlzaWJsZSAmJiBpc0FjdGl2ZSkge1xuICAgICAgc2VsZi5hY3RpdmF0ZVRhYihjdXJyZW50LnRhYnNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxhYmVsKGVsZW1lbnQsIHNlbGVjdG9yLCB0ZXh0KSB7XG4gICAgdmFyIGxhYmVsTm9kZSA9IGRvbVF1ZXJ5KHNlbGVjdG9yLCBlbGVtZW50KTtcblxuICAgIGlmICghbGFiZWxOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGFiZWxOb2RlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuXG4gIHZhciBwYW5lbE5vZGUgPSBjdXJyZW50LnBhbmVsO1xuXG4gIGZvckVhY2goY3VycmVudC50YWJzLCBmdW5jdGlvbih0YWIpIHtcblxuICAgIHZhciB0YWJOb2RlID0gZG9tUXVlcnkoJ1tkYXRhLXRhYj0nICsgdGFiLmlkICsgJ10nLCBwYW5lbE5vZGUpO1xuICAgIHZhciB0YWJMaW5rTm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS10YWItdGFyZ2V0PScgKyB0YWIuaWQgKyAnXScsIHBhbmVsTm9kZSkucGFyZW50Tm9kZTtcblxuICAgIHZhciB0YWJWaXNpYmxlID0gZmFsc2U7XG5cbiAgICBmb3JFYWNoKHRhYi5ncm91cHMsIGZ1bmN0aW9uKGdyb3VwKSB7XG5cbiAgICAgIHZhciBncm91cFZpc2libGUgPSBmYWxzZTtcblxuICAgICAgdmFyIGdyb3VwTm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS1ncm91cD0nICsgZ3JvdXAuaWQgKyAnXScsIHRhYk5vZGUpO1xuXG4gICAgICBmb3JFYWNoKGdyb3VwLmVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5KSB7XG5cbiAgICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS1lbnRyeT1cIicgKyBlbnRyeS5pZCArICdcIl0nLCBncm91cE5vZGUpO1xuXG4gICAgICAgIHZhciBlbnRyeVZpc2libGUgPSBpc0VudHJ5VmlzaWJsZShlbnRyeSk7XG5cbiAgICAgICAgZ3JvdXBWaXNpYmxlID0gZ3JvdXBWaXNpYmxlIHx8IGVudHJ5VmlzaWJsZTtcblxuICAgICAgICB0b2dnbGVWaXNpYmxlKGVudHJ5Tm9kZSwgZW50cnlWaXNpYmxlKTtcblxuICAgICAgICB2YXIgdmFsdWVzID0gJ2dldCcgaW4gZW50cnkgPyBlbnRyeS5nZXQoZWxlbWVudCwgZW50cnlOb2RlKSA6IHt9O1xuXG4gICAgICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIHZhciBsaXN0RW50cnlDb250YWluZXIgPSBkb21RdWVyeSgnW2RhdGEtbGlzdC1lbnRyeS1jb250YWluZXJdJywgZW50cnlOb2RlKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmdFbGVtZW50cyA9IGxpc3RFbnRyeUNvbnRhaW5lci5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbGlzdFZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgdmFyIGxpc3RJdGVtTm9kZSA9IGV4aXN0aW5nRWxlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoIWxpc3RJdGVtTm9kZSkge1xuICAgICAgICAgICAgICBsaXN0SXRlbU5vZGUgPSBkb21pZnkoZW50cnkuY3JlYXRlTGlzdEVudHJ5VGVtcGxhdGUobGlzdFZhbHVlLCBpLCBsaXN0RW50cnlDb250YWluZXIpKTtcbiAgICAgICAgICAgICAgbGlzdEVudHJ5Q29udGFpbmVyLmFwcGVuZENoaWxkKGxpc3RJdGVtTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb21BdHRyKGxpc3RJdGVtTm9kZSwgJ2RhdGEtaW5kZXgnLCBpKTtcblxuICAgICAgICAgICAgc2VsZi5fYmluZFRlbXBsYXRlKGVsZW1lbnQsIGVudHJ5LCBsaXN0VmFsdWUsIGxpc3RJdGVtTm9kZSwgaSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVudHJpZXNUb1JlbW92ZSA9IGV4aXN0aW5nRWxlbWVudHMubGVuZ3RoIC0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZW50cmllc1RvUmVtb3ZlOyBqKyspIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcnBoYW5lZCBlbGVtZW50XG4gICAgICAgICAgICBsaXN0RW50cnlDb250YWluZXIucmVtb3ZlQ2hpbGQobGlzdEVudHJ5Q29udGFpbmVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi5fYmluZFRlbXBsYXRlKGVsZW1lbnQsIGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgY29uZGl0aW9uYWxseSB2aXNpYmxlIGVsZW1lbnRzXG4gICAgICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gICAgICAgIHNlbGYudmFsaWRhdGUoZW50cnksIHZhbHVlcywgZW50cnlOb2RlKTtcblxuICAgICAgICAvLyByZW1lbWJlciBpbml0aWFsIHN0YXRlIGZvciBsYXRlciBkaXJ0eSBjaGVja2luZ1xuICAgICAgICBlbnRyeS5vbGRWYWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgZ3JvdXAubGFiZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdXBkYXRlTGFiZWwoZ3JvdXBOb2RlLCAnLmdyb3VwLWxhYmVsJywgZ3JvdXAubGFiZWwoZWxlbWVudCwgZ3JvdXBOb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIGdyb3VwVmlzaWJsZSA9IGdyb3VwVmlzaWJsZSAmJiBpc0dyb3VwVmlzaWJsZShncm91cCwgZWxlbWVudCwgZ3JvdXBOb2RlKTtcblxuICAgICAgdGFiVmlzaWJsZSA9IHRhYlZpc2libGUgfHwgZ3JvdXBWaXNpYmxlO1xuXG4gICAgICB0b2dnbGVWaXNpYmxlKGdyb3VwTm9kZSwgZ3JvdXBWaXNpYmxlKTtcbiAgICB9KTtcblxuICAgIHRhYlZpc2libGUgPSB0YWJWaXNpYmxlICYmIGlzVGFiVmlzaWJsZSh0YWIsIGVsZW1lbnQpO1xuXG4gICAgdG9nZ2xlVmlzaWJsZSh0YWJOb2RlLCB0YWJWaXNpYmxlKTtcbiAgICB0b2dnbGVWaXNpYmxlKHRhYkxpbmtOb2RlLCB0YWJWaXNpYmxlKTtcblxuICAgIGNoZWNrQWN0aXZlVGFiVmlzaWJpbGl0eSh0YWJOb2RlLCB0YWJWaXNpYmxlKTtcbiAgfSk7XG5cbiAgLy8gaW5qZWN0IGVsZW1lbnRzIGlkIGludG8gaGVhZGVyXG4gIHVwZGF0ZUxhYmVsKHBhbmVsTm9kZSwgJ1tkYXRhLWxhYmVsLWlkXScsIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlkIHx8ICcnKTtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZVBhbmVsID0gZnVuY3Rpb24oZWxlbWVudCwgdGFicykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHBhbmVsTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzXCI+PC9kaXY+JyksXG4gICAgICBoZWFkZXJOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtaGVhZGVyXCI+JyArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwibGFiZWxcIiBkYXRhLWxhYmVsLWlkPjwvZGl2PicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNlYXJjaFwiPicgK1xuICAgICAgICAgICc8aW5wdXQgdHlwZT1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBwcm9wZXJ0eVwiIC8+JyArXG4gICAgICAgICAgJzxidXR0b24+PHNwYW4+U2VhcmNoPC9zcGFuPjwvYnV0dG9uPicgK1xuICAgICAgICAnPC9kaXY+JyArXG4gICAgICAnPC9kaXY+JyksXG4gICAgICB0YWJCYXJOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtdGFiLWJhclwiPjwvZGl2PicpLFxuICAgICAgdGFiTGlua3NOb2RlID0gZG9taWZ5KCc8dWwgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWJzLWxpbmtzXCI+PC91bD4nKSxcbiAgICAgIHRhYkNvbnRhaW5lck5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWJzLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuXG4gIHBhbmVsTm9kZS5hcHBlbmRDaGlsZChoZWFkZXJOb2RlKTtcblxuICBmb3JFYWNoKHRhYnMsIGZ1bmN0aW9uKHRhYiwgdGFiSW5kZXgpIHtcblxuICAgIGlmICghdGFiLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhYiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdGFiTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXRhYlwiIGRhdGEtdGFiPVwiJyArIGVzY2FwZUhUTUwodGFiLmlkKSArICdcIj48L2Rpdj4nKSxcbiAgICAgICAgdGFiTGlua05vZGUgPSBkb21pZnkoJzxsaSBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXRhYi1saW5rXCI+JyArXG4gICAgICAgICAgJzxhIGhyZWYgZGF0YS10YWItdGFyZ2V0PVwiJyArIGVzY2FwZUhUTUwodGFiLmlkKSArICdcIj4nICsgZXNjYXBlSFRNTCh0YWIubGFiZWwpICsgJzwvYT4nICtcbiAgICAgICAgJzwvbGk+Jyk7XG5cbiAgICB2YXIgZ3JvdXBzID0gdGFiLmdyb3VwcztcblxuICAgIGZvckVhY2goZ3JvdXBzLCBmdW5jdGlvbihncm91cCkge1xuXG4gICAgICBpZiAoIWdyb3VwLmlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ3JvdXAgbXVzdCBoYXZlIGFuIGlkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cE5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy1ncm91cFwiIGRhdGEtZ3JvdXA9XCInICsgZXNjYXBlSFRNTChncm91cC5pZCkgKyAnXCI+JyArXG4gICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZ3JvdXAtdG9nZ2xlXCI+PC9zcGFuPicgK1xuICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdyb3VwLWxhYmVsXCI+JyArIGVzY2FwZUhUTUwoZ3JvdXAubGFiZWwpICsgJzwvc3Bhbj4nICtcbiAgICAgICAgJzwvZGl2PicpO1xuXG4gICAgICAvLyBUT0RPKG5yZSk6IHVzZSBldmVudCBkZWxlZ2F0aW9uIHRvIGhhbmRsZSB0aGF0Li4uXG4gICAgICBncm91cE5vZGUucXVlcnlTZWxlY3RvcignLmdyb3VwLXRvZ2dsZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgIGRvbUNsYXNzZXMoZ3JvdXBOb2RlKS50b2dnbGUoJ2dyb3VwLWNsb3NlZCcpO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgICBncm91cE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldnQpIHtcbiAgICAgICAgaWYgKCFldnQuZGVmYXVsdFByZXZlbnRlZCAmJiBkb21DbGFzc2VzKGdyb3VwTm9kZSkuaGFzKCdncm91cC1jbG9zZWQnKSkge1xuICAgICAgICAgIGRvbUNsYXNzZXMoZ3JvdXBOb2RlKS5yZW1vdmUoJ2dyb3VwLWNsb3NlZCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yRWFjaChncm91cC5lbnRyaWVzLCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgICAgIGlmICghZW50cnkuaWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VudHJ5IG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGh0bWwgPSBlbnRyeS5odG1sO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBodG1sID0gZG9taWZ5KGh0bWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW53cmFwIGpxdWVyeVxuICAgICAgICBpZiAoaHRtbC5nZXQgJiYgaHRtbC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgICAgICAgaHRtbCA9IGh0bWwuZ2V0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLWVudHJ5XCIgZGF0YS1lbnRyeT1cIicgKyBlc2NhcGVIVE1MKGVudHJ5LmlkKSArICdcIj48L2Rpdj4nKTtcblxuICAgICAgICBmb3JFYWNoKGVudHJ5LmNzc0NsYXNzZXMgfHwgW10sIGZ1bmN0aW9uKGNzc0NsYXNzKSB7XG4gICAgICAgICAgZG9tQ2xhc3NlcyhlbnRyeU5vZGUpLmFkZChjc3NDbGFzcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVudHJ5Tm9kZS5hcHBlbmRDaGlsZChodG1sKTtcblxuICAgICAgICBncm91cE5vZGUuYXBwZW5kQ2hpbGQoZW50cnlOb2RlKTtcblxuICAgICAgICAvLyB1cGRhdGUgY29uZGl0aW9uYWxseSB2aXNpYmxlIGVsZW1lbnRzXG4gICAgICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gICAgICB9KTtcblxuICAgICAgdGFiTm9kZS5hcHBlbmRDaGlsZChncm91cE5vZGUpO1xuICAgIH0pO1xuXG4gICAgdGFiTGlua3NOb2RlLmFwcGVuZENoaWxkKHRhYkxpbmtOb2RlKTtcbiAgICB0YWJDb250YWluZXJOb2RlLmFwcGVuZENoaWxkKHRhYk5vZGUpO1xuICB9KTtcblxuICB0YWJCYXJOb2RlLmFwcGVuZENoaWxkKHRhYkxpbmtzTm9kZSk7XG5cbiAgcGFuZWxOb2RlLmFwcGVuZENoaWxkKHRhYkJhck5vZGUpO1xuICBwYW5lbE5vZGUuYXBwZW5kQ2hpbGQodGFiQ29udGFpbmVyTm9kZSk7XG5cbiAgcmV0dXJuIHBhbmVsTm9kZTtcbn07XG5cblxuXG5mdW5jdGlvbiBzZXRJbnB1dFZhbHVlKG5vZGUsIHZhbHVlKSB7XG5cbiAgdmFyIGNvbnRlbnRFZGl0YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlKG5vZGUpO1xuXG4gIHZhciBvbGRWYWx1ZSA9IGNvbnRlbnRFZGl0YWJsZSA/IG5vZGUuaW5uZXJUZXh0IDogbm9kZS52YWx1ZTtcblxuICB2YXIgc2VsZWN0aW9uO1xuXG4gIC8vIHByZXZlbnRzIGlucHV0IGZpZWxkcyBmcm9tIGhhdmluZyB0aGUgdmFsdWUgJ3VuZGVmaW5lZCdcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9ICcnO1xuICB9XG5cbiAgaWYgKG9sZFZhbHVlID09PSB2YWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzZWxlY3Rpb24gb24gdW5kby9yZWRvXG4gIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlKSB7XG4gICAgc2VsZWN0aW9uID0gdXBkYXRlU2VsZWN0aW9uKGdldFNlbGVjdGlvbihub2RlKSwgb2xkVmFsdWUsIHZhbHVlKTtcbiAgfVxuXG4gIGlmIChjb250ZW50RWRpdGFibGUpIHtcbiAgICBub2RlLmlubmVyVGV4dCA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3RWYWx1ZShub2RlLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRUb2dnbGVWYWx1ZShub2RlLCB2YWx1ZSkge1xuICB2YXIgbm9kZVZhbHVlID0gbm9kZS52YWx1ZTtcblxuICBub2RlLmNoZWNrZWQgPSAodmFsdWUgPT09IG5vZGVWYWx1ZSkgfHwgKCFkb21BdHRyKG5vZGUsICd2YWx1ZScpICYmIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gc2V0VGV4dFZhbHVlKG5vZGUsIHZhbHVlKSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKG5vZGUpIHtcblxuICByZXR1cm4gaXNDb250ZW50RWRpdGFibGUobm9kZSkgPyBnZXRDb250ZW50RWRpdGFibGVTZWxlY3Rpb24obm9kZSkgOiB7XG4gICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50RWRpdGFibGVTZWxlY3Rpb24obm9kZSkge1xuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7XG5cbiAgaWYgKCFmb2N1c05vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBzZWxlY3RlZCcpO1xuICB9XG5cbiAgLy8gdmVyaWZ5IHdlIGhhdmUgc2VsZWN0aW9uIG9uIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgaWYgKCFub2RlLmNvbnRhaW5zKGZvY3VzTm9kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBzZWxlY3RlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogTWF0aC5taW4oZm9jdXNPZmZzZXQsIGFuY2hvck9mZnNldCksXG4gICAgZW5kOiBNYXRoLm1heChmb2N1c09mZnNldCwgYW5jaG9yT2Zmc2V0KVxuICB9O1xufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKSB7XG5cbiAgaWYgKGlzQ29udGVudEVkaXRhYmxlKG5vZGUpKSB7XG4gICAgc2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydDtcbiAgICBub2RlLnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi5lbmQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbikge1xuXG4gIHZhciBmb2N1c05vZGUsXG4gICAgICBkb21SYW5nZSxcbiAgICAgIGRvbVNlbGVjdGlvbjtcblxuICBmb2N1c05vZGUgPSBub2RlLmZpcnN0Q2hpbGQgfHwgbm9kZSxcbiAgZG9tUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBkb21SYW5nZS5zZXRTdGFydChmb2N1c05vZGUsIHNlbGVjdGlvbi5zdGFydCk7XG4gIGRvbVJhbmdlLnNldEVuZChmb2N1c05vZGUsIHNlbGVjdGlvbi5lbmQpO1xuXG4gIGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgZG9tU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBkb21TZWxlY3Rpb24uYWRkUmFuZ2UoZG9tUmFuZ2UpO1xufVxuXG5mdW5jdGlvbiBpc0ltcGxpY2l0Um9vdChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LmlkID09PSAnX19pbXBsaWNpdHJvb3QnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXG4gICAgZG9tQ2xlYXIgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xlYXIsXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxuICAgIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXG4gICAgSWRzID0gcmVxdWlyZSgnaWRzJykuZGVmYXVsdDtcblxudmFyIFNQQUNFX1JFR0VYID0gL1xccy87XG5cbi8vIGZvciBRTmFtZSB2YWxpZGF0aW9uIGFzIHBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lQ2hhclxudmFyIFFOQU1FX1JFR0VYID0gL14oW2Etel1bXFx3LS5dKjopP1thLXpfXVtcXHctLl0qJC9pO1xuXG4vLyBmb3IgSUQgdmFsaWRhdGlvbiBhcyBwZXIgQlBNTiBTY2hlbWEgKFFOYW1lIC0gTmFtZXNwYWNlKVxudmFyIElEX1JFR0VYID0gL15bYS16X11bXFx3LS5dKiQvaTtcblxudmFyIFBMQUNFSE9MREVSX1JFR0VYID0gL1xcJFxceyhbXn1dKilcXH0vZztcblxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjMzk7J1xufTtcblxuZnVuY3Rpb24gc2VsZWN0ZWRPcHRpb24oc2VsZWN0Qm94KSB7XG4gIGlmIChzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIHNlbGVjdEJveC5vcHRpb25zW3NlbGVjdEJveC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uO1xuXG5cbmZ1bmN0aW9uIHNlbGVjdGVkVHlwZShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpIHtcbiAgdmFyIHR5cGVTZWxlY3QgPSBkb21RdWVyeShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb24odHlwZVNlbGVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnNlbGVjdGVkVHlwZSA9IHNlbGVjdGVkVHlwZTtcblxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSByb290IGVsZW1lbnQgdGhlIGRvY3VtZW50IHRoaXNcbiAqIGJ1c2luZXNzIG9iamVjdCBpcyBjb250YWluZWQgaW4uXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChidXNpbmVzc09iamVjdCkge1xuICB2YXIgcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldFJvb3QgPSBnZXRSb290O1xuXG5cbi8qKlxuICogZmlsdGVycyBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3Qgd2hpY2ggaGF2ZSBhIGdpdmVuIHR5cGUuXG4gKiByZW1vdmVzIGEgbmV3IGxpc3RcbiAqL1xuZnVuY3Rpb24gZmlsdGVyRWxlbWVudHNCeVR5cGUob2JqZWN0TGlzdCwgdHlwZSkge1xuICB2YXIgbGlzdCA9IG9iamVjdExpc3QgfHwgW107XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChsaXN0LCBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoaXMob2JqLCB0eXBlKSkge1xuICAgICAgcmVzdWx0LnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5maWx0ZXJFbGVtZW50c0J5VHlwZSA9IGZpbHRlckVsZW1lbnRzQnlUeXBlO1xuXG5cbmZ1bmN0aW9uIGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XG4gIHZhciByb290ID0gZ2V0Um9vdChidXNpbmVzc09iamVjdCk7XG5cbiAgcmV0dXJuIGZpbHRlckVsZW1lbnRzQnlUeXBlKHJvb3Qucm9vdEVsZW1lbnRzLCByZWZlcmVuY2VkVHlwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmZpbmRSb290RWxlbWVudHNCeVR5cGUgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlO1xuXG5cbmZ1bmN0aW9uIHJlbW92ZUFsbENoaWxkcmVuKGRvbUVsZW1lbnQpIHtcbiAgd2hpbGUgKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgIGRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9tRWxlbWVudC5maXJzdENoaWxkKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVBbGxDaGlsZHJlbiA9IHJlbW92ZUFsbENoaWxkcmVuO1xuXG5cbi8qKlxuICogYWRkcyBhbiBlbXB0eSBvcHRpb24gdG8gdGhlIGxpc3RcbiAqL1xuZnVuY3Rpb24gYWRkRW1wdHlQYXJhbWV0ZXIobGlzdCkge1xuICByZXR1cm4gbGlzdC5wdXNoKHsgJ2xhYmVsJzogJycsICd2YWx1ZSc6ICcnLCAnbmFtZSc6ICcnIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5hZGRFbXB0eVBhcmFtZXRlciA9IGFkZEVtcHR5UGFyYW1ldGVyO1xuXG5cbi8qKlxuICogcmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgcm9vdCBlbGVtZW50cyBmb3IgdGhlIGdpdmVuIHBhcmFtZXRlciAncmVmZXJlbmNlZFR5cGUnXG4gKi9cbmZ1bmN0aW9uIHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XG4gIHZhciBtb2RlbCA9IFtdO1xuICB2YXIgcmVmZXJhYmxlT2JqZWN0cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcbiAgZm9yRWFjaChyZWZlcmFibGVPYmplY3RzLCBmdW5jdGlvbihvYmopIHtcbiAgICBtb2RlbC5wdXNoKHtcbiAgICAgIGxhYmVsOiAob2JqLm5hbWUgfHwgJycpICsgJyAoaWQ9JytvYmouaWQrJyknLFxuICAgICAgdmFsdWU6IG9iai5pZCxcbiAgICAgIG5hbWU6IG9iai5uYW1lXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbW9kZWw7XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlZnJlc2hPcHRpb25zTW9kZWwgPSByZWZyZXNoT3B0aW9uc01vZGVsO1xuXG5cbi8qKlxuICogZmlsbHMgdGhlIGRyb3AgZG93biB3aXRoIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0Ryb3BEb3duKGRvbVNlbGVjdG9yLCBidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUsIGVudHJ5Tm9kZSkge1xuICB2YXIgb3B0aW9ucyA9IHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcbiAgYWRkRW1wdHlQYXJhbWV0ZXIob3B0aW9ucyk7XG4gIHZhciBzZWxlY3RCb3ggPSBkb21RdWVyeShkb21TZWxlY3RvciwgZW50cnlOb2RlKTtcbiAgZG9tQ2xlYXIoc2VsZWN0Qm94KTtcblxuICBmb3JFYWNoKG9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgIHZhciBvcHRpb25FbnRyeSA9IGRvbWlmeSgnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbi52YWx1ZSkgKyAnXCI+JyArIGVzY2FwZUhUTUwob3B0aW9uLmxhYmVsKSArICc8L29wdGlvbj4nKTtcbiAgICBzZWxlY3RCb3guYXBwZW5kQ2hpbGQob3B0aW9uRW50cnkpO1xuICB9KTtcbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbm1vZHVsZS5leHBvcnRzLnVwZGF0ZU9wdGlvbnNEcm9wRG93biA9IHVwZGF0ZU9wdGlvbnNEcm9wRG93bjtcblxuXG4vKipcbiAqIGNoZWNrcyB3aGV0aGVyIHRoZSBpZCB2YWx1ZSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpIHtcbiAgdmFyIGFzc2lnbmVkID0gYm8uJG1vZGVsLmlkcy5hc3NpZ25lZChpZFZhbHVlKTtcblxuICB2YXIgaWRFeGlzdHMgPSBhc3NpZ25lZCAmJiBhc3NpZ25lZCAhPT0gYm87XG5cbiAgaWYgKCFpZFZhbHVlIHx8IGlkRXhpc3RzKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnRWxlbWVudCBtdXN0IGhhdmUgYW4gdW5pcXVlIGlkLicpO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuaXNJZFZhbGlkID0gaXNJZFZhbGlkO1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKSB7XG5cbiAgaWRWYWx1ZSA9IHN0cmlwUGxhY2Vob2xkZXJzKGlkVmFsdWUpO1xuXG4gIGlmIChjb250YWluc1NwYWNlKGlkVmFsdWUpKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBub3QgY29udGFpbiBzcGFjZXMuJyk7XG4gIH1cblxuICBpZiAoIUlEX1JFR0VYLnRlc3QoaWRWYWx1ZSkpIHtcblxuICAgIGlmIChRTkFNRV9SRUdFWC50ZXN0KGlkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdJZCBtdXN0IG5vdCBjb250YWluIHByZWZpeC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNsYXRlKCdJZCBtdXN0IGJlIGEgdmFsaWQgUU5hbWUuJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVJZCA9IHZhbGlkYXRlSWQ7XG5cblxuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xuICByZXR1cm4gU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbnRhaW5zU3BhY2UgPSBjb250YWluc1NwYWNlO1xuXG5cbmZ1bmN0aW9uIHN0cmlwUGxhY2Vob2xkZXJzKGlkVmFsdWUpIHtcblxuICAvLyByZXBsYWNlIGV4cHJlc3Npb24gZS5nLiAke1ZFUlNJT05fVEFHfVxuICAvLyB1c2Ugb25seSB0aGUgY29udGVudCBiZXR3ZWVuICR7fVxuICAvLyBmb3IgdGhlIFJFR0VYIGNoZWNrXG4gIHJldHVybiBpZFZhbHVlLnJlcGxhY2UoUExBQ0VIT0xERVJfUkVHRVgsICckMScpO1xufVxuXG4vKipcbiAqIGdlbmVyYXRlIGEgc2VtYW50aWMgaWQgd2l0aCBnaXZlbiBwcmVmaXhcbiAqL1xuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xuICB2YXIgaWRzID0gbmV3IElkcyhbMzIsMzIsMV0pO1xuXG4gIHJldHVybiBpZHMubmV4dFByZWZpeGVkKHByZWZpeCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLm5leHRJZCA9IG5leHRJZDtcblxuXG5mdW5jdGlvbiB0cmlnZ2VyQ2xpY2tFdmVudChlbGVtZW50KSB7XG4gIHZhciBldnQ7XG4gIHZhciBldmVudFR5cGUgPSAnY2xpY2snO1xuXG4gIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveFxuICAgICAgZXZ0ID0gbmV3IE1vdXNlRXZlbnQoKGV2ZW50VHlwZSksIHsgdmlldzogd2luZG93LCBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElFIDExLCBQaGFudG9tSlMgKHdhdCEpXG4gICAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuXG4gICAgICBldnQuaW5pdEV2ZW50KChldmVudFR5cGUpLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlbGNvbWUgSUVcbiAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQuZmlyZUV2ZW50KCdvbicgKyBldmVudFR5cGUsIGV2dCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMudHJpZ2dlckNsaWNrRXZlbnQgPSB0cmlnZ2VyQ2xpY2tFdmVudDtcblxuXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHN0cikge1xuICBzdHIgPSAnJyArIHN0cjtcblxuICByZXR1cm4gc3RyICYmIHN0ci5yZXBsYWNlKC9bJjw+XCInXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBIVE1MX0VTQ0FQRV9NQVBbbWF0Y2hdO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZXNjYXBlSFRNTCA9IGVzY2FwZUhUTUw7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIGNhcGFibGUgb2YgY3JlYXRpbmcgYSBuZXcgZWxlbWVudCB1bmRlciBhIHByb3ZpZGVkIHBhcmVudFxuICogYW5kIHVwZGF0aW5nIC8gY3JlYXRpbmcgYSByZWZlcmVuY2UgdG8gaXQgaW4gb25lIGF0b21pYyBhY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5LCBicG1uRmFjdG9yeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG59XG5cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnYnBtbkZhY3RvcnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXI7XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlbGVtZW50IHVuZGVyIGEgcHJvdmlkZWQgcGFyZW50IGFuZCB1cGRhdGVzIC8gY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBpdCBpblxuICogb25lIGF0b21pYyBhY3Rpb24uXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXIjZXhlY3V0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBjb250ZXh0LmVsZW1lbnQgd2hpY2ggaXMgdGhlIGNvbnRleHQgZm9yIHRoZSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bW9kZGxlLnJlZmVyZW5jaW5nT2JqZWN0fSBjb250ZXh0LnJlZmVyZW5jaW5nT2JqZWN0IHRoZSBvYmplY3Qgd2hpY2ggY3JlYXRlcyB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSB0aGUgcHJvcGVydHkgb2YgdGhlIHJlZmVyZW5jaW5nT2JqZWN0IHdoaWNoIG1ha2VzIHRoZSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bW9kZGxlLm5ld09iamVjdH0gY29udGV4dC5uZXdPYmplY3QgdGhlIG5ldyBvYmplY3QgdG8gYWRkXG4gKiBAcGFyYW0ge21vZGRsZS5uZXdPYmplY3RDb250YWluZXJ9IGNvbnRleHQubmV3T2JqZWN0Q29udGFpbmVyIHRoZSBjb250YWluZXIgZm9yIHRoZSBuZXcgb2JqZWN0XG4gKlxuICogQHJldHVybnMge0FycmF5PGRqcy5tb2RlLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciByZWZlcmVuY2luZ09iamVjdCA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCwgJ3JlZmVyZW5jaW5nT2JqZWN0JyksXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eSA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSwgJ3JlZmVyZW5jZVByb3BlcnR5JyksXG4gICAgICBuZXdPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0LCAnbmV3T2JqZWN0JyksXG4gICAgICBuZXdPYmplY3RDb250YWluZXIgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0Q29udGFpbmVyLCAnbmV3T2JqZWN0Q29udGFpbmVyJyksXG4gICAgICBuZXdPYmplY3RQYXJlbnQgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0UGFyZW50LCAnbmV3T2JqZWN0UGFyZW50JyksXG4gICAgICBjaGFuZ2VkID0gWyBjb250ZXh0LmVsZW1lbnQgXTsgLy8gdGhpcyB3aWxsIG5vdCBjaGFuZ2UgYW55IGRpYWdyYW0tanMgZWxlbWVudHNcblxuICAvLyBjcmVhdGUgbmV3IG9iamVjdFxuICB2YXIgcmVmZXJlbmNlZE9iamVjdCA9IGVsZW1lbnRIZWxwZXJcbiAgICAuY3JlYXRlRWxlbWVudChuZXdPYmplY3QudHlwZSwgbmV3T2JqZWN0LnByb3BlcnRpZXMsIG5ld09iamVjdFBhcmVudCwgdGhpcy5fYnBtbkZhY3RvcnkpO1xuICBjb250ZXh0LnJlZmVyZW5jZWRPYmplY3QgPSByZWZlcmVuY2VkT2JqZWN0O1xuXG4gIC8vIGFkZCB0byBjb250YWluaW5nIGxpc3RcbiAgbmV3T2JqZWN0Q29udGFpbmVyLnB1c2gocmVmZXJlbmNlZE9iamVjdCk7XG5cbiAgLy8gYWRqdXN0IHJlZmVyZW5jZSBhdHRyaWJ1dGVcbiAgY29udGV4dC5wcmV2aW91c1JlZmVyZW5jZSA9IHJlZmVyZW5jaW5nT2JqZWN0W3JlZmVyZW5jZVByb3BlcnR5XTtcbiAgcmVmZXJlbmNpbmdPYmplY3RbcmVmZXJlbmNlUHJvcGVydHldID0gcmVmZXJlbmNlZE9iamVjdDtcblxuICBjb250ZXh0LmNoYW5nZWQgPSBjaGFuZ2VkO1xuXG4gIC8vIGluZGljYXRlIGNoYW5nZWQgb24gb2JqZWN0cyBhZmZlY3RlZCBieSB0aGUgdXBkYXRlXG4gIHJldHVybiBjaGFuZ2VkO1xufTtcblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB1cGRhdGVcbiAqXG4gKiBAbWV0aG9kICBDcmVhdGVBbmRSZWZlcmVuY2VFbGVtZW50SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZS5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHJlZmVyZW5jaW5nT2JqZWN0ID0gY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCxcbiAgICAgIHJlZmVyZW5jZVByb3BlcnR5ID0gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSxcbiAgICAgIHByZXZpb3VzUmVmZXJlbmNlID0gY29udGV4dC5wcmV2aW91c1JlZmVyZW5jZSxcbiAgICAgIHJlZmVyZW5jZWRPYmplY3QgPSBjb250ZXh0LnJlZmVyZW5jZWRPYmplY3QsXG4gICAgICBuZXdPYmplY3RDb250YWluZXIgPSBjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lcjtcblxuICAvLyByZXNldCByZWZlcmVuY2VcbiAgcmVmZXJlbmNpbmdPYmplY3Quc2V0KHJlZmVyZW5jZVByb3BlcnR5LCBwcmV2aW91c1JlZmVyZW5jZSk7XG5cbiAgLy8gcmVtb3ZlIG5ldyBlbGVtZW50XG4gIG5ld09iamVjdENvbnRhaW5lci5zcGxpY2UobmV3T2JqZWN0Q29udGFpbmVyLmluZGV4T2YocmVmZXJlbmNlZE9iamVjdCksIDEpO1xuXG4gIHJldHVybiBjb250ZXh0LmNoYW5nZWQ7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVOb3ROdWxsKHByb3AsIG5hbWUpIHtcbiAgaWYgKCFwcm9wKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcblxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgYSBCUE1OIDIuMCBwcm9wZXJ0eSB1cGRhdGVcbiAqIGZvciBidXNpbmVzcyBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlXG4gKiBkaWFncmFtLlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsIGluXG4gKiBvcmRlciB0byB1cGRhdGUgY2hpbGQgZWxlbWVudHMgb2YgZWxlbWVudHMgdmlzaWJsZSBpblxuICogdGhlIGRpYWdyYW0uXG4gKlxuICogRXhhbXBsZTogcGVyZm9ybSBhbiB1cGRhdGUgb2YgYSBzcGVjaWZpYyBldmVudCBkZWZpbml0aW9uXG4gKiBvZiBhbiBpbnRlcm1lZGlhdGUgZXZlbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcihlbGVtZW50UmVnaXN0cnksIGJwbW5GYWN0b3J5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbn1cblxuQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci4kaW5qZWN0ID0gWyAnZWxlbWVudFJlZ2lzdHJ5JywgJ2JwbW5GYWN0b3J5JyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXI7XG5cbmZ1bmN0aW9uIGVuc3VyZU5vdE51bGwocHJvcCwgbmFtZSkge1xuICBpZiAoIXByb3ApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgcmVxdWlyZWQnKTtcbiAgfVxuICByZXR1cm4gcHJvcDtcblxufVxuZnVuY3Rpb24gZW5zdXJlTGlzdChwcm9wLCBuYW1lKSB7XG4gIGlmICghcHJvcCB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvcCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbmVlZHMgdG8gYmUgYSBsaXN0Jyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgdW5kZXIgYSBwcm92aWRlZCBwYXJlbnQgYW5kIHVwZGF0ZXMgLyBjcmVhdGVzIGEgcmVmZXJlbmNlIHRvIGl0IGluXG4gKiBvbmUgYXRvbWljIGFjdGlvbi5cbiAqXG4gKiBAbWV0aG9kICBDcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50IHdoaWNoIGlzIHRoZSBjb250ZXh0IGZvciB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5yZWZlcmVuY2luZ09iamVjdH0gY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCB0aGUgb2JqZWN0IHdoaWNoIGNyZWF0ZXMgdGhlIHJlZmVyZW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHkgdGhlIHByb3BlcnR5IG9mIHRoZSByZWZlcmVuY2luZ09iamVjdCB3aGljaCBtYWtlcyB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5uZXdPYmplY3R9IGNvbnRleHQubmV3T2JqZWN0IHRoZSBuZXcgb2JqZWN0IHRvIGFkZFxuICogQHBhcmFtIHttb2RkbGUubmV3T2JqZWN0Q29udGFpbmVyfSBjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lciB0aGUgY29udGFpbmVyIGZvciB0aGUgbmV3IG9iamVjdFxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGN1cnJlbnRPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQuY3VycmVudE9iamVjdCwgJ2N1cnJlbnRPYmplY3QnKSxcbiAgICAgIHByb3BlcnR5TmFtZSA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5wcm9wZXJ0eU5hbWUsICdwcm9wZXJ0eU5hbWUnKSxcbiAgICAgIG5ld09iamVjdHMgPSBlbnN1cmVMaXN0KGNvbnRleHQubmV3T2JqZWN0cywgJ25ld09iamVjdHMnKSxcbiAgICAgIGNoYW5nZWQgPSBbIGNvbnRleHQuZWxlbWVudCBdOyAvLyB0aGlzIHdpbGwgbm90IGNoYW5nZSBhbnkgZGlhZ3JhbS1qcyBlbGVtZW50c1xuXG5cbiAgdmFyIGNoaWxkT2JqZWN0cyA9IFtdO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gY3JlYXRlIG5ldyBhcnJheSBvZiBidXNpbmVzcyBvYmplY3RzXG4gIGZvckVhY2gobmV3T2JqZWN0cywgZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQob2JqLnR5cGUsIG9iai5wcm9wZXJ0aWVzLCBjdXJyZW50T2JqZWN0LCBzZWxmLl9icG1uRmFjdG9yeSk7XG5cbiAgICBjaGlsZE9iamVjdHMucHVzaChlbGVtZW50KTtcbiAgfSk7XG4gIGNvbnRleHQuY2hpbGRPYmplY3QgPSBjaGlsZE9iamVjdHM7XG5cbiAgLy8gYWRqdXN0IGFycmF5IHJlZmVyZW5jZSBpbiB0aGUgcGFyZW50IGJ1c2luZXNzIG9iamVjdFxuICBjb250ZXh0LnByZXZpb3VzQ2hpbGRzID0gY3VycmVudE9iamVjdFtwcm9wZXJ0eU5hbWVdO1xuICBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSBjaGlsZE9iamVjdHM7XG5cbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjdXJyZW50T2JqZWN0ID0gY29udGV4dC5jdXJyZW50T2JqZWN0LFxuICAgICAgcHJvcGVydHlOYW1lID0gY29udGV4dC5wcm9wZXJ0eU5hbWUsXG4gICAgICBwcmV2aW91c0NoaWxkcyA9IGNvbnRleHQucHJldmlvdXNDaGlsZHM7XG5cbiAgLy8gcmVtb3ZlIG5ldyBlbGVtZW50XG4gIGN1cnJlbnRPYmplY3Quc2V0KHByb3BlcnR5TmFtZSwgcHJldmlvdXNDaGlsZHMpO1xuXG4gIHJldHVybiBjb250ZXh0LmNoYW5nZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgY29tYmluZXMgYW5kIGV4ZWN1dGVzIG11bHRpcGxlIGNvbW1hbmRzLlxuICpcbiAqIEFsbCB1cGRhdGVzIGFyZSBidW5kbGVkIG9uIHRoZSBjb21tYW5kIHN0YWNrIGFuZCBleGVjdXRlZCBpbiBvbmUgc3RlcC5cbiAqIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXZlcnQgdGhlIGNoYW5nZXMgaW4gb25lIHN0ZXAuXG4gKlxuICogRXhhbXBsZSB1c2UgY2FzZTogcmVtb3ZlIHRoZSBjYW11bmRhOmZvcm1LZXkgYXR0cmlidXRlIGFuZCBpbiBhZGRpdGlvblxuICogYWRkIGFsbCBmb3JtIGZpZWxkcyBuZWVkZWQgZm9yIHRoZSBjYW11bmRhOmZvcm1EYXRhIHByb3BlcnR5LlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIE11bHRpQ29tbWFuZEhhbmRsZXIoY29tbWFuZFN0YWNrKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbn1cblxuTXVsdGlDb21tYW5kSGFuZGxlci4kaW5qZWN0ID0gWyAnY29tbWFuZFN0YWNrJyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpQ29tbWFuZEhhbmRsZXI7XG5cbk11bHRpQ29tbWFuZEhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcblxuICBmb3JFYWNoKGNvbnRleHQsIGZ1bmN0aW9uKGNvbW1hbmQpIHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLmNtZCwgY29tbWFuZC5jb250ZXh0KTtcbiAgfSk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZHVjZSA9IHJlcXVpcmUoJ2xvZGFzaC90cmFuc2Zvcm0nKSxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyksXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyBhIEJQTU4gMi4wIHByb3BlcnR5IHVwZGF0ZVxuICogZm9yIGJ1c2luZXNzIG9iamVjdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRlZCBpbiB0aGVcbiAqIGRpYWdyYW0uXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb3BlcnRpZXMgcGFuZWwgaW5cbiAqIG9yZGVyIHRvIHVwZGF0ZSBjaGlsZCBlbGVtZW50cyBvZiBlbGVtZW50cyB2aXNpYmxlIGluXG4gKiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBFeGFtcGxlOiBwZXJmb3JtIGFuIHVwZGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50IGRlZmluaXRpb25cbiAqIG9mIGFuIGludGVybWVkaWF0ZSBldmVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbn1cblxuVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyO1xuXG4vKipcbiAqIHJldHVybnMgdGhlIHJvb3QgZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRSb290KGJ1c2luZXNzT2JqZWN0KSB7XG4gIHZhciBwYXJlbnQgPSBidXNpbmVzc09iamVjdDtcbiAgd2hpbGUgKHBhcmVudC4kcGFyZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcmVudDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydHlOYW1lcykge1xuICByZXR1cm4gcmVkdWNlKHByb3BlcnR5TmFtZXMsIGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSBidXNpbmVzc09iamVjdC5nZXQoa2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICBidXNpbmVzc09iamVjdC5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0pO1xufVxuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgYnVzaW5lc3Mgb2JqZWN0IHdpdGggYSBsaXN0IG9mIG5ldyBwcm9wZXJ0aWVzXG4gKlxuICogQG1ldGhvZCAgVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIGhhcyBhIGNoaWxkIGJ1c2luZXNzIG9iamVjdCB1cGRhdGVkXG4gKiBAcGFyYW0ge21vZGRsZS5idXNpbmVzc09iamVjdH0gY29udGV4dC5idXNpbmVzc09iamVjdCB0aGUgYnVzaW5lc3NPYmplY3QgdG8gdXBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5wcm9wZXJ0aWVzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgYnVzaW5lc3NPYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZS5CYXNlPn0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5VcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBidXNpbmVzc09iamVjdCA9IGNvbnRleHQuYnVzaW5lc3NPYmplY3QsXG4gICAgICByb290RWxlbWVudHMgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KS5yb290RWxlbWVudHMsXG4gICAgICByZWZlcmVuY2VUeXBlID0gY29udGV4dC5yZWZlcmVuY2VUeXBlLFxuICAgICAgcmVmZXJlbmNlUHJvcGVydHkgPSBjb250ZXh0LnJlZmVyZW5jZVByb3BlcnR5LFxuICAgICAgY2hhbmdlZCA9IFsgZWxlbWVudCBdOyAvLyB0aGlzIHdpbGwgbm90IGNoYW5nZSBhbnkgZGlhZ3JhbS1qcyBlbGVtZW50c1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnVzaW5lc3NPYmplY3QgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyB8fCBnZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBrZXlzKHByb3BlcnRpZXMpKTtcblxuICAvLyBjaGVjayBpZiB0aGVyZSB0aGUgdXBkYXRlIG5lZWRzIGFuIGV4dGVybmFsIGVsZW1lbnQgZm9yIHJlZmVyZW5jZVxuICBpZiAodHlwZW9mIHJlZmVyZW5jZVR5cGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiByZWZlcmVuY2VQcm9wZXJ0eSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmb3JFYWNoKHJvb3RFbGVtZW50cywgZnVuY3Rpb24ocm9vdEVsZW1lbnQpIHtcbiAgICAgIGlmIChpcyhyb290RWxlbWVudCwgcmVmZXJlbmNlVHlwZSkpIHtcbiAgICAgICAgaWYgKHJvb3RFbGVtZW50LmlkID09PSBwcm9wZXJ0aWVzW3JlZmVyZW5jZVByb3BlcnR5XSkge1xuICAgICAgICAgIHByb3BlcnRpZXNbcmVmZXJlbmNlUHJvcGVydHldID0gcm9vdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gIHNldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIHByb3BlcnRpZXMpO1xuXG4gIC8vIHN0b3JlIG9sZCB2YWx1ZXNcbiAgY29udGV4dC5vbGRQcm9wZXJ0aWVzID0gb2xkUHJvcGVydGllcztcbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyI3JldmVydFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGUuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5VcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyxcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gY29udGV4dC5idXNpbmVzc09iamVjdDtcblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0aWVzKTtcblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgYSBCUE1OIDIuMCBwcm9wZXJ0eSB1cGRhdGVcbiAqIGZvciBidXNpbmVzcyBvYmplY3QgbGlzdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRlZCBpbiB0aGVcbiAqIGRpYWdyYW0uXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb3BlcnRpZXMgcGFuZWwgaW5cbiAqIG9yZGVyIHRvIHVwZGF0ZSBjaGlsZCBlbGVtZW50cyBvZiBlbGVtZW50cyB2aXNpYmxlIGluXG4gKiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBFeGFtcGxlOiBwZXJmb3JtIGFuIHVwZGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50IGRlZmluaXRpb25cbiAqIG9mIGFuIGludGVybWVkaWF0ZSBldmVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVcGRhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSwgYnBtbkZhY3RvcnkpIHtcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xufVxuXG5VcGRhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnYnBtbkZhY3RvcnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcjtcblxuZnVuY3Rpb24gZW5zdXJlTm90TnVsbChwcm9wLCBuYW1lKSB7XG4gIGlmICghcHJvcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJ3JlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgZWxlbWVudCB1bmRlciBhIHByb3ZpZGVkIHBhcmVudC5cbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY3VycmVudE9iamVjdCA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5jdXJyZW50T2JqZWN0LCAnY3VycmVudE9iamVjdCcpLFxuICAgICAgcHJvcGVydHlOYW1lID0gZW5zdXJlTm90TnVsbChjb250ZXh0LnByb3BlcnR5TmFtZSwgJ3Byb3BlcnR5TmFtZScpLFxuICAgICAgdXBkYXRlZE9iamVjdExpc3QgPSBjb250ZXh0LnVwZGF0ZWRPYmplY3RMaXN0LFxuICAgICAgb2JqZWN0c1RvUmVtb3ZlID0gY29udGV4dC5vYmplY3RzVG9SZW1vdmUgfHwgW10sXG4gICAgICBvYmplY3RzVG9BZGQgPSBjb250ZXh0Lm9iamVjdHNUb0FkZCB8fCBbXSxcbiAgICAgIGNoYW5nZWQgPSBbIGNvbnRleHQuZWxlbWVudF0sIC8vIHRoaXMgd2lsbCBub3QgY2hhbmdlIGFueSBkaWFncmFtLWpzIGVsZW1lbnRzXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU7XG5cbiAgaWYgKGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lKSB7XG4gICAgcmVmZXJlbmNlUHJvcGVydHlOYW1lID0gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eU5hbWU7XG4gIH1cblxuICB2YXIgb2JqZWN0TGlzdCA9IGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXTtcbiAgLy8gYWRqdXN0IGFycmF5IHJlZmVyZW5jZSBpbiB0aGUgcGFyZW50IGJ1c2luZXNzIG9iamVjdFxuICBjb250ZXh0LnByZXZpb3VzTGlzdCA9IGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXTtcblxuICBpZiAodXBkYXRlZE9iamVjdExpc3QpIHtcbiAgICBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSB1cGRhdGVkT2JqZWN0TGlzdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGlzdENvcHkgPSBbXTtcbiAgICAvLyByZW1vdmUgYWxsIG9iamVjdHMgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWRcbiAgICBmb3JFYWNoKG9iamVjdExpc3QsIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdHNUb1JlbW92ZS5pbmRleE9mKG9iamVjdCkgPT0gLTEpIHtcbiAgICAgICAgbGlzdENvcHkucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGFkZCBhbGwgb2JqZWN0cyB3aGljaCBzaG91bGQgYmUgYWRkZWRcbiAgICBsaXN0Q29weSA9IGxpc3RDb3B5LmNvbmNhdChvYmplY3RzVG9BZGQpO1xuXG4gICAgLy8gc2V0IHByb3BlcnR5IHRvIG5ldyBsaXN0XG4gICAgaWYgKGxpc3RDb3B5Lmxlbmd0aCA+IDAgfHwgIXJlZmVyZW5jZVByb3BlcnR5TmFtZSkge1xuXG4gICAgICAvLyBhcyBsb25nIGFzIHRoZXJlIGFyZSBlbGVtZW50cyBpbiB0aGUgbGlzdCB1cGRhdGUgdGhlIGxpc3RcbiAgICAgIGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXSA9IGxpc3RDb3B5O1xuICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlUHJvcGVydHlOYW1lKSB7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGlzdCB3aGVuIGl0IGlzIGVtcHR5XG4gICAgICB2YXIgcGFyZW50T2JqZWN0ID0gY3VycmVudE9iamVjdC4kcGFyZW50O1xuICAgICAgcGFyZW50T2JqZWN0LnNldChyZWZlcmVuY2VQcm9wZXJ0eU5hbWUsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjdXJyZW50T2JqZWN0ID0gY29udGV4dC5jdXJyZW50T2JqZWN0LFxuICAgICAgcHJvcGVydHlOYW1lID0gY29udGV4dC5wcm9wZXJ0eU5hbWUsXG4gICAgICBwcmV2aW91c0xpc3QgPSBjb250ZXh0LnByZXZpb3VzTGlzdCxcbiAgICAgIHBhcmVudE9iamVjdCA9IGN1cnJlbnRPYmplY3QuJHBhcmVudDtcblxuICBpZiAoY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eU5hbWUpIHtcbiAgICBwYXJlbnRPYmplY3Quc2V0KGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lLCBjdXJyZW50T2JqZWN0KTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBuZXcgZWxlbWVudFxuICBjdXJyZW50T2JqZWN0LnNldChwcm9wZXJ0eU5hbWUsIHByZXZpb3VzTGlzdCk7XG5cbiAgcmV0dXJuIGNvbnRleHQuY2hhbmdlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcblxudmFyIEhBTkRMRVJTID0ge1xuICAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnOiByZXF1aXJlKCcuL1VwZGF0ZUJ1c2luZXNzT2JqZWN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5jcmVhdGUtYW5kLXJlZmVyZW5jZSc6IHJlcXVpcmUoJy4vQ3JlYXRlQW5kUmVmZXJlbmNlSGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5jcmVhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCc6IHJlcXVpcmUoJy4vQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCc6IHJlcXVpcmUoJy4vVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJzogcmVxdWlyZSgnLi9NdWx0aUNvbW1hbmRIYW5kbGVyJylcbn07XG5cblxuZnVuY3Rpb24gQ29tbWFuZEluaXRpYWxpemVyKGV2ZW50QnVzLCBjb21tYW5kU3RhY2spIHtcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAgZm9yRWFjaChIQU5ETEVSUywgZnVuY3Rpb24oaGFuZGxlciwgaWQpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoaWQsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuQ29tbWFuZEluaXRpYWxpemVyLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjb21tYW5kU3RhY2snIF07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBfX2luaXRfXzogWyBDb21tYW5kSW5pdGlhbGl6ZXIgXVxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBFbGVtZW50SGVscGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRIZWxwZXI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlbGVtZW50IGFuZCBzZXQgdGhlIHBhcmVudCB0byBpdFxuICpcbiAqIEBtZXRob2QgRWxlbWVudEhlbHBlciNjcmVhdGVFbGVtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnRUeXBlIG9mIHRoZSBuZXcgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgb2YgdGhlIG5ldyBlbGVtZW50IGluIGtleS12YWx1ZSBwYWlyc1xuICogQHBhcmFtIHttb2RkbGUub2JqZWN0fSBwYXJlbnQgb2YgdGhlIG5ldyBlbGVtZW50XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgdGhlIG5ldyBlbGVtZW50XG4gKlxuICogQHJldHVybnMge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50IHdoaWNoIGlzIGNyZWF0ZWRcbiAqL1xuRWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudFR5cGUsIHByb3BlcnRpZXMsIHBhcmVudCwgZmFjdG9yeSkge1xuICB2YXIgZWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlKGVsZW1lbnRUeXBlLCBwcm9wZXJ0aWVzKTtcbiAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIHJlcXVpcmUoJy4vY21kJyksXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XG4gIF0sXG4gIF9faW5pdF9fOiBbICdwcm9wZXJ0aWVzUGFuZWwnIF0sXG4gIHByb3BlcnRpZXNQYW5lbDogWyAndHlwZScsIHJlcXVpcmUoJy4vUHJvcGVydGllc1BhbmVsJykgXVxufTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBJZHMgZnJvbSAnaWRzJztcblxuaW1wb3J0IEJhc2VWaWV3ZXIgZnJvbSAnLi9CYXNlVmlld2VyJztcblxuXG4vKipcbiAqIEEgYmFzZSBtb2RlbGVyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKiBIYXZlIGEgbG9vayBhdCB7QGxpbmsgTW9kZWxlcn0gZm9yIGEgYnVuZGxlIHRoYXQgaW5jbHVkZXMgYWN0dWFsIGZlYXR1cmVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2VNb2RlbGVyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIC8vIGhvb2sgSUQgY29sbGVjdGlvbiBpbnRvIHRoZSBtb2RlbGVyXG4gIHRoaXMub24oJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5lcnJvcikge1xuICAgICAgdGhpcy5fY29sbGVjdElkcyhldmVudC5kZWZpbml0aW9ucywgZXZlbnQuZWxlbWVudHNCeUlkKTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIHRoaXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZ2V0KCdtb2RkbGUnKS5pZHMuY2xlYXIoKTtcbiAgfSwgdGhpcyk7XG59XG5cbmluaGVyaXRzKEJhc2VNb2RlbGVyLCBCYXNlVmlld2VyKTtcblxuXG4vKipcbiAqIENyZWF0ZSBhIG1vZGRsZSBpbnN0YW5jZSwgYXR0YWNoaW5nIGlkcyB0byBpdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5CYXNlTW9kZWxlci5wcm90b3R5cGUuX2NyZWF0ZU1vZGRsZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIG1vZGRsZSA9IEJhc2VWaWV3ZXIucHJvdG90eXBlLl9jcmVhdGVNb2RkbGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICAvLyBhdHRhY2ggaWRzIHRvIG1vZGRsZSB0byBiZSBhYmxlIHRvIHRyYWNrXG4gIC8vIGFuZCB2YWxpZGF0ZWQgaWRzIGluIHRoZSBCUE1OIDIuMCBYTUwgZG9jdW1lbnRcbiAgLy8gdHJlZVxuICBtb2RkbGUuaWRzID0gbmV3IElkcyhbIDMyLCAzNiwgMSBdKTtcblxuICByZXR1cm4gbW9kZGxlO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0IGlkcyBwcm9jZXNzZWQgZHVyaW5nIHBhcnNpbmcgb2YgdGhlXG4gKiBkZWZpbml0aW9ucyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtDb250ZXh0fSBjb250ZXh0XG4gKi9cbkJhc2VNb2RlbGVyLnByb3RvdHlwZS5fY29sbGVjdElkcyA9IGZ1bmN0aW9uKGRlZmluaXRpb25zLCBlbGVtZW50c0J5SWQpIHtcblxuICB2YXIgbW9kZGxlID0gZGVmaW5pdGlvbnMuJG1vZGVsLFxuICAgICAgaWRzID0gbW9kZGxlLmlkcyxcbiAgICAgIGlkO1xuXG4gIC8vIHJlbW92ZSByZWZlcmVuY2VzIGZyb20gcHJldmlvdXMgaW1wb3J0XG4gIGlkcy5jbGVhcigpO1xuXG4gIGZvciAoaWQgaW4gZWxlbWVudHNCeUlkKSB7XG4gICAgaWRzLmNsYWltKGlkLCBlbGVtZW50c0J5SWRbaWRdKTtcbiAgfVxufTtcbiIsIi8qKlxuICogVGhlIGNvZGUgaW4gdGhlIDxwcm9qZWN0LWxvZ28+PC9wcm9qZWN0LWxvZ28+IGFyZWFcbiAqIG11c3Qgbm90IGJlIGNoYW5nZWQuXG4gKlxuICogQHNlZSBodHRwOi8vYnBtbi5pby9saWNlbnNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbmQsXG4gIGlzTnVtYmVyLFxuICBvbWl0XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgaW5uZXJTVkdcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgRGlhZ3JhbSBmcm9tICdkaWFncmFtLWpzJztcbmltcG9ydCBCcG1uTW9kZGxlIGZyb20gJ2JwbW4tbW9kZGxlJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaW1wb3J0QnBtbkRpYWdyYW1cbn0gZnJvbSAnLi9pbXBvcnQvSW1wb3J0ZXInO1xuXG5pbXBvcnQge1xuICB3cmFwRm9yQ29tcGF0aWJpbGl0eVxufSBmcm9tICcuL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwnO1xuXG4vKipcbiAqIEEgYmFzZSB2aWV3ZXIgZm9yIEJQTU4gMi4wIGRpYWdyYW1zLlxuICpcbiAqIEhhdmUgYSBsb29rIGF0IHtAbGluayBWaWV3ZXJ9LCB7QGxpbmsgTmF2aWdhdGVkVmlld2VyfSBvciB7QGxpbmsgTW9kZWxlcn0gZm9yXG4gKiBidW5kbGVzIHRoYXQgaW5jbHVkZSBhY3R1YWwgZmVhdHVyZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gdGhlIGNvbnRhaW5lciB0byByZW5kZXIgdGhlIHZpZXdlciBpbiwgZGVmYXVsdHMgdG8gYm9keS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMud2lkdGhdIHRoZSB3aWR0aCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gdGhlIGhlaWdodCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMubW9kZGxlRXh0ZW5zaW9uc10gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIHByb3ZpZGVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5tb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMuYWRkaXRpb25hbE1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIHVzZSB3aXRoIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzZVZpZXdlcihvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IGFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcblxuICB0aGlzLl9tb2RkbGUgPSB0aGlzLl9jcmVhdGVNb2RkbGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fY29udGFpbmVyID0gdGhpcy5fY3JlYXRlQ29udGFpbmVyKG9wdGlvbnMpO1xuXG4gIC8qIDxwcm9qZWN0LWxvZ28+ICovXG5cbiAgYWRkUHJvamVjdExvZ28odGhpcy5fY29udGFpbmVyKTtcblxuICAvKiA8L3Byb2plY3QtbG9nbz4gKi9cblxuICB0aGlzLl9pbml0KHRoaXMuX2NvbnRhaW5lciwgdGhpcy5fbW9kZGxlLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoQmFzZVZpZXdlciwgRGlhZ3JhbSk7XG5cbi8qKlxuKiBUaGUgaW1wb3J0WE1MIHJlc3VsdC5cbipcbiogQHR5cGVkZWYge09iamVjdH0gSW1wb3J0WE1MUmVzdWx0XG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuKiBUaGUgaW1wb3J0WE1MIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydFhNTEVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogUGFyc2UgYW5kIHJlbmRlciBhIEJQTU4gMi4wIGRpYWdyYW0uXG4gKlxuICogT25jZSBmaW5pc2hlZCB0aGUgdmlld2VyIHJlcG9ydHMgYmFjayB0aGUgcmVzdWx0IHRvIHRoZVxuICogcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCAoZXJyLCB3YXJuaW5ncykuXG4gKlxuICogIyMgTGlmZS1DeWNsZSBFdmVudHNcbiAqXG4gKiBEdXJpbmcgaW1wb3J0IHRoZSB2aWV3ZXIgd2lsbCBmaXJlIGxpZmUtY3ljbGUgZXZlbnRzOlxuICpcbiAqICAgKiBpbXBvcnQucGFyc2Uuc3RhcnQgKGFib3V0IHRvIHJlYWQgbW9kZWwgZnJvbSB4bWwpXG4gKiAgICogaW1wb3J0LnBhcnNlLmNvbXBsZXRlIChtb2RlbCByZWFkOyBtYXkgaGF2ZSB3b3JrZWQgb3Igbm90KVxuICogICAqIGltcG9ydC5yZW5kZXIuc3RhcnQgKGdyYXBoaWNhbCBpbXBvcnQgc3RhcnQpXG4gKiAgICogaW1wb3J0LnJlbmRlci5jb21wbGV0ZSAoZ3JhcGhpY2FsIGltcG9ydCBmaW5pc2hlZClcbiAqICAgKiBpbXBvcnQuZG9uZSAoZXZlcnl0aGluZyBkb25lKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbCB0aGUgQlBNTiAyLjAgeG1sXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fHN0cmluZ30gW2JwbW5EaWFncmFtXSBCUE1OIGRpYWdyYW0gb3IgaWQgb2YgZGlhZ3JhbSB0byByZW5kZXIgKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0WE1MUmVzdWx0LCBJbXBvcnRYTUxFcnJvcj59XG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmltcG9ydFhNTCA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIGltcG9ydFhNTCh4bWwsIGJwbW5EaWFncmFtKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIFBhcnNlQ29tcGxldGVFdmVudChkYXRhKSB7XG5cbiAgICB2YXIgZXZlbnQgPSBzZWxmLmdldCgnZXZlbnRCdXMnKS5jcmVhdGVFdmVudChkYXRhKTtcblxuICAgIC8vIFRPRE8obmlra3UpOiByZW1vdmUgd2l0aCBmdXR1cmUgYnBtbi1qcyB2ZXJzaW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnY29udGV4dCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoXG4gICAgICAgICAgJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZSA8Y29udGV4dD4gaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgbGlicmFyeSB2ZXJzaW9ucydcbiAgICAgICAgKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YXJuaW5nczogZGF0YS53YXJuaW5ncyxcbiAgICAgICAgICByZWZlcmVuY2VzOiBkYXRhLnJlZmVyZW5jZXMsXG4gICAgICAgICAgZWxlbWVudHNCeUlkOiBkYXRhLmVsZW1lbnRzQnlJZFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgLy8gaG9vayBpbiBwcmUtcGFyc2UgbGlzdGVuZXJzICtcbiAgICAvLyBhbGxvdyB4bWwgbWFuaXB1bGF0aW9uXG4gICAgeG1sID0gc2VsZi5fZW1pdCgnaW1wb3J0LnBhcnNlLnN0YXJ0JywgeyB4bWw6IHhtbCB9KSB8fCB4bWw7XG5cbiAgICBzZWxmLl9tb2RkbGUuZnJvbVhNTCh4bWwsICdicG1uOkRlZmluaXRpb25zJykudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgIHZhciBkZWZpbml0aW9ucyA9IHJlc3VsdC5yb290RWxlbWVudDtcbiAgICAgIHZhciByZWZlcmVuY2VzID0gcmVzdWx0LnJlZmVyZW5jZXM7XG4gICAgICB2YXIgcGFyc2VXYXJuaW5ncyA9IHJlc3VsdC53YXJuaW5ncztcbiAgICAgIHZhciBlbGVtZW50c0J5SWQgPSByZXN1bHQuZWxlbWVudHNCeUlkO1xuXG4gICAgICAvLyBob29rIGluIHBvc3QgcGFyc2UgbGlzdGVuZXJzICtcbiAgICAgIC8vIGFsbG93IGRlZmluaXRpb25zIG1hbmlwdWxhdGlvblxuICAgICAgZGVmaW5pdGlvbnMgPSBzZWxmLl9lbWl0KCdpbXBvcnQucGFyc2UuY29tcGxldGUnLCBQYXJzZUNvbXBsZXRlRXZlbnQoe1xuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgZGVmaW5pdGlvbnM6IGRlZmluaXRpb25zLFxuICAgICAgICBlbGVtZW50c0J5SWQ6IGVsZW1lbnRzQnlJZCxcbiAgICAgICAgcmVmZXJlbmNlczogcmVmZXJlbmNlcyxcbiAgICAgICAgd2FybmluZ3M6IHBhcnNlV2FybmluZ3NcbiAgICAgIH0pKSB8fCBkZWZpbml0aW9ucztcblxuICAgICAgc2VsZi5pbXBvcnREZWZpbml0aW9ucyhkZWZpbml0aW9ucywgYnBtbkRpYWdyYW0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHZhciBhbGxXYXJuaW5ncyA9IFtdLmNvbmNhdChwYXJzZVdhcm5pbmdzLCByZXN1bHQud2FybmluZ3MgfHwgW10pO1xuXG4gICAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogbnVsbCwgd2FybmluZ3M6IGFsbFdhcm5pbmdzIH0pO1xuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IGFsbFdhcm5pbmdzIH0pO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIHZhciBhbGxXYXJuaW5ncyA9IFtdLmNvbmNhdChwYXJzZVdhcm5pbmdzLCBlcnIud2FybmluZ3MgfHwgW10pO1xuXG4gICAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogZXJyLCB3YXJuaW5nczogYWxsV2FybmluZ3MgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlamVjdChhZGRXYXJuaW5nc1RvRXJyb3IoZXJyLCBhbGxXYXJuaW5ncykpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG5cbiAgICAgIGVyciA9IGNoZWNrVmFsaWRhdGlvbkVycm9yKGVycik7XG5cbiAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogZXJyLCB3YXJuaW5nczogZXJyLndhcm5pbmdzIH0pO1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuKiBUaGUgaW1wb3J0RGVmaW5pdGlvbnMgcmVzdWx0LlxuKlxuKiBAdHlwZWRlZiB7T2JqZWN0fSBJbXBvcnREZWZpbml0aW9uc1Jlc3VsdFxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiogVGhlIGltcG9ydERlZmluaXRpb25zIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydERlZmluaXRpb25zRXJyb3JcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4gKiBJbXBvcnQgcGFyc2VkIGRlZmluaXRpb25zIGFuZCByZW5kZXIgYSBCUE1OIDIuMCBkaWFncmFtLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIGltcG9ydCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnJlbmRlci5zdGFydCAoZ3JhcGhpY2FsIGltcG9ydCBzdGFydClcbiAqICAgKiBpbXBvcnQucmVuZGVyLmNvbXBsZXRlIChncmFwaGljYWwgaW1wb3J0IGZpbmlzaGVkKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PERlZmluaXRpb25zPn0gZGVmaW5pdGlvbnMgcGFyc2VkIEJQTU4gMi4wIGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fHN0cmluZ30gW2JwbW5EaWFncmFtXSBCUE1OIGRpYWdyYW0gb3IgaWQgb2YgZGlhZ3JhbSB0byByZW5kZXIgKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0RGVmaW5pdGlvbnNSZXN1bHQsIEltcG9ydERlZmluaXRpb25zRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5pbXBvcnREZWZpbml0aW9ucyA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIGltcG9ydERlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICBzZWxmLl9zZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucyk7XG5cbiAgICBzZWxmLm9wZW4oYnBtbkRpYWdyYW0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG5cbiAgICAgIHZhciB3YXJuaW5ncyA9IHJlc3VsdC53YXJuaW5ncztcblxuICAgICAgcmV0dXJuIHJlc29sdmUoeyB3YXJuaW5nczogd2FybmluZ3MgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBUaGUgb3BlbiByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gT3BlblJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiogVGhlIG9wZW4gZXJyb3IuXG4qXG4qIEB0eXBlZGVmIHtFcnJvcn0gT3BlbkVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogT3BlbiBkaWFncmFtIG9mIHByZXZpb3VzbHkgaW1wb3J0ZWQgWE1MLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIHN3aXRjaCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnJlbmRlci5zdGFydCAoZ3JhcGhpY2FsIGltcG9ydCBzdGFydClcbiAqICAgKiBpbXBvcnQucmVuZGVyLmNvbXBsZXRlIChncmFwaGljYWwgaW1wb3J0IGZpbmlzaGVkKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8TW9kZGxlRWxlbWVudDxCUE1ORGlhZ3JhbT59IFticG1uRGlhZ3JhbU9ySWRdIGlkIG9yIHRoZSBkaWFncmFtIHRvIG9wZW5cbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPE9wZW5SZXN1bHQsIE9wZW5FcnJvcj59XG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9wZW4gPSB3cmFwRm9yQ29tcGF0aWJpbGl0eShmdW5jdGlvbiBvcGVuKGJwbW5EaWFncmFtT3JJZCkge1xuXG4gIHZhciBkZWZpbml0aW9ucyA9IHRoaXMuX2RlZmluaXRpb25zO1xuICB2YXIgYnBtbkRpYWdyYW0gPSBicG1uRGlhZ3JhbU9ySWQ7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAoIWRlZmluaXRpb25zKSB7XG4gICAgICB2YXIgZXJyMSA9IG5ldyBFcnJvcignbm8gWE1MIGltcG9ydGVkJyk7XG5cbiAgICAgIHJldHVybiByZWplY3QoYWRkV2FybmluZ3NUb0Vycm9yKGVycjEsIFtdKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBicG1uRGlhZ3JhbU9ySWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBicG1uRGlhZ3JhbSA9IGZpbmRCUE1ORGlhZ3JhbShkZWZpbml0aW9ucywgYnBtbkRpYWdyYW1PcklkKTtcblxuICAgICAgaWYgKCFicG1uRGlhZ3JhbSkge1xuICAgICAgICB2YXIgZXJyMiA9IG5ldyBFcnJvcignQlBNTkRpYWdyYW0gPCcgKyBicG1uRGlhZ3JhbU9ySWQgKyAnPiBub3QgZm91bmQnKTtcblxuICAgICAgICByZXR1cm4gcmVqZWN0KGFkZFdhcm5pbmdzVG9FcnJvcihlcnIyLCBbXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFyIGV4aXN0aW5nIHJlbmRlcmVkIGRpYWdyYW1cbiAgICAvLyBjYXRjaCBzeW5jaHJvbm91cyBleGNlcHRpb25zIGR1cmluZyAjY2xlYXIoKVxuICAgIHRyeSB7XG4gICAgICBzZWxmLmNsZWFyKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgcmV0dXJuIHJlamVjdChhZGRXYXJuaW5nc1RvRXJyb3IoZXJyb3IsIFtdKSk7XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybSBncmFwaGljYWwgaW1wb3J0XG4gICAgaW1wb3J0QnBtbkRpYWdyYW0oc2VsZiwgZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXG4gICAgICB2YXIgd2FybmluZ3MgPSByZXN1bHQud2FybmluZ3M7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IHdhcm5pbmdzIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIHNhdmVYTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhdmVYTUxSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBFeHBvcnQgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgQlBNTiAyLjAgZGlhZ3JhbSBhc1xuICogYSBCUE1OIDIuMCBYTUwgZG9jdW1lbnQuXG4gKlxuICogIyMgTGlmZS1DeWNsZSBFdmVudHNcbiAqXG4gKiBEdXJpbmcgWE1MIHNhdmluZyB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogc2F2ZVhNTC5zdGFydCAoYmVmb3JlIHNlcmlhbGl6YXRpb24pXG4gKiAgICogc2F2ZVhNTC5zZXJpYWxpemVkIChhZnRlciB4bWwgZ2VuZXJhdGlvbilcbiAqICAgKiBzYXZlWE1MLmRvbmUgKGV2ZXJ5dGhpbmcgZG9uZSlcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gZXhwb3J0IG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9ybWF0PWZhbHNlXSBvdXRwdXQgZm9ybWF0dGVkIFhNTFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmVhbWJsZT10cnVlXSBvdXRwdXQgcHJlYW1ibGVcbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPFNhdmVYTUxSZXN1bHQsIEVycm9yPn1cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuc2F2ZVhNTCA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIHNhdmVYTUwob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZGVmaW5pdGlvbnMgPSB0aGlzLl9kZWZpbml0aW9ucztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICBpZiAoIWRlZmluaXRpb25zKSB7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdubyBkZWZpbml0aW9ucyBsb2FkZWQnKTtcblxuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIC8vIGFsbG93IHRvIGZpZGRsZSBhcm91bmQgd2l0aCBkZWZpbml0aW9uc1xuICAgIGRlZmluaXRpb25zID0gc2VsZi5fZW1pdCgnc2F2ZVhNTC5zdGFydCcsIHtcbiAgICAgIGRlZmluaXRpb25zOiBkZWZpbml0aW9uc1xuICAgIH0pIHx8IGRlZmluaXRpb25zO1xuXG4gICAgc2VsZi5fbW9kZGxlLnRvWE1MKGRlZmluaXRpb25zLCBvcHRpb25zKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXG4gICAgICB2YXIgeG1sID0gcmVzdWx0LnhtbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgeG1sID0gc2VsZi5fZW1pdCgnc2F2ZVhNTC5zZXJpYWxpemVkJywge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHhtbDogeG1sXG4gICAgICAgIH0pIHx8IHhtbDtcblxuICAgICAgICBzZWxmLl9lbWl0KCdzYXZlWE1MLmRvbmUnLCB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgeG1sOiB4bWxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGluIHNhdmVYTUwgbGlmZS1jeWNsZSBsaXN0ZW5lcicsIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IHhtbDogeG1sIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIHNhdmVTVkcgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhdmVTVkdSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ZnXG4gKi9cblxuLyoqXG4gKiBFeHBvcnQgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgQlBNTiAyLjAgZGlhZ3JhbSBhc1xuICogYW4gU1ZHIGltYWdlLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIFNWRyBzYXZpbmcgdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIHNhdmVTVkcuc3RhcnQgKGJlZm9yZSBzZXJpYWxpemF0aW9uKVxuICogICAqIHNhdmVTVkcuZG9uZSAoZXZlcnl0aGluZyBkb25lKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8U2F2ZVNWR1Jlc3VsdCwgRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5zYXZlU1ZHID0gd3JhcEZvckNvbXBhdGliaWxpdHkoZnVuY3Rpb24gc2F2ZVNWRyhvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgIHNlbGYuX2VtaXQoJ3NhdmVTVkcuc3RhcnQnKTtcblxuICAgIHZhciBzdmcsIGVycjtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgY2FudmFzID0gc2VsZi5nZXQoJ2NhbnZhcycpO1xuXG4gICAgICB2YXIgY29udGVudE5vZGUgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksXG4gICAgICAgICAgZGVmc05vZGUgPSBkb21RdWVyeSgnZGVmcycsIGNhbnZhcy5fc3ZnKTtcblxuICAgICAgdmFyIGNvbnRlbnRzID0gaW5uZXJTVkcoY29udGVudE5vZGUpLFxuICAgICAgICAgIGRlZnMgPSBkZWZzTm9kZSA/ICc8ZGVmcz4nICsgaW5uZXJTVkcoZGVmc05vZGUpICsgJzwvZGVmcz4nIDogJyc7XG5cbiAgICAgIHZhciBiYm94ID0gY29udGVudE5vZGUuZ2V0QkJveCgpO1xuXG4gICAgICBzdmcgPVxuICAgICAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIj8+XFxuJyArXG4gICAgICAgICc8IS0tIGNyZWF0ZWQgd2l0aCBicG1uLWpzIC8gaHR0cDovL2JwbW4uaW8gLS0+XFxuJyArXG4gICAgICAgICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIj5cXG4nICtcbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiICcgK1xuICAgICAgICAgICAgICd3aWR0aD1cIicgKyBiYm94LndpZHRoICsgJ1wiIGhlaWdodD1cIicgKyBiYm94LmhlaWdodCArICdcIiAnICtcbiAgICAgICAgICAgICAndmlld0JveD1cIicgKyBiYm94LnggKyAnICcgKyBiYm94LnkgKyAnICcgKyBiYm94LndpZHRoICsgJyAnICsgYmJveC5oZWlnaHQgKyAnXCIgdmVyc2lvbj1cIjEuMVwiPicgK1xuICAgICAgICAgIGRlZnMgKyBjb250ZW50cyArXG4gICAgICAgICc8L3N2Zz4nO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVyciA9IGU7XG4gICAgfVxuXG4gICAgc2VsZi5fZW1pdCgnc2F2ZVNWRy5kb25lJywge1xuICAgICAgZXJyb3I6IGVycixcbiAgICAgIHN2Zzogc3ZnXG4gICAgfSk7XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdmc6IHN2ZyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogR2V0IGEgbmFtZWQgZGlhZ3JhbSBzZXJ2aWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGVsZW1lbnRSZWdpc3RyeSA9IHZpZXdlci5nZXQoJ2VsZW1lbnRSZWdpc3RyeScpO1xuICogdmFyIHN0YXJ0RXZlbnRTaGFwZSA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoJ1N0YXJ0RXZlbnRfMScpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkaWFncmFtIHNlcnZpY2UgaW5zdGFuY2VcbiAqXG4gKiBAbWV0aG9kIEJhc2VWaWV3ZXIjZ2V0XG4gKi9cblxuLyoqXG4gKiBJbnZva2UgYSBmdW5jdGlvbiBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHZpZXdlci5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZpZXdlci5pbnZva2UoZnVuY3Rpb24oZWxlbWVudFJlZ2lzdHJ5KSB7XG4gKiAgIHZhciBzdGFydEV2ZW50U2hhcGUgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KCdTdGFydEV2ZW50XzEnKTtcbiAqIH0pO1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGludm9rZWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBmdW5jdGlvbnMgcmV0dXJuIHZhbHVlXG4gKlxuICogQG1ldGhvZCBCYXNlVmlld2VyI2ludm9rZVxuICovXG5cblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX3NldERlZmluaXRpb25zID0gZnVuY3Rpb24oZGVmaW5pdGlvbnMpIHtcbiAgdGhpcy5fZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmdldE1vZHVsZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX21vZHVsZXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgZHJhd24gZWxlbWVudHMgZnJvbSB0aGUgdmlld2VyLlxuICpcbiAqIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIHZpZXdlciBjYW4gc3RpbGxcbiAqIGJlIHJldXNlZCBmb3Igb3BlbmluZyBhbm90aGVyIGRpYWdyYW0uXG4gKlxuICogQG1ldGhvZCBCYXNlVmlld2VyI2NsZWFyXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5nZXREZWZpbml0aW9ucygpKSB7XG5cbiAgICAvLyBubyBkaWFncmFtIHRvIGNsZWFyXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gcmVtb3ZlIGJ1c2luZXNzT2JqZWN0I2RpIGJpbmRpbmdcbiAgLy9cbiAgLy8gdGhpcyBpcyBuZWNlc3NhcnksIGFzIHdlIGVzdGFibGlzaCB0aGUgYmluZGluZ3NcbiAgLy8gaW4gdGhlIEJwbW5UcmVlV2Fsa2VyIChhbmQgYXNzdW1lIG5vbmUgYXJlIGdpdmVuXG4gIC8vIG9uIHJlaW1wb3J0KVxuICB0aGlzLmdldCgnZWxlbWVudFJlZ2lzdHJ5JykuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIGJvID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChibyAmJiBiby5kaSkge1xuICAgICAgZGVsZXRlIGJvLmRpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGRyYXduIGVsZW1lbnRzXG4gIERpYWdyYW0ucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIHZpZXdlciBpbnN0YW5jZSBhbmQgcmVtb3ZlIGFsbCBpdHNcbiAqIHJlbWFpbmRlcnMgZnJvbSB0aGUgZG9jdW1lbnQgdHJlZS5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuXG4gIC8vIGRpYWdyYW0gZGVzdHJveVxuICBEaWFncmFtLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgLy8gZG9tIGRldGFjaFxuICBkb21SZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXJcbiAqXG4gKiBSZW1vdmUgYSBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVyIHZpYSB7QGxpbmsgI29mZihldmVudCwgY2FsbGJhY2spfS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50LCBwcmlvcml0eSwgY2FsbGJhY2ssIHRhcmdldCkge1xuICByZXR1cm4gdGhpcy5nZXQoJ2V2ZW50QnVzJykub24oZXZlbnQsIHByaW9yaXR5LCBjYWxsYmFjaywgdGFyZ2V0KTtcbn07XG5cbi8qKlxuICogRGUtcmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjaykge1xuICB0aGlzLmdldCgnZXZlbnRCdXMnKS5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24ocGFyZW50Tm9kZSkge1xuXG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50Tm9kZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIGRldGFjaCBmcm9tIHRoZVxuICAvLyBwcmV2aW91cywgb2xkIHBhcmVudFxuICB0aGlzLmRldGFjaCgpO1xuXG4gIC8vIHVud3JhcCBqUXVlcnkgaWYgcHJvdmlkZWRcbiAgaWYgKHBhcmVudE5vZGUuZ2V0ICYmIHBhcmVudE5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLmpxdWVyeSkge1xuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLmdldCgwKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyZW50Tm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJlbnROb2RlID0gZG9tUXVlcnkocGFyZW50Tm9kZSk7XG4gIH1cblxuICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgdGhpcy5fZW1pdCgnYXR0YWNoJywge30pO1xuXG4gIHRoaXMuZ2V0KCdjYW52YXMnKS5yZXNpemVkKCk7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5nZXREZWZpbml0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbnM7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLFxuICAgICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2RldGFjaCcsIHt9KTtcblxuICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbW9kZGxlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGJhc2VNb2R1bGVzID0gb3B0aW9ucy5tb2R1bGVzIHx8IHRoaXMuZ2V0TW9kdWxlcygpLFxuICAgICAgYWRkaXRpb25hbE1vZHVsZXMgPSBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzIHx8IFtdLFxuICAgICAgc3RhdGljTW9kdWxlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGJwbW5qczogWyAndmFsdWUnLCB0aGlzIF0sXG4gICAgICAgICAgbW9kZGxlOiBbICd2YWx1ZScsIG1vZGRsZSBdXG4gICAgICAgIH1cbiAgICAgIF07XG5cbiAgdmFyIGRpYWdyYW1Nb2R1bGVzID0gW10uY29uY2F0KHN0YXRpY01vZHVsZXMsIGJhc2VNb2R1bGVzLCBhZGRpdGlvbmFsTW9kdWxlcyk7XG5cbiAgdmFyIGRpYWdyYW1PcHRpb25zID0gYXNzaWduKG9taXQob3B0aW9ucywgWyAnYWRkaXRpb25hbE1vZHVsZXMnIF0pLCB7XG4gICAgY2FudmFzOiBhc3NpZ24oe30sIG9wdGlvbnMuY2FudmFzLCB7IGNvbnRhaW5lcjogY29udGFpbmVyIH0pLFxuICAgIG1vZHVsZXM6IGRpYWdyYW1Nb2R1bGVzXG4gIH0pO1xuXG4gIC8vIGludm9rZSBkaWFncmFtIGNvbnN0cnVjdG9yXG4gIERpYWdyYW0uY2FsbCh0aGlzLCBkaWFncmFtT3B0aW9ucyk7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIpIHtcbiAgICB0aGlzLmF0dGFjaFRvKG9wdGlvbnMuY29udGFpbmVyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbWl0IGFuIGV2ZW50IG9uIHRoZSB1bmRlcmx5aW5nIHtAbGluayBFdmVudEJ1c31cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50IHByb2Nlc3NpbmcgcmVzdWx0IChpZiBhbnkpXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLl9lbWl0ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0KCdldmVudEJ1cycpLmZpcmUodHlwZSwgZXZlbnQpO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblxuICB2YXIgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYmpzLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuXG4gIGFzc2lnbihjb250YWluZXIuc3R5bGUsIHtcbiAgICB3aWR0aDogZW5zdXJlVW5pdChvcHRpb25zLndpZHRoKSxcbiAgICBoZWlnaHQ6IGVuc3VyZVVuaXQob3B0aW9ucy5oZWlnaHQpLFxuICAgIHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uXG4gIH0pO1xuXG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fY3JlYXRlTW9kZGxlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgbW9kZGxlT3B0aW9ucyA9IGFzc2lnbih7fSwgdGhpcy5fbW9kZGxlRXh0ZW5zaW9ucywgb3B0aW9ucy5tb2RkbGVFeHRlbnNpb25zKTtcblxuICByZXR1cm4gbmV3IEJwbW5Nb2RkbGUobW9kZGxlT3B0aW9ucyk7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fbW9kdWxlcyA9IFtdO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRXYXJuaW5nc1RvRXJyb3IoZXJyLCB3YXJuaW5nc0FyeSkge1xuICBlcnIud2FybmluZ3MgPSB3YXJuaW5nc0FyeTtcbiAgcmV0dXJuIGVycjtcbn1cblxuZnVuY3Rpb24gY2hlY2tWYWxpZGF0aW9uRXJyb3IoZXJyKSB7XG5cbiAgLy8gY2hlY2sgaWYgd2UgY2FuIGhlbHAgdGhlIHVzZXIgYnkgaW5kaWNhdGluZyB3cm9uZyBCUE1OIDIuMCB4bWxcbiAgLy8gKGluIGNhc2UgaGUgb3IgdGhlIGV4cG9ydGluZyB0b29sIGRpZCBub3QgZ2V0IHRoYXQgcmlnaHQpXG5cbiAgdmFyIHBhdHRlcm4gPSAvdW5wYXJzYWJsZSBjb250ZW50IDwoW14+XSspPiBkZXRlY3RlZChbXFxzXFxTXSopJC87XG4gIHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyhlcnIubWVzc2FnZSk7XG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgZXJyLm1lc3NhZ2UgPVxuICAgICAgJ3VucGFyc2FibGUgY29udGVudCA8JyArIG1hdGNoWzFdICsgJz4gZGV0ZWN0ZWQ7ICcgK1xuICAgICAgJ3RoaXMgbWF5IGluZGljYXRlIGFuIGludmFsaWQgQlBNTiAyLjAgZGlhZ3JhbSBmaWxlJyArIG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn1cblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59O1xuXG5cbi8qKlxuICogRW5zdXJlIHRoZSBwYXNzZWQgYXJndW1lbnQgaXMgYSBwcm9wZXIgdW5pdCAoZGVmYXVsdGluZyB0byBweClcbiAqL1xuZnVuY3Rpb24gZW5zdXJlVW5pdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCArIChpc051bWJlcih2YWwpID8gJ3B4JyA6ICcnKTtcbn1cblxuXG4vKipcbiAqIEZpbmQgQlBNTkRpYWdyYW0gaW4gZGVmaW5pdGlvbnMgYnkgSURcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8RGVmaW5pdGlvbnM+fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGRpYWdyYW1JZFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZpbmRCUE1ORGlhZ3JhbShkZWZpbml0aW9ucywgZGlhZ3JhbUlkKSB7XG4gIGlmICghZGlhZ3JhbUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmluZChkZWZpbml0aW9ucy5kaWFncmFtcywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmlkID09PSBkaWFncmFtSWQ7XG4gIH0pIHx8IG51bGw7XG59XG5cblxuLyogPHByb2plY3QtbG9nbz4gKi9cblxuaW1wb3J0IHtcbiAgb3BlbiBhcyBvcGVuUG93ZXJlZEJ5LFxuICBCUE1OSU9fSU1HLFxuICBMSU5LX1NUWUxFUyBhcyBCUE1OSU9fTElOS19TVFlMRVNcbn0gZnJvbSAnLi91dGlsL1Bvd2VyZWRCeVV0aWwnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudFxufSBmcm9tICdtaW4tZG9tJztcblxuLyoqXG4gKiBBZGRzIHRoZSBwcm9qZWN0IGxvZ28gdG8gdGhlIGRpYWdyYW0gY29udGFpbmVyIGFzXG4gKiByZXF1aXJlZCBieSB0aGUgYnBtbi5pbyBsaWNlbnNlLlxuICpcbiAqIEBzZWUgaHR0cDovL2JwbW4uaW8vbGljZW5zZVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gKi9cbmZ1bmN0aW9uIGFkZFByb2plY3RMb2dvKGNvbnRhaW5lcikge1xuICB2YXIgaW1nID0gQlBNTklPX0lNRztcblxuICB2YXIgbGlua01hcmt1cCA9XG4gICAgJzxhIGhyZWY9XCJodHRwOi8vYnBtbi5pb1wiICcgK1xuICAgICAgICd0YXJnZXQ9XCJfYmxhbmtcIiAnICtcbiAgICAgICAnY2xhc3M9XCJianMtcG93ZXJlZC1ieVwiICcgK1xuICAgICAgICd0aXRsZT1cIlBvd2VyZWQgYnkgYnBtbi5pb1wiICcgK1xuICAgICAgICdzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAxNXB4OyByaWdodDogMTVweDsgei1pbmRleDogMTAwOyAnICsgQlBNTklPX0xJTktfU1RZTEVTICsgJ1wiPicgK1xuICAgICAgaW1nICtcbiAgICAnPC9hPic7XG5cbiAgdmFyIGxpbmtFbGVtZW50ID0gZG9taWZ5KGxpbmtNYXJrdXApO1xuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsaW5rRWxlbWVudCk7XG5cbiAgZG9tRXZlbnQuYmluZChsaW5rRWxlbWVudCwgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBvcGVuUG93ZXJlZEJ5KCk7XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9KTtcbn1cblxuLyogPC9wcm9qZWN0LWxvZ28+ICovXG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZU1vZGVsZXIgZnJvbSAnLi9CYXNlTW9kZWxlcic7XG5cbmltcG9ydCBWaWV3ZXIgZnJvbSAnLi9WaWV3ZXInO1xuaW1wb3J0IE5hdmlnYXRlZFZpZXdlciBmcm9tICcuL05hdmlnYXRlZFZpZXdlcic7XG5cbmltcG9ydCBLZXlib2FyZE1vdmVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi9rZXlib2FyZC1tb3ZlJztcbmltcG9ydCBNb3ZlQ2FudmFzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vbW92ZWNhbnZhcyc7XG5pbXBvcnQgVG91Y2hNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi90b3VjaCc7XG5pbXBvcnQgWm9vbVNjcm9sbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwnO1xuXG5pbXBvcnQgQWxpZ25FbGVtZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cyc7XG5pbXBvcnQgQXV0b1BsYWNlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvYXV0by1wbGFjZSc7XG5pbXBvcnQgQXV0b1Jlc2l6ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2F1dG8tcmVzaXplJztcbmltcG9ydCBBdXRvU2Nyb2xsTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tc2Nyb2xsJztcbmltcG9ydCBCZW5kcG9pbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMnO1xuaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdCc7XG5pbXBvcnQgQ29ubmVjdGlvblByZXZpZXdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3JztcbmltcG9ydCBDb250ZXh0UGFkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvY29udGV4dC1wYWQnO1xuaW1wb3J0IENvcHlQYXN0ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2NvcHktcGFzdGUnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUnO1xuaW1wb3J0IERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2Rpc3RyaWJ1dGUtZWxlbWVudHMnO1xuaW1wb3J0IEVkaXRvckFjdGlvbnNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucyc7XG5pbXBvcnQgR3JpZFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvZ3JpZC1zbmFwcGluZyc7XG5pbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMva2V5Ym9hcmQnO1xuaW1wb3J0IEtleWJvYXJkTW92ZVNlbGVjdGlvbk1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbic7XG5pbXBvcnQgTGFiZWxFZGl0aW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZyc7XG5pbXBvcnQgTW9kZWxpbmdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9tb2RlbGluZyc7XG5pbXBvcnQgTW92ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb3ZlJztcbmltcG9ydCBQYWxldHRlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvcGFsZXR0ZSc7XG5pbXBvcnQgUmVwbGFjZVByZXZpZXdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9yZXBsYWNlLXByZXZpZXcnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUnO1xuaW1wb3J0IFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvc25hcHBpbmcnO1xuaW1wb3J0IFNlYXJjaE1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL3NlYXJjaCc7XG5cbmltcG9ydCB7XG4gIHdyYXBGb3JDb21wYXRpYmlsaXR5XG59IGZyb20gJy4vdXRpbC9Db21wYXRpYmlsaXR5VXRpbCc7XG5cbnZhciBpbml0aWFsRGlhZ3JhbSA9XG4gICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4nICtcbiAgJzxicG1uOmRlZmluaXRpb25zIHhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICd4bWxuczpicG1uPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6YnBtbmRpPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6ZGM9XCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiICcgK1xuICAgICAgICAgICAgICAgICAgICAndGFyZ2V0TmFtZXNwYWNlPVwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW5cIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2lkPVwiRGVmaW5pdGlvbnNfMVwiPicgK1xuICAgICc8YnBtbjpwcm9jZXNzIGlkPVwiUHJvY2Vzc18xXCIgaXNFeGVjdXRhYmxlPVwiZmFsc2VcIj4nICtcbiAgICAgICc8YnBtbjpzdGFydEV2ZW50IGlkPVwiU3RhcnRFdmVudF8xXCIvPicgK1xuICAgICc8L2JwbW46cHJvY2Vzcz4nICtcbiAgICAnPGJwbW5kaTpCUE1ORGlhZ3JhbSBpZD1cIkJQTU5EaWFncmFtXzFcIj4nICtcbiAgICAgICc8YnBtbmRpOkJQTU5QbGFuZSBpZD1cIkJQTU5QbGFuZV8xXCIgYnBtbkVsZW1lbnQ9XCJQcm9jZXNzXzFcIj4nICtcbiAgICAgICAgJzxicG1uZGk6QlBNTlNoYXBlIGlkPVwiX0JQTU5TaGFwZV9TdGFydEV2ZW50XzJcIiBicG1uRWxlbWVudD1cIlN0YXJ0RXZlbnRfMVwiPicgK1xuICAgICAgICAgICc8ZGM6Qm91bmRzIGhlaWdodD1cIjM2LjBcIiB3aWR0aD1cIjM2LjBcIiB4PVwiMTczLjBcIiB5PVwiMTAyLjBcIi8+JyArXG4gICAgICAgICc8L2JwbW5kaTpCUE1OU2hhcGU+JyArXG4gICAgICAnPC9icG1uZGk6QlBNTlBsYW5lPicgK1xuICAgICc8L2JwbW5kaTpCUE1ORGlhZ3JhbT4nICtcbiAgJzwvYnBtbjpkZWZpbml0aW9ucz4nO1xuXG5cbi8qKlxuICogQSBtb2RlbGVyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKlxuICogIyMgRXh0ZW5kaW5nIHRoZSBNb2RlbGVyXG4gKlxuICogSW4gb3JkZXIgdG8gZXh0ZW5kIHRoZSB2aWV3ZXIgcGFzcyBleHRlbnNpb24gbW9kdWxlcyB0byBib290c3RyYXAgdmlhIHRoZVxuICogYGFkZGl0aW9uYWxNb2R1bGVzYCBvcHRpb24uIEFuIGV4dGVuc2lvbiBtb2R1bGUgaXMgYW4gb2JqZWN0IHRoYXQgZXhwb3Nlc1xuICogbmFtZWQgc2VydmljZXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlcGljdHMgdGhlIGludGVncmF0aW9uIG9mIGEgc2ltcGxlXG4gKiBsb2dnaW5nIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCBpbnRlcmFjdGlvbiBldmVudHM6XG4gKlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsb2dnaW5nIGNvbXBvbmVudFxuICogZnVuY3Rpb24gSW50ZXJhY3Rpb25Mb2dnZXIoZXZlbnRCdXMpIHtcbiAqICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKClcbiAqICAgfSlcbiAqIH1cbiAqXG4gKiBJbnRlcmFjdGlvbkxvZ2dlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IC8vIG1pbmlmaWNhdGlvbiBzYXZlXG4gKlxuICogLy8gZXh0ZW5zaW9uIG1vZHVsZVxuICogdmFyIGV4dGVuc2lvbk1vZHVsZSA9IHtcbiAqICAgX19pbml0X186IFsgJ2ludGVyYWN0aW9uTG9nZ2VyJyBdLFxuICogICBpbnRlcmFjdGlvbkxvZ2dlcjogWyAndHlwZScsIEludGVyYWN0aW9uTG9nZ2VyIF1cbiAqIH07XG4gKlxuICogLy8gZXh0ZW5kIHRoZSB2aWV3ZXJcbiAqIHZhciBicG1uTW9kZWxlciA9IG5ldyBNb2RlbGVyKHsgYWRkaXRpb25hbE1vZHVsZXM6IFsgZXh0ZW5zaW9uTW9kdWxlIF0gfSk7XG4gKiBicG1uTW9kZWxlci5pbXBvcnRYTUwoLi4uKTtcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyBDdXN0b21pemluZyAvIFJlcGxhY2luZyBDb21wb25lbnRzXG4gKlxuICogWW91IGNhbiByZXBsYWNlIGluZGl2aWR1YWwgZGlhZ3JhbSBjb21wb25lbnRzIGJ5IHJlZGVmaW5pbmcgdGhlbSBpbiBvdmVycmlkZSBtb2R1bGVzLlxuICogVGhpcyB3b3JrcyBmb3IgYWxsIGNvbXBvbmVudHMsIGluY2x1ZGluZyB0aG9zZSBkZWZpbmVkIGluIHRoZSBjb3JlLlxuICpcbiAqIFBhc3MgaW4gb3ZlcnJpZGUgbW9kdWxlcyB2aWEgdGhlIGBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzYCBmbGFnIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIoY29udGV4dFBhZCkge1xuICpcbiAqICAgY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuICpcbiAqICAgdGhpcy5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAqICAgICAvLyBubyBlbnRyaWVzLCBlZmZlY3RpdmVseSBkaXNhYmxlIHRoZSBjb250ZXh0IHBhZFxuICogICAgIHJldHVybiB7fTtcbiAqICAgfTtcbiAqIH1cbiAqXG4gKiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIuJGluamVjdCA9IFsgJ2NvbnRleHRQYWQnIF07XG4gKlxuICogdmFyIG92ZXJyaWRlTW9kdWxlID0ge1xuICogICBjb250ZXh0UGFkUHJvdmlkZXI6IFsgJ3R5cGUnLCBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIgXVxuICogfTtcbiAqXG4gKiB2YXIgYnBtbk1vZGVsZXIgPSBuZXcgTW9kZWxlcih7IGFkZGl0aW9uYWxNb2R1bGVzOiBbIG92ZXJyaWRlTW9kdWxlIF19KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsZXIob3B0aW9ucykge1xuICBCYXNlTW9kZWxlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhNb2RlbGVyLCBCYXNlTW9kZWxlcik7XG5cblxuTW9kZWxlci5WaWV3ZXIgPSBWaWV3ZXI7XG5Nb2RlbGVyLk5hdmlnYXRlZFZpZXdlciA9IE5hdmlnYXRlZFZpZXdlcjtcblxuLyoqXG4qIFRoZSBjcmVhdGVEaWFncmFtIHJlc3VsdC5cbipcbiogQHR5cGVkZWYge09iamVjdH0gQ3JlYXRlRGlhZ3JhbVJlc3VsdFxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiogVGhlIGNyZWF0ZURpYWdyYW0gZXJyb3IuXG4qXG4qIEB0eXBlZGVmIHtFcnJvcn0gQ3JlYXRlRGlhZ3JhbUVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGRpYWdyYW0gdG8gc3RhcnQgbW9kZWxpbmcuXG4gKlxuICogUmV0dXJucyB7UHJvbWlzZTxDcmVhdGVEaWFncmFtUmVzdWx0LCBDcmVhdGVEaWFncmFtRXJyb3I+fVxuICovXG5Nb2RlbGVyLnByb3RvdHlwZS5jcmVhdGVEaWFncmFtID0gd3JhcEZvckNvbXBhdGliaWxpdHkoZnVuY3Rpb24gY3JlYXRlRGlhZ3JhbSgpIHtcbiAgcmV0dXJuIHRoaXMuaW1wb3J0WE1MKGluaXRpYWxEaWFncmFtKTtcbn0pO1xuXG5cbk1vZGVsZXIucHJvdG90eXBlLl9pbnRlcmFjdGlvbk1vZHVsZXMgPSBbXG5cbiAgLy8gbm9uLW1vZGVsaW5nIGNvbXBvbmVudHNcbiAgS2V5Ym9hcmRNb3ZlTW9kdWxlLFxuICBNb3ZlQ2FudmFzTW9kdWxlLFxuICBUb3VjaE1vZHVsZSxcbiAgWm9vbVNjcm9sbE1vZHVsZVxuXTtcblxuTW9kZWxlci5wcm90b3R5cGUuX21vZGVsaW5nTW9kdWxlcyA9IFtcblxuICAvLyBtb2RlbGluZyBjb21wb25lbnRzXG4gIEFsaWduRWxlbWVudHNNb2R1bGUsXG4gIEF1dG9QbGFjZU1vZHVsZSxcbiAgQXV0b1Njcm9sbE1vZHVsZSxcbiAgQXV0b1Jlc2l6ZU1vZHVsZSxcbiAgQmVuZHBvaW50c01vZHVsZSxcbiAgQ29ubmVjdE1vZHVsZSxcbiAgQ29ubmVjdGlvblByZXZpZXdNb2R1bGUsXG4gIENvbnRleHRQYWRNb2R1bGUsXG4gIENvcHlQYXN0ZU1vZHVsZSxcbiAgQ3JlYXRlTW9kdWxlLFxuICBEaXN0cmlidXRlRWxlbWVudHNNb2R1bGUsXG4gIEVkaXRvckFjdGlvbnNNb2R1bGUsXG4gIEdyaWRTbmFwcGluZ01vZHVsZSxcbiAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gIEtleWJvYXJkTW9kdWxlLFxuICBLZXlib2FyZE1vdmVTZWxlY3Rpb25Nb2R1bGUsXG4gIExhYmVsRWRpdGluZ01vZHVsZSxcbiAgTW9kZWxpbmdNb2R1bGUsXG4gIE1vdmVNb2R1bGUsXG4gIFBhbGV0dGVNb2R1bGUsXG4gIFJlcGxhY2VQcmV2aWV3TW9kdWxlLFxuICBSZXNpemVNb2R1bGUsXG4gIFNuYXBwaW5nTW9kdWxlLFxuICBTZWFyY2hNb2R1bGVcbl07XG5cblxuLy8gbW9kdWxlcyB0aGUgbW9kZWxlciBpcyBjb21wb3NlZCBvZlxuLy9cbi8vIC0gdmlld2VyIG1vZHVsZXNcbi8vIC0gaW50ZXJhY3Rpb24gbW9kdWxlc1xuLy8gLSBtb2RlbGluZyBtb2R1bGVzXG5cbk1vZGVsZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW10uY29uY2F0KFxuICBWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzLFxuICBNb2RlbGVyLnByb3RvdHlwZS5faW50ZXJhY3Rpb25Nb2R1bGVzLFxuICBNb2RlbGVyLnByb3RvdHlwZS5fbW9kZWxpbmdNb2R1bGVzXG4pO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IFZpZXdlciBmcm9tICcuL1ZpZXdlcic7XG5cbmltcG9ydCBLZXlib2FyZE1vdmVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi9rZXlib2FyZC1tb3ZlJztcbmltcG9ydCBNb3ZlQ2FudmFzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vbW92ZWNhbnZhcyc7XG5pbXBvcnQgWm9vbVNjcm9sbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwnO1xuXG5cbi8qKlxuICogQSB2aWV3ZXIgdGhhdCBpbmNsdWRlcyBtb3VzZSBuYXZpZ2F0aW9uIGZhY2lsaXRpZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOYXZpZ2F0ZWRWaWV3ZXIob3B0aW9ucykge1xuICBWaWV3ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoTmF2aWdhdGVkVmlld2VyLCBWaWV3ZXIpO1xuXG5cbk5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX25hdmlnYXRpb25Nb2R1bGVzID0gW1xuICBLZXlib2FyZE1vdmVNb2R1bGUsXG4gIE1vdmVDYW52YXNNb2R1bGUsXG4gIFpvb21TY3JvbGxNb2R1bGVcbl07XG5cbk5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXS5jb25jYXQoXG4gIFZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMsXG4gIE5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX25hdmlnYXRpb25Nb2R1bGVzXG4pOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb3JlTW9kdWxlIGZyb20gJy4vY29yZSc7XG5pbXBvcnQgVHJhbnNsYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcbmltcG9ydCBPdmVybGF5c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cyc7XG5cbmltcG9ydCBCYXNlVmlld2VyIGZyb20gJy4vQmFzZVZpZXdlcic7XG5cblxuLyoqXG4gKiBBIHZpZXdlciBmb3IgQlBNTiAyLjAgZGlhZ3JhbXMuXG4gKlxuICogSGF2ZSBhIGxvb2sgYXQge0BsaW5rIE5hdmlnYXRlZFZpZXdlcn0gb3Ige0BsaW5rIE1vZGVsZXJ9IGZvciBidW5kbGVzIHRoYXQgaW5jbHVkZVxuICogYWRkaXRpb25hbCBmZWF0dXJlcy5cbiAqXG4gKlxuICogIyMgRXh0ZW5kaW5nIHRoZSBWaWV3ZXJcbiAqXG4gKiBJbiBvcmRlciB0byBleHRlbmQgdGhlIHZpZXdlciBwYXNzIGV4dGVuc2lvbiBtb2R1bGVzIHRvIGJvb3RzdHJhcCB2aWEgdGhlXG4gKiBgYWRkaXRpb25hbE1vZHVsZXNgIG9wdGlvbi4gQW4gZXh0ZW5zaW9uIG1vZHVsZSBpcyBhbiBvYmplY3QgdGhhdCBleHBvc2VzXG4gKiBuYW1lZCBzZXJ2aWNlcy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVwaWN0cyB0aGUgaW50ZWdyYXRpb24gb2YgYSBzaW1wbGVcbiAqIGxvZ2dpbmcgY29tcG9uZW50IHRoYXQgaW50ZWdyYXRlcyB3aXRoIGludGVyYWN0aW9uIGV2ZW50czpcbiAqXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICpcbiAqIC8vIGxvZ2dpbmcgY29tcG9uZW50XG4gKiBmdW5jdGlvbiBJbnRlcmFjdGlvbkxvZ2dlcihldmVudEJ1cykge1xuICogICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coKVxuICogICB9KVxuICogfVxuICpcbiAqIEludGVyYWN0aW9uTG9nZ2VyLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTsgLy8gbWluaWZpY2F0aW9uIHNhdmVcbiAqXG4gKiAvLyBleHRlbnNpb24gbW9kdWxlXG4gKiB2YXIgZXh0ZW5zaW9uTW9kdWxlID0ge1xuICogICBfX2luaXRfXzogWyAnaW50ZXJhY3Rpb25Mb2dnZXInIF0sXG4gKiAgIGludGVyYWN0aW9uTG9nZ2VyOiBbICd0eXBlJywgSW50ZXJhY3Rpb25Mb2dnZXIgXVxuICogfTtcbiAqXG4gKiAvLyBleHRlbmQgdGhlIHZpZXdlclxuICogdmFyIGJwbW5WaWV3ZXIgPSBuZXcgVmlld2VyKHsgYWRkaXRpb25hbE1vZHVsZXM6IFsgZXh0ZW5zaW9uTW9kdWxlIF0gfSk7XG4gKiBicG1uVmlld2VyLmltcG9ydFhNTCguLi4pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gdGhlIGNvbnRhaW5lciB0byByZW5kZXIgdGhlIHZpZXdlciBpbiwgZGVmYXVsdHMgdG8gYm9keS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMud2lkdGhdIHRoZSB3aWR0aCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gdGhlIGhlaWdodCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMubW9kZGxlRXh0ZW5zaW9uc10gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIHByb3ZpZGVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5tb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMuYWRkaXRpb25hbE1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIHVzZSB3aXRoIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVmlld2VyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhWaWV3ZXIsIEJhc2VWaWV3ZXIpO1xuXG4vLyBtb2R1bGVzIHRoZSB2aWV3ZXIgaXMgY29tcG9zZWQgb2ZcblZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXG4gIENvcmVNb2R1bGUsXG4gIFRyYW5zbGF0ZU1vZHVsZSxcbiAgU2VsZWN0aW9uTW9kdWxlLFxuICBPdmVybGF5c01vZHVsZVxuXTtcblxuLy8gZGVmYXVsdCBtb2RkbGUgZXh0ZW5zaW9ucyB0aGUgdmlld2VyIGlzIGNvbXBvc2VkIG9mXG5WaWV3ZXIucHJvdG90eXBlLl9tb2RkbGVFeHRlbnNpb25zID0ge307IiwiaW1wb3J0IERyYXdNb2R1bGUgZnJvbSAnLi4vZHJhdyc7XG5pbXBvcnQgSW1wb3J0TW9kdWxlIGZyb20gJy4uL2ltcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmF3TW9kdWxlLFxuICAgIEltcG9ydE1vZHVsZVxuICBdXG59OyIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgY29tcG9uZW50c1RvUGF0aFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwnO1xuXG5cbi8vIGVsZW1lbnQgdXRpbHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENoZWNrcyBpZiBldmVudERlZmluaXRpb24gb2YgdGhlIGdpdmVuIGVsZW1lbnQgbWF0Y2hlcyB3aXRoIHNlbWFudGljIHR5cGUuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbGVtZW50IGlzIG9mIHRoZSBnaXZlbiBzZW1hbnRpYyB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVkRXZlbnQoZXZlbnQsIGV2ZW50RGVmaW5pdGlvblR5cGUsIGZpbHRlcikge1xuXG4gIGZ1bmN0aW9uIG1hdGNoZXMoZGVmaW5pdGlvbiwgZmlsdGVyKSB7XG4gICAgcmV0dXJuIGV2ZXJ5KGZpbHRlciwgZnVuY3Rpb24odmFsLCBrZXkpIHtcblxuICAgICAgLy8gd2Ugd2FudCBhID09IGNvbnZlcnNpb24gaGVyZSwgdG8gYmUgYWJsZSB0byBjYXRjaFxuICAgICAgLy8gdW5kZWZpbmVkID09IGZhbHNlIGFuZCBmcmllbmRzXG4gICAgICAvKiBqc2hpbnQgLVcxMTYgKi9cbiAgICAgIHJldHVybiBkZWZpbml0aW9uW2tleV0gPT0gdmFsO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNvbWUoZXZlbnQuZXZlbnREZWZpbml0aW9ucywgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBkZWZpbml0aW9uLiR0eXBlID09PSBldmVudERlZmluaXRpb25UeXBlICYmIG1hdGNoZXMoZXZlbnQsIGZpbHRlcik7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaHJvd0V2ZW50KGV2ZW50KSB7XG4gIHJldHVybiAoZXZlbnQuJHR5cGUgPT09ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKSB8fCAoZXZlbnQuJHR5cGUgPT09ICdicG1uOkVuZEV2ZW50Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZGF0YU9iamVjdCA9IGVsZW1lbnQuZGF0YU9iamVjdFJlZjtcblxuICByZXR1cm4gZWxlbWVudC5pc0NvbGxlY3Rpb24gfHwgKGRhdGFPYmplY3QgJiYgZGF0YU9iamVjdC5pc0NvbGxlY3Rpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGkoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5idXNpbmVzc09iamVjdC5kaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbWFudGljKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG59XG5cblxuLy8gY29sb3IgYWNjZXNzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0Q29sb3IpIHtcbiAgcmV0dXJuIGdldERpKGVsZW1lbnQpLmdldCgnYmlvYzpmaWxsJykgfHwgZGVmYXVsdENvbG9yIHx8ICd3aGl0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0Q29sb3IpIHtcbiAgcmV0dXJuIGdldERpKGVsZW1lbnQpLmdldCgnYmlvYzpzdHJva2UnKSB8fCBkZWZhdWx0Q29sb3IgfHwgJ2JsYWNrJztcbn1cblxuXG4vLyBjcm9wcGluZyBwYXRoIGN1c3RvbWl6YXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmNsZVBhdGgoc2hhcGUpIHtcblxuICB2YXIgY3ggPSBzaGFwZS54ICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgY3kgPSBzaGFwZS55ICsgc2hhcGUuaGVpZ2h0IC8gMixcbiAgICAgIHJhZGl1cyA9IHNoYXBlLndpZHRoIC8gMjtcblxuICB2YXIgY2lyY2xlUGF0aCA9IFtcbiAgICBbJ00nLCBjeCwgY3ldLFxuICAgIFsnbScsIDAsIC1yYWRpdXNdLFxuICAgIFsnYScsIHJhZGl1cywgcmFkaXVzLCAwLCAxLCAxLCAwLCAyICogcmFkaXVzXSxcbiAgICBbJ2EnLCByYWRpdXMsIHJhZGl1cywgMCwgMSwgMSwgMCwgLTIgKiByYWRpdXNdLFxuICAgIFsneiddXG4gIF07XG5cbiAgcmV0dXJuIGNvbXBvbmVudHNUb1BhdGgoY2lyY2xlUGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZFJlY3RQYXRoKHNoYXBlLCBib3JkZXJSYWRpdXMpIHtcblxuICB2YXIgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIHdpZHRoID0gc2hhcGUud2lkdGgsXG4gICAgICBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG5cbiAgdmFyIHJvdW5kUmVjdFBhdGggPSBbXG4gICAgWydNJywgeCArIGJvcmRlclJhZGl1cywgeV0sXG4gICAgWydsJywgd2lkdGggLSBib3JkZXJSYWRpdXMgKiAyLCAwXSxcbiAgICBbJ2EnLCBib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cywgMCwgMCwgMSwgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIDAsIGhlaWdodCAtIGJvcmRlclJhZGl1cyAqIDJdLFxuICAgIFsnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCAtYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIGJvcmRlclJhZGl1cyAqIDIgLSB3aWR0aCwgMF0sXG4gICAgWydhJywgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMsIDAsIDAsIDEsIC1ib3JkZXJSYWRpdXMsIC1ib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIDAsIGJvcmRlclJhZGl1cyAqIDIgLSBoZWlnaHRdLFxuICAgIFsnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCBib3JkZXJSYWRpdXMsIC1ib3JkZXJSYWRpdXNdLFxuICAgIFsneiddXG4gIF07XG5cbiAgcmV0dXJuIGNvbXBvbmVudHNUb1BhdGgocm91bmRSZWN0UGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaWFtb25kUGF0aChzaGFwZSkge1xuXG4gIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0LFxuICAgICAgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIGhhbGZXaWR0aCA9IHdpZHRoIC8gMixcbiAgICAgIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuXG4gIHZhciBkaWFtb25kUGF0aCA9IFtcbiAgICBbJ00nLCB4ICsgaGFsZldpZHRoLCB5XSxcbiAgICBbJ2wnLCBoYWxmV2lkdGgsIGhhbGZIZWlnaHRdLFxuICAgIFsnbCcsIC1oYWxmV2lkdGgsIGhhbGZIZWlnaHRdLFxuICAgIFsnbCcsIC1oYWxmV2lkdGgsIC1oYWxmSGVpZ2h0XSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKGRpYW1vbmRQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY3RQYXRoKHNoYXBlKSB7XG4gIHZhciB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcblxuICB2YXIgcmVjdFBhdGggPSBbXG4gICAgWydNJywgeCwgeV0sXG4gICAgWydsJywgd2lkdGgsIDBdLFxuICAgIFsnbCcsIDAsIGhlaWdodF0sXG4gICAgWydsJywgLXdpZHRoLCAwXSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKHJlY3RQYXRoKTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IEJhc2VSZW5kZXJlciBmcm9tICdkaWFncmFtLWpzL2xpYi9kcmF3L0Jhc2VSZW5kZXJlcic7XG5cbmltcG9ydCB7XG4gIGlzRXhwYW5kZWQsXG4gIGlzRXZlbnRTdWJQcm9jZXNzXG59IGZyb20gJy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGluZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1R5cGVkRXZlbnQsXG4gIGlzVGhyb3dFdmVudCxcbiAgaXNDb2xsZWN0aW9uLFxuICBnZXREaSxcbiAgZ2V0U2VtYW50aWMsXG4gIGdldENpcmNsZVBhdGgsXG4gIGdldFJvdW5kUmVjdFBhdGgsXG4gIGdldERpYW1vbmRQYXRoLFxuICBnZXRSZWN0UGF0aCxcbiAgZ2V0RmlsbENvbG9yLFxuICBnZXRTdHJva2VDb2xvclxufSBmcm9tICcuL0JwbW5SZW5kZXJVdGlsJztcblxuaW1wb3J0IHtcbiAgcXVlcnkgYXMgZG9tUXVlcnlcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgcm90YXRlLFxuICB0cmFuc2Zvcm0sXG4gIHRyYW5zbGF0ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5pbXBvcnQgSWRzIGZyb20gJ2lkcyc7XG5cbnZhciBSRU5ERVJFUl9JRFMgPSBuZXcgSWRzKCk7XG5cbnZhciBUQVNLX0JPUkRFUl9SQURJVVMgPSAxMDtcbnZhciBJTk5FUl9PVVRFUl9ESVNUID0gMztcblxudmFyIERFRkFVTFRfRklMTF9PUEFDSVRZID0gLjk1LFxuICAgIEhJR0hfRklMTF9PUEFDSVRZID0gLjM1O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5SZW5kZXJlcihcbiAgICBjb25maWcsIGV2ZW50QnVzLCBzdHlsZXMsIHBhdGhNYXAsXG4gICAgY2FudmFzLCB0ZXh0UmVuZGVyZXIsIHByaW9yaXR5KSB7XG5cbiAgQmFzZVJlbmRlcmVyLmNhbGwodGhpcywgZXZlbnRCdXMsIHByaW9yaXR5KTtcblxuICB2YXIgZGVmYXVsdEZpbGxDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdEZpbGxDb2xvcixcbiAgICAgIGRlZmF1bHRTdHJva2VDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdFN0cm9rZUNvbG9yO1xuXG4gIHZhciByZW5kZXJlcklkID0gUkVOREVSRVJfSURTLm5leHQoKTtcblxuICB2YXIgbWFya2VycyA9IHt9O1xuXG4gIHZhciBjb21wdXRlU3R5bGUgPSBzdHlsZXMuY29tcHV0ZVN0eWxlO1xuXG4gIGZ1bmN0aW9uIGFkZE1hcmtlcihpZCwgb3B0aW9ucykge1xuICAgIHZhciBhdHRycyA9IGFzc2lnbih7XG4gICAgICBmaWxsOiAnYmxhY2snLFxuICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnbm9uZSdcbiAgICB9LCBvcHRpb25zLmF0dHJzKTtcblxuICAgIHZhciByZWYgPSBvcHRpb25zLnJlZiB8fCB7IHg6IDAsIHk6IDAgfTtcblxuICAgIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwgMTtcblxuICAgIC8vIGZpeCBmb3Igc2FmYXJpIC8gY2hyb21lIC8gZmlyZWZveCBidWcgbm90IGNvcnJlY3RseVxuICAgIC8vIHJlc2V0dGluZyBzdHJva2UgZGFzaCBhcnJheVxuICAgIGlmIChhdHRycy5zdHJva2VEYXNoYXJyYXkgPT09ICdub25lJykge1xuICAgICAgYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID0gWzEwMDAwLCAxXTtcbiAgICB9XG5cbiAgICB2YXIgbWFya2VyID0gc3ZnQ3JlYXRlKCdtYXJrZXInKTtcblxuICAgIHN2Z0F0dHIob3B0aW9ucy5lbGVtZW50LCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQobWFya2VyLCBvcHRpb25zLmVsZW1lbnQpO1xuXG4gICAgc3ZnQXR0cihtYXJrZXIsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHZpZXdCb3g6ICcwIDAgMjAgMjAnLFxuICAgICAgcmVmWDogcmVmLngsXG4gICAgICByZWZZOiByZWYueSxcbiAgICAgIG1hcmtlcldpZHRoOiAyMCAqIHNjYWxlLFxuICAgICAgbWFya2VySGVpZ2h0OiAyMCAqIHNjYWxlLFxuICAgICAgb3JpZW50OiAnYXV0bydcbiAgICB9KTtcblxuICAgIHZhciBkZWZzID0gZG9tUXVlcnkoJ2RlZnMnLCBjYW52YXMuX3N2Zyk7XG5cbiAgICBpZiAoIWRlZnMpIHtcbiAgICAgIGRlZnMgPSBzdmdDcmVhdGUoJ2RlZnMnKTtcblxuICAgICAgc3ZnQXBwZW5kKGNhbnZhcy5fc3ZnLCBkZWZzKTtcbiAgICB9XG5cbiAgICBzdmdBcHBlbmQoZGVmcywgbWFya2VyKTtcblxuICAgIG1hcmtlcnNbaWRdID0gbWFya2VyO1xuICB9XG5cbiAgZnVuY3Rpb24gY29sb3JFc2NhcGUoc3RyKSB7XG5cbiAgICAvLyBvbmx5IGFsbG93IGNoYXJhY3RlcnMgYW5kIG51bWJlcnNcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teMC05YS16QS16XSsvZywgJ18nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtlcih0eXBlLCBmaWxsLCBzdHJva2UpIHtcbiAgICB2YXIgaWQgPSB0eXBlICsgJy0nICsgY29sb3JFc2NhcGUoZmlsbCkgKyAnLScgKyBjb2xvckVzY2FwZShzdHJva2UpICsgJy0nICsgcmVuZGVyZXJJZDtcblxuICAgIGlmICghbWFya2Vyc1tpZF0pIHtcbiAgICAgIGNyZWF0ZU1hcmtlcihpZCwgdHlwZSwgZmlsbCwgc3Ryb2tlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VybCgjJyArIGlkICsgJyknO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTWFya2VyKGlkLCB0eXBlLCBmaWxsLCBzdHJva2UpIHtcblxuICAgIGlmICh0eXBlID09PSAnc2VxdWVuY2VmbG93LWVuZCcpIHtcbiAgICAgIHZhciBzZXF1ZW5jZWZsb3dFbmQgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIoc2VxdWVuY2VmbG93RW5kLCB7IGQ6ICdNIDEgNSBMIDExIDEwIEwgMSAxNSBaJyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IHNlcXVlbmNlZmxvd0VuZCxcbiAgICAgICAgcmVmOiB7IHg6IDExLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ21lc3NhZ2VmbG93LXN0YXJ0Jykge1xuICAgICAgdmFyIG1lc3NhZ2VmbG93U3RhcnQgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICAgICAgc3ZnQXR0cihtZXNzYWdlZmxvd1N0YXJ0LCB7IGN4OiA2LCBjeTogNiwgcjogMy41IH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dTdGFydCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogeyB4OiA2LCB5OiA2IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnbWVzc2FnZWZsb3ctZW5kJykge1xuICAgICAgdmFyIG1lc3NhZ2VmbG93RW5kID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKG1lc3NhZ2VmbG93RW5kLCB7IGQ6ICdtIDEgNSBsIDAgLTMgbCA3IDMgbCAtNyAzIHonIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dFbmQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2VMaW5lY2FwOiAnYnV0dCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDguNSwgeTogNSB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2Fzc29jaWF0aW9uLXN0YXJ0Jykge1xuICAgICAgdmFyIGFzc29jaWF0aW9uU3RhcnQgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIoYXNzb2NpYXRpb25TdGFydCwgeyBkOiAnTSAxMSA1IEwgMSAxMCBMIDExIDE1JyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IGFzc29jaWF0aW9uU3RhcnQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLjVcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDEsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXNzb2NpYXRpb24tZW5kJykge1xuICAgICAgdmFyIGFzc29jaWF0aW9uRW5kID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKGFzc29jaWF0aW9uRW5kLCB7IGQ6ICdNIDEgNSBMIDExIDEwIEwgMSAxNScgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBhc3NvY2lhdGlvbkVuZCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2UsXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEuNVxuICAgICAgICB9LFxuICAgICAgICByZWY6IHsgeDogMTIsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnY29uZGl0aW9uYWwtZmxvdy1tYXJrZXInKSB7XG4gICAgICB2YXIgY29uZGl0aW9uYWxmbG93TWFya2VyID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKGNvbmRpdGlvbmFsZmxvd01hcmtlciwgeyBkOiAnTSAwIDEwIEwgOCA2IEwgMTYgMTAgTCA4IDE0IFonIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogY29uZGl0aW9uYWxmbG93TWFya2VyLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IC0xLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2NvbmRpdGlvbmFsLWRlZmF1bHQtZmxvdy1tYXJrZXInKSB7XG4gICAgICB2YXIgY29uZGl0aW9uYWxkZWZhdWx0Zmxvd01hcmtlciA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihjb25kaXRpb25hbGRlZmF1bHRmbG93TWFya2VyLCB7IGQ6ICdNIDYgNCBMIDEwIDE2JyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IGNvbmRpdGlvbmFsZGVmYXVsdGZsb3dNYXJrZXIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDAsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdDaXJjbGUocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCBvZmZzZXQsIGF0dHJzKSB7XG5cbiAgICBpZiAoaXNPYmplY3Qob2Zmc2V0KSkge1xuICAgICAgYXR0cnMgPSBvZmZzZXQ7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgYXR0cnMgPSBjb21wdXRlU3R5bGUoYXR0cnMsIHtcbiAgICAgIHN0cm9rZTogJ2JsYWNrJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgZmlsbDogJ3doaXRlJ1xuICAgIH0pO1xuXG4gICAgaWYgKGF0dHJzLmZpbGwgPT09ICdub25lJykge1xuICAgICAgZGVsZXRlIGF0dHJzLmZpbGxPcGFjaXR5O1xuICAgIH1cblxuICAgIHZhciBjeCA9IHdpZHRoIC8gMixcbiAgICAgICAgY3kgPSBoZWlnaHQgLyAyO1xuXG4gICAgdmFyIGNpcmNsZSA9IHN2Z0NyZWF0ZSgnY2lyY2xlJyk7XG4gICAgc3ZnQXR0cihjaXJjbGUsIHtcbiAgICAgIGN4OiBjeCxcbiAgICAgIGN5OiBjeSxcbiAgICAgIHI6IE1hdGgucm91bmQoKHdpZHRoICsgaGVpZ2h0KSAvIDQgLSBvZmZzZXQpXG4gICAgfSk7XG4gICAgc3ZnQXR0cihjaXJjbGUsIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIGNpcmNsZSk7XG5cbiAgICByZXR1cm4gY2lyY2xlO1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd1JlY3QocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCByLCBvZmZzZXQsIGF0dHJzKSB7XG5cbiAgICBpZiAoaXNPYmplY3Qob2Zmc2V0KSkge1xuICAgICAgYXR0cnMgPSBvZmZzZXQ7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgYXR0cnMgPSBjb21wdXRlU3R5bGUoYXR0cnMsIHtcbiAgICAgIHN0cm9rZTogJ2JsYWNrJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgZmlsbDogJ3doaXRlJ1xuICAgIH0pO1xuXG4gICAgdmFyIHJlY3QgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgICBzdmdBdHRyKHJlY3QsIHtcbiAgICAgIHg6IG9mZnNldCxcbiAgICAgIHk6IG9mZnNldCxcbiAgICAgIHdpZHRoOiB3aWR0aCAtIG9mZnNldCAqIDIsXG4gICAgICBoZWlnaHQ6IGhlaWdodCAtIG9mZnNldCAqIDIsXG4gICAgICByeDogcixcbiAgICAgIHJ5OiByXG4gICAgfSk7XG4gICAgc3ZnQXR0cihyZWN0LCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCByZWN0KTtcblxuICAgIHJldHVybiByZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd0RpYW1vbmQocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCBhdHRycykge1xuXG4gICAgdmFyIHhfMiA9IHdpZHRoIC8gMjtcbiAgICB2YXIgeV8yID0gaGVpZ2h0IC8gMjtcblxuICAgIHZhciBwb2ludHMgPSBbeyB4OiB4XzIsIHk6IDAgfSwgeyB4OiB3aWR0aCwgeTogeV8yIH0sIHsgeDogeF8yLCB5OiBoZWlnaHQgfSwgeyB4OiAwLCB5OiB5XzIgfV07XG5cbiAgICB2YXIgcG9pbnRzU3RyaW5nID0gcG9pbnRzLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgICAgcmV0dXJuIHBvaW50LnggKyAnLCcgKyBwb2ludC55O1xuICAgIH0pLmpvaW4oJyAnKTtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICB9KTtcblxuICAgIHZhciBwb2x5Z29uID0gc3ZnQ3JlYXRlKCdwb2x5Z29uJyk7XG4gICAgc3ZnQXR0cihwb2x5Z29uLCB7XG4gICAgICBwb2ludHM6IHBvaW50c1N0cmluZ1xuICAgIH0pO1xuICAgIHN2Z0F0dHIocG9seWdvbiwgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgcG9seWdvbik7XG5cbiAgICByZXR1cm4gcG9seWdvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdMaW5lKHBhcmVudEdmeCwgd2F5cG9pbnRzLCBhdHRycykge1xuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCBbICduby1maWxsJyBdLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICdub25lJ1xuICAgIH0pO1xuXG4gICAgdmFyIGxpbmUgPSBjcmVhdGVMaW5lKHdheXBvaW50cywgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgbGluZSk7XG5cbiAgICByZXR1cm4gbGluZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdQYXRoKHBhcmVudEdmeCwgZCwgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCBbICduby1maWxsJyBdLCB7XG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIHN0cm9rZTogJ2JsYWNrJ1xuICAgIH0pO1xuXG4gICAgdmFyIHBhdGggPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICBzdmdBdHRyKHBhdGgsIHsgZDogZCB9KTtcbiAgICBzdmdBdHRyKHBhdGgsIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHBhdGgpO1xuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3TWFya2VyKHR5cGUsIHBhcmVudEdmeCwgcGF0aCwgYXR0cnMpIHtcbiAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoLCBhc3NpZ24oeyAnZGF0YS1tYXJrZXInOiB0eXBlIH0sIGF0dHJzKSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcyh0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGhhbmRsZXJzW3R5cGVdKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcmVyKHR5cGUpIHtcbiAgICByZXR1cm4gaGFuZGxlcnNbdHlwZV07XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcbiAgICB2YXIgaXNUaHJvd2luZyA9IGlzVGhyb3dFdmVudChldmVudCk7XG5cbiAgICBpZiAoZXZlbnQuZXZlbnREZWZpbml0aW9ucyAmJiBldmVudC5ldmVudERlZmluaXRpb25zLmxlbmd0aD4xKSB7XG4gICAgICBpZiAoZXZlbnQucGFyYWxsZWxNdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46UGFyYWxsZWxNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOk11bHRpcGxlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgbGFiZWwsIG9wdGlvbnMpIHtcblxuICAgIG9wdGlvbnMgPSBhc3NpZ24oe1xuICAgICAgc2l6ZToge1xuICAgICAgICB3aWR0aDogMTAwXG4gICAgICB9XG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICB2YXIgdGV4dCA9IHRleHRSZW5kZXJlci5jcmVhdGVUZXh0KGxhYmVsIHx8ICcnLCBvcHRpb25zKTtcblxuICAgIHN2Z0NsYXNzZXModGV4dCkuYWRkKCdkanMtbGFiZWwnKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHRleHQpO1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFbWJlZGRlZExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCwgYWxpZ24pIHtcbiAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgIHJldHVybiByZW5kZXJMYWJlbChwYXJlbnRHZngsIHNlbWFudGljLm5hbWUsIHtcbiAgICAgIGJveDogZWxlbWVudCxcbiAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgIHBhZGRpbmc6IDUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFeHRlcm5hbExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgdmFyIGJveCA9IHtcbiAgICAgIHdpZHRoOiA5MCxcbiAgICAgIGhlaWdodDogMzAsXG4gICAgICB4OiBlbGVtZW50LndpZHRoIC8gMiArIGVsZW1lbnQueCxcbiAgICAgIHk6IGVsZW1lbnQuaGVpZ2h0IC8gMiArIGVsZW1lbnQueVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBnZXRMYWJlbChlbGVtZW50KSwge1xuICAgICAgYm94OiBib3gsXG4gICAgICBmaXRCb3g6IHRydWUsXG4gICAgICBzdHlsZTogYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsU3R5bGUoKSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyTGFuZUxhYmVsKHBhcmVudEdmeCwgdGV4dCwgZWxlbWVudCkge1xuICAgIHZhciB0ZXh0Qm94ID0gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCB7XG4gICAgICBib3g6IHtcbiAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9LFxuICAgICAgYWxpZ246ICdjZW50ZXItbWlkZGxlJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB0b3AgPSAtMSAqIGVsZW1lbnQuaGVpZ2h0O1xuXG4gICAgdHJhbnNmb3JtKHRleHRCb3gsIDAsIC10b3AsIDI3MCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQYXRoRnJvbUNvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICAgIHZhciBwYXRoRGF0YSA9ICdtICAnICsgd2F5cG9pbnRzWzBdLnggKyAnLCcgKyB3YXlwb2ludHNbMF0ueTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdheXBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGF0aERhdGEgKz0gJ0wnICsgd2F5cG9pbnRzW2ldLnggKyAnLCcgKyB3YXlwb2ludHNbaV0ueSArICcgJztcbiAgICB9XG4gICAgcmV0dXJuIHBhdGhEYXRhO1xuICB9XG5cbiAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycyA9IHtcbiAgICAnYnBtbjpFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcblxuICAgICAgaWYgKCEoJ2ZpbGxPcGFjaXR5JyBpbiBhdHRycykpIHtcbiAgICAgICAgYXR0cnMuZmlsbE9wYWNpdHkgPSBERUZBVUxUX0ZJTExfT1BBQ0lUWTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgYXR0cnMpO1xuICAgIH0sXG4gICAgJ2JwbW46U3RhcnRFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIGlmICghc2VtYW50aWMuaXNJbnRlcnJ1cHRpbmcpIHtcbiAgICAgICAgYXR0cnMgPSB7XG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnNicsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBjaXJjbGUgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KTtcblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfTUVTU0FHRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjksXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMzUsXG4gICAgICAgICAgbXk6IDAuMzE1XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpO1xuICAgICAgdmFyIHN0cm9rZSA9IGlzVGhyb3dpbmcgPyBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcikgOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICB2YXIgbWVzc2FnZVBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlUGF0aDtcbiAgICB9LFxuICAgICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgY2lyY2xlID0gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLjIgKiBlbGVtZW50LmhlaWdodCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX1RJTUVSX1dIJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC43NSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICBteTogMC41XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAnc3F1YXJlJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDEyOyBpKyspIHtcblxuICAgICAgICB2YXIgbGluZVBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9USU1FUl9MSU5FJywge1xuICAgICAgICAgIHhTY2FsZUZhY3RvcjogMC43NSxcbiAgICAgICAgICB5U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICAgIG15OiAwLjVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQud2lkdGggLyAyO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQgLyAyO1xuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgbGluZVBhdGhEYXRhLCB7XG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3NxdWFyZScsXG4gICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlKCcgKyAoaSAqIDMwKSArICcsJyArIGhlaWdodCArICcsJyArIHdpZHRoICsgJyknLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0VTQ0FMQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9DT05ESVRJT05BTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICBteTogMC4yMjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0xJTksnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjU3LFxuICAgICAgICAgIG15OiAwLjI2M1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9FUlJPUicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjIsXG4gICAgICAgICAgbXk6IDAuNzIyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9DQU5DRUxfNDUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4wLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMCxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC42MzgsXG4gICAgICAgICAgbXk6IC0wLjA1NVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHZhciBwYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJvdGF0ZShwYXRoLCA0NSk7XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfQ09NUEVOU0FUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMixcbiAgICAgICAgICBteTogMC41XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9TSUdOQUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC41LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfTVVMVElQTEUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMjIsXG4gICAgICAgICAgbXk6IDAuMzZcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbFxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpQYXJhbGxlbE11bHRpcGxlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9QQVJBTExFTF9NVUxUSVBMRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjIsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4yLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ1OCxcbiAgICAgICAgICBteTogMC4xOTRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpFbmRFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGNpcmNsZSA9IHJlbmRlcmVyKCdicG1uOkV2ZW50JykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJlbmRlckV2ZW50Q29udGVudChlbGVtZW50LCBwYXJlbnRHZngsIHRydWUpO1xuXG4gICAgICByZXR1cm4gY2lyY2xlO1xuICAgIH0sXG4gICAgJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgY2lyY2xlID0gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCA4LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY2lyY2xlO1xuICAgIH0sXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlRXZlbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBvdXRlciA9IHJlbmRlcmVyKCdicG1uOkV2ZW50JykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIC8qIGlubmVyICovXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIElOTkVSX09VVEVSX0RJU1QsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCAnbm9uZScpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KTtcblxuICAgICAgcmV0dXJuIG91dGVyO1xuICAgIH0sXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCc6IGFzKCdicG1uOkludGVybWVkaWF0ZUV2ZW50JyksXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCc6IGFzKCdicG1uOkludGVybWVkaWF0ZUV2ZW50JyksXG5cbiAgICAnYnBtbjpBY3Rpdml0eSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcblxuICAgICAgYXR0cnMgPSBhdHRycyB8fCB7fTtcblxuICAgICAgaWYgKCEoJ2ZpbGxPcGFjaXR5JyBpbiBhdHRycykpIHtcbiAgICAgICAgYXR0cnMuZmlsbE9wYWNpdHkgPSBERUZBVUxUX0ZJTExfT1BBQ0lUWTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIFRBU0tfQk9SREVSX1JBRElVUywgYXR0cnMpO1xuICAgIH0sXG5cbiAgICAnYnBtbjpUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVjdCA9IHJlbmRlcmVyKCdicG1uOkFjdGl2aXR5JykocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCAnY2VudGVyLW1pZGRsZScpO1xuICAgICAgYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpTZXJ2aWNlVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhQkcgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRVJWSUNFJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxMixcbiAgICAgICAgICB5OiAxOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSBiZyAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhQkcsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGxQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NFUlZJQ0VfRklMTCcsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTcuMixcbiAgICAgICAgICB5OiAxOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSBmaWxsICovIGRyYXdQYXRoKHBhcmVudEdmeCwgZmlsbFBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRVJWSUNFJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxNyxcbiAgICAgICAgICB5OiAyMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46VXNlclRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciB4ID0gMTU7XG4gICAgICB2YXIgeSA9IDEyO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9VU0VSXzEnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogdXNlciBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEyID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8yJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHVzZXIyIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YTIsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEzID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8zJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHVzZXIzIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YTMsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpNYW51YWxUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgdGFzayA9IHJlbmRlcmVyKCdicG1uOlRhc2snKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9NQU5VQUwnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDE3LFxuICAgICAgICAgIHk6IDE1XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBtYW51YWwgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjUsIC8vIDAuMjUsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpTZW5kVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VORCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiAyMSxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiAxNCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yODUsXG4gICAgICAgICAgbXk6IDAuMzU3XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBzZW5kIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlJlY2VpdmVUYXNrJyA6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgICB2YXIgcGF0aERhdGE7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5pbnN0YW50aWF0ZSkge1xuICAgICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgMjgsIDI4LCAyMCAqIDAuMjIsIHsgc3Ryb2tlV2lkdGg6IDEgfSk7XG5cbiAgICAgICAgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9JTlNUQU5USUFUSU5HX1NFTkQnLCB7XG4gICAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgICB4OiA3Ljc3LFxuICAgICAgICAgICAgeTogOS41MlxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VORCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogMjEsXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0OiAxNCxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbXg6IDAuMyxcbiAgICAgICAgICAgIG15OiAwLjRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvKiByZWNlaXZlIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlNjcmlwdFRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NDUklQVCcsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTUsXG4gICAgICAgICAgeTogMjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHNjcmlwdCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46QnVzaW5lc3NSdWxlVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIGhlYWRlclBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfQlVTSU5FU1NfUlVMRV9IRUFERVInLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDgsXG4gICAgICAgICAgeTogOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGJ1c2luZXNzSGVhZGVyUGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgaGVhZGVyUGF0aERhdGEpO1xuICAgICAgc3ZnQXR0cihidXNpbmVzc0hlYWRlclBhdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCAnI2FhYWFhYScpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgaGVhZGVyRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfTUFJTicsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogOCxcbiAgICAgICAgICB5OiA4XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgYnVzaW5lc3NQYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBoZWFkZXJEYXRhKTtcbiAgICAgIHN2Z0F0dHIoYnVzaW5lc3NQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlN1YlByb2Nlc3MnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycyk7XG5cbiAgICAgIHZhciByZWN0ID0gcmVuZGVyZXIoJ2JwbW46QWN0aXZpdHknKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIGV4cGFuZGVkID0gaXNFeHBhbmRlZChlbGVtZW50KTtcblxuICAgICAgaWYgKGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgICAgIHN2Z0F0dHIocmVjdCwge1xuICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzEsMidcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCBleHBhbmRlZCA/ICdjZW50ZXItdG9wJyA6ICdjZW50ZXItbWlkZGxlJyk7XG5cbiAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICBhdHRhY2hUYXNrTWFya2VycyhwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50LCBbJ1N1YlByb2Nlc3NNYXJrZXInXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46U3ViUHJvY2VzcycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfSxcbiAgICAnYnBtbjpUcmFuc2FjdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG91dGVyID0gcmVuZGVyZXIoJ2JwbW46U3ViUHJvY2VzcycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBpbm5lckF0dHJzID0gc3R5bGVzLnN0eWxlKFsgJ25vLWZpbGwnLCAnbm8tZXZlbnRzJyBdLCB7XG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIC8qIGlubmVyIHBhdGggKi8gZHJhd1JlY3QocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgVEFTS19CT1JERVJfUkFESVVTIC0gMiwgSU5ORVJfT1VURVJfRElTVCwgaW5uZXJBdHRycyk7XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkNhbGxBY3Rpdml0eSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOlN1YlByb2Nlc3MnKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46UGFydGljaXBhbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9GSUxMX09QQUNJVFksXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgbGFuZSA9IHJlbmRlcmVyKCdicG1uOkxhbmUnKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIGV4cGFuZGVkUG9vbCA9IGlzRXhwYW5kZWQoZWxlbWVudCk7XG5cbiAgICAgIGlmIChleHBhbmRlZFBvb2wpIHtcbiAgICAgICAgZHJhd0xpbmUocGFyZW50R2Z4LCBbXG4gICAgICAgICAgeyB4OiAzMCwgeTogMCB9LFxuICAgICAgICAgIHsgeDogMzAsIHk6IGVsZW1lbnQuaGVpZ2h0IH1cbiAgICAgICAgXSwge1xuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHRleHQgPSBnZXRTZW1hbnRpYyhlbGVtZW50KS5uYW1lO1xuICAgICAgICByZW5kZXJMYW5lTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCBlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gQ29sbGFwc2VkIHBvb2wgZHJhdyB0ZXh0IGlubGluZVxuICAgICAgICB2YXIgdGV4dDIgPSBnZXRTZW1hbnRpYyhlbGVtZW50KS5uYW1lO1xuICAgICAgICByZW5kZXJMYWJlbChwYXJlbnRHZngsIHRleHQyLCB7XG4gICAgICAgICAgYm94OiBlbGVtZW50LCBhbGlnbjogJ2NlbnRlci1taWRkbGUnLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcnRpY2lwYW50TXVsdGlwbGljaXR5ID0gISEoZ2V0U2VtYW50aWMoZWxlbWVudCkucGFydGljaXBhbnRNdWx0aXBsaWNpdHkpO1xuXG4gICAgICBpZiAocGFydGljaXBhbnRNdWx0aXBsaWNpdHkpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1BhcnRpY2lwYW50TXVsdGlwbGljaXR5TWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfSxcbiAgICAnYnBtbjpMYW5lJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuICAgICAgdmFyIHJlY3QgPSBkcmF3UmVjdChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLCBhc3NpZ24oe1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIGZpbGxPcGFjaXR5OiBISUdIX0ZJTExfT1BBQ0lUWSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycykpO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbWFudGljLiR0eXBlID09PSAnYnBtbjpMYW5lJykge1xuICAgICAgICB2YXIgdGV4dCA9IHNlbWFudGljLm5hbWU7XG4gICAgICAgIHJlbmRlckxhbmVMYWJlbChwYXJlbnRHZngsIHRleHQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjdDtcbiAgICB9LFxuICAgICdicG1uOkluY2x1c2l2ZUdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIC8qIGNpcmNsZSBwYXRoICovXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIGVsZW1lbnQuaGVpZ2h0ICogMC4yNCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMi41LFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkaWFtb25kO1xuICAgIH0sXG4gICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGRpYW1vbmQgPSByZW5kZXJlcignYnBtbjpHYXRld2F5JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdHQVRFV0FZX0VYQ0xVU0lWRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjQsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC40LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4zMixcbiAgICAgICAgICBteTogMC4zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoKGdldERpKGVsZW1lbnQpLmlzTWFya2VyVmlzaWJsZSkpIHtcbiAgICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlhbW9uZDtcbiAgICB9LFxuICAgICdicG1uOkNvbXBsZXhHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZGlhbW9uZCA9IHJlbmRlcmVyKCdicG1uOkdhdGV3YXknKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfQ09NUExFWCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjUsXG4gICAgICAgIHlTY2FsZUZhY3RvcjowLjUsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ2LFxuICAgICAgICAgIG15OiAwLjI2XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBjb21wbGV4IHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpQYXJhbGxlbEdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjYsXG4gICAgICAgIHlTY2FsZUZhY3RvcjowLjYsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ2LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHBhcmFsbGVsIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIGRpYW1vbmQgPSByZW5kZXJlcignYnBtbjpHYXRld2F5JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogb3V0ZXIgY2lyY2xlIHBhdGggKi8gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBlbGVtZW50LmhlaWdodCAqIDAuMjAsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHR5cGUgPSBzZW1hbnRpYy5ldmVudEdhdGV3YXlUeXBlO1xuICAgICAgdmFyIGluc3RhbnRpYXRlID0gISFzZW1hbnRpYy5pbnN0YW50aWF0ZTtcblxuICAgICAgZnVuY3Rpb24gZHJhd0V2ZW50KCkge1xuXG4gICAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9FVkVOVF9CQVNFRCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuMTgsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjE4LFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG14OiAwLjM2LFxuICAgICAgICAgICAgbXk6IDAuNDRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBhdHRycyA9IHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgJ25vbmUnKSxcbiAgICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfTtcblxuICAgICAgICAvKiBldmVudCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIGF0dHJzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdQYXJhbGxlbCcpIHtcblxuICAgICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfUEFSQUxMRUwnLCB7XG4gICAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjQsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOjAuNCxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBteDogMC40NzQsXG4gICAgICAgICAgICBteTogMC4yOTZcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBwYXJhbGxlbFBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhKTtcbiAgICAgICAgc3ZnQXR0cihwYXJhbGxlbFBhdGgsIHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICBmaWxsOiAnbm9uZSdcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdFeGNsdXNpdmUnKSB7XG5cbiAgICAgICAgaWYgKCFpbnN0YW50aWF0ZSkge1xuICAgICAgICAgIHZhciBpbm5lckNpcmNsZSA9IGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgZWxlbWVudC5oZWlnaHQgKiAwLjI2KTtcbiAgICAgICAgICBzdmdBdHRyKGlubmVyQ2lyY2xlLCB7XG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZHJhd0V2ZW50KCk7XG4gICAgICB9XG5cblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBkcmF3RGlhbW9uZChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBhdHRycyk7XG4gICAgfSxcbiAgICAnYnBtbjpTZXF1ZW5jZUZsb3cnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IGNyZWF0ZVBhdGhGcm9tQ29ubmVjdGlvbihlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ3NlcXVlbmNlZmxvdy1lbmQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIHZhciBwYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwgYXR0cnMpO1xuXG4gICAgICB2YXIgc2VxdWVuY2VGbG93ID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBzb3VyY2U7XG5cbiAgICAgIGlmIChlbGVtZW50LnNvdXJjZSkge1xuICAgICAgICBzb3VyY2UgPSBlbGVtZW50LnNvdXJjZS5idXNpbmVzc09iamVjdDtcblxuICAgICAgICAvLyBjb25kaXRpb25hbCBmbG93IG1hcmtlclxuICAgICAgICBpZiAoc2VxdWVuY2VGbG93LmNvbmRpdGlvbkV4cHJlc3Npb24gJiYgc291cmNlLiRpbnN0YW5jZU9mKCdicG1uOkFjdGl2aXR5JykpIHtcbiAgICAgICAgICBzdmdBdHRyKHBhdGgsIHtcbiAgICAgICAgICAgIG1hcmtlclN0YXJ0OiBtYXJrZXIoJ2NvbmRpdGlvbmFsLWZsb3ctbWFya2VyJywgZmlsbCwgc3Ryb2tlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtYXJrZXJcbiAgICAgICAgaWYgKHNvdXJjZS5kZWZhdWx0ICYmIChzb3VyY2UuJGluc3RhbmNlT2YoJ2JwbW46R2F0ZXdheScpIHx8IHNvdXJjZS4kaW5zdGFuY2VPZignYnBtbjpBY3Rpdml0eScpKSAmJlxuICAgICAgICAgICAgc291cmNlLmRlZmF1bHQgPT09IHNlcXVlbmNlRmxvdykge1xuICAgICAgICAgIHN2Z0F0dHIocGF0aCwge1xuICAgICAgICAgICAgbWFya2VyU3RhcnQ6IG1hcmtlcignY29uZGl0aW9uYWwtZGVmYXVsdC1mbG93LW1hcmtlcicsIGZpbGwsIHN0cm9rZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9LFxuICAgICdicG1uOkFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcwLjUsIDUnLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycyB8fCB7fSk7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5hc3NvY2lhdGlvbkRpcmVjdGlvbiA9PT0gJ09uZScgfHxcbiAgICAgICAgICBzZW1hbnRpYy5hc3NvY2lhdGlvbkRpcmVjdGlvbiA9PT0gJ0JvdGgnKSB7XG4gICAgICAgIGF0dHJzLm1hcmtlckVuZCA9IG1hcmtlcignYXNzb2NpYXRpb24tZW5kJywgZmlsbCwgc3Ryb2tlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbWFudGljLmFzc29jaWF0aW9uRGlyZWN0aW9uID09PSAnQm90aCcpIHtcbiAgICAgICAgYXR0cnMubWFya2VyU3RhcnQgPSBtYXJrZXIoJ2Fzc29jaWF0aW9uLXN0YXJ0JywgZmlsbCwgc3Ryb2tlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdMaW5lKHBhcmVudEdmeCwgZWxlbWVudC53YXlwb2ludHMsIGF0dHJzKTtcbiAgICB9LFxuICAgICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgICBzdHJva2UgPSBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46QXNzb2NpYXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ2Fzc29jaWF0aW9uLWVuZCcsIGZpbGwsIHN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgICBzdHJva2UgPSBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46QXNzb2NpYXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ2Fzc29jaWF0aW9uLWVuZCcsIGZpbGwsIHN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46TWVzc2FnZUZsb3cnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCksXG4gICAgICAgICAgZGkgPSBnZXREaShlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gY3JlYXRlUGF0aEZyb21Db25uZWN0aW9uKGVsZW1lbnQpO1xuXG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdtZXNzYWdlZmxvdy1lbmQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBtYXJrZXJTdGFydDogbWFya2VyKCdtZXNzYWdlZmxvdy1zdGFydCcsIGZpbGwsIHN0cm9rZSksXG4gICAgICAgIHN0cm9rZURhc2hhcnJheTogJzEwLCAxMicsXG4gICAgICAgIHN0cm9rZUxpbmVjYXA6ICdyb3VuZCcsXG4gICAgICAgIHN0cm9rZUxpbmVqb2luOiAncm91bmQnLFxuICAgICAgICBzdHJva2VXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIGF0dHJzKTtcblxuICAgICAgaWYgKHNlbWFudGljLm1lc3NhZ2VSZWYpIHtcbiAgICAgICAgdmFyIG1pZFBvaW50ID0gcGF0aC5nZXRQb2ludEF0TGVuZ3RoKHBhdGguZ2V0VG90YWxMZW5ndGgoKSAvIDIpO1xuXG4gICAgICAgIHZhciBtYXJrZXJQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUVTU0FHRV9GTE9XX01BUktFUicsIHtcbiAgICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICAgIHg6IG1pZFBvaW50LngsXG4gICAgICAgICAgICB5OiBtaWRQb2ludC55XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgbWVzc2FnZUF0dHJzID0geyBzdHJva2VXaWR0aDogMSB9O1xuXG4gICAgICAgIGlmIChkaS5tZXNzYWdlVmlzaWJsZUtpbmQgPT09ICdpbml0aWF0aW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VBdHRycy5maWxsID0gJ3doaXRlJztcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuc3Ryb2tlID0gJ2JsYWNrJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuZmlsbCA9ICcjODg4JztcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuc3Ryb2tlID0gJ3doaXRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgbWFya2VyUGF0aERhdGEsIG1lc3NhZ2VBdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdEQVRBX09CSkVDVF9QQVRIJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNDc0LFxuICAgICAgICAgIG15OiAwLjI5NlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgaWYgKGlzQ29sbGVjdGlvbihzZW1hbnRpYykpIHtcbiAgICAgICAgcmVuZGVyRGF0YUl0ZW1Db2xsZWN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50T2JqZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZSc6IGFzKCdicG1uOkRhdGFPYmplY3QnKSxcbiAgICAnYnBtbjpEYXRhSW5wdXQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIGFycm93UGF0aERhdGEgPSBwYXRoTWFwLmdldFJhd1BhdGgoJ0RBVEFfQVJST1cnKTtcblxuICAgICAgLy8gcGFnZVxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSByZW5kZXJlcignYnBtbjpEYXRhT2JqZWN0JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogaW5wdXQgYXJyb3cgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIGFycm93UGF0aERhdGEsIHsgc3Ryb2tlV2lkdGg6IDEgfSk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50T2JqZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU91dHB1dCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGFycm93UGF0aERhdGEgPSBwYXRoTWFwLmdldFJhd1BhdGgoJ0RBVEFfQVJST1cnKTtcblxuICAgICAgLy8gcGFnZVxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSByZW5kZXJlcignYnBtbjpEYXRhT2JqZWN0JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogb3V0cHV0IGFycm93IHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBhcnJvd1BhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiAnYmxhY2snXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGVsZW1lbnRPYmplY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBEQVRBX1NUT1JFX1BBVEggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfU1RPUkUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMCxcbiAgICAgICAgICBteTogMC4xMzNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBlbGVtZW50U3RvcmUgPSBkcmF3UGF0aChwYXJlbnRHZngsIERBVEFfU1RPUkVfUEFUSCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9GSUxMX09QQUNJVFksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50U3RvcmU7XG4gICAgfSxcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpLFxuICAgICAgICAgIGNhbmNlbCA9IHNlbWFudGljLmNhbmNlbEFjdGl2aXR5O1xuXG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgaWYgKCFjYW5jZWwpIHtcbiAgICAgICAgYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID0gJzYnO1xuICAgICAgICBhdHRycy5zdHJva2VMaW5lY2FwID0gJ3JvdW5kJztcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgZmlsbE9wYWNpdHlcbiAgICAgIHZhciBvdXRlckF0dHJzID0gYXNzaWduKHt9LCBhdHRycywge1xuICAgICAgICBmaWxsT3BhY2l0eTogMVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFwcGx5IG5vLWZpbGxcbiAgICAgIHZhciBpbm5lckF0dHJzID0gYXNzaWduKHt9LCBhdHRycywge1xuICAgICAgICBmaWxsOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgb3V0ZXIgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwgb3V0ZXJBdHRycyk7XG5cbiAgICAgIC8qIGlubmVyIHBhdGggKi8gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBJTk5FUl9PVVRFUl9ESVNULCBpbm5lckF0dHJzKTtcblxuICAgICAgcmVuZGVyRXZlbnRDb250ZW50KGVsZW1lbnQsIHBhcmVudEdmeCk7XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkdyb3VwJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBncm91cCA9IGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIFRBU0tfQk9SREVSX1JBRElVUywge1xuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICc4LDMsMSwzJyxcbiAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfSxcbiAgICAnbGFiZWwnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiByZW5kZXJFeHRlcm5hbExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfSxcbiAgICAnYnBtbjpUZXh0QW5ub3RhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHN0eWxlID0ge1xuICAgICAgICAnZmlsbCc6ICdub25lJyxcbiAgICAgICAgJ3N0cm9rZSc6ICdub25lJ1xuICAgICAgfTtcblxuICAgICAgdmFyIHRleHRFbGVtZW50ID0gZHJhd1JlY3QocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgMCwgMCwgc3R5bGUpO1xuXG4gICAgICB2YXIgdGV4dFBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdURVhUX0FOTk9UQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4wLFxuICAgICAgICAgIG15OiAwLjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgdGV4dFBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHZhciB0ZXh0ID0gZ2V0U2VtYW50aWMoZWxlbWVudCkudGV4dCB8fCAnJztcbiAgICAgIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgdGV4dCwge1xuICAgICAgICBib3g6IGVsZW1lbnQsXG4gICAgICAgIGFsaWduOiAnbGVmdC10b3AnLFxuICAgICAgICBwYWRkaW5nOiA1LFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0ZXh0RWxlbWVudDtcbiAgICB9LFxuICAgICdQYXJ0aWNpcGFudE11bHRpcGxpY2l0eU1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxNSkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcigncGFydGljaXBhbnQtbXVsdGlwbGljaXR5JywgcGFyZW50R2Z4LCBtYXJrZXJQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnU3ViUHJvY2Vzc01hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1hcmtlclJlY3QgPSBkcmF3UmVjdChwYXJlbnRHZngsIDE0LCAxNCwgMCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcm9jZXNzIG1hcmtlciBpcyBwbGFjZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYm94XG4gICAgICAvLyB0aGVyZWZvcmUgZml4ZWQgdmFsdWVzIGNhbiBiZSB1c2VkIGhlcmVcbiAgICAgIHRyYW5zbGF0ZShtYXJrZXJSZWN0LCBlbGVtZW50LndpZHRoIC8gMiAtIDcuNSwgZWxlbWVudC5oZWlnaHQgLSAyMCk7XG5cbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfU1VCX1BST0NFU1MnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS41LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuNSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IChlbGVtZW50LndpZHRoIC8gMiAtIDcuNSkgLyBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAyMCkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignc3ViLXByb2Nlc3MnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ1BhcmFsbGVsTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24ucGFyYWxsZWwpIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDIwKSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdwYXJhbGxlbCcsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnU2VxdWVudGlhbE1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pIHtcbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfU0VRVUVOVElBTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24uc2VxKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxOSkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignc2VxdWVudGlhbCcsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnQ29tcGVuc2F0aW9uTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlck1hdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9DT01QRU5TQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLmNvbXBlbnNhdGlvbikgLyBlbGVtZW50LndpZHRoKSxcbiAgICAgICAgICBteTogKGVsZW1lbnQuaGVpZ2h0IC0gMTMpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ2NvbXBlbnNhdGlvbicsIHBhcmVudEdmeCwgbWFya2VyTWF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0xvb3BNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKSB7XG4gICAgICB2YXIgbWFya2VyUGF0aCA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUFSS0VSX0xPT1AnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLmxvb3ApIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDcpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ2xvb3AnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICBzdHJva2VNaXRlcmxpbWl0OiAwLjVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0FkaG9jTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9BREhPQycsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24uYWRob2MpIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDE1KSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdhZGhvYycsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50LCB0YXNrTWFya2Vycykge1xuICAgIHZhciBvYmogPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgIHZhciBzdWJwcm9jZXNzID0gdGFza01hcmtlcnMgJiYgdGFza01hcmtlcnMuaW5kZXhPZignU3ViUHJvY2Vzc01hcmtlcicpICE9PSAtMTtcbiAgICB2YXIgcG9zaXRpb247XG5cbiAgICBpZiAoc3VicHJvY2Vzcykge1xuICAgICAgcG9zaXRpb24gPSB7XG4gICAgICAgIHNlcTogLTIxLFxuICAgICAgICBwYXJhbGxlbDogLTIyLFxuICAgICAgICBjb21wZW5zYXRpb246IC00MixcbiAgICAgICAgbG9vcDogLTE4LFxuICAgICAgICBhZGhvYzogMTBcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc2l0aW9uID0ge1xuICAgICAgICBzZXE6IC0zLFxuICAgICAgICBwYXJhbGxlbDogLTYsXG4gICAgICAgIGNvbXBlbnNhdGlvbjogLTI3LFxuICAgICAgICBsb29wOiAwLFxuICAgICAgICBhZGhvYzogMTBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yRWFjaCh0YXNrTWFya2VycywgZnVuY3Rpb24obWFya2VyKSB7XG4gICAgICByZW5kZXJlcihtYXJrZXIpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKG9iai5pc0ZvckNvbXBlbnNhdGlvbikge1xuICAgICAgcmVuZGVyZXIoJ0NvbXBlbnNhdGlvbk1hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChvYmouJHR5cGUgPT09ICdicG1uOkFkSG9jU3ViUHJvY2VzcycpIHtcbiAgICAgIHJlbmRlcmVyKCdBZGhvY01hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gb2JqLmxvb3BDaGFyYWN0ZXJpc3RpY3MsXG4gICAgICAgIGlzU2VxdWVudGlhbCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MgJiYgbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG5cbiAgICBpZiAobG9vcENoYXJhY3RlcmlzdGljcykge1xuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVuZGVyZXIoJ0xvb3BNYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2VxdWVudGlhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1BhcmFsbGVsTWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NlcXVlbnRpYWwgPT09IHRydWUpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1NlcXVlbnRpYWxNYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJEYXRhSXRlbUNvbGxlY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICB2YXIgeVBvc2l0aW9uID0gKGVsZW1lbnQuaGVpZ2h0IC0gMTYpIC8gZWxlbWVudC5oZWlnaHQ7XG5cbiAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCcsIHtcbiAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIG14OiAwLjQ1MSxcbiAgICAgICAgbXk6IHlQb3NpdGlvblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyogY29sbGVjdGlvbiBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGV4dGVuc2lvbiBBUEksIHVzZSBhdCB5b3VyIG93biByaXNrXG4gIHRoaXMuX2RyYXdQYXRoID0gZHJhd1BhdGg7XG5cbn1cblxuXG5pbmhlcml0cyhCcG1uUmVuZGVyZXIsIEJhc2VSZW5kZXJlcik7XG5cbkJwbW5SZW5kZXJlci4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmJwbW5SZW5kZXJlcicsXG4gICdldmVudEJ1cycsXG4gICdzdHlsZXMnLFxuICAncGF0aE1hcCcsXG4gICdjYW52YXMnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG5CcG1uUmVuZGVyZXIucHJvdG90eXBlLmNhblJlbmRlciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkJhc2VFbGVtZW50Jyk7XG59O1xuXG5CcG1uUmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGggPSB0aGlzLmhhbmRsZXJzW3R5cGVdO1xuXG4gIC8qIGpzaGludCAtVzA0MCAqL1xuICByZXR1cm4gaChwYXJlbnRHZngsIGVsZW1lbnQpO1xufTtcblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGggPSB0aGlzLmhhbmRsZXJzW3R5cGVdO1xuXG4gIC8qIGpzaGludCAtVzA0MCAqL1xuICByZXR1cm4gaChwYXJlbnRHZngsIGVsZW1lbnQpO1xufTtcblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gZ2V0Q2lyY2xlUGF0aChlbGVtZW50KTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIGdldFJvdW5kUmVjdFBhdGgoZWxlbWVudCwgVEFTS19CT1JERVJfUkFESVVTKTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICByZXR1cm4gZ2V0RGlhbW9uZFBhdGgoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZ2V0UmVjdFBhdGgoZWxlbWVudCk7XG59O1xuIiwiLyoqXG4gKiBNYXAgY29udGFpbmluZyBTVkcgcGF0aHMgbmVlZGVkIGJ5IEJwbW5SZW5kZXJlci5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYXRoTWFwKCkge1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBhIG1hcCBvZiBwYXRoIGVsZW1lbnRzXG4gICAqXG4gICAqIDxoMT5QYXRoIGRlZmluaXRpb248L2gxPlxuICAgKiBBIHBhcmFtZXRlcml6ZWQgcGF0aCBpcyBkZWZpbmVkIGxpa2UgdGhpczpcbiAgICogPHByZT5cbiAgICogJ0dBVEVXQVlfUEFSQUxMRUwnOiB7XG4gICAqICAgZDogJ20ge214fSx7bXl9IHtlLngwfSwwIDAse2UueDF9IHtlLngxfSwwIDAse2UueTB9IC17ZS54MX0sMCAwLHtlLnkxfSAnICtcbiAgICAgICAgICAnLXtlLngwfSwwIDAsLXtlLnkxfSAte2UueDF9LDAgMCwte2UueTB9IHtlLngxfSwwIHonLFxuICAgKiAgIGhlaWdodDogMTcuNSxcbiAgICogICB3aWR0aDogIDE3LjUsXG4gICAqICAgaGVpZ2h0RWxlbWVudHM6IFsyLjUsIDcuNV0sXG4gICAqICAgd2lkdGhFbGVtZW50czogWzIuNSwgNy41XVxuICAgKiB9XG4gICAqIDwvcHJlPlxuICAgKiA8cD5JdCdzIGltcG9ydGFudCB0byBzcGVjaWZ5IGEgY29ycmVjdCA8Yj5oZWlnaHQgYW5kIHdpZHRoPC9iPiBmb3IgdGhlIHBhdGggYXMgdGhlIHNjYWxpbmdcbiAgICogaXMgYmFzZWQgb24gdGhlIHJhdGlvIGJldHdlZW4gdGhlIHNwZWNpZmllZCBoZWlnaHQgYW5kIHdpZHRoIGluIHRoaXMgb2JqZWN0IGFuZCB0aGVcbiAgICogaGVpZ2h0IGFuZCB3aWR0aCB0aGF0IGlzIHNldCBhcyBzY2FsZSB0YXJnZXQgKE5vdGUgeCx5IGNvb3JkaW5hdGVzIHdpbGwgYmUgc2NhbGVkIHdpdGhcbiAgICogaW5kaXZpZHVhbCByYXRpb3MpLjwvcD5cbiAgICogPHA+VGhlICc8Yj5oZWlnaHRFbGVtZW50czwvYj4nIGFuZCAnPGI+d2lkdGhFbGVtZW50czwvYj4nIGFycmF5IG11c3QgY29udGFpbiB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBzY2FsZWQuXG4gICAqIFRoZSBzY2FsaW5nIGlzIGJhc2VkIG9uIHRoZSBjb21wdXRlZCByYXRpb3MuXG4gICAqIENvb3JkaW5hdGVzIG9uIHRoZSB5IGF4aXMgc2hvdWxkIGJlIGluIHRoZSA8Yj5oZWlnaHRFbGVtZW50PC9iPidzIGFycmF5LCB0aGV5IHdpbGwgYmUgc2NhbGVkIHVzaW5nXG4gICAqIHRoZSBjb21wdXRlZCByYXRpbyBjb2VmZmljaWVudC5cbiAgICogSW4gdGhlIHBhcmFtZXRlcml6ZWQgcGF0aCB0aGUgc2NhbGVkIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgJ2UnIG9iamVjdCBpbiB7fSBicmFja2V0cy5cbiAgICogICA8dWw+XG4gICAqICAgIDxsaT5UaGUgdmFsdWVzIGZvciB0aGUgeSBheGlzIGNhbiBiZSBhY2Nlc3NlZCBpbiB0aGUgcGF0aCBzdHJpbmcgdXNpbmcge2UueTB9LCB7ZS55MX0sIC4uLi48L2xpPlxuICAgKiAgICA8bGk+VGhlIHZhbHVlcyBmb3IgdGhlIHggYXhpcyBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHBhdGggc3RyaW5nIHVzaW5nIHtlLngwfSwge2UueDF9LCAuLi4uPC9saT5cbiAgICogICA8L3VsPlxuICAgKiAgIFRoZSBudW1iZXJzIHgwLCB4MSByZXNwZWN0aXZlbHkgeTAsIHkxLCAuLi4gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LlxuICAgKiA8L3A+XG4gICAqL1xuICB0aGlzLnBhdGhNYXAgPSB7XG4gICAgJ0VWRU5UX01FU1NBR0UnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbCAwLHtlLnkxfSBsIHtlLngxfSwwIGwgMCwte2UueTF9IHogbCB7ZS54MH0se2UueTB9IGwge2UueDB9LC17ZS55MH0nLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYsIDE0XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMC41LCAyMV1cbiAgICB9LFxuICAgICdFVkVOVF9TSUdOQUwnOiB7XG4gICAgICBkOiAnTSB7bXh9LHtteX0gbCB7ZS54MH0se2UueTB9IGwgLXtlLngxfSwwIFonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMThdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwLCAyMF1cbiAgICB9LFxuICAgICdFVkVOVF9FU0NBTEFUSU9OJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LHtlLnkwfSBsIC17ZS54MH0sLXtlLnkxfSBsIC17ZS54MH0se2UueTF9IFonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMjAsIDddLFxuICAgICAgd2lkdGhFbGVtZW50czogWzhdXG4gICAgfSxcbiAgICAnRVZFTlRfQ09ORElUSU9OQUwnOiB7XG4gICAgICBkOiAnTSB7ZS54MH0se2UueTB9IGwge2UueDF9LDAgbCAwLHtlLnkyfSBsIC17ZS54MX0sMCBaICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnkzfSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk0fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk1fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk2fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk3fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk4fSBsIHtlLngwfSwwICcsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6ICAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbOC41LCAxNC41LCAxOCwgMTEuNSwgMTQuNSwgMTcuNSwgMjAuNSwgMjMuNSwgMjYuNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWzEwLjUsIDE0LjUsIDEyLjVdXG4gICAgfSxcbiAgICAnRVZFTlRfTElOSyc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLHtlLnkwfSAte2UueDF9LDAgMCx7ZS55MX0ge2UueDF9LDAgMCx7ZS55MH0ge2UueDB9LC17ZS55Mn0gLXtlLngwfSwte2UueTJ9IHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNC40Mzc1LCA2Ljc1LCA3LjgxMjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzkuODQzNzUsIDEzLjVdXG4gICAgfSxcbiAgICAnRVZFTlRfRVJST1InOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0ge2UueDB9LC17ZS55MH0ge2UueDF9LC17ZS55MX0ge2UueDJ9LHtlLnkyfSB7ZS54M30sLXtlLnkzfSAte2UueDR9LHtlLnk0fSAte2UueDV9LC17ZS55NX0geicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFswLjAyMywgOC43MzcsIDguMTUxLCAxNi41NjQsIDEwLjU5MSwgOC43MTRdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzAuMDg1LCA2LjY3MiwgNi45NywgNC4yNzMsIDUuMzM3LCA2LjYzNl1cbiAgICB9LFxuICAgICdFVkVOVF9DQU5DRUxfNDUnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gLXtlLngxfSwwIDAse2UueDB9IHtlLngxfSwwIDAse2UueTF9IHtlLngwfSwwICcgK1xuICAgICAgICAnMCwte2UueTF9IHtlLngxfSwwIDAsLXtlLnkwfSAte2UueDF9LDAgMCwte2UueTF9IC17ZS54MH0sMCB6JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzQuNzUsIDguNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbNC43NSwgOC41XVxuICAgIH0sXG4gICAgJ0VWRU5UX0NPTVBFTlNBVElPTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSB7ZS54MH0sLXtlLnkwfSAwLHtlLnkxfSB6IG0ge2UueDF9LC17ZS55Mn0ge2UueDJ9LC17ZS55M30gMCx7ZS55MX0gLXtlLngyfSwte2UueTN9IHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNi41LCAxMywgMC40LCA2LjFdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzksIDkuMywgOC43XVxuICAgIH0sXG4gICAgJ0VWRU5UX1RJTUVSX1dIJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LC17ZS55MH0gbSAte2UueDB9LHtlLnkwfSBsIHtlLngxfSx7ZS55MX0gJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMCwgMl0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMywgN11cbiAgICB9LFxuICAgICdFVkVOVF9USU1FUl9MSU5FJzoge1xuICAgICAgZDogICdNIHtteH0se215fSAnICtcbiAgICAgICAgICAnbSB7ZS54MH0se2UueTB9IGwgLXtlLngxfSx7ZS55MX0gJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMCwgM10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMCwgMF1cbiAgICB9LFxuICAgICdFVkVOVF9NVUxUSVBMRSc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngxfSwte2UueTB9IHtlLngxfSx7ZS55MH0gLXtlLngwfSx7ZS55MX0gLXtlLngyfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYuMjgwOTksIDEyLjU2MTk5XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFszLjE0MDUsIDkuNDIxNDksIDEyLjU2MTk4XVxuICAgIH0sXG4gICAgJ0VWRU5UX1BBUkFMTEVMX01VTFRJUExFJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0ge2UueDB9LDAgMCx7ZS55MX0ge2UueDF9LDAgMCx7ZS55MH0gLXtlLngxfSwwIDAse2UueTF9ICcgK1xuICAgICAgICAnLXtlLngwfSwwIDAsLXtlLnkxfSAte2UueDF9LDAgMCwte2UueTB9IHtlLngxfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzIuNTYyMjgsIDcuNjg2ODNdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzIuNTYyMjgsIDcuNjg2ODNdXG4gICAgfSxcbiAgICAnR0FURVdBWV9FWENMVVNJVkUnOiB7XG4gICAgICBkOidtIHtteH0se215fSB7ZS54MH0se2UueTB9IHtlLngxfSx7ZS55MH0ge2UueDJ9LDAge2UueDR9LHtlLnkyfSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3tlLng0fSx7ZS55MX0ge2UueDJ9LDAge2UueDF9LHtlLnkzfSB7ZS54MH0se2UueTN9ICcgK1xuICAgICAgICAgICAgICAgICAgICAne2UueDN9LDAge2UueDV9LHtlLnkxfSB7ZS54NX0se2UueTJ9IHtlLngzfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxNy41LFxuICAgICAgd2lkdGg6ICAxNy41LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs4LjUsIDYuNTMxMiwgLTYuNTMxMiwgLTguNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWzYuNSwgLTYuNSwgMywgLTMsIDUsIC01XVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfUEFSQUxMRUwnOiB7XG4gICAgICBkOidtIHtteH0se215fSAwLHtlLnkxfSAte2UueDF9LDAgMCx7ZS55MH0ge2UueDF9LDAgMCx7ZS55MX0ge2UueDB9LDAgJyArXG4gICAgICAgICcwLC17ZS55MX0ge2UueDF9LDAgMCwte2UueTB9IC17ZS54MX0sMCAwLC17ZS55MX0gLXtlLngwfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgIHdpZHRoOiAgMzAsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzUsIDEyLjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzUsIDEyLjVdXG4gICAgfSxcbiAgICAnR0FURVdBWV9FVkVOVF9CQVNFRCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngwfSx7ZS55MH0ge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTJ9IHtlLngyfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxMSxcbiAgICAgIHdpZHRoOiAgMTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWy02LCA2LCAxMiwgLTEyXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFs5LCAtMywgLTEyXVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfQ09NUExFWCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IDAse2UueTB9IC17ZS54MH0sLXtlLnkxfSAte2UueDF9LHtlLnkyfSB7ZS54MH0se2UueTF9IC17ZS54Mn0sMCAwLHtlLnkzfSAnICtcbiAgICAgICAgJ3tlLngyfSwwICAte2UueDB9LHtlLnkxfSBsIHtlLngxfSx7ZS55Mn0ge2UueDB9LC17ZS55MX0gMCx7ZS55MH0ge2UueDN9LDAgMCwte2UueTB9IHtlLngwfSx7ZS55MX0gJyArXG4gICAgICAgICd7ZS54MX0sLXtlLnkyfSAte2UueDB9LC17ZS55MX0ge2UueDJ9LDAgMCwte2UueTN9IC17ZS54Mn0sMCB7ZS54MH0sLXtlLnkxfSAte2UueDF9LC17ZS55Mn0gJyArXG4gICAgICAgICcte2UueDB9LHtlLnkxfSAwLC17ZS55MH0gLXtlLngzfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxNy4xMjUsXG4gICAgICB3aWR0aDogIDE3LjEyNSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNC44NzUsIDMuNDM3NSwgMi4xMjUsIDNdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzMuNDM3NSwgMi4xMjUsIDQuODc1LCAzXVxuICAgIH0sXG4gICAgJ0RBVEFfT0JKRUNUX1BBVEgnOiB7XG4gICAgICBkOidtIDAsMCB7ZS54MX0sMCB7ZS54MH0se2UueTB9IDAse2UueTF9IC17ZS54Mn0sMCAwLC17ZS55Mn0ge2UueDF9LDAgMCx7ZS55MH0ge2UueDB9LDAnLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzEwLCA1MCwgNjBdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwLCA0MCwgNTAsIDYwXVxuICAgIH0sXG4gICAgJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCc6IHtcbiAgICAgIGQ6J20ge214fSwge215fSAnICtcbiAgICAgICAgJ20gIDAgMTUgIGwgMCAtMTUgJyArXG4gICAgICAgICdtICA0IDE1ICBsIDAgLTE1ICcgK1xuICAgICAgICAnbSAgNCAxNSAgbCAwIC0xNSAnLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzEyXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxLCA2LCAxMiwgMTVdXG4gICAgfSxcbiAgICAnREFUQV9BUlJPVyc6IHtcbiAgICAgIGQ6J20gNSw5IDksMCAwLC0zIDUsNSAtNSw1IDAsLTMgLTksMCB6JyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDUxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdEQVRBX1NUT1JFJzoge1xuICAgICAgZDonbSAge214fSx7bXl9ICcgK1xuICAgICAgICAnbCAgMCx7ZS55Mn0gJyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0gIHtlLngyfSwwICcgK1xuICAgICAgICAnbCAgMCwte2UueTJ9ICcgK1xuICAgICAgICAnYyAte2UueDB9LC17ZS55MX0gLXtlLngxfSwte2UueTF9IC17ZS54Mn0sMCcgK1xuICAgICAgICAnYyAge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTF9ICB7ZS54Mn0sMCAnICtcbiAgICAgICAgJ20gIC17ZS54Mn0se2UueTB9JyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0ge2UueDJ9LDAnICtcbiAgICAgICAgJ20gIC17ZS54Mn0se2UueTB9JyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0gIHtlLngyfSwwJyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDYxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs3LCAxMCwgNDVdLFxuICAgICAgd2lkdGhFbGVtZW50czogIFsyLCA1OCwgNjBdXG4gICAgfSxcbiAgICAnVEVYVF9BTk5PVEFUSU9OJzoge1xuICAgICAgZDogJ20ge214fSwge215fSBtIDEwLDAgbCAtMTAsMCBsIDAse2UueTB9IGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDMwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFszMF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTBdXG4gICAgfSxcbiAgICAnTUFSS0VSX1NVQl9QUk9DRVNTJzoge1xuICAgICAgZDogJ217bXh9LHtteX0gbSA3LDIgbCAwLDEwIG0gLTUsLTUgbCAxMCwwJyxcbiAgICAgIGhlaWdodDogMTAsXG4gICAgICB3aWR0aDogMTAsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ01BUktFUl9QQVJBTExFTCc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gMywyIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfU0VRVUVOVElBTCc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gMCwzIGwgMTAsMCBtIC0xMCwzIGwgMTAsMCBtIC0xMCwzIGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfQ09NUEVOU0FUSU9OJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IDcsLTUgMCwxMCB6IG0gNy4xLC0wLjMgNi45LC00LjcgMCwxMCAtNi45LC00LjcgeicsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDIxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfTE9PUCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDMuNTI2OTc5LDAgNi4zODYxNjEsLTIuODI5ODU4IDYuMzg2MTYxLC02LjMyMDY2MSAwLC0zLjQ5MDgwNiAtMi44NTkxODIsLTYuMzIwNjYxICcgK1xuICAgICAgICAnLTYuMzg2MTYxLC02LjMyMDY2MSAtMy41MjY5NzgsMCAtNi4zODYxNiwyLjgyOTg1NSAtNi4zODYxNiw2LjMyMDY2MSAwLDEuNzQ1NDAyICcgK1xuICAgICAgICAnMC43MTQ3OTcsMy4zMjU1NjcgMS44NzA0NjMsNC40NjkzODEgMC41Nzc4MzQsMC41NzE5MDggMS4yNjU4ODUsMS4wMzQ3MjggMi4wMjk5MTYsMS4zNTQ1NyAnICtcbiAgICAgICAgJ2wgLTAuNzE4MTYzLC0zLjkwOTc5MyBtIDAuNzE4MTYzLDMuOTA5NzkzIC0zLjg4NTIxMSwwLjgwMjkwMicsXG4gICAgICBoZWlnaHQ6IDEzLjksXG4gICAgICB3aWR0aDogMTMuNyxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX0FESE9DJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gMC44NDQ2MSwyLjY0NDExIGMgMS4wNTUzMywtMS4yMzc4MDk5NiAyLjY0MzM3LC0yLjA3ODgyIDQuMjk2NTMsLTEuOTc5OTc5OTYgMi4wNTE2MywwLjA4MDUgJyArXG4gICAgICAgICczLjg1NTc5LDEuMTU4MDMgNS43NjA4MiwxLjc5MTA3IDEuMDYzODUsMC4zNDEzOTk5NiAyLjI0NDU0LDAuMTQzOCAzLjE4NzU5LC0wLjQzNzY3IDAuNjE3NDMsLTAuMzM2NDIgJyArXG4gICAgICAgICcxLjI3NzUsLTAuNjQwNzggMS43NTQyLC0xLjE3NTExIDAsMC41NjAyMyAwLDEuMTIwNDYgMCwxLjY4MDcgLTAuOTg3MDYsMC45NjIzNzk5NiAtMi4yOTc5MiwxLjYyMzkzOTk2ICcgK1xuICAgICAgICAnLTMuNjkxOCwxLjY2MTgxOTk2IC0xLjI0NDU5LDAuMDkyNyAtMi40NjY3MSwtMC4yNDkxIC0zLjU5NTA1LC0wLjc0ODEyIC0xLjM1Nzg5LC0wLjU1OTY1ICcgK1xuICAgICAgICAnLTIuNzUxMzMsLTEuMzM0MzY5OTYgLTQuMjcwMjcsLTEuMTgxMjE5OTYgLTEuMzc3NDEsMC4xNDYwMSAtMi40MTg0MiwxLjEzNjg1OTk2IC0zLjQ0Mjg4LDEuOTY3ODI5OTYgeicsXG4gICAgICBoZWlnaHQ6IDQsXG4gICAgICB3aWR0aDogMTUsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9TRU5EJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGwgMCx7ZS55MX0gbCB7ZS54MX0sMCBsIDAsLXtlLnkxfSB6IGwge2UueDB9LHtlLnkwfSBsIHtlLngwfSwte2UueTB9JyxcbiAgICAgIGhlaWdodDogMTQsXG4gICAgICB3aWR0aDogIDIxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs2LCAxNF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTAuNSwgMjFdXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NDUklQVCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDkuOTY2NTUzLC02LjI3Mjc2IC04LjAwMDkyNiwtNy45MTkzMiAyLjk2ODk2OCwtMTQuOTM4IGwgLTguODAyNzI4LDAgJyArXG4gICAgICAgICdjIC0xMC45Njk4OTQsNy4wMTg2OCA2Ljk5NzU4NSw4LjY2NTI0IC0yLjk2ODk2NywxNC45MzggeiAnICtcbiAgICAgICAgJ20gLTcsLTEyIGwgNSwwICcgK1xuICAgICAgICAnbSAtNC41LDMgbCA0LjUsMCAnICtcbiAgICAgICAgJ20gLTMsMyBsIDUsMCcgK1xuICAgICAgICAnbSAtNCwzIGwgNSwwJyxcbiAgICAgIGhlaWdodDogMTUsXG4gICAgICB3aWR0aDogIDEyLjYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYsIDE0XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMC41LCAyMV1cbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8xJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC45MDksLTAuODQ1IDEuNTk0LC0yLjA0OSAxLjU5NCwtMy4zODUgMCwtMi41NTQgLTEuODA1LC00LjYyMTk5OTk5ICcgK1xuICAgICAgICAnLTQuMzU3LC00LjYyMTk5OTk5IC0yLjU1MTk5OTk4LDAgLTQuMjg3OTk5OTgsMi4wNjc5OTk5OSAtNC4yODc5OTk5OCw0LjYyMTk5OTk5IDAsMS4zNDggJyArXG4gICAgICAgICcwLjk3NCwyLjU2MiAxLjg5NTk5OTk4LDMuNDA1IC0wLjUyODk5OTk4LDAuMTg3IC01LjY2OSwyLjA5NyAtNS43OTQsNC43NTYwMDA1IHYgNi43MTggJyArXG4gICAgICAgICdoIDE3IHYgLTYuNzE4IGMgMCwtMi4yOTgwMDA1IC01LjUyNzk5OTYsLTQuNTk1MDAwNSAtNi4wNTA5OTk2LC00Ljc3NjAwMDUgeicgK1xuICAgICAgICAnbSAtOCw2IGwgMCw1LjUgbSAxMSwwIGwgMCwtNSdcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8yJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gMi4xNjIsMS4wMDkgYyAwLDIuNDQ3MDAwNSAtMi4xNTgsNC40MzEwMDA1IC00LjgyMSw0LjQzMTAwMDUgJyArXG4gICAgICAgICctMi42NjQ5OTk5OCwwIC00LjgyMiwtMS45ODEgLTQuODIyLC00LjQzMTAwMDUgJ1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9VU0VSXzMnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbSAtNi45LC0zLjgwIGMgMCwwIDIuMjUwOTk5OTgsLTIuMzU4IDQuMjczOTk5OTgsLTEuMTc3IDIuMDI0LDEuMTgxIDQuMjIxLDEuNTM3ICcgK1xuICAgICAgICAnNC4xMjQsMC45NjUgLTAuMDk4LC0wLjU3IC0wLjExNywtMy43OTA5OTk5OSAtNC4xOTEsLTQuMTM1OTk5OTkgLTMuNTc0OTk5OTgsMC4wMDEgJyArXG4gICAgICAgICctNC4yMDc5OTk5OCwzLjM2Njk5OTk5IC00LjIwNjk5OTk4LDQuMzQ3OTk5OTkgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfTUFOVUFMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC4yMzQsLTAuMDEgNS42MDQsMC4wMDggOC4wMjksMC4wMDQgMC44MDgsMCAxLjI3MSwtMC4xNzIgMS40MTcsLTAuNzUyIDAuMjI3LC0wLjg5OCAnICtcbiAgICAgICAgJy0wLjMzNCwtMS4zMTQgLTEuMzM4LC0xLjMxNiAtMi40NjcsLTAuMDEgLTcuODg2LC0wLjAwNCAtOC4xMDgsLTAuMDA0IC0wLjAxNCwtMC4wNzkgMC4wMTYsLTAuNTMzIDAsLTAuNjEgJyArXG4gICAgICAgICcwLjE5NSwtMC4wNDIgOC41MDcsMC4wMDYgOS42MTYsMC4wMDIgMC44NzcsLTAuMDA3IDEuMzUsLTAuNDM4IDEuMzUzLC0xLjIwOCAwLjAwMywtMC43NjggLTAuNDc5LC0xLjA5ICcgK1xuICAgICAgICAnLTEuMzUsLTEuMDkxIC0yLjk2OCwtMC4wMDIgLTkuNjE5LC0wLjAxMyAtOS42MTksLTAuMDEzIHYgLTAuNTkxIGMgMCwwIDUuMDUyLC0wLjAxNiA3LjIyNSwtMC4wMTYgJyArXG4gICAgICAgICcwLjg4OCwtMC4wMDIgMS4zNTQsLTAuNDE2IDEuMzUxLC0xLjE5MyAtMC4wMDYsLTAuNzYxIC0wLjQ5MiwtMS4xOTYgLTEuMzYxLC0xLjE5NiAtMy40NzMsLTAuMDA1ICcgK1xuICAgICAgICAnLTEwLjg2LC0wLjAwMyAtMTEuMDgyOTk5NSwtMC4wMDMgLTAuMDIyLC0wLjA0NyAtMC4wNDUsLTAuMDk0IC0wLjA2OSwtMC4xMzkgMC4zOTM5OTk1LC0wLjMxOSAnICtcbiAgICAgICAgJzIuMDQwOTk5NSwtMS42MjYgMi40MTQ5OTk1LC0yLjAxNyAwLjQ2OSwtMC40ODcwMDA1IDAuNTE5LC0xLjE2NTAwMDUgMC4xNjIsLTEuNjA0MDAwNSAtMC40MTQsLTAuNTExICcgK1xuICAgICAgICAnLTAuOTczLC0wLjUgLTEuNDgsLTAuMjM2IC0xLjQ2MDk5OTUsMC43NjQgLTYuNTk5OTk5NSwzLjY0MzAwMDUgLTcuNzMyOTk5NSw0LjI3MTAwMDUgLTAuOSwwLjQ5OSAnICtcbiAgICAgICAgJy0xLjUxNiwxLjI1MyAtMS44ODIsMi4xOSAtMC4zNzAwMDAwMiwwLjk1IC0wLjE3LDIuMDEgLTAuMTY2LDIuOTc5IDAuMDA0LDAuNzE4IC0wLjI3MzAwMDAyLDEuMzQ1ICcgK1xuICAgICAgICAnLTAuMDU1LDIuMDYzIDAuNjI5LDIuMDg3IDIuNDI1LDMuMzEyIDQuODU5LDMuMzE4IDQuNjE3OTk5NSwwLjAxNCA5LjIzNzk5OTUsLTAuMTM5IDEzLjg1Njk5OTUsLTAuMTU4ICcgK1xuICAgICAgICAnMC43NTUsLTAuMDA0IDEuMTcxLC0wLjMwMSAxLjE4MiwtMS4wMzMgMC4wMTIsLTAuNzU0IC0wLjQyMywtMC45NjkgLTEuMTgzLC0wLjk3MyAtMS43NzgsLTAuMDEgJyArXG4gICAgICAgICctNS44MjQsLTAuMDA0IC02LjA0LC0wLjAwNCAxMGUtNCwtMC4wODQgMC4wMDMsLTAuNTg2IDEwZS00LC0wLjY3IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0lOU1RBTlRJQVRJTkdfU0VORCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBsIDAsOC40IGwgMTIuNiwwIGwgMCwtOC40IHogbCA2LjMsMy42IGwgNi4zLC0zLjYnXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NFUlZJQ0UnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gdiAtMS43MTMzNSBjIDAuMzUyMzI2LC0wLjA3MDUgMC43MDM5MzIsLTAuMTc4MzggMS4wNDc2MjgsLTAuMzIxMzMgJyArXG4gICAgICAgICcwLjM0NDQxNiwtMC4xNDQ2NSAwLjY2NTgyMiwtMC4zMjEzMyAwLjk2NjM3NywtMC41MjE0NSBsIDEuMTk0MzEsMS4xODAwNSAxLjU2NzQ4NywtMS41NzY4OCAnICtcbiAgICAgICAgJy0xLjE5NTAyOCwtMS4xODAxNCBjIDAuNDAzMzc2LC0wLjYxMzk0IDAuNjgzMDc5LC0xLjI5OTA4IDAuODI1NDQ3LC0yLjAxODI0IGwgMS42MjIxMzMsLTAuMDEgJyArXG4gICAgICAgICd2IC0yLjIxOTYgbCAtMS42MzY1MTQsMC4wMSBjIC0wLjA3MzMzLC0wLjM1MTUzIC0wLjE3ODMxOSwtMC43MDAyNCAtMC4zMjM1NjQsLTEuMDQzNzIgJyArXG4gICAgICAgICctMC4xNDUyNDQsLTAuMzQ0MDYgLTAuMzIxNDA3LC0wLjY2NDQgLTAuNTIyNzM1LC0wLjk2MjE3IGwgMS4xMzEwMzUsLTEuMTM2MzEgLTEuNTgzMzA1LC0xLjU2MjkzICcgK1xuICAgICAgICAnLTEuMTI5NTk4LDEuMTM1ODkgYyAtMC42MTQwNTIsLTAuNDAxMDggLTEuMzAyODgzLC0wLjY4MDkzIC0yLjAyMjYzMywtMC44MjI0NyBsIDAuMDA5MywtMS42MTg1MiAnICtcbiAgICAgICAgJ2ggLTIuMjQxMTczIGwgMC4wMDQyLDEuNjMxMjQgYyAtMC4zNTM3NjMsMC4wNzM2IC0wLjcwNTM2OSwwLjE3OTc3IC0xLjA0OTc4NSwwLjMyMzcxIC0wLjM0NDQxNSwwLjE0NDM3ICcgK1xuICAgICAgICAnLTAuNjY1MTAyLDAuMzIwOTIgLTAuOTYzNTAwNiwwLjUyMDQ2IGwgLTEuMTY5ODYyOCwtMS4xNTgyMyAtMS41NjY3NjkxLDEuNTc5MiAxLjE2ODQyNjUsMS4xNTY2OSAnICtcbiAgICAgICAgJ2MgLTAuNDAyNjU3MywwLjYxMjgzIC0wLjY4MzA4LDEuMjk3OTcgLTAuODI0NzI4NywyLjAxNzEzIGwgLTEuNjU4ODA0MSwwLjAwMyB2IDIuMjIxNzQgJyArXG4gICAgICAgICdsIDEuNjcyNDY0OCwtMC4wMDYgYyAwLjA3MzMyNywwLjM1MDc3IDAuMTc5NzU5OCwwLjcwMjQzIDAuMzI0Mjg1MSwxLjA0NDcyIDAuMTQ1MjQyOCwwLjM0NDQ4ICcgK1xuICAgICAgICAnMC4zMjE0MDY0LDAuNjY0NCAwLjUyMjczMzksMC45NjA2NiBsIC0xLjE5OTM0MzEsMS4xOTcyMyAxLjU4NDAyNTYsMS41NjAxMSAxLjE5NjQ2NjgsLTEuMTkzNDggJyArXG4gICAgICAgICdjIDAuNjE0MDUxNywwLjQwMzQ2IDEuMzAyODgyNywwLjY4MjMyIDIuMDIzMzUxNywwLjgyMzMxIGwgNy4xOWUtNCwxLjY5ODkyIGggMi4yMjY4NDggeiAnICtcbiAgICAgICAgJ20gMC4yMjE0NjIsLTMuOTk1NyBjIC0xLjc4ODk0OCwwLjc1MDIgLTMuODU3NiwtMC4wOTI4IC00LjYwOTcwNTUsLTEuODc0MzggLTAuNzUyMTA2NSwtMS43ODMyMSAnICtcbiAgICAgICAgJzAuMDkwNTk4LC0zLjg0NjI3IDEuODgwMjY0NSwtNC41OTYwNCAxLjc4ODIzLC0wLjc0OTM2IDMuODU2ODgxLDAuMDkyOSA0LjYwODk4NywxLjg3NDM3ICcgK1xuICAgICAgICAnMC43NTIxMDYsMS43ODE2NSAtMC4wOTA2LDMuODQ2MTIgLTEuODc5NTQ2LDQuNTk2MDUgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfU0VSVklDRV9GSUxMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgLTEuNzg4OTQ4LDAuNzUwMiAtMy44NTc2LC0wLjA5MjggLTQuNjA5NzA1NSwtMS44NzQzOCAtMC43NTIxMDY1LC0xLjc4MzIxICcgK1xuICAgICAgICAnMC4wOTA1OTgsLTMuODQ2MjcgMS44ODAyNjQ1LC00LjU5NjA0IDEuNzg4MjMsLTAuNzQ5MzYgMy44NTY4ODEsMC4wOTI5IDQuNjA4OTg3LDEuODc0MzcgJyArXG4gICAgICAgICcwLjc1MjEwNiwxLjc4MTY1IC0wLjA5MDYsMy44NDYxMiAtMS44Nzk1NDYsNC41OTYwNSB6J1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9CVVNJTkVTU19SVUxFX0hFQURFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDQgMjAsMCAwLC00IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfTUFJTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDEyIDIwLDAgMCwtMTIgeicgK1xuICAgICAgICAnbSAwLDggbCAyMCwwICcgK1xuICAgICAgICAnbSAtMTMsLTQgbCAwLDgnXG4gICAgfSxcbiAgICAnTUVTU0FHRV9GTE9XX01BUktFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBtIC0xMC41ICwtNyBsIDAsMTQgbCAyMSwwIGwgMCwtMTQgeiBsIDEwLjUsNiBsIDEwLjUsLTYnXG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZ2V0UmF3UGF0aCA9IGZ1bmN0aW9uIGdldFJhd1BhdGgocGF0aElkKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aE1hcFtwYXRoSWRdLmQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNjYWxlcyB0aGUgcGF0aCB0byB0aGUgZ2l2ZW4gaGVpZ2h0IGFuZCB3aWR0aC5cbiAgICogPGgxPlVzZSBjYXNlPC9oMT5cbiAgICogPHA+VXNlIGNhc2UgaXMgdG8gc2NhbGUgdGhlIGNvbnRlbnQgb2YgZWxlbWVudHMgKGV2ZW50LCBnYXRld2F5cykgYmFzZWRcbiAgICogb24gdGhlIGVsZW1lbnQgYm91bmRpbmcgYm94J3Mgc2l6ZS5cbiAgICogPC9wPlxuICAgKiA8aDE+V2h5IG5vdCB0cmFuc2Zvcm08L2gxPlxuICAgKiA8cD5TY2FsaW5nIGEgcGF0aCB3aXRoIHRyYW5zZm9ybSgpIHdpbGwgYWxzbyBzY2FsZSB0aGUgc3Ryb2tlIGFuZCBJRSBkb2VzIG5vdCBzdXBwb3J0XG4gICAqIHRoZSBvcHRpb24gJ25vbi1zY2FsaW5nLXN0cm9rZScgdG8gcHJldmVudCB0aGlzLlxuICAgKiBBbHNvIHRoZXJlIGFyZSB1c2UgY2FzZXMgd2hlcmUgb25seSBzb21lIHBhcnRzIG9mIGEgcGF0aCBzaG91bGQgYmVcbiAgICogc2NhbGVkLjwvcD5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhJZCBUaGUgSUQgb2YgdGhlIHBhdGguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSA8cD5cbiAgICogICBFeGFtcGxlIHBhcmFtIG9iamVjdCBzY2FsZXMgdGhlIHBhdGggdG8gNjAlIHNpemUgb2YgdGhlIGNvbnRhaW5lciAoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLlxuICAgKiAgIDxwcmU+XG4gICAqICAge1xuICAgKiAgICAgeFNjYWxlRmFjdG9yOiAwLjYsXG4gICAqICAgICB5U2NhbGVGYWN0b3I6MC42LFxuICAgKiAgICAgY29udGFpbmVyV2lkdGg6IGRhdGEud2lkdGgsXG4gICAqICAgICBjb250YWluZXJIZWlnaHQ6IGRhdGEuaGVpZ2h0LFxuICAgKiAgICAgcG9zaXRpb246IHtcbiAgICogICAgICAgbXg6IDAuNDYsXG4gICAqICAgICAgIG15OiAwLjIsXG4gICAqICAgICB9XG4gICAqICAgfVxuICAgKiAgIDwvcHJlPlxuICAgKiAgIDx1bD5cbiAgICogICAgPGxpPnRhcmdldHBhdGh3aWR0aCA9IHhTY2FsZUZhY3RvciAqIGNvbnRhaW5lcldpZHRoPC9saT5cbiAgICogICAgPGxpPnRhcmdldHBhdGhoZWlnaHQgPSB5U2NhbGVGYWN0b3IgKiBjb250YWluZXJIZWlnaHQ8L2xpPlxuICAgKiAgICA8bGk+UG9zaXRpb24gaXMgdXNlZCB0byBzZXQgdGhlIHN0YXJ0aW5nIGNvb3JkaW5hdGUgb2YgdGhlIHBhdGguIE0gaXMgY29tcHV0ZWQ6XG4gICAgKiAgICA8dWw+XG4gICAgKiAgICAgIDxsaT5wb3NpdGlvbi54ICogY29udGFpbmVyV2lkdGg8L2xpPlxuICAgICogICAgICA8bGk+cG9zaXRpb24ueSAqIGNvbnRhaW5lckhlaWdodDwvbGk+XG4gICAgKiAgICA8L3VsPlxuICAgICogICAgQ2VudGVyIG9mIHRoZSBjb250YWluZXIgPHByZT4gcG9zaXRpb246IHtcbiAgICogICAgICAgbXg6IDAuNSxcbiAgICogICAgICAgbXk6IDAuNSxcbiAgICogICAgIH08L3ByZT5cbiAgICogICAgIFVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBjb250YWluZXJcbiAgICogICAgIDxwcmU+IHBvc2l0aW9uOiB7XG4gICAqICAgICAgIG14OiAwLjAsXG4gICAqICAgICAgIG15OiAwLjAsXG4gICAqICAgICB9PC9wcmU+XG4gICAqICAgIDwvbGk+XG4gICAqICAgPC91bD5cbiAgICogPC9wPlxuICAgKlxuICAgKi9cbiAgdGhpcy5nZXRTY2FsZWRQYXRoID0gZnVuY3Rpb24gZ2V0U2NhbGVkUGF0aChwYXRoSWQsIHBhcmFtKSB7XG4gICAgdmFyIHJhd1BhdGggPSB0aGlzLnBhdGhNYXBbcGF0aElkXTtcblxuICAgIC8vIHBvc2l0aW9uaW5nXG4gICAgLy8gY29tcHV0ZSB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIHBhdGhcbiAgICB2YXIgbXgsIG15O1xuXG4gICAgaWYgKHBhcmFtLmFic3Bvcykge1xuICAgICAgbXggPSBwYXJhbS5hYnNwb3MueDtcbiAgICAgIG15ID0gcGFyYW0uYWJzcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG14ID0gcGFyYW0uY29udGFpbmVyV2lkdGggKiBwYXJhbS5wb3NpdGlvbi5teDtcbiAgICAgIG15ID0gcGFyYW0uY29udGFpbmVySGVpZ2h0ICogcGFyYW0ucG9zaXRpb24ubXk7XG4gICAgfVxuXG4gICAgdmFyIGNvb3JkaW5hdGVzID0ge307IC8vIG1hcCBmb3IgdGhlIHNjYWxlZCBjb29yZGluYXRlc1xuICAgIGlmIChwYXJhbS5wb3NpdGlvbikge1xuXG4gICAgICAvLyBwYXRoXG4gICAgICB2YXIgaGVpZ2h0UmF0aW8gPSAocGFyYW0uY29udGFpbmVySGVpZ2h0IC8gcmF3UGF0aC5oZWlnaHQpICogcGFyYW0ueVNjYWxlRmFjdG9yO1xuICAgICAgdmFyIHdpZHRoUmF0aW8gPSAocGFyYW0uY29udGFpbmVyV2lkdGggLyByYXdQYXRoLndpZHRoKSAqIHBhcmFtLnhTY2FsZUZhY3RvcjtcblxuXG4gICAgICAvLyBBcHBseSBoZWlnaHQgcmF0aW9cbiAgICAgIGZvciAodmFyIGhlaWdodEluZGV4ID0gMDsgaGVpZ2h0SW5kZXggPCByYXdQYXRoLmhlaWdodEVsZW1lbnRzLmxlbmd0aDsgaGVpZ2h0SW5kZXgrKykge1xuICAgICAgICBjb29yZGluYXRlc1sneScgKyBoZWlnaHRJbmRleF0gPSByYXdQYXRoLmhlaWdodEVsZW1lbnRzW2hlaWdodEluZGV4XSAqIGhlaWdodFJhdGlvO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSB3aWR0aCByYXRpb1xuICAgICAgZm9yICh2YXIgd2lkdGhJbmRleCA9IDA7IHdpZHRoSW5kZXggPCByYXdQYXRoLndpZHRoRWxlbWVudHMubGVuZ3RoOyB3aWR0aEluZGV4KyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXNbJ3gnICsgd2lkdGhJbmRleF0gPSByYXdQYXRoLndpZHRoRWxlbWVudHNbd2lkdGhJbmRleF0gKiB3aWR0aFJhdGlvO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHZhbHVlIHRvIHJhdyBwYXRoXG4gICAgdmFyIHBhdGggPSBmb3JtYXQoXG4gICAgICByYXdQYXRoLmQsIHtcbiAgICAgICAgbXg6IG14LFxuICAgICAgICBteTogbXksXG4gICAgICAgIGU6IGNvb3JkaW5hdGVzXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hZG9iZS13ZWJwbGF0Zm9ybS9TbmFwLnN2Zy9ibG9iL21hc3Rlci9zcmMvc3ZnLmpzXG52YXIgdG9rZW5SZWdleCA9IC9cXHsoW159XSspXFx9L2csXG4gICAgb2JqTm90YXRpb25SZWdleCA9IC8oPzooPzpefFxcLikoLis/KSg/PVxcW3xcXC58JHxcXCgpfFxcWygnfFwiKSguKz8pXFwyXFxdKShcXChcXCkpPy9nOyAvLyBtYXRjaGVzIC54eHh4eCBvciBbXCJ4eHh4eFwiXSB0byBydW4gb3ZlciBvYmplY3QgcHJvcGVydGllc1xuXG5mdW5jdGlvbiByZXBsYWNlcihhbGwsIGtleSwgb2JqKSB7XG4gIHZhciByZXMgPSBvYmo7XG4gIGtleS5yZXBsYWNlKG9iak5vdGF0aW9uUmVnZXgsIGZ1bmN0aW9uKGFsbCwgbmFtZSwgcXVvdGUsIHF1b3RlZE5hbWUsIGlzRnVuYykge1xuICAgIG5hbWUgPSBuYW1lIHx8IHF1b3RlZE5hbWU7XG4gICAgaWYgKHJlcykge1xuICAgICAgaWYgKG5hbWUgaW4gcmVzKSB7XG4gICAgICAgIHJlcyA9IHJlc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHR5cGVvZiByZXMgPT0gJ2Z1bmN0aW9uJyAmJiBpc0Z1bmMgJiYgKHJlcyA9IHJlcygpKTtcbiAgICB9XG4gIH0pO1xuICByZXMgPSAocmVzID09IG51bGwgfHwgcmVzID09IG9iaiA/IGFsbCA6IHJlcykgKyAnJztcblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoc3RyLCBvYmopIHtcbiAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UodG9rZW5SZWdleCwgZnVuY3Rpb24oYWxsLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZXIoYWxsLCBrZXksIG9iaik7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgVGV4dFV0aWwgZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9UZXh0JztcblxudmFyIERFRkFVTFRfRk9OVF9TSVpFID0gMTI7XG52YXIgTElORV9IRUlHSFRfUkFUSU8gPSAxLjI7XG5cbnZhciBNSU5fVEVYVF9BTk5PVEFUSU9OX0hFSUdIVCA9IDMwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRleHRSZW5kZXJlcihjb25maWcpIHtcblxuICB2YXIgZGVmYXVsdFN0eWxlID0gYXNzaWduKHtcbiAgICBmb250RmFtaWx5OiAnQXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgIGZvbnRTaXplOiBERUZBVUxUX0ZPTlRfU0laRSxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBsaW5lSGVpZ2h0OiBMSU5FX0hFSUdIVF9SQVRJT1xuICB9LCBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRTdHlsZSB8fCB7fSk7XG5cbiAgdmFyIGZvbnRTaXplID0gcGFyc2VJbnQoZGVmYXVsdFN0eWxlLmZvbnRTaXplLCAxMCkgLSAxO1xuXG4gIHZhciBleHRlcm5hbFN0eWxlID0gYXNzaWduKHt9LCBkZWZhdWx0U3R5bGUsIHtcbiAgICBmb250U2l6ZTogZm9udFNpemVcbiAgfSwgY29uZmlnICYmIGNvbmZpZy5leHRlcm5hbFN0eWxlIHx8IHt9KTtcblxuICB2YXIgdGV4dFV0aWwgPSBuZXcgVGV4dFV0aWwoe1xuICAgIHN0eWxlOiBkZWZhdWx0U3R5bGVcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV3IGJvdW5kcyBvZiBhbiBleHRlcm5hbGx5IHJlbmRlcmVkLFxuICAgKiBsYXlvdXRlZCBsYWJlbC5cbiAgICpcbiAgICogQHBhcmFtICB7Qm91bmRzfSBib3VuZHNcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0XG4gICAqXG4gICAqIEByZXR1cm4ge0JvdW5kc31cbiAgICovXG4gIHRoaXMuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyA9IGZ1bmN0aW9uKGJvdW5kcywgdGV4dCkge1xuXG4gICAgdmFyIGxheW91dGVkRGltZW5zaW9ucyA9IHRleHRVdGlsLmdldERpbWVuc2lvbnModGV4dCwge1xuICAgICAgYm94OiB7XG4gICAgICAgIHdpZHRoOiA5MCxcbiAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgeDogYm91bmRzLndpZHRoIC8gMiArIGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMuaGVpZ2h0IC8gMiArIGJvdW5kcy55XG4gICAgICB9LFxuICAgICAgc3R5bGU6IGV4dGVybmFsU3R5bGVcbiAgICB9KTtcblxuICAgIC8vIHJlc2l6ZSBsYWJlbCBzaGFwZSB0byBmaXQgbGFiZWwgdGV4dFxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMiAtIGxheW91dGVkRGltZW5zaW9ucy53aWR0aCAvIDIpLFxuICAgICAgeTogTWF0aC5yb3VuZChib3VuZHMueSksXG4gICAgICB3aWR0aDogTWF0aC5jZWlsKGxheW91dGVkRGltZW5zaW9ucy53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGguY2VpbChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KVxuICAgIH07XG5cbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBuZXcgYm91bmRzIG9mIHRleHQgYW5ub3RhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtICB7Qm91bmRzfSBib3VuZHNcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0XG4gICAqXG4gICAqIEByZXR1cm4ge0JvdW5kc31cbiAgICovXG4gIHRoaXMuZ2V0VGV4dEFubm90YXRpb25Cb3VuZHMgPSBmdW5jdGlvbihib3VuZHMsIHRleHQpIHtcblxuICAgIHZhciBsYXlvdXRlZERpbWVuc2lvbnMgPSB0ZXh0VXRpbC5nZXREaW1lbnNpb25zKHRleHQsIHtcbiAgICAgIGJveDogYm91bmRzLFxuICAgICAgc3R5bGU6IGRlZmF1bHRTdHlsZSxcbiAgICAgIGFsaWduOiAnbGVmdC10b3AnLFxuICAgICAgcGFkZGluZzogNVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgeTogYm91bmRzLnksXG4gICAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBNYXRoLm1heChNSU5fVEVYVF9BTk5PVEFUSU9OX0hFSUdIVCwgTWF0aC5yb3VuZChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KSlcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsYXlvdXRlZCB0ZXh0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gcmVuZGVyZWQgdGV4dFxuICAgKi9cbiAgdGhpcy5jcmVhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiB0ZXh0VXRpbC5jcmVhdGVUZXh0KHRleHQsIG9wdGlvbnMgfHwge30pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCB0ZXh0IHN0eWxlLlxuICAgKi9cbiAgdGhpcy5nZXREZWZhdWx0U3R5bGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdFN0eWxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dGVybmFsIHRleHQgc3R5bGUuXG4gICAqL1xuICB0aGlzLmdldEV4dGVybmFsU3R5bGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZXh0ZXJuYWxTdHlsZTtcbiAgfTtcblxufVxuXG5UZXh0UmVuZGVyZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy50ZXh0UmVuZGVyZXInXG5dOyIsImltcG9ydCBCcG1uUmVuZGVyZXIgZnJvbSAnLi9CcG1uUmVuZGVyZXInO1xuaW1wb3J0IFRleHRSZW5kZXJlciBmcm9tICcuL1RleHRSZW5kZXJlcic7XG5cbmltcG9ydCBQYXRoTWFwIGZyb20gJy4vUGF0aE1hcCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2JwbW5SZW5kZXJlcicgXSxcbiAgYnBtblJlbmRlcmVyOiBbICd0eXBlJywgQnBtblJlbmRlcmVyIF0sXG4gIHRleHRSZW5kZXJlcjogWyAndHlwZScsIFRleHRSZW5kZXJlciBdLFxuICBwYXRoTWFwOiBbICd0eXBlJywgUGF0aE1hcCBdXG59O1xuIiwiaW1wb3J0IHsgZ2V0TmV3U2hhcGVQb3NpdGlvbiB9IGZyb20gJy4vQnBtbkF1dG9QbGFjZVV0aWwnO1xuXG5cbi8qKlxuICogQlBNTiBhdXRvLXBsYWNlIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZShldmVudEJ1cykge1xuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBzaGFwZSk7XG4gIH0pO1xufVxuXG5BdXRvUGxhY2UuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgYXNUUkJMLFxuICBnZXRPcmllbnRhdGlvblxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmRGcmVlUG9zaXRpb24sXG4gIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uLFxuICBnZXRDb25uZWN0ZWREaXN0YW5jZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0F1dG9QbGFjZVV0aWwnO1xuXG5cbi8qKlxuICogRmluZCB0aGUgbmV3IHBvc2l0aW9uIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQgdG9cbiAqIGNvbm5lY3QgdG8gc291cmNlLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gc291cmNlXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICByZXR1cm4gZ2V0VGV4dEFubm90YXRpb25Qb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkpIHtcbiAgICByZXR1cm4gZ2V0RGF0YUVsZW1lbnRQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICByZXR1cm4gZ2V0Rmxvd05vZGVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogQWx3YXlzIHRyeSB0byBwbGFjZSBlbGVtZW50IHJpZ2h0IG9mIHNvdXJjZTtcbiAqIGNvbXB1dGUgYWN0dWFsIGRpc3RhbmNlIGZyb20gcHJldmlvdXMgbm9kZXMgaW4gZmxvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dOb2RlUG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgdmFyIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcbiAgdmFyIHNvdXJjZU1pZCA9IGdldE1pZChzb3VyY2UpO1xuXG4gIHZhciBob3Jpem9udGFsRGlzdGFuY2UgPSBnZXRDb25uZWN0ZWREaXN0YW5jZShzb3VyY2UsIHtcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBtYXJnaW4gPSAzMCxcbiAgICAgIG1pbkRpc3RhbmNlID0gODAsXG4gICAgICBvcmllbnRhdGlvbiA9ICdsZWZ0JztcblxuICBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHNvdXJjZSwgc291cmNlLmhvc3QsIC0yNSk7XG5cbiAgICBpZiAob3JpZW50YXRpb24uaW5kZXhPZigndG9wJykgIT09IC0xKSB7XG4gICAgICBtYXJnaW4gKj0gLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBvc2l0aW9uID0ge1xuICAgIHg6IHNvdXJjZVRyYmwucmlnaHQgKyBob3Jpem9udGFsRGlzdGFuY2UgKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICB5OiBzb3VyY2VNaWQueSArIGdldFZlcnRpY2FsRGlzdGFuY2Uob3JpZW50YXRpb24sIG1pbkRpc3RhbmNlKVxuICB9O1xuXG4gIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb24gPSB7XG4gICAgeToge1xuICAgICAgbWFyZ2luOiBtYXJnaW4sXG4gICAgICBtaW5EaXN0YW5jZTogbWluRGlzdGFuY2VcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSk7XG59XG5cblxuZnVuY3Rpb24gZ2V0VmVydGljYWxEaXN0YW5jZShvcmllbnRhdGlvbiwgbWluRGlzdGFuY2UpIHtcbiAgaWYgKG9yaWVudGF0aW9uLmluZGV4T2YoJ3RvcCcpICE9IC0xKSB7XG4gICAgcmV0dXJuIC0xICogbWluRGlzdGFuY2U7XG4gIH0gZWxzZSBpZiAob3JpZW50YXRpb24uaW5kZXhPZignYm90dG9tJykgIT0gLTEpIHtcbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vKipcbiAqIEFsd2F5cyB0cnkgdG8gcGxhY2UgdGV4dCBhbm5vdGF0aW9ucyB0b3AgcmlnaHQgb2Ygc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEFubm90YXRpb25Qb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHtcblxuICB2YXIgc291cmNlVHJibCA9IGFzVFJCTChzb3VyY2UpO1xuXG4gIHZhciBwb3NpdGlvbiA9IHtcbiAgICB4OiBzb3VyY2VUcmJsLnJpZ2h0ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlVHJibC50b3AgLSA1MCAtIGVsZW1lbnQuaGVpZ2h0IC8gMlxuICB9O1xuXG4gIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb24gPSB7XG4gICAgeToge1xuICAgICAgbWFyZ2luOiAtMzAsXG4gICAgICBtaW5EaXN0YW5jZTogMjBcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSk7XG59XG5cblxuLyoqXG4gKiBBbHdheXMgcHV0IGVsZW1lbnQgYm90dG9tIHJpZ2h0IG9mIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFFbGVtZW50UG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgdmFyIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCAtIDEwICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlVHJibC5ib3R0b20gKyA0MCArIGVsZW1lbnQud2lkdGggLyAyXG4gIH07XG5cbiAgdmFyIG5leHRQb3NpdGlvbkRpcmVjdGlvbiA9IHtcbiAgICB4OiB7XG4gICAgICBtYXJnaW46IDMwLFxuICAgICAgbWluRGlzdGFuY2U6IDMwXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBmaW5kRnJlZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgcG9zaXRpb24sIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uKG5leHRQb3NpdGlvbkRpcmVjdGlvbikpO1xufSIsImltcG9ydCBBdXRvUGxhY2VNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZSc7XG5cbmltcG9ydCBCcG1uQXV0b1BsYWNlIGZyb20gJy4vQnBtbkF1dG9QbGFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgQXV0b1BsYWNlTW9kdWxlIF0sXG4gIF9faW5pdF9fOiBbICdicG1uQXV0b1BsYWNlJyBdLFxuICBicG1uQXV0b1BsYWNlOiBbICd0eXBlJywgQnBtbkF1dG9QbGFjZSBdXG59OyIsImltcG9ydCBBdXRvUmVzaXplIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemUnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIFN1YiBjbGFzcyBvZiB0aGUgQXV0b1Jlc2l6ZSBtb2R1bGUgd2hpY2ggaW1wbGVtZW50cyBhIEJQTU5cbiAqIHNwZWNpZmljIHJlc2l6ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkF1dG9SZXNpemUoaW5qZWN0b3IpIHtcblxuICBpbmplY3Rvci5pbnZva2UoQXV0b1Jlc2l6ZSwgdGhpcyk7XG59XG5cbkJwbW5BdXRvUmVzaXplLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cbmluaGVyaXRzKEJwbW5BdXRvUmVzaXplLCBBdXRvUmVzaXplKTtcblxuXG4vKipcbiAqIFJlc2l6ZSBzaGFwZXMgYW5kIGxhbmVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBoaW50c1xuICovXG5CcG1uQXV0b1Jlc2l6ZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24odGFyZ2V0LCBuZXdCb3VuZHMsIGhpbnRzKSB7XG5cbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHRoaXMuX21vZGVsaW5nLnJlc2l6ZUxhbmUodGFyZ2V0LCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9tb2RlbGluZy5yZXNpemVTaGFwZSh0YXJnZXQsIG5ld0JvdW5kcywgbnVsbCwgaGludHMpO1xuICB9XG59OyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQXV0b1Jlc2l6ZVByb3ZpZGVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemVQcm92aWRlcic7XG5cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBpcyBhIHByb3ZpZGVyIGZvciBhdXRvbWF0aWNhbGx5IHJlc2l6aW5nIHBhcmVudCBCUE1OIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5BdXRvUmVzaXplUHJvdmlkZXIoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG4gIEF1dG9SZXNpemVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5pbmhlcml0cyhCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLCBBdXRvUmVzaXplUHJvdmlkZXIpO1xuXG5CcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdGFyZ2V0IGNhbiBiZSBleHBhbmRlZFxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gdGFyZ2V0XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQnBtbkF1dG9SZXNpemVQcm92aWRlci5wcm90b3R5cGUuY2FuUmVzaXplID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCkge1xuXG4gIGlmICghaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpcyh0YXJnZXQsICdicG1uOkxhbmUnKSAmJiAhKGlzKHRhcmdldCwgJ2JwbW46U3ViUHJvY2VzcycpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjYW5SZXNpemUgPSB0cnVlO1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgY2FuUmVzaXplID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2FuUmVzaXplO1xufTtcbiIsImltcG9ydCBCcG1uQXV0b1Jlc2l6ZSBmcm9tICcuL0JwbW5BdXRvUmVzaXplJztcbmltcG9ydCBCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyIGZyb20gJy4vQnBtbkF1dG9SZXNpemVQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdicG1uQXV0b1Jlc2l6ZScsXG4gICAgJ2JwbW5BdXRvUmVzaXplUHJvdmlkZXInXG4gIF0sXG4gIGJwbW5BdXRvUmVzaXplOiBbICd0eXBlJywgQnBtbkF1dG9SZXNpemUgXSxcbiAgYnBtbkF1dG9SZXNpemVQcm92aWRlcjogWyAndHlwZScsIEJwbW5BdXRvUmVzaXplUHJvdmlkZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZCxcbiAgaXNFdmVudFN1YlByb2Nlc3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldENoaWxkTGFuZXNcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9MYW5lVXRpbCc7XG5cbmltcG9ydCB7XG4gIGhhc1ByaW1hcnlNb2RpZmllclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vdXNlJztcblxuXG4vKipcbiAqIEEgcHJvdmlkZXIgZm9yIEJQTU4gMi4wIGVsZW1lbnRzIGNvbnRleHQgcGFkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbnRleHRQYWRQcm92aWRlcihcbiAgICBjb25maWcsIGluamVjdG9yLCBldmVudEJ1cyxcbiAgICBjb250ZXh0UGFkLCBtb2RlbGluZywgZWxlbWVudEZhY3RvcnksXG4gICAgY29ubmVjdCwgY3JlYXRlLCBwb3B1cE1lbnUsXG4gICAgY2FudmFzLCBydWxlcywgdHJhbnNsYXRlKSB7XG5cbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcblxuICB0aGlzLl9jb250ZXh0UGFkID0gY29udGV4dFBhZDtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuXG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2Nvbm5lY3QgPSBjb25uZWN0O1xuICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgaWYgKGNvbmZpZy5hdXRvUGxhY2UgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5fYXV0b1BsYWNlID0gaW5qZWN0b3IuZ2V0KCdhdXRvUGxhY2UnLCBmYWxzZSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY3JlYXRlLmVuZCcsIDI1MCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmICghaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KSB8fCAhY29udGV4dFBhZC5pc09wZW4oc2hhcGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVudHJpZXMgPSBjb250ZXh0UGFkLmdldEVudHJpZXMoc2hhcGUpO1xuXG4gICAgaWYgKGVudHJpZXMucmVwbGFjZSkge1xuICAgICAgZW50cmllcy5yZXBsYWNlLmFjdGlvbi5jbGljayhldmVudCwgc2hhcGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbkNvbnRleHRQYWRQcm92aWRlci4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmNvbnRleHRQYWQnLFxuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY29udGV4dFBhZCcsXG4gICdtb2RlbGluZycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdjb25uZWN0JyxcbiAgJ2NyZWF0ZScsXG4gICdwb3B1cE1lbnUnLFxuICAnY2FudmFzJyxcbiAgJ3J1bGVzJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuQ29udGV4dFBhZFByb3ZpZGVyLnByb3RvdHlwZS5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgY29udGV4dFBhZCA9IHRoaXMuX2NvbnRleHRQYWQsXG4gICAgICBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuXG4gICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LFxuICAgICAgY29ubmVjdCA9IHRoaXMuX2Nvbm5lY3QsXG4gICAgICBjcmVhdGUgPSB0aGlzLl9jcmVhdGUsXG4gICAgICBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnUsXG4gICAgICBjYW52YXMgPSB0aGlzLl9jYW52YXMsXG4gICAgICBydWxlcyA9IHRoaXMuX3J1bGVzLFxuICAgICAgYXV0b1BsYWNlID0gdGhpcy5fYXV0b1BsYWNlLFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIHZhciBhY3Rpb25zID0ge307XG5cbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2xhYmVsJykge1xuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICBmdW5jdGlvbiBzdGFydENvbm5lY3QoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25uZWN0LnN0YXJ0KGV2ZW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZSkge1xuICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKFsgZWxlbWVudCBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJlcGxhY2VNZW51UG9zaXRpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIFlfT0ZGU0VUID0gNTtcblxuICAgIHZhciBkaWFncmFtQ29udGFpbmVyID0gY2FudmFzLmdldENvbnRhaW5lcigpLFxuICAgICAgICBwYWQgPSBjb250ZXh0UGFkLmdldFBhZChlbGVtZW50KS5odG1sO1xuXG4gICAgdmFyIGRpYWdyYW1SZWN0ID0gZGlhZ3JhbUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgcGFkUmVjdCA9IHBhZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciB0b3AgPSBwYWRSZWN0LnRvcCAtIGRpYWdyYW1SZWN0LnRvcDtcbiAgICB2YXIgbGVmdCA9IHBhZFJlY3QubGVmdCAtIGRpYWdyYW1SZWN0LmxlZnQ7XG5cbiAgICB2YXIgcG9zID0ge1xuICAgICAgeDogbGVmdCxcbiAgICAgIHk6IHRvcCArIHBhZFJlY3QuaGVpZ2h0ICsgWV9PRkZTRVRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBvcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcHBlbmQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0aXRsZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGRlc2NyaXB0b3JcbiAgICovXG4gIGZ1bmN0aW9uIGFwcGVuZEFjdGlvbih0eXBlLCBjbGFzc05hbWUsIHRpdGxlLCBvcHRpb25zKSB7XG5cbiAgICBpZiAodHlwZW9mIHRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IHRpdGxlO1xuICAgICAgdGl0bGUgPSB0cmFuc2xhdGUoJ0FwcGVuZCB7dHlwZX0nLCB7IHR5cGU6IHR5cGUucmVwbGFjZSgvXmJwbW46LywgJycpIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGVuZFN0YXJ0KGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGFzc2lnbih7IHR5cGU6IHR5cGUgfSwgb3B0aW9ucykpO1xuICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwge1xuICAgICAgICBzb3VyY2U6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgdmFyIGFwcGVuZCA9IGF1dG9QbGFjZSA/IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICB2YXIgc2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZShhc3NpZ24oeyB0eXBlOiB0eXBlIH0sIG9wdGlvbnMpKTtcblxuICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XG4gICAgfSA6IGFwcGVuZFN0YXJ0O1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXA6ICdtb2RlbCcsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGFwcGVuZFN0YXJ0LFxuICAgICAgICBjbGljazogYXBwZW5kXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNwbGl0TGFuZUhhbmRsZXIoY291bnQpIHtcblxuICAgIHJldHVybiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuXG4gICAgICAvLyBhY3R1YWwgc3BsaXRcbiAgICAgIG1vZGVsaW5nLnNwbGl0TGFuZShlbGVtZW50LCBjb3VudCk7XG5cbiAgICAgIC8vIHJlZnJlc2ggY29udGV4dCBwYWQgYWZ0ZXIgc3BsaXQgdG9cbiAgICAgIC8vIGdldCByaWQgb2Ygc3BsaXQgaWNvbnNcbiAgICAgIGNvbnRleHRQYWQub3BlbihlbGVtZW50LCB0cnVlKTtcbiAgICB9O1xuICB9XG5cblxuICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46TGFuZScsICdicG1uOlBhcnRpY2lwYW50JyBdKSAmJiBpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKGVsZW1lbnQpO1xuXG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdsYW5lLWluc2VydC1hYm92ZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdsYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1sYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FkZCBMYW5lIGFib3ZlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuICAgICAgICAgICAgbW9kZWxpbmcuYWRkTGFuZShlbGVtZW50LCAndG9wJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGggPCAyKSB7XG5cbiAgICAgIGlmIChlbGVtZW50LmhlaWdodCA+PSAxMjApIHtcbiAgICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgICAnbGFuZS1kaXZpZGUtdHdvJzoge1xuICAgICAgICAgICAgZ3JvdXA6ICdsYW5lLWRpdmlkZScsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1kaXZpZGUtdHdvJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHR3byBMYW5lcycpLFxuICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBzcGxpdExhbmVIYW5kbGVyKDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQuaGVpZ2h0ID49IDE4MCkge1xuICAgICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAgICdsYW5lLWRpdmlkZS10aHJlZSc6IHtcbiAgICAgICAgICAgIGdyb3VwOiAnbGFuZS1kaXZpZGUnLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxhbmUtZGl2aWRlLXRocmVlJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHRocmVlIExhbmVzJyksXG4gICAgICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IHNwbGl0TGFuZUhhbmRsZXIoMylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnbGFuZS1pbnNlcnQtYmVsb3cnOiB7XG4gICAgICAgIGdyb3VwOiAnbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdBZGQgTGFuZSBiZWxvdycpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLmFkZExhbmUoZWxlbWVudCwgJ2JvdHRvbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dOb2RlJykpIHtcblxuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuXG4gICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAnYXBwZW5kLnJlY2VpdmUtdGFzayc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpSZWNlaXZlVGFzaycsXG4gICAgICAgICAgJ2JwbW4taWNvbi1yZWNlaXZlLXRhc2snLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIFJlY2VpdmVUYXNrJylcbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5tZXNzYWdlLWludGVybWVkaWF0ZS1ldmVudCc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1tZXNzYWdlJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBNZXNzYWdlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpLFxuICAgICAgICAgIHsgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLnRpbWVyLWludGVybWVkaWF0ZS1ldmVudCc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgVGltZXJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLmNvbmRpdGlvbi1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBDb25kaXRpb25JbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLnNpZ25hbC1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtc2lnbmFsJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBTaWduYWxJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXNFdmVudFR5cGUoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnLCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJykpIHtcblxuICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgJ2FwcGVuZC5jb21wZW5zYXRpb24tYWN0aXZpdHknOlxuICAgICAgICAgICAgYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICAgICAnYnBtbjpUYXNrJyxcbiAgICAgICAgICAgICAgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgY29tcGVuc2F0aW9uIGFjdGl2aXR5JyksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0ZvckNvbXBlbnNhdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICB9KTtcbiAgICB9IGVsc2VcblxuICAgIGlmICghaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkVuZEV2ZW50JykgJiZcbiAgICAgICAgIWJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uICYmXG4gICAgICAgICFpc0V2ZW50VHlwZShidXNpbmVzc09iamVjdCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSAmJlxuICAgICAgICAhaXNFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAgICdhcHBlbmQuZW5kLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkVuZEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBFbmRFdmVudCcpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuZ2F0ZXdheSc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWdhdGV3YXktbm9uZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgR2F0ZXdheScpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuYXBwZW5kLXRhc2snOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46VGFzaycsXG4gICAgICAgICAgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBUYXNrJylcbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgSW50ZXJtZWRpYXRlL0JvdW5kYXJ5IEV2ZW50JylcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwb3B1cE1lbnUuaXNFbXB0eShlbGVtZW50LCAnYnBtbi1yZXBsYWNlJykpIHtcblxuICAgIC8vIFJlcGxhY2UgbWVudSBlbnRyeVxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAncmVwbGFjZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdlZGl0JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNjcmV3LXdyZW5jaCcsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NoYW5nZSB0eXBlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBhc3NpZ24oZ2V0UmVwbGFjZU1lbnVQb3NpdGlvbihlbGVtZW50KSwge1xuICAgICAgICAgICAgICBjdXJzb3I6IHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcG9wdXBNZW51Lm9wZW4oZWxlbWVudCwgJ2JwbW4tcmVwbGFjZScsIHBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc0FueShidXNpbmVzc09iamVjdCwgW1xuICAgICdicG1uOkZsb3dOb2RlJyxcbiAgICAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnLFxuICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLFxuICAgICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZSdcbiAgXSkpIHtcblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbignYnBtbjpUZXh0QW5ub3RhdGlvbicsICdicG1uLWljb24tdGV4dC1hbm5vdGF0aW9uJyksXG5cbiAgICAgICdjb25uZWN0Jzoge1xuICAgICAgICBncm91cDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbi1tdWx0aScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Nvbm5lY3QgdXNpbmcgJyArXG4gICAgICAgICAgICAgICAgICAoYnVzaW5lc3NPYmplY3QuaXNGb3JDb21wZW5zYXRpb24gPyAnJyA6ICdTZXF1ZW5jZS9NZXNzYWdlRmxvdyBvciAnKSArXG4gICAgICAgICAgICAgICAgICAnQXNzb2NpYXRpb24nKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IHN0YXJ0Q29ubmVjdCxcbiAgICAgICAgICBkcmFnc3RhcnQ6IHN0YXJ0Q29ubmVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkpIHtcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2Nvbm5lY3QnOiB7XG4gICAgICAgIGdyb3VwOiAnY29ubmVjdCcsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jb25uZWN0aW9uLW11bHRpJyxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ29ubmVjdCB1c2luZyBEYXRhSW5wdXRBc3NvY2lhdGlvbicpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogc3RhcnRDb25uZWN0LFxuICAgICAgICAgIGRyYWdzdGFydDogc3RhcnRDb25uZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46R3JvdXAnKSkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbignYnBtbjpUZXh0QW5ub3RhdGlvbicsICdicG1uLWljb24tdGV4dC1hbm5vdGF0aW9uJylcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGRlbGV0ZSBlbGVtZW50IGVudHJ5LCBvbmx5IHNob3cgaWYgYWxsb3dlZCBieSBydWxlc1xuICB2YXIgZGVsZXRlQWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmRlbGV0ZScsIHsgZWxlbWVudHM6IFsgZWxlbWVudCBdIH0pO1xuXG4gIGlmIChpc0FycmF5KGRlbGV0ZUFsbG93ZWQpKSB7XG5cbiAgICAvLyB3YXMgdGhlIGVsZW1lbnQgcmV0dXJuZWQgYXMgYSBkZWxldGlvbiBjYW5kaWRhdGU/XG4gICAgZGVsZXRlQWxsb3dlZCA9IGRlbGV0ZUFsbG93ZWRbMF0gPT09IGVsZW1lbnQ7XG4gIH1cblxuICBpZiAoZGVsZXRlQWxsb3dlZCkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnZGVsZXRlJzoge1xuICAgICAgICBncm91cDogJ2VkaXQnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhc2gnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdSZW1vdmUnKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IHJlbW92ZUVsZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzRXZlbnRUeXBlKGV2ZW50Qm8sIHR5cGUsIGRlZmluaXRpb24pIHtcblxuICB2YXIgaXNUeXBlID0gZXZlbnRCby4kaW5zdGFuY2VPZih0eXBlKTtcbiAgdmFyIGlzRGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gIHZhciBkZWZpbml0aW9ucyA9IGV2ZW50Qm8uZXZlbnREZWZpbml0aW9ucyB8fCBbXTtcbiAgZm9yRWFjaChkZWZpbml0aW9ucywgZnVuY3Rpb24oZGVmKSB7XG4gICAgaWYgKGRlZi4kdHlwZSA9PT0gZGVmaW5pdGlvbikge1xuICAgICAgaXNEZWZpbml0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1R5cGUgJiYgaXNEZWZpbml0aW9uO1xufVxuIiwiaW1wb3J0IERpcmVjdEVkaXRpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZyc7XG5pbXBvcnQgQ29udGV4dFBhZE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZCc7XG5pbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlbGVjdGlvbic7XG5pbXBvcnQgQ29ubmVjdE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0JztcbmltcG9ydCBDcmVhdGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlJztcbmltcG9ydCBQb3B1cE1lbnVNb2R1bGUgZnJvbSAnLi4vcG9wdXAtbWVudSc7XG5cbmltcG9ydCBDb250ZXh0UGFkUHJvdmlkZXIgZnJvbSAnLi9Db250ZXh0UGFkUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRGlyZWN0RWRpdGluZ01vZHVsZSxcbiAgICBDb250ZXh0UGFkTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZSxcbiAgICBDb25uZWN0TW9kdWxlLFxuICAgIENyZWF0ZU1vZHVsZSxcbiAgICBQb3B1cE1lbnVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2NvbnRleHRQYWRQcm92aWRlcicgXSxcbiAgY29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQ29udGV4dFBhZFByb3ZpZGVyIF1cbn07IiwiaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNVbmRlZmluZWQsXG4gIG9taXQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZSwgdGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XG4gIGlmICghaXNBcnJheShwcm9wZXJ0aWVzKSkge1xuICAgIHByb3BlcnRpZXMgPSBbIHByb3BlcnRpZXMgXTtcbiAgfVxuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHNvdXJjZVtwcm9wZXJ0eV0pKSB7XG4gICAgICB0YXJnZXRbcHJvcGVydHldID0gc291cmNlW3Byb3BlcnR5XTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcbiAgaWYgKCFpc0FycmF5KHByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydGllcyA9IFsgcHJvcGVydGllcyBdO1xuICB9XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0eSkge1xuICAgIGlmIChlbGVtZW50W3Byb3BlcnR5XSkge1xuICAgICAgZGVsZXRlIGVsZW1lbnRbcHJvcGVydHldO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA3NTA7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkNvcHlQYXN0ZShicG1uRmFjdG9yeSwgZXZlbnRCdXMsIG1vZGRsZUNvcHkpIHtcblxuICBldmVudEJ1cy5vbignY29weVBhc3RlLmNvcHlFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLm9sZEJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICBkZXNjcmlwdG9yLnR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBjb3B5UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgZGVzY3JpcHRvciwgJ25hbWUnKTtcblxuICAgIGRlc2NyaXB0b3IuZGkgPSB7fTtcblxuICAgIC8vIGZpbGwgYW5kIHN0cm9rZSB3aWxsIGJlIHNldCB0byBESVxuICAgIGNvcHlQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LmRpLCBkZXNjcmlwdG9yLmRpLCBbXG4gICAgICAnZmlsbCcsXG4gICAgICAnc3Ryb2tlJ1xuICAgIF0pO1xuXG4gICAgY29weVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QuZGksIGRlc2NyaXB0b3IsICdpc0V4cGFuZGVkJyk7XG5cbiAgICBpZiAoaXNMYWJlbChkZXNjcmlwdG9yKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBzZXF1ZW5jZSBmbG93XG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LmRlZmF1bHQpIHtcbiAgICAgIGRlc2NyaXB0b3IuZGVmYXVsdCA9IGJ1c2luZXNzT2JqZWN0LmRlZmF1bHQuaWQ7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQucHJvcGVydHksXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lLFxuICAgICAgICBicG1uUHJvY2VzcztcblxuICAgIGlmIChcbiAgICAgIHByb3BlcnR5TmFtZSA9PT0gJ3Byb2Nlc3NSZWYnICYmXG4gICAgICBpcyhwYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiZcbiAgICAgIGlzKHByb3BlcnR5LCAnYnBtbjpQcm9jZXNzJylcbiAgICApIHtcbiAgICAgIGJwbW5Qcm9jZXNzID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlByb2Nlc3MnKTtcblxuICAgICAgLy8gcmV0dXJuIGNvcHkgb2YgcHJvY2Vzc1xuICAgICAgcmV0dXJuIG1vZGRsZUNvcHkuY29weUVsZW1lbnQocHJvcGVydHksIGJwbW5Qcm9jZXNzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciByZWZlcmVuY2VzO1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VzKGRlc2NyaXB0b3IsIGNhY2hlKSB7XG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZGVzY3JpcHRvcik7XG5cbiAgICAvLyBkZWZhdWx0IHNlcXVlbmNlIGZsb3dzXG4gICAgaWYgKGRlc2NyaXB0b3IuZGVmYXVsdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2Fubm90IGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICByZWZlcmVuY2VzWyBkZXNjcmlwdG9yLmRlZmF1bHQgXSA9IHtcbiAgICAgICAgZWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnR5OiAnZGVmYXVsdCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKGRlc2NyaXB0b3IuaG9zdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2FuIGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICBnZXRCdXNpbmVzc09iamVjdChkZXNjcmlwdG9yKS5hdHRhY2hlZFRvUmVmID0gZ2V0QnVzaW5lc3NPYmplY3QoY2FjaGVbIGRlc2NyaXB0b3IuaG9zdCBdKTtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VzID0gb21pdChyZWZlcmVuY2VzLCByZWR1Y2UocmVmZXJlbmNlcywgZnVuY3Rpb24oYXJyYXksIHJlZmVyZW5jZSwga2V5KSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHJlZmVyZW5jZS5lbGVtZW50LFxuICAgICAgICAgIHByb3BlcnR5ID0gcmVmZXJlbmNlLnByb3BlcnR5O1xuXG4gICAgICBpZiAoa2V5ID09PSBkZXNjcmlwdG9yLmlkKSB7XG4gICAgICAgIGVsZW1lbnRbIHByb3BlcnR5IF0gPSBidXNpbmVzc09iamVjdDtcblxuICAgICAgICBhcnJheS5wdXNoKGRlc2NyaXB0b3IuaWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfSwgW10pKTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50cycsIGZ1bmN0aW9uKCkge1xuICAgIHJlZmVyZW5jZXMgPSB7fTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGNhY2hlID0gY29udGV4dC5jYWNoZSxcbiAgICAgICAgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcbiAgICAgICAgb2xkQnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLm9sZEJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBuZXdCdXNpbmVzc09iamVjdDtcblxuICAgIC8vIGRvIE5PVCBjb3B5IGJ1c2luZXNzIG9iamVjdCBpZiBleHRlcm5hbCBsYWJlbFxuICAgIGlmIChpc0xhYmVsKGRlc2NyaXB0b3IpKSB7XG4gICAgICBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY2FjaGVbIGRlc2NyaXB0b3IubGFiZWxUYXJnZXQgXSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXdCdXNpbmVzc09iamVjdCA9IGJwbW5GYWN0b3J5LmNyZWF0ZShvbGRCdXNpbmVzc09iamVjdC4kdHlwZSk7XG5cbiAgICBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0ID0gbW9kZGxlQ29weS5jb3B5RWxlbWVudChcbiAgICAgIG9sZEJ1c2luZXNzT2JqZWN0LFxuICAgICAgbmV3QnVzaW5lc3NPYmplY3RcbiAgICApO1xuXG4gICAgLy8gcmVzb2x2ZSByZWZlcmVuY2VzIGUuZy4gZGVmYXVsdCBzZXF1ZW5jZSBmbG93XG4gICAgcmVzb2x2ZVJlZmVyZW5jZXMoZGVzY3JpcHRvciwgY2FjaGUpO1xuXG4gICAgY29weVByb3BlcnRpZXMoZGVzY3JpcHRvciwgbmV3QnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICdpc0V4cGFuZGVkJyxcbiAgICAgICduYW1lJ1xuICAgIF0pO1xuXG4gICAgcmVtb3ZlUHJvcGVydGllcyhkZXNjcmlwdG9yLCAnb2xkQnVzaW5lc3NPYmplY3QnKTtcbiAgfSk7XG5cbn1cblxuXG5CcG1uQ29weVBhc3RlLiRpbmplY3QgPSBbXG4gICdicG1uRmFjdG9yeScsXG4gICdldmVudEJ1cycsXG4gICdtb2RkbGVDb3B5J1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xufVxuIiwiaW1wb3J0IHtcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNEZWZpbmVkLFxuICBpc09iamVjdCxcbiAgbWF0Y2hQYXR0ZXJuLFxuICByZWR1Y2UsXG4gIGhhcyxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIERJU0FMTE9XRURfUFJPUEVSVElFUyA9IFtcbiAgJ2FydGlmYWN0cycsXG4gICdkYXRhSW5wdXRBc3NvY2lhdGlvbnMnLFxuICAnZGF0YU91dHB1dEFzc29jaWF0aW9ucycsXG4gICdkZWZhdWx0JyxcbiAgJ2Zsb3dFbGVtZW50cycsXG4gICdsYW5lcycsXG4gICdpbmNvbWluZycsXG4gICdvdXRnb2luZydcbl07XG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcz4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBjb250ZXh0LnByb3BlcnR5TmFtZXNcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5zb3VyY2VFbGVtZW50XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNvbnRleHQudGFyZ2V0RWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fGJvb2xlYW59IC0gUmV0dXJuIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHk+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5wYXJlbnRcbiAqIEBwYXJhbSB7Kn0gY29udGV4dC5wcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQucHJvcGVydHlOYW1lXG4gKlxuICogQHJldHVybnMgeyp8Ym9vbGVhbn0gLSBSZXR1cm4gY29waWVkIHByb3BlcnR5IG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5TZXRDb3BpZWRQcm9wZXJ0eT4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjb250ZXh0LnBhcmVudFxuICogQHBhcmFtIHsqfSBjb250ZXh0LnByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dC5wcm9wZXJ0eU5hbWVcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm4gZmFsc2UgdG8gZGlzYWxsb3dcbiAqIHNldHRpbmcgY29waWVkIHByb3BlcnR5LlxuICovXG5cbi8qKlxuICogVXRpbGl0eSBmb3IgY29weWluZyBtb2RlbCBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGVsZW1lbnQgdG8gdGFyZ2V0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge0JwbW5Nb2RkbGV9IG1vZGRsZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RkbGVDb3B5KGV2ZW50QnVzLCBicG1uRmFjdG9yeSwgbW9kZGxlKSB7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcblxuICAvLyBjb3B5IGV4dGVuc2lvbiBlbGVtZW50cyBsYXN0XG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0aWVzJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWVzID0gY29udGV4dC5wcm9wZXJ0eU5hbWVzO1xuXG4gICAgaWYgKCFwcm9wZXJ0eU5hbWVzIHx8ICFwcm9wZXJ0eU5hbWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0QnkocHJvcGVydHlOYW1lcywgZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7XG4gICAgICByZXR1cm4gcHJvcGVydHlOYW1lID09PSAnZXh0ZW5zaW9uRWxlbWVudHMnO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBkZWZhdWx0IGNoZWNrIHdoZXRoZXIgcHJvcGVydHkgY2FuIGJlIGNvcGllZFxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwYXJlbnREZXNjcmlwdG9yID0gaXNPYmplY3QocGFyZW50KSAmJiBwYXJlbnQuJGRlc2NyaXB0b3IsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHByb3BlcnR5TmFtZSAmJiBESVNBTExPV0VEX1BST1BFUlRJRVMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuXG4gICAgICAvLyBkaXNhbGxvdyBjb3B5aW5nIHByb3BlcnR5XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5TmFtZSAmJlxuICAgICAgcGFyZW50RGVzY3JpcHRvciAmJlxuICAgICAgIWZpbmQocGFyZW50RGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBtYXRjaFBhdHRlcm4oeyBuYW1lOiBwcm9wZXJ0eU5hbWUgfSkpKSB7XG5cbiAgICAgIC8vIGRpc2FsbG93IGNvcHlpbmcgcHJvcGVydHlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGRvIE5PVCBhbGxvdyB0byBjb3B5IGVtcHR5IGV4dGVuc2lvbiBlbGVtZW50c1xuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5TZXRDb3BpZWRQcm9wZXJ0eScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xuXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpICYmICghcHJvcGVydHkudmFsdWVzIHx8ICFwcm9wZXJ0eS52YWx1ZXMubGVuZ3RoKSkge1xuXG4gICAgICAvLyBkaXNhbGxvdyBzZXR0aW5nIGNvcGllZCBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cbk1vZGRsZUNvcHkuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ21vZGRsZSdcbl07XG5cbi8qKlxuICogQ29weSBtb2RlbCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBlbGVtZW50IHRvIHRhcmdldCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gc291cmNlRWxlbWVudFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSB0YXJnZXRFbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtwcm9wZXJ0eU5hbWVzXVxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH1cbiAqL1xuTW9kZGxlQ29weS5wcm90b3R5cGUuY29weUVsZW1lbnQgPSBmdW5jdGlvbihzb3VyY2VFbGVtZW50LCB0YXJnZXRFbGVtZW50LCBwcm9wZXJ0eU5hbWVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAocHJvcGVydHlOYW1lcyAmJiAhaXNBcnJheShwcm9wZXJ0eU5hbWVzKSkge1xuICAgIHByb3BlcnR5TmFtZXMgPSBbIHByb3BlcnR5TmFtZXMgXTtcbiAgfVxuXG4gIHByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVzIHx8IGdldFByb3BlcnR5TmFtZXMoc291cmNlRWxlbWVudC4kZGVzY3JpcHRvcik7XG5cbiAgdmFyIGNhbkNvcHlQcm9wZXJ0aWVzID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcycsIHtcbiAgICBwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzLFxuICAgIHNvdXJjZUVsZW1lbnQ6IHNvdXJjZUVsZW1lbnQsXG4gICAgdGFyZ2V0RWxlbWVudDogdGFyZ2V0RWxlbWVudFxuICB9KTtcblxuICBpZiAoY2FuQ29weVByb3BlcnRpZXMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICBpZiAoaXNBcnJheShjYW5Db3B5UHJvcGVydGllcykpIHtcbiAgICBwcm9wZXJ0eU5hbWVzID0gY2FuQ29weVByb3BlcnRpZXM7XG4gIH1cblxuICAvLyBjb3B5IHByb3BlcnRpZXNcbiAgZm9yRWFjaChwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHtcbiAgICB2YXIgc291cmNlUHJvcGVydHk7XG5cbiAgICBpZiAoaGFzKHNvdXJjZUVsZW1lbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlRWxlbWVudC5nZXQocHJvcGVydHlOYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgY29waWVkUHJvcGVydHkgPSBzZWxmLmNvcHlQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0RWxlbWVudCwgcHJvcGVydHlOYW1lKTtcblxuICAgIHZhciBjYW5TZXRQcm9wZXJ0eSA9IHNlbGYuX2V2ZW50QnVzLmZpcmUoJ21vZGRsZUNvcHkuY2FuU2V0Q29waWVkUHJvcGVydHknLCB7XG4gICAgICBwYXJlbnQ6IHRhcmdldEVsZW1lbnQsXG4gICAgICBwcm9wZXJ0eTogY29waWVkUHJvcGVydHksXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZVxuICAgIH0pO1xuXG4gICAgaWYgKGNhblNldFByb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQoY29waWVkUHJvcGVydHkpKSB7XG4gICAgICB0YXJnZXRFbGVtZW50LnNldChwcm9wZXJ0eU5hbWUsIGNvcGllZFByb3BlcnR5KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXRFbGVtZW50O1xufTtcblxuLyoqXG4gKiBDb3B5IG1vZGVsIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydHlcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lXG4gKlxuICogQHJldHVybnMgeyp9XG4gKi9cbk1vZGRsZUNvcHkucHJvdG90eXBlLmNvcHlQcm9wZXJ0eSA9IGZ1bmN0aW9uKHByb3BlcnR5LCBwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gYWxsb3cgb3RoZXJzIHRvIGNvcHkgcHJvcGVydHlcbiAgdmFyIGNvcGllZFByb3BlcnR5ID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCB7XG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lXG4gIH0pO1xuXG4gIC8vIHJldHVybiBpZiBjb3B5aW5nIGlzIE5PVCBhbGxvd2VkXG4gIGlmIChjb3BpZWRQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICBpZiAoaXNPYmplY3QoY29waWVkUHJvcGVydHkpICYmIGNvcGllZFByb3BlcnR5LiR0eXBlICYmICFjb3BpZWRQcm9wZXJ0eS4kcGFyZW50KSB7XG4gICAgICBjb3BpZWRQcm9wZXJ0eS4kcGFyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBjb3BpZWRQcm9wZXJ0eTtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0eURlc2NyaXB0b3IgPSB0aGlzLl9tb2RkbGUuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcblxuICAvLyBkbyBOT1QgY29weSBJZHMgYW5kIHJlZmVyZW5jZXNcbiAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5pc0lkIHx8IHByb3BlcnR5RGVzY3JpcHRvci5pc1JlZmVyZW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNvcHkgYXJyYXlzXG4gIGlmIChpc0FycmF5KHByb3BlcnR5KSkge1xuICAgIHJldHVybiByZWR1Y2UocHJvcGVydHksIGZ1bmN0aW9uKGNoaWxkUHJvcGVydGllcywgY2hpbGRQcm9wZXJ0eSkge1xuXG4gICAgICAvLyByZWN1cnNpb25cbiAgICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5UHJvcGVydHkoY2hpbGRQcm9wZXJ0eSwgcGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAvLyBjb3B5aW5nIG1pZ2h0IE5PVCBiZSBhbGxvd2VkXG4gICAgICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICAgICAgY29waWVkUHJvcGVydHkuJHBhcmVudCA9IHBhcmVudDtcblxuICAgICAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzLmNvbmNhdChjb3BpZWRQcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZFByb3BlcnRpZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gY29weSBtb2RlbCBlbGVtZW50c1xuICBpZiAoaXNPYmplY3QocHJvcGVydHkpICYmIHByb3BlcnR5LiR0eXBlKSB7XG4gICAgaWYgKHRoaXMuX21vZGRsZS5nZXRFbGVtZW50RGVzY3JpcHRvcihwcm9wZXJ0eSkuaXNHZW5lcmljKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29waWVkUHJvcGVydHkgPSBzZWxmLl9icG1uRmFjdG9yeS5jcmVhdGUocHJvcGVydHkuJHR5cGUpO1xuXG4gICAgY29waWVkUHJvcGVydHkuJHBhcmVudCA9IHBhcmVudDtcblxuICAgIC8vIHJlY3Vyc2lvblxuICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5RWxlbWVudChwcm9wZXJ0eSwgY29waWVkUHJvcGVydHkpO1xuXG4gICAgcmV0dXJuIGNvcGllZFByb3BlcnR5O1xuICB9XG5cbiAgLy8gY29weSBwcmltaXRpdmUgcHJvcGVydGllc1xuICByZXR1cm4gcHJvcGVydHk7XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZXMoZGVzY3JpcHRvciwga2VlcERlZmF1bHRQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiByZWR1Y2UoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkge1xuXG4gICAgaWYgKGtlZXBEZWZhdWx0UHJvcGVydGllcyAmJiBwcm9wZXJ0eS5kZWZhdWx0KSB7XG4gICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcy5jb25jYXQocHJvcGVydHkubmFtZSk7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gaXMoZWxlbWVudCwgdHlwZSkge1xuICByZXR1cm4gZWxlbWVudCAmJiAodHlwZW9mIGVsZW1lbnQuJGluc3RhbmNlT2YgPT09ICdmdW5jdGlvbicpICYmIGVsZW1lbnQuJGluc3RhbmNlT2YodHlwZSk7XG59IiwiaW1wb3J0IENvcHlQYXN0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlJztcblxuaW1wb3J0IEJwbW5Db3B5UGFzdGUgZnJvbSAnLi9CcG1uQ29weVBhc3RlJztcbmltcG9ydCBNb2RkbGVDb3B5IGZyb20gJy4vTW9kZGxlQ29weSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDb3B5UGFzdGVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5Db3B5UGFzdGUnLCAnbW9kZGxlQ29weScgXSxcbiAgYnBtbkNvcHlQYXN0ZTogWyAndHlwZScsIEJwbW5Db3B5UGFzdGUgXSxcbiAgbW9kZGxlQ29weTogWyAndHlwZScsIE1vZGRsZUNvcHkgXVxufTtcbiIsImltcG9ydCB7IGdldERpIH0gZnJvbSAnLi4vLi4vZHJhdy9CcG1uUmVuZGVyVXRpbCc7XG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBzZWxmQW5kQWxsQ2hpbGRyZW4gfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5EaU9yZGVyaW5nKGV2ZW50QnVzLCBjYW52YXMpIHtcblxuICBldmVudEJ1cy5vbignc2F2ZVhNTC5zdGFydCcsIEhJR0hfUFJJT1JJVFksIG9yZGVyRGkpO1xuXG4gIGZ1bmN0aW9uIG9yZGVyRGkoKSB7XG4gICAgdmFyIHJvb3QgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgcm9vdERpID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdCkuZGksXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBkaUVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMgPSBzZWxmQW5kQWxsQ2hpbGRyZW4oWyByb290IF0sIGZhbHNlKTtcblxuICAgIC8vIG9ubHkgYnBtbmRpOlNoYXBlIGFuZCBicG1uZGk6RWRnZSBjYW4gYmUgZGlyZWN0IGNoaWxkcmVuIG9mIGJwbW5kaTpQbGFuZVxuICAgIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdCAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbiAgICB9KTtcblxuICAgIGRpRWxlbWVudHMgPSBtYXAoZWxlbWVudHMsIGdldERpKTtcblxuICAgIHJvb3REaS5zZXQoJ3BsYW5lRWxlbWVudCcsIGRpRWxlbWVudHMpO1xuICB9XG59XG5cbkJwbW5EaU9yZGVyaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG4iLCJpbXBvcnQgQnBtbkRpT3JkZXJpbmcgZnJvbSAnLi4vZGktb3JkZXJpbmcvQnBtbkRpT3JkZXJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2JwbW5EaU9yZGVyaW5nJ1xuICBdLFxuICBicG1uRGlPcmRlcmluZzogWyAndHlwZScsIEJwbW5EaU9yZGVyaW5nIF1cbn07IiwiaW1wb3J0IHtcbiAgZmlsdGVyXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5cbi8qKlxuICogUmVnaXN0ZXJzIGVsZW1lbnQgZXhjbHVkZSBmaWx0ZXJzIGZvciBlbGVtZW50cyB0aGF0XG4gKiBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzKGRpc3RyaWJ1dGVFbGVtZW50cykge1xuXG4gIGRpc3RyaWJ1dGVFbGVtZW50cy5yZWdpc3RlckZpbHRlcihmdW5jdGlvbihlbGVtZW50cykge1xuICAgIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5ub3REaXN0cmlidXRlID0gaXNBbnkoZWxlbWVudCwgW1xuICAgICAgICAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgICAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkxhbmUnLFxuICAgICAgICAnYnBtbjpNZXNzYWdlRmxvdycsXG4gICAgICAgICdicG1uOlBhcnRpY2lwYW50JyxcbiAgICAgICAgJ2JwbW46U2VxdWVuY2VGbG93JyxcbiAgICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuICEoZWxlbWVudC5sYWJlbFRhcmdldCB8fCBjYW5ub3REaXN0cmlidXRlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbkJwbW5EaXN0cmlidXRlRWxlbWVudHMuJGluamVjdCA9IFsgJ2Rpc3RyaWJ1dGVFbGVtZW50cycgXTsiLCJpbXBvcnQgRGlzdHJpYnV0ZUVsZW1lbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Rpc3RyaWJ1dGUtZWxlbWVudHMnO1xuXG5pbXBvcnQgQnBtbkRpc3RyaWJ1dGVFbGVtZW50cyBmcm9tICcuL0JwbW5EaXN0cmlidXRlRWxlbWVudHMnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEaXN0cmlidXRlRWxlbWVudHNNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5EaXN0cmlidXRlRWxlbWVudHMnIF0sXG4gIGJwbW5EaXN0cmlidXRlRWxlbWVudHM6IFsgJ3R5cGUnLCBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzIF1cbn07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgRWRpdG9yQWN0aW9ucyBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zJztcblxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QkJveFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbmQgZXhlY3V0ZXMgQlBNTiBzcGVjaWZpYyBlZGl0b3IgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRWRpdG9yQWN0aW9ucyhpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoRWRpdG9yQWN0aW9ucywgdGhpcyk7XG59XG5cbmluaGVyaXRzKEJwbW5FZGl0b3JBY3Rpb25zLCBFZGl0b3JBY3Rpb25zKTtcblxuQnBtbkVkaXRvckFjdGlvbnMuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciBkZWZhdWx0IGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuQnBtbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zID0gZnVuY3Rpb24oaW5qZWN0b3IpIHtcblxuICAvLyAoMCkgaW52b2tlIHN1cGVyIG1ldGhvZFxuXG4gIEVkaXRvckFjdGlvbnMucHJvdG90eXBlLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zLmNhbGwodGhpcywgaW5qZWN0b3IpO1xuXG4gIC8vICgxKSByZXRyaWV2ZSBvcHRpb25hbCBjb21wb25lbnRzIHRvIGludGVncmF0ZSB3aXRoXG5cbiAgdmFyIGNhbnZhcyA9IGluamVjdG9yLmdldCgnY2FudmFzJywgZmFsc2UpO1xuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gaW5qZWN0b3IuZ2V0KCdlbGVtZW50UmVnaXN0cnknLCBmYWxzZSk7XG4gIHZhciBzZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ3NlbGVjdGlvbicsIGZhbHNlKTtcbiAgdmFyIHNwYWNlVG9vbCA9IGluamVjdG9yLmdldCgnc3BhY2VUb29sJywgZmFsc2UpO1xuICB2YXIgbGFzc29Ub29sID0gaW5qZWN0b3IuZ2V0KCdsYXNzb1Rvb2wnLCBmYWxzZSk7XG4gIHZhciBoYW5kVG9vbCA9IGluamVjdG9yLmdldCgnaGFuZFRvb2wnLCBmYWxzZSk7XG4gIHZhciBnbG9iYWxDb25uZWN0ID0gaW5qZWN0b3IuZ2V0KCdnbG9iYWxDb25uZWN0JywgZmFsc2UpO1xuICB2YXIgZGlzdHJpYnV0ZUVsZW1lbnRzID0gaW5qZWN0b3IuZ2V0KCdkaXN0cmlidXRlRWxlbWVudHMnLCBmYWxzZSk7XG4gIHZhciBhbGlnbkVsZW1lbnRzID0gaW5qZWN0b3IuZ2V0KCdhbGlnbkVsZW1lbnRzJywgZmFsc2UpO1xuICB2YXIgZGlyZWN0RWRpdGluZyA9IGluamVjdG9yLmdldCgnZGlyZWN0RWRpdGluZycsIGZhbHNlKTtcbiAgdmFyIHNlYXJjaFBhZCA9IGluamVjdG9yLmdldCgnc2VhcmNoUGFkJywgZmFsc2UpO1xuICB2YXIgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJywgZmFsc2UpO1xuXG4gIC8vICgyKSBjaGVjayBjb21wb25lbnRzIGFuZCByZWdpc3RlciBhY3Rpb25zXG5cbiAgaWYgKGNhbnZhcyAmJiBlbGVtZW50UmVnaXN0cnkgJiYgc2VsZWN0aW9uKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NlbGVjdEVsZW1lbnRzJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlbGVjdCBhbGwgZWxlbWVudHMgZXhjZXB0IGZvciB0aGUgaW52aXNpYmxlXG4gICAgICAvLyByb290IGVsZW1lbnRcbiAgICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT09IHJvb3RFbGVtZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc3BhY2VUb29sKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NwYWNlVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgc3BhY2VUb29sLnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGxhc3NvVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdsYXNzb1Rvb2wnLCBmdW5jdGlvbigpIHtcbiAgICAgIGxhc3NvVG9vbC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYW5kVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdoYW5kVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaGFuZFRvb2wudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZ2xvYmFsQ29ubmVjdCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdnbG9iYWxDb25uZWN0VG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZ2xvYmFsQ29ubmVjdC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgZGlzdHJpYnV0ZUVsZW1lbnRzKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ2Rpc3RyaWJ1dGVFbGVtZW50cycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpLFxuICAgICAgICAgIHR5cGUgPSBvcHRzLnR5cGU7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXN0cmlidXRlRWxlbWVudHMudHJpZ2dlcihjdXJyZW50U2VsZWN0aW9uLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgYWxpZ25FbGVtZW50cykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdhbGlnbkVsZW1lbnRzJywgZnVuY3Rpb24ob3B0cykge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCksXG4gICAgICAgICAgYWxpZ25lYWJsZUVsZW1lbnRzID0gW10sXG4gICAgICAgICAgdHlwZSA9IG9wdHMudHlwZTtcblxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIGFsaWduZWFibGVFbGVtZW50cyA9IGZpbHRlcihjdXJyZW50U2VsZWN0aW9uLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuICFpcyhlbGVtZW50LCAnYnBtbjpMYW5lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFsaWduRWxlbWVudHMudHJpZ2dlcihhbGlnbmVhYmxlRWxlbWVudHMsIHR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvbiAmJiBtb2RlbGluZykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdzZXRDb2xvcicsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpO1xuXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgbW9kZWxpbmcuc2V0Q29sb3IoY3VycmVudFNlbGVjdGlvbiwgb3B0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uICYmIGRpcmVjdEVkaXRpbmcpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignZGlyZWN0RWRpdGluZycsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXJlY3RFZGl0aW5nLmFjdGl2YXRlKGN1cnJlbnRTZWxlY3Rpb25bMF0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlYXJjaFBhZCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdmaW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWFyY2hQYWQudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY2FudmFzICYmIG1vZGVsaW5nKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ21vdmVUb09yaWdpbicsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgICAgYm91bmRpbmdCb3gsXG4gICAgICAgICAgZWxlbWVudHM7XG5cbiAgICAgIGlmIChpcyhyb290RWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdEVsZW1lbnQgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBib3VuZGluZ0JveCA9IGdldEJCb3goZWxlbWVudHMpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICB7IHg6IC1ib3VuZGluZ0JveC54LCB5OiAtYm91bmRpbmdCb3gueSB9LFxuICAgICAgICByb290RWxlbWVudFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG59OyIsImltcG9ydCBFZGl0b3JBY3Rpb25zTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zJztcblxuaW1wb3J0IEJwbW5FZGl0b3JBY3Rpb25zIGZyb20gJy4vQnBtbkVkaXRvckFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRWRpdG9yQWN0aW9uc01vZHVsZVxuICBdLFxuICBlZGl0b3JBY3Rpb25zOiBbICd0eXBlJywgQnBtbkVkaXRvckFjdGlvbnMgXVxufTtcbiIsImltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkdyaWRTbmFwcGluZyhldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuaW5pdCcsXHJcbiAgICAnc2hhcGUubW92ZS5pbml0J1xyXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBldmVudC5zaGFwZTtcclxuXHJcbiAgICBpZiAoaXNBbnkoc2hhcGUsIFtcclxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxyXG4gICAgICAnYnBtbjpTdWJQcm9jZXNzJyxcclxuICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nXHJcbiAgICBdKSkge1xyXG4gICAgICBpZiAoIWNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCkge1xyXG4gICAgICAgIGNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQuc25hcExvY2F0aW9uID0gJ3RvcC1sZWZ0JztcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuQnBtbkdyaWRTbmFwcGluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IiwiaW1wb3J0IHsgZ2V0TmV3U2hhcGVQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2F1dG8tcGxhY2UvQnBtbkF1dG9QbGFjZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgZ2V0TWlkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xyXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvUGxhY2VCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcclxuICAgICAgICBzb3VyY2VNaWQgPSBnZXRNaWQoc291cmNlKSxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XHJcblxyXG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0TmV3U2hhcGVQb3NpdGlvbihzb3VyY2UsIHNoYXBlKTtcclxuXHJcbiAgICBbICd4JywgJ3knIF0uZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XHJcbiAgICAgIHZhciBvcHRpb25zID0ge307XHJcblxyXG4gICAgICAvLyBkbyBub3Qgc25hcCBpZiB4L3kgZXF1YWxcclxuICAgICAgaWYgKHBvc2l0aW9uWyBheGlzIF0gPT09IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocG9zaXRpb25bIGF4aXMgXSA+IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgb3B0aW9ucy5taW4gPSBwb3NpdGlvblsgYXhpcyBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbnMubWF4ID0gcG9zaXRpb25bIGF4aXMgXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XHJcblxyXG4gICAgICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuICAgICAgICAgIG9wdGlvbnMub2Zmc2V0ID0gLXNoYXBlLndpZHRoIC8gMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3B0aW9ucy5vZmZzZXQgPSAtc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBwb3NpdGlvblsgYXhpcyBdID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShwb3NpdGlvblsgYXhpcyBdLCBvcHRpb25zKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBtdXN0IGJlIHJldHVybmVkIHRvIGJlIGNvbnNpZGVyZWQgYnkgYXV0byBwbGFjZVxyXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gIH0pO1xyXG59XHJcblxyXG5BdXRvUGxhY2VCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyaWRTbmFwcGluZydcclxuXTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNIb3Jpem9udGFsKGF4aXMpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnO1xyXG59IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTc1MDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yKGNhbnZhcywgZXZlbnRCdXMsIGdyaWRTbmFwcGluZykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuc3RhcnQnLFxyXG4gICAgJ3NoYXBlLm1vdmUuc3RhcnQnXHJcbiAgXSwgSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgfHxcclxuICAgICAgIWlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHxcclxuICAgICAgIXJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNyZWF0ZUNvbnN0cmFpbnRzID0gY29udGV4dC5jcmVhdGVDb25zdHJhaW50cztcclxuXHJcbiAgICBpZiAoIWNyZWF0ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzaGFwZS53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUud2lkdGgsIHsgbWluOiBzaGFwZS53aWR0aCB9KTtcclxuICAgIHNoYXBlLmhlaWdodCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUuaGVpZ2h0LCB7IG1pbjogc2hhcGUuaGVpZ2h0IH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJ1xyXG5dOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBwb2ludHNBbGlnbmVkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMzAwMDtcblxuXG4vKipcbiAqIFNuYXBzIGNvbm5lY3Rpb25zIHdpdGggTWFuaGF0dGFuIGxheW91dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBncmlkU25hcHBpbmcsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9ncmlkU25hcHBpbmcgPSBncmlkU25hcHBpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLmxheW91dCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGhpbnRzLmNvbm5lY3Rpb25FbmQgfHwgaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWhhc01pZGRsZVNlZ21lbnRzKHdheXBvaW50cykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgc2VsZi5zbmFwTWlkZGxlU2VnbWVudHMod2F5cG9pbnRzKSk7XG4gIH0pO1xufVxuXG5MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2dyaWRTbmFwcGluZycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKExheW91dENvbm5lY3Rpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLyoqXG4gKiBTbmFwIG1pZGRsZSBzZWdtZW50cyBvZiBhIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxQb2ludD59XG4gKi9cbkxheW91dENvbm5lY3Rpb25CZWhhdmlvci5wcm90b3R5cGUuc25hcE1pZGRsZVNlZ21lbnRzID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmcsXG4gICAgICBzbmFwcGVkO1xuXG4gIHdheXBvaW50cyA9IHdheXBvaW50cy5zbGljZSgpO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgd2F5cG9pbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuXG4gICAgc25hcHBlZCA9IHNuYXBTZWdtZW50KGdyaWRTbmFwcGluZywgd2F5cG9pbnRzW2ldLCB3YXlwb2ludHNbaSArIDFdKTtcblxuICAgIHdheXBvaW50c1tpXSA9IHNuYXBwZWRbMF07XG4gICAgd2F5cG9pbnRzW2kgKyAxXSA9IHNuYXBwZWRbMV07XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgY29ubmVjdGlvbiBoYXMgYSBtaWRkbGUgc2VnbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gd2F5cG9pbnRzXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc01pZGRsZVNlZ21lbnRzKHdheXBvaW50cykge1xuICByZXR1cm4gd2F5cG9pbnRzLmxlbmd0aCA+IDM7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBhbGlnbm1lbnQgaXMgaG9yaXpvbnRhbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25lZFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBob3Jpem9udGFsbHlBbGlnbmVkKGFsaWduZWQpIHtcbiAgcmV0dXJuIGFsaWduZWQgPT09ICdoJztcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIGFsaWdubWVudCBpcyB2ZXJ0aWNhbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25lZFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSB7XG4gIHJldHVybiBhbGlnbmVkID09PSAndic7XG59XG5cbi8qKlxuICogR2V0IG1pZGRsZSBzZWdtZW50cyBmcm9tIGEgZ2l2ZW4gY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHNuYXBTZWdtZW50KGdyaWRTbmFwcGluZywgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSB7XG5cbiAgdmFyIGFsaWduZWQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgdmFyIHNuYXBwZWQgPSB7fTtcblxuICBpZiAoaG9yaXpvbnRhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCBob3Jpem9udGFsbHlcbiAgICBzbmFwcGVkLnkgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKHNlZ21lbnRTdGFydC55KTtcbiAgfVxuXG4gIGlmICh2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCB2ZXJ0aWNhbGx5XG4gICAgc25hcHBlZC54ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShzZWdtZW50U3RhcnQueCk7XG4gIH1cblxuICBpZiAoJ3gnIGluIHNuYXBwZWQgfHwgJ3knIGluIHNuYXBwZWQpIHtcbiAgICBzZWdtZW50U3RhcnQgPSBhc3NpZ24oe30sIHNlZ21lbnRTdGFydCwgc25hcHBlZCk7XG4gICAgc2VnbWVudEVuZCA9IGFzc2lnbih7fSwgc2VnbWVudEVuZCwgc25hcHBlZCk7XG4gIH1cblxuICByZXR1cm4gWyBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQgXTtcbn0iLCJpbXBvcnQgQXV0b1BsYWNlQmVoYXZpb3IgZnJvbSAnLi9BdXRvUGxhY2VCZWhhdmlvcic7XHJcbmltcG9ydCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcic7XHJcbmltcG9ydCBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9faW5pdF9fOiBbXHJcbiAgICAnZ3JpZFNuYXBwaW5nQXV0b1BsYWNlQmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ0xheW91dENvbm5lY3Rpb25CZWhhdmlvcicsXHJcbiAgXSxcclxuICBncmlkU25hcHBpbmdBdXRvUGxhY2VCZWhhdmlvcjogWyAndHlwZScsIEF1dG9QbGFjZUJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcjogWyAndHlwZScsIENyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IgXSxcclxuICBncmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgXVxyXG59OyIsImltcG9ydCBCcG1uR3JpZFNuYXBwaW5nIGZyb20gJy4vQnBtbkdyaWRTbmFwcGluZyc7XHJcbmltcG9ydCBHcmlkU25hcHBpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZyc7XHJcblxyXG5pbXBvcnQgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgZnJvbSAnLi9iZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19kZXBlbmRzX186IFtcclxuICAgIEdyaWRTbmFwcGluZ01vZHVsZSxcclxuICAgIEdyaWRTbmFwcGluZ0JlaGF2aW9yTW9kdWxlXHJcbiAgXSxcclxuICBfX2luaXRfXzogWyAnYnBtbkdyaWRTbmFwcGluZycgXSxcclxuICBicG1uR3JpZFNuYXBwaW5nOiBbICd0eXBlJywgQnBtbkdyaWRTbmFwcGluZyBdXHJcbn07IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbnZhciBMQUJFTF9XSURUSCA9IDMwLFxuICAgIExBQkVMX0hFSUdIVCA9IDMwO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyBoaXQgem9uZXMgYW5kIGludGVyYWN0aW9uIGZpeGVzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0ludGVyYWN0aW9uRXZlbnRzfSBpbnRlcmFjdGlvbkV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uSW50ZXJhY3Rpb25FdmVudHMoZXZlbnRCdXMsIGludGVyYWN0aW9uRXZlbnRzKSB7XG5cbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMgPSBpbnRlcmFjdGlvbkV2ZW50cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLFxuICAgICdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnXG4gIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gY29udGV4dC5nZng7XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpKSB7XG4gICAgICByZXR1cm4gc2VsZi5jcmVhdGVQYXJ0aWNpcGFudEhpdChlbGVtZW50LCBnZngpO1xuICAgIH0gZWxzZVxuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGlmIChpc0V4cGFuZGVkKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNyZWF0ZVBhcnRpY2lwYW50SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgICBpZiAoaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVTdWJQcm9jZXNzSGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxufVxuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2ludGVyYWN0aW9uRXZlbnRzJ1xuXTtcblxuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRIaXQgPSBmdW5jdGlvbihlbGVtZW50LCBnZngpIHtcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMucmVtb3ZlSGl0cyhnZngpO1xuXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLmNyZWF0ZVBhcnRpY2lwYW50SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG5cbiAgLy8gcmVtb3ZlIGV4aXN0aW5nIGhpdHNcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMucmVtb3ZlSGl0cyhnZngpO1xuXG4gIC8vIGFkZCBvdXRsaW5lIGhpdFxuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVCb3hIaXQoZ2Z4LCAnY2xpY2stc3Ryb2tlJywge1xuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgfSk7XG5cbiAgLy8gYWRkIGxhYmVsIGhpdFxuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVCb3hIaXQoZ2Z4LCAnYWxsJywge1xuICAgIHdpZHRoOiBMQUJFTF9XSURUSCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGluZGljYXRlIHRoYXQgd2UgY3JlYXRlZCBhIGhpdFxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkJwbW5JbnRlcmFjdGlvbkV2ZW50cy5wcm90b3R5cGUuY3JlYXRlU3ViUHJvY2Vzc0hpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gIC8vIHJlbW92ZSBleGlzdGluZyBoaXRzXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLnJlbW92ZUhpdHMoZ2Z4KTtcblxuICAvLyBhZGQgb3V0bGluZSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2NsaWNrLXN0cm9rZScsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGFkZCBsYWJlbCBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2FsbCcsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IExBQkVMX0hFSUdIVFxuICB9KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59OyIsImltcG9ydCBCcG1uSW50ZXJhY3Rpb25FdmVudHMgZnJvbSAnLi9CcG1uSW50ZXJhY3Rpb25FdmVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdicG1uSW50ZXJhY3Rpb25FdmVudHMnIF0sXG4gIGJwbW5JbnRlcmFjdGlvbkV2ZW50czogWyAndHlwZScsIEJwbW5JbnRlcmFjdGlvbkV2ZW50cyBdXG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBLZXlib2FyZEJpbmRpbmdzIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0tleWJvYXJkQmluZGluZ3MnO1xuXG5cbi8qKlxuICogQlBNTiAyLjAgc3BlY2lmaWMga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbktleWJvYXJkQmluZGluZ3MoaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKEtleWJvYXJkQmluZGluZ3MsIHRoaXMpO1xufVxuXG5pbmhlcml0cyhCcG1uS2V5Ym9hcmRCaW5kaW5ncywgS2V5Ym9hcmRCaW5kaW5ncyk7XG5cbkJwbW5LZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5CcG1uS2V5Ym9hcmRCaW5kaW5ncy5wcm90b3R5cGUucmVnaXN0ZXJCaW5kaW5ncyA9IGZ1bmN0aW9uKGtleWJvYXJkLCBlZGl0b3JBY3Rpb25zKSB7XG5cbiAgLy8gaW5oZXJpdCBkZWZhdWx0IGJpbmRpbmdzXG4gIEtleWJvYXJkQmluZGluZ3MucHJvdG90eXBlLnJlZ2lzdGVyQmluZGluZ3MuY2FsbCh0aGlzLCBrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEFkZCBrZXlib2FyZCBiaW5kaW5nIGlmIHJlc3BlY3RpdmUgZWRpdG9yIGFjdGlvblxuICAgKiBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgYmluZGluZ1xuICAgKi9cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoYWN0aW9uLCBmbikge1xuXG4gICAgaWYgKGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICAgIGtleWJvYXJkLmFkZExpc3RlbmVyKGZuKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzXG4gIC8vIENUUkwgKyBBXG4gIGFkZExpc3RlbmVyKCdzZWxlY3RFbGVtZW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydhJywgJ0EnXSwgZXZlbnQpICYmIGtleWJvYXJkLmlzQ21kKGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdzZWxlY3RFbGVtZW50cycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHNlYXJjaCBsYWJlbHNcbiAgLy8gQ1RSTCArIEZcbiAgYWRkTGlzdGVuZXIoJ2ZpbmQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnZicsICdGJ10sIGV2ZW50KSAmJiBrZXlib2FyZC5pc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZmluZCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIHNwYWNlIHRvb2xcbiAgLy8gU1xuICBhZGRMaXN0ZW5lcignc3BhY2VUb29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydzJywgJ1MnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3NwYWNlVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGxhc3NvIHRvb2xcbiAgLy8gTFxuICBhZGRMaXN0ZW5lcignbGFzc29Ub29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydsJywgJ0wnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2xhc3NvVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGhhbmQgdG9vbFxuICAvLyBIXG4gIGFkZExpc3RlbmVyKCdoYW5kVG9vbCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnaCcsICdIJ10sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdoYW5kVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGdsb2JhbCBjb25uZWN0IHRvb2xcbiAgLy8gQ1xuICBhZGRMaXN0ZW5lcignZ2xvYmFsQ29ubmVjdFRvb2wnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmhhc01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlib2FyZC5pc0tleShbJ2MnLCAnQyddLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZ2xvYmFsQ29ubmVjdFRvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBkaXJlY3QgZWRpdGluZ1xuICAvLyBFXG4gIGFkZExpc3RlbmVyKCdkaXJlY3RFZGl0aW5nJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydlJywgJ0UnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2RpcmVjdEVkaXRpbmcnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxufTsiLCJpbXBvcnQgS2V5Ym9hcmRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQnO1xuXG5pbXBvcnQgQnBtbktleWJvYXJkQmluZGluZ3MgZnJvbSAnLi9CcG1uS2V5Ym9hcmRCaW5kaW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBLZXlib2FyZE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAna2V5Ym9hcmRCaW5kaW5ncycgXSxcbiAga2V5Ym9hcmRCaW5kaW5nczogWyAndHlwZScsIEJwbW5LZXlib2FyZEJpbmRpbmdzIF1cbn07XG4iLCJpbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxudmFyIE1BUktFUl9ISURERU4gPSAnZGpzLWVsZW1lbnQtaGlkZGVuJyxcbiAgICBNQVJLRVJfTEFCRUxfSElEREVOID0gJ2Rqcy1sYWJlbC1oaWRkZW4nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsRWRpdGluZ1ByZXZpZXcoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIHBhdGhNYXApIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGRlZmF1bHRMYXllciA9IGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKTtcblxuICB2YXIgZWxlbWVudCwgYWJzb2x1dGVFbGVtZW50QkJveCwgZ2Z4O1xuXG4gIGV2ZW50QnVzLm9uKCdkaXJlY3RFZGl0aW5nLmFjdGl2YXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBhY3RpdmVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgZWxlbWVudCA9IGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQubGFiZWwgfHwgYWN0aXZlUHJvdmlkZXIuZWxlbWVudDtcblxuICAgIC8vIHRleHQgYW5ub3RhdGlvblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBhYnNvbHV0ZUVsZW1lbnRCQm94ID0gY2FudmFzLmdldEFic29sdXRlQkJveChlbGVtZW50KTtcblxuICAgICAgZ2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgICAgIHZhciB0ZXh0UGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RFWFRfQU5OT1RBVElPTicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjAsXG4gICAgICAgICAgbXk6IDAuMFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGggPSBzZWxmLnBhdGggPSBzdmdDcmVhdGUoJ3BhdGgnKTtcblxuICAgICAgc3ZnQXR0cihwYXRoLCB7XG4gICAgICAgIGQ6IHRleHRQYXRoRGF0YSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudClcbiAgICAgIH0pO1xuXG4gICAgICBzdmdBcHBlbmQoZ2Z4LCBwYXRoKTtcblxuICAgICAgc3ZnQXBwZW5kKGRlZmF1bHRMYXllciwgZ2Z4KTtcblxuICAgICAgdHJhbnNsYXRlKGdmeCwgZWxlbWVudC54LCBlbGVtZW50LnkpO1xuICAgIH1cblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpIHx8XG4gICAgICAgIGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0hJRERFTik7XG4gICAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUYXNrJykgfHxcbiAgICAgICAgICAgICAgIGlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpIHx8XG4gICAgICAgICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgfHxcbiAgICAgICAgICAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0xBQkVMX0hJRERFTik7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZGlyZWN0RWRpdGluZy5yZXNpemUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICAvLyB0ZXh0IGFubm90YXRpb25cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgICAgdmFyIGhlaWdodCA9IGNvbnRleHQuaGVpZ2h0LFxuICAgICAgICAgIGR5ID0gY29udGV4dC5keTtcblxuICAgICAgdmFyIG5ld0VsZW1lbnRIZWlnaHQgPSBNYXRoLm1heChlbGVtZW50LmhlaWdodCAvIGFic29sdXRlRWxlbWVudEJCb3guaGVpZ2h0ICogKGhlaWdodCArIGR5KSwgMCk7XG5cbiAgICAgIHZhciB0ZXh0UGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RFWFRfQU5OT1RBVElPTicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IG5ld0VsZW1lbnRIZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMCxcbiAgICAgICAgICBteTogMC4wXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdmdBdHRyKHNlbGYucGF0aCwge1xuICAgICAgICBkOiB0ZXh0UGF0aERhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZGlyZWN0RWRpdGluZy5jb21wbGV0ZScsICdkaXJlY3RFZGl0aW5nLmNhbmNlbCcgXSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBhY3RpdmVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgaWYgKGFjdGl2ZVByb3ZpZGVyKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQubGFiZWwgfHwgYWN0aXZlUHJvdmlkZXIuZWxlbWVudCwgTUFSS0VSX0hJRERFTik7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGVsZW1lbnQsIE1BUktFUl9MQUJFTF9ISURERU4pO1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgYWJzb2x1dGVFbGVtZW50QkJveCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChnZngpIHtcbiAgICAgIHN2Z1JlbW92ZShnZngpO1xuXG4gICAgICBnZnggPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcbn1cblxuTGFiZWxFZGl0aW5nUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdwYXRoTWFwJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdENvbG9yKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiBiby5kaS5nZXQoJ3N0cm9rZScpIHx8IGRlZmF1bHRDb2xvciB8fCAnYmxhY2snO1xufSIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4vTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlQ2F0ZWdvcnlWYWx1ZVxufSBmcm9tICcuLi9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbCc7XG5cbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxMYWJlbE1pZCxcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYWJlbEVkaXRpbmdQcm92aWRlcihcbiAgICBldmVudEJ1cywgYnBtbkZhY3RvcnksIGNhbnZhcywgZGlyZWN0RWRpdGluZyxcbiAgICBtb2RlbGluZywgcmVzaXplSGFuZGxlcywgdGV4dFJlbmRlcmVyKSB7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90ZXh0UmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXI7XG5cbiAgZGlyZWN0RWRpdGluZy5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuXG4gIC8vIGxpc3RlbiB0byBkYmxjbGljayBvbiBub24tcm9vdCBlbGVtZW50c1xuICBldmVudEJ1cy5vbignZWxlbWVudC5kYmxjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgYWN0aXZhdGVEaXJlY3RFZGl0KGV2ZW50LmVsZW1lbnQsIHRydWUpO1xuICB9KTtcblxuICAvLyBjb21wbGV0ZSBvbiBmb2xsb3d1cCBjYW52YXMgb3BlcmF0aW9uXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYXV0b1BsYWNlLnN0YXJ0JyxcbiAgICAnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLFxuICAgICdkcmFnLmluaXQnLFxuICAgICdlbGVtZW50Lm1vdXNlZG93bicsXG4gICAgJ3BvcHVwTWVudS5vcGVuJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgaWYgKGRpcmVjdEVkaXRpbmcuaXNBY3RpdmUoKSkge1xuICAgICAgZGlyZWN0RWRpdGluZy5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY2FuY2VsIG9uIGNvbW1hbmQgc3RhY2sgY2hhbmdlc1xuICBldmVudEJ1cy5vbihbICdjb21tYW5kU3RhY2suY2hhbmdlZCcgXSwgZnVuY3Rpb24oZSkge1xuICAgIGlmIChkaXJlY3RFZGl0aW5nLmlzQWN0aXZlKCkpIHtcbiAgICAgIGRpcmVjdEVkaXRpbmcuY2FuY2VsKCk7XG4gICAgfVxuICB9KTtcblxuXG4gIGV2ZW50QnVzLm9uKCdkaXJlY3RFZGl0aW5nLmFjdGl2YXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXNpemVIYW5kbGVzLnJlbW92ZVJlc2l6ZXJzKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuZW5kJywgNTAwLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGV2ZW50LmNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgaXNUb3VjaCA9IGV2ZW50LmlzVG91Y2g7XG5cbiAgICAvLyBUT0RPKG5pa2t1KTogd2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gZGlyZWN0IGVkaXRpbmcgb24gbW9iaWxlIGRldmljZXM7IHJpZ2h0IG5vdyB0aGlzIHdpbGxcbiAgICAvLyBicmVhayBmb3IgZGVzd29ya2Zsb3dlZGl0aW5nIG9uIG1vYmlsZSBkZXZpY2VzXG4gICAgLy8gYXMgaXQgYnJlYWtzIHRoZSB1c2VyIGludGVyYWN0aW9uIHdvcmtmbG93XG5cbiAgICAvLyBUT0RPKG5yZSk6IHdlIHNob3VsZCB0ZW1wb3JhcmlseSBmb2N1cyB0aGUgZWRpdGVkIGVsZW1lbnRcbiAgICAvLyBoZXJlIGFuZCByZWxlYXNlIHRoZSBmb2N1c2VkIHZpZXdwb3J0IGFmdGVyIHRoZSBkaXJlY3QgZWRpdFxuICAgIC8vIG9wZXJhdGlvbiBpcyBmaW5pc2hlZFxuICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjYW5FeGVjdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuaGludHMgJiYgY29udGV4dC5oaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFjdGl2YXRlRGlyZWN0RWRpdChlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgYWN0aXZhdGVEaXJlY3RFZGl0KGV2ZW50LnNoYXBlKTtcbiAgfSk7XG5cblxuICBmdW5jdGlvbiBhY3RpdmF0ZURpcmVjdEVkaXQoZWxlbWVudCwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgfHxcbiAgICAgICAgaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpUYXNrJywgJ2JwbW46VGV4dEFubm90YXRpb24nLCAnYnBtbjpHcm91cCcgXSkgfHxcbiAgICAgICAgaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG5cbiAgICAgIGRpcmVjdEVkaXRpbmcuYWN0aXZhdGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbn1cblxuTGFiZWxFZGl0aW5nUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdkaXJlY3RFZGl0aW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3Jlc2l6ZUhhbmRsZXMnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG4vKipcbiAqIEFjdGl2YXRlIGRpcmVjdCBlZGl0aW5nIGZvciBhY3Rpdml0aWVzIGFuZCB0ZXh0IGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGJvdW5kcyAocG9zaXRpb24gYW5kIHNpemUpLCB0ZXh0IGFuZCBvcHRpb25zXG4gKi9cbkxhYmVsRWRpdGluZ1Byb3ZpZGVyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAvLyB0ZXh0XG4gIHZhciB0ZXh0ID0gZ2V0TGFiZWwoZWxlbWVudCk7XG5cbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHRleHQ6IHRleHRcbiAgfTtcblxuICAvLyBib3VuZHNcbiAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0RWRpdGluZ0JCb3goZWxlbWVudCk7XG5cbiAgYXNzaWduKGNvbnRleHQsIGJvdW5kcyk7XG5cbiAgdmFyIG9wdGlvbnMgPSB7fTtcblxuICAvLyB0YXNrc1xuICBpZiAoXG4gICAgaXNBbnkoZWxlbWVudCwgW1xuICAgICAgJ2JwbW46VGFzaycsXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAnYnBtbjpMYW5lJyxcbiAgICAgICdicG1uOkNhbGxBY3Rpdml0eSdcbiAgICBdKSB8fFxuICAgIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KVxuICApIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgY2VudGVyVmVydGljYWxseTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZXh0ZXJuYWwgbGFiZWxzXG4gIGlmIChpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudCkpIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gdGV4dCBhbm5vdGF0aW9uc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIGFzc2lnbihvcHRpb25zLCB7XG4gICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICBhdXRvUmVzaXplOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBhc3NpZ24oY29udGV4dCwge1xuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5cbi8qKlxuICogR2V0IHRoZSBlZGl0aW5nIGJvdW5kaW5nIGJveCBiYXNlZCBvbiB0aGUgZWxlbWVudCdzIHNpemUgYW5kIHBvc2l0aW9uXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHBvc2l0aW9uXG4gKiAgICAgICAgICAgICAgICAgIGFuZCBzaXplIChmaXhlZCBvciBtaW5pbXVtIGFuZC9vciBtYXhpbXVtKVxuICovXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUuZ2V0RWRpdGluZ0JCb3ggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHRhcmdldCA9IGVsZW1lbnQubGFiZWwgfHwgZWxlbWVudDtcblxuICB2YXIgYmJveCA9IGNhbnZhcy5nZXRBYnNvbHV0ZUJCb3godGFyZ2V0KTtcblxuICB2YXIgbWlkID0ge1xuICAgIHg6IGJib3gueCArIGJib3gud2lkdGggLyAyLFxuICAgIHk6IGJib3gueSArIGJib3guaGVpZ2h0IC8gMlxuICB9O1xuXG4gIC8vIGRlZmF1bHQgcG9zaXRpb25cbiAgdmFyIGJvdW5kcyA9IHsgeDogYmJveC54LCB5OiBiYm94LnkgfTtcblxuICB2YXIgem9vbSA9IGNhbnZhcy56b29tKCk7XG5cbiAgdmFyIGRlZmF1bHRTdHlsZSA9IHRoaXMuX3RleHRSZW5kZXJlci5nZXREZWZhdWx0U3R5bGUoKSxcbiAgICAgIGV4dGVybmFsU3R5bGUgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxTdHlsZSgpO1xuXG4gIC8vIHRha2Ugem9vbSBpbnRvIGFjY291bnRcbiAgdmFyIGV4dGVybmFsRm9udFNpemUgPSBleHRlcm5hbFN0eWxlLmZvbnRTaXplICogem9vbSxcbiAgICAgIGV4dGVybmFsTGluZUhlaWdodCA9IGV4dGVybmFsU3R5bGUubGluZUhlaWdodCxcbiAgICAgIGRlZmF1bHRGb250U2l6ZSA9IGRlZmF1bHRTdHlsZS5mb250U2l6ZSAqIHpvb20sXG4gICAgICBkZWZhdWx0TGluZUhlaWdodCA9IGRlZmF1bHRTdHlsZS5saW5lSGVpZ2h0O1xuXG4gIHZhciBzdHlsZSA9IHtcbiAgICBmb250RmFtaWx5OiB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCkuZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0OiB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCkuZm9udFdlaWdodFxuICB9O1xuXG4gIC8vIGFkanVzdCBmb3IgZXhwYW5kZWQgcG9vbHMgQU5EIGxhbmVzXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgaXNFeHBhbmRlZFBvb2woZWxlbWVudCkpIHtcblxuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiBiYm94LmhlaWdodCxcbiAgICAgIGhlaWdodDogMzAgKiB6b29tLFxuICAgICAgeDogYmJveC54IC0gYmJveC5oZWlnaHQgLyAyICsgKDE1ICogem9vbSksXG4gICAgICB5OiBtaWQueSAtICgzMCAqIHpvb20pIC8gMlxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZGVmYXVsdEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGRlZmF1bHRMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdSaWdodDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoLTkwZGVnKSdcbiAgICB9KTtcbiAgfVxuXG5cbiAgLy8gaW50ZXJuYWwgbGFiZWxzIGZvciB0YXNrcyBhbmQgY29sbGFwc2VkIGNhbGwgYWN0aXZpdGllcyxcbiAgLy8gc3ViIHByb2Nlc3NlcyBhbmQgcGFydGljaXBhbnRzXG4gIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOlRhc2snLCAnYnBtbjpDYWxsQWN0aXZpdHknXSkgfHxcbiAgICAgIGlzQ29sbGFwc2VkUG9vbChlbGVtZW50KSB8fFxuICAgICAgaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG5cbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHRcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGludGVybmFsIGxhYmVscyBmb3IgZXhwYW5kZWQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXNFeHBhbmRlZFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIHg6IGJib3gueFxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZGVmYXVsdEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGRlZmF1bHRMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdSaWdodDogKDUgKiB6b29tKSArICdweCdcbiAgICB9KTtcbiAgfVxuXG4gIHZhciB3aWR0aCA9IDkwICogem9vbSxcbiAgICAgIHBhZGRpbmdUb3AgPSA3ICogem9vbSxcbiAgICAgIHBhZGRpbmdCb3R0b20gPSA0ICogem9vbTtcblxuICAvLyBleHRlcm5hbCBsYWJlbHMgZm9yIGV2ZW50cywgZGF0YSBlbGVtZW50cywgZ2F0ZXdheXMsIGdyb3VwcyBhbmQgY29ubmVjdGlvbnNcbiAgaWYgKHRhcmdldC5sYWJlbFRhcmdldCkge1xuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSxcbiAgICAgIHg6IG1pZC54IC0gd2lkdGggLyAyLFxuICAgICAgeTogYmJveC55IC0gcGFkZGluZ1RvcFxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZXh0ZXJuYWxGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBleHRlcm5hbExpbmVIZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wOiBwYWRkaW5nVG9wICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206IHBhZGRpbmdCb3R0b20gKyAncHgnXG4gICAgfSk7XG4gIH1cblxuICAvLyBleHRlcm5hbCBsYWJlbCBub3QgeWV0IGNyZWF0ZWRcbiAgaWYgKGlzTGFiZWxFeHRlcm5hbCh0YXJnZXQpXG4gICAgICAmJiAhaGFzRXh0ZXJuYWxMYWJlbCh0YXJnZXQpXG4gICAgICAmJiAhaXNMYWJlbCh0YXJnZXQpKSB7XG5cbiAgICB2YXIgZXh0ZXJuYWxMYWJlbE1pZCA9IGdldEV4dGVybmFsTGFiZWxNaWQoZWxlbWVudCk7XG5cbiAgICB2YXIgYWJzb2x1dGVCQm94ID0gY2FudmFzLmdldEFic29sdXRlQkJveCh7XG4gICAgICB4OiBleHRlcm5hbExhYmVsTWlkLngsXG4gICAgICB5OiBleHRlcm5hbExhYmVsTWlkLnksXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH0pO1xuXG4gICAgdmFyIGhlaWdodCA9IGV4dGVybmFsRm9udFNpemUgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbTtcblxuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgeDogYWJzb2x1dGVCQm94LnggLSB3aWR0aCAvIDIsXG4gICAgICB5OiBhYnNvbHV0ZUJCb3gueSAtIGhlaWdodCAvIDJcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGV4dGVybmFsRm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZXh0ZXJuYWxMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiBwYWRkaW5nQm90dG9tICsgJ3B4J1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdGV4dCBhbm5vdGF0aW9uc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiBiYm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiBiYm94LmhlaWdodCxcbiAgICAgIG1pbldpZHRoOiAzMCAqIHpvb20sXG4gICAgICBtaW5IZWlnaHQ6IDEwICogem9vbVxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgIHBhZGRpbmdUb3A6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgYm91bmRzOiBib3VuZHMsIHN0eWxlOiBzdHlsZSB9O1xufTtcblxuXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oXG4gICAgZWxlbWVudCwgbmV3TGFiZWwsXG4gICAgYWN0aXZlQ29udGV4dFRleHQsIGJvdW5kcykge1xuXG4gIHZhciBuZXdCb3VuZHMsXG4gICAgICBiYm94O1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG5cbiAgICBiYm94ID0gdGhpcy5fY2FudmFzLmdldEFic29sdXRlQkJveChlbGVtZW50KTtcblxuICAgIG5ld0JvdW5kcyA9IHtcbiAgICAgIHg6IGVsZW1lbnQueCxcbiAgICAgIHk6IGVsZW1lbnQueSxcbiAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoIC8gYmJveC53aWR0aCAqIGJvdW5kcy53aWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgLyBiYm94LmhlaWdodCAqIGJvdW5kcy5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykpIHtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBjYXRlZ29yeVZhbHVlIGlmIG5vdCBleGlzdGluZ1xuICAgIGlmICghYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZikge1xuXG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGdldEJ1c2luZXNzT2JqZWN0KHJvb3RFbGVtZW50KS4kcGFyZW50O1xuXG4gICAgICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIHRoaXMuX2JwbW5GYWN0b3J5KTtcblxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuY2F0ZWdvcnlWYWx1ZVJlZiA9IGNhdGVnb3J5VmFsdWU7XG4gICAgfVxuXG4gIH1cblxuICBpZiAoaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBudWxsO1xuICB9XG5cbiAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgbmV3TGFiZWwsIG5ld0JvdW5kcyk7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwYW5kZWRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0NvbGxhcHNlZFBvb2woZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiAhaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNFeHBhbmRlZFBvb2woZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5VGV4dChsYWJlbCkge1xuICByZXR1cm4gIWxhYmVsIHx8ICFsYWJlbC50cmltKCk7XG59IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmZ1bmN0aW9uIGdldExhYmVsQXR0cihzZW1hbnRpYykge1xuICBpZiAoXG4gICAgaXMoc2VtYW50aWMsICdicG1uOkZsb3dFbGVtZW50JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46UGFydGljaXBhbnQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46U2VxdWVuY2VGbG93JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46TWVzc2FnZUZsb3cnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhSW5wdXQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT3V0cHV0JylcbiAgKSB7XG4gICAgcmV0dXJuICduYW1lJztcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiAndGV4dCc7XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4gJ2NhdGVnb3J5VmFsdWVSZWYnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENhdGVnb3J5VmFsdWUoc2VtYW50aWMpIHtcbiAgdmFyIGNhdGVnb3J5VmFsdWVSZWYgPSBzZW1hbnRpY1snY2F0ZWdvcnlWYWx1ZVJlZiddO1xuXG4gIGlmICghY2F0ZWdvcnlWYWx1ZVJlZikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG5cbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWVSZWYudmFsdWUgfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbChlbGVtZW50KSB7XG4gIHZhciBzZW1hbnRpYyA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICBhdHRyID0gZ2V0TGFiZWxBdHRyKHNlbWFudGljKTtcblxuICBpZiAoYXR0cikge1xuXG4gICAgaWYgKGF0dHIgPT09ICdjYXRlZ29yeVZhbHVlUmVmJykge1xuXG4gICAgICByZXR1cm4gZ2V0Q2F0ZWdvcnlWYWx1ZShzZW1hbnRpYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbWFudGljW2F0dHJdIHx8ICcnO1xuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExhYmVsKGVsZW1lbnQsIHRleHQsIGlzRXh0ZXJuYWwpIHtcbiAgdmFyIHNlbWFudGljID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIGF0dHIgPSBnZXRMYWJlbEF0dHIoc2VtYW50aWMpO1xuXG4gIGlmIChhdHRyKSB7XG5cbiAgICBpZiAoYXR0ciA9PT0gJ2NhdGVnb3J5VmFsdWVSZWYnKSB7XG4gICAgICBzZW1hbnRpY1snY2F0ZWdvcnlWYWx1ZVJlZiddLnZhbHVlID0gdGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VtYW50aWNbYXR0cl0gPSB0ZXh0O1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59IiwiaW1wb3J0IHtcbiAgc2V0TGFiZWwsXG4gIGdldExhYmVsXG59IGZyb20gJy4uL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEV4dGVybmFsTGFiZWxNaWQsXG4gIGlzTGFiZWxFeHRlcm5hbCxcbiAgaGFzRXh0ZXJuYWxMYWJlbCxcbiAgaXNMYWJlbFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIE5VTExfRElNRU5TSU9OUyA9IHtcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMFxufTtcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHVwZGF0ZXMgdGhlIHRleHQgb2YgYSBCUE1OIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZUxhYmVsSGFuZGxlcihtb2RlbGluZywgdGV4dFJlbmRlcmVyKSB7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGFiZWwgYW5kIHJldHVybiB0aGUgY2hhbmdlZCBlbGVtZW50cy5cbiAgICpcbiAgICogRWxlbWVudCBwYXJhbWV0ZXIgY2FuIGJlIGxhYmVsIGl0c2VsZiBvciBjb25uZWN0aW9uIChpLmUuIHNlcXVlbmNlIGZsb3cpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRUZXh0KGVsZW1lbnQsIHRleHQpIHtcblxuICAgIC8vIGV4dGVybmFsIGxhYmVsIGlmIHByZXNlbnRcbiAgICB2YXIgbGFiZWwgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQ7XG5cbiAgICB2YXIgbGFiZWxUYXJnZXQgPSBlbGVtZW50LmxhYmVsVGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgICBzZXRMYWJlbChsYWJlbCwgdGV4dCwgbGFiZWxUYXJnZXQgIT09IGxhYmVsKTtcblxuICAgIHJldHVybiBbIGxhYmVsLCBsYWJlbFRhcmdldCBdO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlRXhlY3V0ZShjdHgpIHtcbiAgICB2YXIgZWxlbWVudCA9IGN0eC5lbGVtZW50LFxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG5ld0xhYmVsID0gY3R4Lm5ld0xhYmVsO1xuXG4gICAgaWYgKCFpc0xhYmVsKGVsZW1lbnQpXG4gICAgICAgICYmIGlzTGFiZWxFeHRlcm5hbChlbGVtZW50KVxuICAgICAgICAmJiAhaGFzRXh0ZXJuYWxMYWJlbChlbGVtZW50KVxuICAgICAgICAmJiAhaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG5cbiAgICAgIC8vIGNyZWF0ZSBsYWJlbFxuICAgICAgdmFyIHBhZGRpbmdUb3AgPSA3O1xuXG4gICAgICB2YXIgbGFiZWxDZW50ZXIgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgICBsYWJlbENlbnRlciA9IHtcbiAgICAgICAgeDogbGFiZWxDZW50ZXIueCxcbiAgICAgICAgeTogbGFiZWxDZW50ZXIueSArIHBhZGRpbmdUb3BcbiAgICAgIH07XG5cbiAgICAgIG1vZGVsaW5nLmNyZWF0ZUxhYmVsKGVsZW1lbnQsIGxhYmVsQ2VudGVyLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfbGFiZWwnLFxuICAgICAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3RcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGV4ZWN1dGUoY3R4KSB7XG4gICAgY3R4Lm9sZExhYmVsID0gZ2V0TGFiZWwoY3R4LmVsZW1lbnQpO1xuICAgIHJldHVybiBzZXRUZXh0KGN0eC5lbGVtZW50LCBjdHgubmV3TGFiZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJ0KGN0eCkge1xuICAgIHJldHVybiBzZXRUZXh0KGN0eC5lbGVtZW50LCBjdHgub2xkTGFiZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9zdEV4ZWN1dGUoY3R4KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjdHguZWxlbWVudCxcbiAgICAgICAgbGFiZWwgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQsXG4gICAgICAgIG5ld0xhYmVsID0gY3R4Lm5ld0xhYmVsLFxuICAgICAgICBuZXdCb3VuZHMgPSBjdHgubmV3Qm91bmRzLFxuICAgICAgICBoaW50cyA9IGN0eC5oaW50cyB8fCB7fTtcblxuICAgIC8vIGlnbm9yZSBpbnRlcm5hbCBsYWJlbHMgZm9yIGVsZW1lbnRzIGV4Y2VwdCB0ZXh0IGFubm90YXRpb25zXG4gICAgaWYgKCFpc0xhYmVsKGxhYmVsKSAmJiAhaXMobGFiZWwsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNMYWJlbChsYWJlbCkgJiYgaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG5cbiAgICAgIGlmIChoaW50cy5yZW1vdmVTaGFwZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUobGFiZWwsIHsgdW5zZXRMYWJlbDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGV4dCA9IGdldExhYmVsKGxhYmVsKTtcblxuICAgIC8vIHJlc2l6ZSBlbGVtZW50IGJhc2VkIG9uIGxhYmVsIF9vcl8gcHJlLWRlZmluZWQgYm91bmRzXG4gICAgaWYgKHR5cGVvZiBuZXdCb3VuZHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuZXdCb3VuZHMgPSB0ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhsYWJlbCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLy8gc2V0dGluZyBuZXdCb3VuZHMgdG8gZmFsc2Ugb3IgX251bGxfIHdpbGxcbiAgICAvLyBkaXNhYmxlIHRoZSBwb3N0RXhlY3V0ZSByZXNpemUgb3BlcmF0aW9uXG4gICAgaWYgKG5ld0JvdW5kcykge1xuICAgICAgbW9kZWxpbmcucmVzaXplU2hhcGUobGFiZWwsIG5ld0JvdW5kcywgTlVMTF9ESU1FTlNJT05TKTtcbiAgICB9XG4gIH1cblxuICAvLyBBUElcblxuICB0aGlzLnByZUV4ZWN1dGUgPSBwcmVFeGVjdXRlO1xuICB0aGlzLmV4ZWN1dGUgPSBleGVjdXRlO1xuICB0aGlzLnJldmVydCA9IHJldmVydDtcbiAgdGhpcy5wb3N0RXhlY3V0ZSA9IHBvc3RFeGVjdXRlO1xufVxuXG5VcGRhdGVMYWJlbEhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0VtcHR5VGV4dChsYWJlbCkge1xuICByZXR1cm4gIWxhYmVsIHx8ICFsYWJlbC50cmltKCk7XG59IiwiaW1wb3J0IENoYW5nZVN1cHBvcnRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2hhbmdlLXN1cHBvcnQnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUnO1xuaW1wb3J0IERpcmVjdEVkaXRpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZyc7XG5cbmltcG9ydCBMYWJlbEVkaXRpbmdQcm92aWRlciBmcm9tICcuL0xhYmVsRWRpdGluZ1Byb3ZpZGVyJztcbmltcG9ydCBMYWJlbEVkaXRpbmdQcmV2aWV3IGZyb20gJy4vTGFiZWxFZGl0aW5nUHJldmlldyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIENoYW5nZVN1cHBvcnRNb2R1bGUsXG4gICAgUmVzaXplTW9kdWxlLFxuICAgIERpcmVjdEVkaXRpbmdNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnbGFiZWxFZGl0aW5nUHJvdmlkZXInLFxuICAgICdsYWJlbEVkaXRpbmdQcmV2aWV3J1xuICBdLFxuICBsYWJlbEVkaXRpbmdQcm92aWRlcjogWyAndHlwZScsIExhYmVsRWRpdGluZ1Byb3ZpZGVyIF0sXG4gIGxhYmVsRWRpdGluZ1ByZXZpZXc6IFsgJ3R5cGUnLCBMYWJlbEVkaXRpbmdQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBtYXAsXG4gIGFzc2lnbixcbiAgcGlja1xufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkZhY3RvcnkobW9kZGxlKSB7XG4gIHRoaXMuX21vZGVsID0gbW9kZGxlO1xufVxuXG5CcG1uRmFjdG9yeS4kaW5qZWN0ID0gWyAnbW9kZGxlJyBdO1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5fbmVlZHNJZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpSb290RWxlbWVudCcsXG4gICAgJ2JwbW46Rmxvd0VsZW1lbnQnLFxuICAgICdicG1uOk1lc3NhZ2VGbG93JyxcbiAgICAnYnBtbjpEYXRhQXNzb2NpYXRpb24nLFxuICAgICdicG1uOkFydGlmYWN0JyxcbiAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgJ2JwbW46TGFuZScsXG4gICAgJ2JwbW46TGFuZVNldCcsXG4gICAgJ2JwbW46UHJvY2VzcycsXG4gICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgJ2JwbW5kaTpCUE1OU2hhcGUnLFxuICAgICdicG1uZGk6QlBNTkVkZ2UnLFxuICAgICdicG1uZGk6QlBNTkRpYWdyYW0nLFxuICAgICdicG1uZGk6QlBNTlBsYW5lJyxcbiAgICAnYnBtbjpQcm9wZXJ0eScsXG4gICAgJ2JwbW46Q2F0ZWdvcnlWYWx1ZSdcbiAgXSk7XG59O1xuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuX2Vuc3VyZUlkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIC8vIGdlbmVyYXRlIHNlbWFudGljIGlkcyBmb3IgZWxlbWVudHNcbiAgLy8gYnBtbjpTZXF1ZW5jZUZsb3cgLT4gU2VxdWVuY2VGbG93X0lEXG4gIHZhciBwcmVmaXg7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5JykpIHtcbiAgICBwcmVmaXggPSAnQWN0aXZpdHknO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykpIHtcbiAgICBwcmVmaXggPSAnRXZlbnQnO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdhdGV3YXknKSkge1xuICAgIHByZWZpeCA9ICdHYXRld2F5JztcbiAgfSBlbHNlIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOlNlcXVlbmNlRmxvdycsICdicG1uOk1lc3NhZ2VGbG93JyBdKSkge1xuICAgIHByZWZpeCA9ICdGbG93JztcbiAgfSBlbHNlIHtcbiAgICBwcmVmaXggPSAoZWxlbWVudC4kdHlwZSB8fCAnJykucmVwbGFjZSgvXlteOl0qOi9nLCAnJyk7XG4gIH1cblxuICBwcmVmaXggKz0gJ18nO1xuXG4gIGlmICghZWxlbWVudC5pZCAmJiB0aGlzLl9uZWVkc0lkKGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC5pZCA9IHRoaXMuX21vZGVsLmlkcy5uZXh0UHJlZml4ZWQocHJlZml4LCBlbGVtZW50KTtcbiAgfVxufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLl9tb2RlbC5jcmVhdGUodHlwZSwgYXR0cnMgfHwge30pO1xuXG4gIHRoaXMuX2Vuc3VyZUlkKGVsZW1lbnQpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlMYWJlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OTGFiZWwnLCB7XG4gICAgYm91bmRzOiB0aGlzLmNyZWF0ZURpQm91bmRzKClcbiAgfSk7XG59O1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEaVNoYXBlID0gZnVuY3Rpb24oc2VtYW50aWMsIGJvdW5kcywgYXR0cnMpIHtcblxuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OU2hhcGUnLCBhc3NpZ24oe1xuICAgIGJwbW5FbGVtZW50OiBzZW1hbnRpYyxcbiAgICBib3VuZHM6IHRoaXMuY3JlYXRlRGlCb3VuZHMoYm91bmRzKVxuICB9LCBhdHRycykpO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlCb3VuZHMgPSBmdW5jdGlvbihib3VuZHMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdkYzpCb3VuZHMnLCBib3VuZHMpO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlXYXlwb2ludHMgPSBmdW5jdGlvbih3YXlwb2ludHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBtYXAod2F5cG9pbnRzLCBmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gc2VsZi5jcmVhdGVEaVdheXBvaW50KHBvcyk7XG4gIH0pO1xufTtcblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpV2F5cG9pbnQgPSBmdW5jdGlvbihwb2ludCkge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2RjOlBvaW50JywgcGljayhwb2ludCwgWyAneCcsICd5JyBdKSk7XG59O1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEaUVkZ2UgPSBmdW5jdGlvbihzZW1hbnRpYywgd2F5cG9pbnRzLCBhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1ORWRnZScsIGFzc2lnbih7XG4gICAgYnBtbkVsZW1lbnQ6IHNlbWFudGljXG4gIH0sIGF0dHJzKSk7XG59O1xuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlQbGFuZSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnYnBtbmRpOkJQTU5QbGFuZScsIHtcbiAgICBicG1uRWxlbWVudDogc2VtYW50aWNcbiAgfSk7XG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBCYXNlTGF5b3V0ZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Jhc2VMYXlvdXRlcic7XG5cbmltcG9ydCB7XG4gIHJlcGFpckNvbm5lY3Rpb24sXG4gIHdpdGhvdXRSZWR1bmRhbnRQb2ludHNcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBBVFRBQ0hfT1JJRU5UQVRJT05fUEFERElORyA9IC0xMCxcbiAgICBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCA9IDQwO1xuXG52YXIgb3Bwb3NpdGVPcmllbnRhdGlvbk1hcHBpbmcgPSB7XG4gICd0b3AnOiAnYm90dG9tJyxcbiAgJ3RvcC1yaWdodCc6ICdib3R0b20tbGVmdCcsXG4gICd0b3AtbGVmdCc6ICdib3R0b20tcmlnaHQnLFxuICAncmlnaHQnOiAnbGVmdCcsXG4gICdib3R0b20nOiAndG9wJyxcbiAgJ2JvdHRvbS1yaWdodCc6ICd0b3AtbGVmdCcsXG4gICdib3R0b20tbGVmdCc6ICd0b3AtcmlnaHQnLFxuICAnbGVmdCc6ICdyaWdodCdcbn07XG5cbnZhciBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmcgPSB7XG4gIHRvcDogJ3QnLFxuICByaWdodDogJ3InLFxuICBib3R0b206ICdiJyxcbiAgbGVmdDogJ2wnXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5MYXlvdXRlcigpIHt9XG5cbmluaGVyaXRzKEJwbW5MYXlvdXRlciwgQmFzZUxheW91dGVyKTtcblxuXG5CcG1uTGF5b3V0ZXIucHJvdG90eXBlLmxheW91dENvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBoaW50cykge1xuICBpZiAoIWhpbnRzKSB7XG4gICAgaGludHMgPSB7fTtcbiAgfVxuXG4gIHZhciBzb3VyY2UgPSBoaW50cy5zb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICB0YXJnZXQgPSBoaW50cy50YXJnZXQgfHwgY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICB3YXlwb2ludHMgPSBoaW50cy53YXlwb2ludHMgfHwgY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICBjb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQsXG4gICAgICBjb25uZWN0aW9uRW5kID0gaGludHMuY29ubmVjdGlvbkVuZDtcblxuICB2YXIgbWFuaGF0dGFuT3B0aW9ucyxcbiAgICAgIHVwZGF0ZWRXYXlwb2ludHM7XG5cbiAgaWYgKCFjb25uZWN0aW9uU3RhcnQpIHtcbiAgICBjb25uZWN0aW9uU3RhcnQgPSBnZXRDb25uZWN0aW9uRG9ja2luZyh3YXlwb2ludHMgJiYgd2F5cG9pbnRzWyAwIF0sIHNvdXJjZSk7XG4gIH1cblxuICBpZiAoIWNvbm5lY3Rpb25FbmQpIHtcbiAgICBjb25uZWN0aW9uRW5kID0gZ2V0Q29ubmVjdGlvbkRvY2tpbmcod2F5cG9pbnRzICYmIHdheXBvaW50c1sgd2F5cG9pbnRzLmxlbmd0aCAtIDEgXSwgdGFyZ2V0KTtcbiAgfVxuXG4gIC8vIFRPRE8obmlra3UpOiBzdXBwb3J0IHZlcnRpY2FsIG1vZGVsaW5nXG4gIC8vIGFuZCBpbnZlcnQgcHJlZmVycmVkTGF5b3V0cyBhY2NvcmRpbmdseVxuXG4gIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpBc3NvY2lhdGlvbicpIHx8XG4gICAgICBpcyhjb25uZWN0aW9uLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgaWYgKHdheXBvaW50cyAmJiAhaXNDb21wZW5zYXRpb25Bc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoWyBjb25uZWN0aW9uU3RhcnQgXSwgd2F5cG9pbnRzLnNsaWNlKDEsIC0xKSwgWyBjb25uZWN0aW9uRW5kIF0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG4gICAgbWFuaGF0dGFuT3B0aW9ucyA9IGdldE1lc3NhZ2VGbG93TWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UsIHRhcmdldCk7XG4gIH0gZWxzZSBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgaXNDb21wZW5zYXRpb25Bc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcblxuICAgIC8vIGxheW91dCBhbGwgY29ubmVjdGlvbiBiZXR3ZWVuIGZsb3cgZWxlbWVudHMgaDpoLCBleGNlcHQgZm9yXG4gICAgLy8gKDEpIG91dGdvaW5nIG9mIGJvdW5kYXJ5IGV2ZW50cyAtPiBsYXlvdXQgYmFzZWQgb24gYXR0YWNoIG9yaWVudGF0aW9uIGFuZCB0YXJnZXQgb3JpZW50YXRpb25cbiAgICAvLyAoMikgaW5jb21pbmcvb3V0Z29pbmcgb2YgZ2F0ZXdheXMgLT4gdjpoIGZvciBvdXRnb2luZywgaDp2IGZvciBpbmNvbWluZ1xuICAgIC8vICgzKSBsb29wc1xuICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogZ2V0TG9vcFByZWZlcnJlZExheW91dChzb3VyY2UsIGNvbm5lY3Rpb24pXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IGdldEJvdW5kYXJ5RXZlbnRQcmVmZXJyZWRMYXlvdXRzKHNvdXJjZSwgdGFyZ2V0LCBjb25uZWN0aW9uRW5kKVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkgfHwgaXNFeHBhbmRlZFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IGdldFN1YlByb2Nlc3NNYW5oYXR0YW5PcHRpb25zKHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmIChpcyhzb3VyY2UsICdicG1uOkdhdGV3YXknKSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogWyAndjpoJyBdXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXModGFyZ2V0LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IFsgJ2g6dicgXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogWyAnaDpoJyBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW5oYXR0YW5PcHRpb25zKSB7XG4gICAgbWFuaGF0dGFuT3B0aW9ucyA9IGFzc2lnbihtYW5oYXR0YW5PcHRpb25zLCBoaW50cyk7XG5cbiAgICB1cGRhdGVkV2F5cG9pbnRzID0gd2l0aG91dFJlZHVuZGFudFBvaW50cyhyZXBhaXJDb25uZWN0aW9uKFxuICAgICAgc291cmNlLFxuICAgICAgdGFyZ2V0LFxuICAgICAgY29ubmVjdGlvblN0YXJ0LFxuICAgICAgY29ubmVjdGlvbkVuZCxcbiAgICAgIHdheXBvaW50cyxcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnNcbiAgICApKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkV2F5cG9pbnRzIHx8IFsgY29ubmVjdGlvblN0YXJ0LCBjb25uZWN0aW9uRW5kIF07XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRBdHRhY2hPcmllbnRhdGlvbihhdHRhY2hlZEVsZW1lbnQpIHtcbiAgdmFyIGhvc3RFbGVtZW50ID0gYXR0YWNoZWRFbGVtZW50Lmhvc3Q7XG5cbiAgcmV0dXJuIGdldE9yaWVudGF0aW9uKGdldE1pZChhdHRhY2hlZEVsZW1lbnQpLCBob3N0RWxlbWVudCwgQVRUQUNIX09SSUVOVEFUSU9OX1BBRERJTkcpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlRmxvd01hbmhhdHRhbk9wdGlvbnMoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdzdHJhaWdodCcsICd2OnYnIF0sXG4gICAgcHJlc2VydmVEb2NraW5nOiBnZXRNZXNzYWdlRmxvd1ByZXNlcnZlRG9ja2luZyhzb3VyY2UsIHRhcmdldClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZUZsb3dQcmVzZXJ2ZURvY2tpbmcoc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyAoMSkgZG9ja2luZyBlbGVtZW50IGNvbm5lY3RlZCB0byBwYXJ0aWNpcGFudCBoYXMgcHJlY2VkZW5jZVxuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICdzb3VyY2UnO1xuICB9XG5cbiAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiAndGFyZ2V0JztcbiAgfVxuXG4gIC8vICgyKSBkb2NraW5nIGVsZW1lbnQgY29ubmVjdGVkIHRvIGV4cGFuZGVkIHN1Yi1wcm9jZXNzIGhhcyBwcmVjZWRlbmNlXG4gIGlmIChpc0V4cGFuZGVkU3ViUHJvY2Vzcyh0YXJnZXQpKSB7XG4gICAgcmV0dXJuICdzb3VyY2UnO1xuICB9XG5cbiAgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkpIHtcbiAgICByZXR1cm4gJ3RhcmdldCc7XG4gIH1cblxuICAvLyAoMykgZG9ja2luZyBldmVudCBoYXMgcHJlY2VkZW5jZVxuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcmV0dXJuICd0YXJnZXQnO1xuICB9XG5cbiAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiAnc291cmNlJztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRTdWJQcm9jZXNzTWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdzdHJhaWdodCcsICdoOmgnIF0sXG4gICAgcHJlc2VydmVEb2NraW5nOiBnZXRTdWJQcm9jZXNzUHJlc2VydmVEb2NraW5nKHNvdXJjZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ViUHJvY2Vzc1ByZXNlcnZlRG9ja2luZyhzb3VyY2UpIHtcbiAgcmV0dXJuIGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkgPyAndGFyZ2V0JyA6ICdzb3VyY2UnO1xufVxuXG5mdW5jdGlvbiBnZXRDb25uZWN0aW9uRG9ja2luZyhwb2ludCwgc2hhcGUpIHtcbiAgcmV0dXJuIHBvaW50ID8gKHBvaW50Lm9yaWdpbmFsIHx8IHBvaW50KSA6IGdldE1pZChzaGFwZSk7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcGVuc2F0aW9uQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIGlzKHRhcmdldCwgJ2JwbW46QWN0aXZpdHknKSAmJlxuICAgIGlzKHNvdXJjZSwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgdGFyZ2V0LmJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uO1xufVxuXG5mdW5jdGlvbiBpc0V4cGFuZGVkU3ViUHJvY2VzcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbmZ1bmN0aW9uIGlzQW55T3JpZW50YXRpb24ob3JpZW50YXRpb24sIG9yaWVudGF0aW9ucykge1xuICByZXR1cm4gb3JpZW50YXRpb25zLmluZGV4T2Yob3JpZW50YXRpb24pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHZhciBtYXRjaGVzID0gL3JpZ2h0fGxlZnQvLmV4ZWMob3JpZW50YXRpb24pO1xuXG4gIHJldHVybiBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG59XG5cbmZ1bmN0aW9uIGdldFZlcnRpY2FsT3JpZW50YXRpb24ob3JpZW50YXRpb24pIHtcbiAgdmFyIG1hdGNoZXMgPSAvdG9wfGJvdHRvbS8uZXhlYyhvcmllbnRhdGlvbik7XG5cbiAgcmV0dXJuIG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcbn1cblxuZnVuY3Rpb24gaXNPcHBvc2l0ZU9yaWVudGF0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nW2FdID09PSBiO1xufVxuXG5mdW5jdGlvbiBpc09wcG9zaXRlSG9yaXpvbnRhbE9yaWVudGF0aW9uKGEsIGIpIHtcbiAgdmFyIGhvcml6b250YWxPcmllbnRhdGlvbiA9IGdldEhvcml6b250YWxPcmllbnRhdGlvbihhKTtcblxuICB2YXIgb3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24gPSBvcHBvc2l0ZU9yaWVudGF0aW9uTWFwcGluZ1tob3Jpem9udGFsT3JpZW50YXRpb25dO1xuXG4gIHJldHVybiBiLmluZGV4T2Yob3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNPcHBvc2l0ZVZlcnRpY2FsT3JpZW50YXRpb24oYSwgYikge1xuICB2YXIgdmVydGljYWxPcmllbnRhdGlvbiA9IGdldFZlcnRpY2FsT3JpZW50YXRpb24oYSk7XG5cbiAgdmFyIG9wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbiA9IG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nW3ZlcnRpY2FsT3JpZW50YXRpb25dO1xuXG4gIHJldHVybiBiLmluZGV4T2Yob3Bwb3NpdGVWZXJ0aWNhbE9yaWVudGF0aW9uKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHJldHVybiBvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0JyB8fCBvcmllbnRhdGlvbiA9PT0gJ2xlZnQnO1xufVxuXG5mdW5jdGlvbiBnZXRMb29wUHJlZmVycmVkTGF5b3V0KHNvdXJjZSwgY29ubmVjdGlvbikge1xuICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgdmFyIG9yaWVudGF0aW9uID0gd2F5cG9pbnRzICYmIHdheXBvaW50cy5sZW5ndGggJiYgZ2V0T3JpZW50YXRpb24od2F5cG9pbnRzWzBdLCBzb3VyY2UpO1xuXG4gIGlmIChvcmllbnRhdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICByZXR1cm4gWyAndDpyJyBdO1xuICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIFsgJ3I6YicgXTtcbiAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgcmV0dXJuIFsgJ2w6dCcgXTtcbiAgfVxuXG4gIHJldHVybiBbICdiOmwnIF07XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRQcmVmZXJyZWRMYXlvdXRzKHNvdXJjZSwgdGFyZ2V0LCBlbmQpIHtcbiAgdmFyIHNvdXJjZU1pZCA9IGdldE1pZChzb3VyY2UpLFxuICAgICAgdGFyZ2V0TWlkID0gZ2V0TWlkKHRhcmdldCksXG4gICAgICBhdHRhY2hPcmllbnRhdGlvbiA9IGdldEF0dGFjaE9yaWVudGF0aW9uKHNvdXJjZSksXG4gICAgICBzb3VyY2VMYXlvdXQsXG4gICAgICB0YXJnZXRMYXlvdXQ7XG5cbiAgdmFyIGlzTG9vcCA9IGlzU2FtZShzb3VyY2UuaG9zdCwgdGFyZ2V0KTtcblxuICB2YXIgYXR0YWNoZWRUb1NpZGUgPSBpc0FueU9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uLCBbICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnIF0pO1xuXG4gIHZhciB0YXJnZXRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHRhcmdldE1pZCwgc291cmNlTWlkLCB7XG4gICAgeDogc291cmNlLndpZHRoIC8gMiArIHRhcmdldC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlLmhlaWdodCAvIDIgKyB0YXJnZXQuaGVpZ2h0IC8gMlxuICB9KTtcblxuICBpZiAoaXNMb29wKSB7XG4gICAgcmV0dXJuIGdldEJvdW5kYXJ5RXZlbnRMb29wTGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSwgc291cmNlLCB0YXJnZXQsIGVuZCk7XG4gIH1cblxuICAvLyBzb3VyY2UgbGF5b3V0XG4gIHNvdXJjZUxheW91dCA9IGdldEJvdW5kYXJ5RXZlbnRTb3VyY2VMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSk7XG5cbiAgLy8gdGFyZ2V0IGxheW91dFxuICB0YXJnZXRMYXlvdXQgPSBnZXRCb3VuZGFyeUV2ZW50VGFyZ2V0TGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpO1xuXG4gIHJldHVybiBbIHNvdXJjZUxheW91dCArICc6JyArIHRhcmdldExheW91dCBdO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50TG9vcExheW91dChhdHRhY2hPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUsIHNvdXJjZSwgdGFyZ2V0LCBlbmQpIHtcbiAgdmFyIG9yaWVudGF0aW9uID0gYXR0YWNoZWRUb1NpZGUgPyBhdHRhY2hPcmllbnRhdGlvbiA6IGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLFxuICAgICAgc291cmNlTGF5b3V0ID0gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBvcmllbnRhdGlvbiBdLFxuICAgICAgdGFyZ2V0TGF5b3V0O1xuXG4gIGlmIChhdHRhY2hlZFRvU2lkZSkge1xuICAgIGlmIChpc0hvcml6b250YWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbikpIHtcbiAgICAgIHRhcmdldExheW91dCA9IHNob3VsZENvbm5lY3RUb1NhbWVTaWRlKCd5Jywgc291cmNlLCB0YXJnZXQsIGVuZCkgPyAnaCcgOiAnYic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldExheW91dCA9IHNob3VsZENvbm5lY3RUb1NhbWVTaWRlKCd4Jywgc291cmNlLCB0YXJnZXQsIGVuZCkgPyAndicgOiAnbCc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhcmdldExheW91dCA9ICd2JztcbiAgfVxuXG4gIHJldHVybiBbIHNvdXJjZUxheW91dCArICc6JyArIHRhcmdldExheW91dCBdO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDb25uZWN0VG9TYW1lU2lkZShheGlzLCBzb3VyY2UsIHRhcmdldCwgZW5kKSB7XG4gIHZhciB0aHJlc2hvbGQgPSBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRDtcblxuICByZXR1cm4gIShcbiAgICBhcmVDbG9zZU9uQXhpcyhheGlzLCBlbmQsIHRhcmdldCwgdGhyZXNob2xkKSB8fFxuICAgIGFyZUNsb3NlT25BeGlzKGF4aXMsIGVuZCwge1xuICAgICAgeDogdGFyZ2V0LnggKyB0YXJnZXQud2lkdGgsXG4gICAgICB5OiB0YXJnZXQueSArIHRhcmdldC5oZWlnaHRcbiAgICB9LCB0aHJlc2hvbGQpIHx8XG4gICAgYXJlQ2xvc2VPbkF4aXMoYXhpcywgZW5kLCBnZXRNaWQoc291cmNlKSwgdGhyZXNob2xkKVxuICApO1xufVxuXG5mdW5jdGlvbiBhcmVDbG9zZU9uQXhpcyhheGlzLCBhLCBiLCB0aHJlc2hvbGQpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGFbIGF4aXMgXSAtIGJbIGF4aXMgXSkgPCB0aHJlc2hvbGQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRTb3VyY2VMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSkge1xuXG4gIC8vIGF0dGFjaGVkIHRvIGVpdGhlciB0b3AsIHJpZ2h0LCBib3R0b20gb3IgbGVmdCBzaWRlXG4gIGlmIChhdHRhY2hlZFRvU2lkZSkge1xuICAgIHJldHVybiBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmdbIGF0dGFjaE9yaWVudGF0aW9uIF07XG4gIH1cblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLXJpZ2h0LCB0b3AtbGVmdCwgYm90dG9tLXJpZ2h0IG9yIGJvdHRvbS1sZWZ0IGNvcm5lclxuXG4gIC8vIHNhbWUgdmVydGljYWwgb3Igb3Bwb3NpdGUgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICBpZiAoaXNTYW1lKFxuICAgIGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLCBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKVxuICApIHx8IGlzT3Bwb3NpdGVPcmllbnRhdGlvbihcbiAgICBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLCBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pXG4gICkpIHtcbiAgICByZXR1cm4gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSBdO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgcmV0dXJuIG9yaWVudGF0aW9uRGlyZWN0aW9uTWFwcGluZ1sgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSBdO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50VGFyZ2V0TGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpIHtcblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLCByaWdodCwgYm90dG9tIG9yIGxlZnQgc2lkZVxuICBpZiAoYXR0YWNoZWRUb1NpZGUpIHtcbiAgICBpZiAoaXNIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pKSB7XG5cbiAgICAgIC8vIG9yaWVudGF0aW9uIGlzIHJpZ2h0IG9yIGxlZnRcblxuICAgICAgLy8gb3Bwb3NpdGUgaG9yaXpvbnRhbCBvcmllbnRhdGlvbiBvciBzYW1lIG9yaWVudGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGlzT3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKSB8fFxuICAgICAgICBpc1NhbWUoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAnaCc7XG4gICAgICB9XG5cbiAgICAgIC8vIGZhbGxiYWNrXG4gICAgICByZXR1cm4gJ3YnO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIG9yaWVudGF0aW9uIGlzIHRvcCBvciBib3R0b21cblxuICAgICAgLy8gb3Bwb3NpdGUgdmVydGljYWwgb3JpZW50YXRpb24gb3Igc2FtZSBvcmllbnRhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBpc09wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pIHx8XG4gICAgICAgIGlzU2FtZShhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICd2JztcbiAgICAgIH1cblxuICAgICAgLy8gZmFsbGJhY2tcbiAgICAgIHJldHVybiAnaCc7XG4gICAgfVxuICB9XG5cbiAgLy8gYXR0YWNoZWQgdG8gZWl0aGVyIHRvcC1yaWdodCwgdG9wLWxlZnQsIGJvdHRvbS1yaWdodCBvciBib3R0b20tbGVmdCBjb3JuZXJcblxuICAvLyBvcmllbnRhdGlvbiBpcyByaWdodCwgbGVmdFxuICAvLyBvciBzYW1lIHZlcnRpY2FsIG9yaWVudGF0aW9uIGJ1dCBhbHNvIHJpZ2h0IG9yIGxlZnRcbiAgaWYgKGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKSB8fFxuICAgIChpc1NhbWUoZ2V0VmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiksIGdldFZlcnRpY2FsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pKSAmJlxuICAgICAgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKSkpIHtcbiAgICByZXR1cm4gJ2gnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAndic7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlLFxuICBhZGQgYXMgY29sbGVjdGlvbkFkZFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgTGFiZWxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbW9kZWwnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQSBoYW5kbGVyIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgdW5kZXJseWluZyBCUE1OIDIuMCBYTUwgKyBESVxuICogb25jZSBjaGFuZ2VzIG9uIHRoZSBkaWFncmFtIGhhcHBlblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uVXBkYXRlcihcbiAgICBldmVudEJ1cywgYnBtbkZhY3RvcnksIGNvbm5lY3Rpb25Eb2NraW5nLFxuICAgIHRyYW5zbGF0ZSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG5cblxuICAvLyBjb25uZWN0aW9uIGNyb3BwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvLyBjcm9wIGNvbm5lY3Rpb24gZW5kcyBkdXJpbmcgY3JlYXRlL3VwZGF0ZVxuICBmdW5jdGlvbiBjcm9wQ29ubmVjdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgY29ubmVjdGlvbjtcblxuICAgIGlmICghY29udGV4dC5jcm9wcGVkICYmIGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgIT09IGZhbHNlKSB7XG4gICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuICAgICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb25uZWN0aW9uRG9ja2luZy5nZXRDcm9wcGVkV2F5cG9pbnRzKGNvbm5lY3Rpb24pO1xuICAgICAgY29udGV4dC5jcm9wcGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnLFxuICAgICdjb25uZWN0aW9uLmNyZWF0ZSdcbiAgXSwgY3JvcENvbm5lY3Rpb24pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnY29ubmVjdGlvbi5sYXlvdXQnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICBkZWxldGUgZS5jb250ZXh0LmNyb3BwZWQ7XG4gIH0pO1xuXG5cblxuICAvLyBCUE1OICsgREkgdXBkYXRlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4gIC8vIHVwZGF0ZSBwYXJlbnRcbiAgZnVuY3Rpb24gdXBkYXRlUGFyZW50KGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dDtcblxuICAgIHNlbGYudXBkYXRlUGFyZW50KGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLCBjb250ZXh0Lm9sZFBhcmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnNlVXBkYXRlUGFyZW50KGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dDtcblxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dC5zaGFwZSB8fCBjb250ZXh0LmNvbm5lY3Rpb24sXG5cbiAgICAgICAgLy8gb2xkUGFyZW50IGlzIHRoZSAob2xkKSBuZXcgcGFyZW50LCBiZWNhdXNlIHdlIGFyZSB1bmRvaW5nXG4gICAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQucGFyZW50IHx8IGNvbnRleHQubmV3UGFyZW50O1xuXG4gICAgc2VsZi51cGRhdGVQYXJlbnQoZWxlbWVudCwgb2xkUGFyZW50KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZSdcbiAgXSwgaWZCcG1uKHVwZGF0ZVBhcmVudCkpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoW1xuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZSdcbiAgXSwgaWZCcG1uKHJldmVyc2VVcGRhdGVQYXJlbnQpKTtcblxuICAvKlxuICAgKiAjIyBVcGRhdGluZyBQYXJlbnRcbiAgICpcbiAgICogV2hlbiBtb3JwaGluZyBhIFByb2Nlc3MgaW50byBhIENvbGxhYm9yYXRpb24gb3IgdmljZS12ZXJzYSxcbiAgICogbWFrZSBzdXJlIHRoYXQgYm90aCB0aGUgKnNlbWFudGljKiBhbmQgKmRpKiBwYXJlbnQgb2YgZWFjaCBlbGVtZW50XG4gICAqIGlzIHVwZGF0ZWQuXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVSb290KGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBvbGRSb290ID0gY29udGV4dC5vbGRSb290LFxuICAgICAgICBjaGlsZHJlbiA9IG9sZFJvb3QuY2hpbGRyZW47XG5cbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgaWYgKGlzKGNoaWxkLCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICAgIHNlbGYudXBkYXRlUGFyZW50KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoWyAnY2FudmFzLnVwZGF0ZVJvb3QnIF0sIHVwZGF0ZVJvb3QpO1xuICB0aGlzLnJldmVydGVkKFsgJ2NhbnZhcy51cGRhdGVSb290JyBdLCB1cGRhdGVSb290KTtcblxuXG4gIC8vIHVwZGF0ZSBib3VuZHNcbiAgZnVuY3Rpb24gdXBkYXRlQm91bmRzKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGVCb3VuZHMoc2hhcGUpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnIF0sIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuXG4gICAgLy8gZXhjbHVkZSBsYWJlbHMgYmVjYXVzZSB0aGV5J3JlIGhhbmRsZWQgc2VwYXJhdGVseSBkdXJpbmcgc2hhcGUuY2hhbmdlZFxuICAgIGlmIChldmVudC5jb250ZXh0LnNoYXBlLnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVCb3VuZHMoZXZlbnQpO1xuICB9KSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnIF0sIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuXG4gICAgLy8gZXhjbHVkZSBsYWJlbHMgYmVjYXVzZSB0aGV5J3JlIGhhbmRsZWQgc2VwYXJhdGVseSBkdXJpbmcgc2hhcGUuY2hhbmdlZFxuICAgIGlmIChldmVudC5jb250ZXh0LnNoYXBlLnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVCb3VuZHMoZXZlbnQpO1xuICB9KSk7XG5cbiAgLy8gSGFuZGxlIGxhYmVscyBzZXBhcmF0ZWx5LiBUaGlzIGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgbGFiZWwgYm91bmRzIGhhdmUgdG8gYmUgdXBkYXRlZFxuICAvLyBldmVyeSB0aW1lIGl0cyBzaGFwZSBjaGFuZ2VzLCBub3Qgb25seSBvbiBtb3ZlLCBjcmVhdGUgYW5kIHJlc2l6ZS5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChldmVudC5lbGVtZW50LnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHVwZGF0ZUJvdW5kcyh7IGNvbnRleHQ6IHsgc2hhcGU6IGV2ZW50LmVsZW1lbnQgfSB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGF0dGFjaCAvIGRldGFjaCBjb25uZWN0aW9uXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbm5lY3Rpb24oZSkge1xuICAgIHNlbGYudXBkYXRlQ29ubmVjdGlvbihlLmNvbnRleHQpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb24pKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ucmVjb25uZWN0J1xuICBdLCBpZkJwbW4odXBkYXRlQ29ubmVjdGlvbikpO1xuXG5cbiAgLy8gdXBkYXRlIHdheXBvaW50c1xuICBmdW5jdGlvbiB1cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKGUpIHtcbiAgICBzZWxmLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMoZS5jb250ZXh0LmNvbm5lY3Rpb24pO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnLFxuICBdLCBpZkJwbW4odXBkYXRlQ29ubmVjdGlvbldheXBvaW50cykpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyxcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMpKTtcblxuICAvLyB1cGRhdGUgY29uZGl0aW9uYWwvZGVmYXVsdCBmbG93c1xuICB0aGlzLmV4ZWN1dGVkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgb2xkU291cmNlID0gY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgICBjb25uZWN0aW9uQm8gPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uKSxcbiAgICAgICAgb2xkU291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChvbGRTb3VyY2UpLFxuICAgICAgICBuZXdTb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSk7XG5cbiAgICAvLyByZW1vdmUgY29uZGl0aW9uIGZyb20gY29ubmVjdGlvbiBvbiByZWNvbm5lY3QgdG8gbmV3IHNvdXJjZVxuICAgIC8vIGlmIG5ldyBzb3VyY2UgY2FuIE5PVCBoYXZlIGNvbmRpb25hbCBzZXF1ZW5jZSBmbG93XG4gICAgaWYgKGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uICYmICFpc0FueShuZXdTb3VyY2VCbywgW1xuICAgICAgJ2JwbW46QWN0aXZpdHknLFxuICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAnYnBtbjpJbmNsdXNpdmVHYXRld2F5J1xuICAgIF0pKSB7XG4gICAgICBjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb24gPSBjb25uZWN0aW9uQm8uY29uZGl0aW9uRXhwcmVzc2lvbjtcblxuICAgICAgZGVsZXRlIGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGZyb20gb2xkIHNvdXJjZSBmbG93IG9uIHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgLy8gaWYgc291cmNlIGNoYW5nZWRcbiAgICBpZiAob2xkU291cmNlICE9PSBuZXdTb3VyY2UgJiYgb2xkU291cmNlQm8uZGVmYXVsdCA9PT0gY29ubmVjdGlvbkJvKSB7XG4gICAgICBjb250ZXh0Lm9sZERlZmF1bHQgPSBvbGRTb3VyY2VCby5kZWZhdWx0O1xuXG4gICAgICBkZWxldGUgb2xkU291cmNlQm8uZGVmYXVsdDtcbiAgICB9XG4gIH0pKTtcblxuICB0aGlzLnJldmVydGVkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgb2xkU291cmNlID0gY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgICBjb25uZWN0aW9uQm8gPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uKSxcbiAgICAgICAgb2xkU291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChvbGRTb3VyY2UpLFxuICAgICAgICBuZXdTb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSk7XG5cbiAgICAvLyBhZGQgY29uZGl0aW9uIHRvIGNvbm5lY3Rpb24gb24gcmV2ZXJ0IHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgaWYgKGNvbnRleHQub2xkQ29uZGl0aW9uRXhwcmVzc2lvbikge1xuICAgICAgY29ubmVjdGlvbkJvLmNvbmRpdGlvbkV4cHJlc3Npb24gPSBjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgLy8gYWRkIGRlZmF1bHQgdG8gb2xkIHNvdXJjZSBvbiByZXZlcnQgcmVjb25uZWN0IHRvIG5ldyBzb3VyY2VcbiAgICBpZiAoY29udGV4dC5vbGREZWZhdWx0KSB7XG4gICAgICBvbGRTb3VyY2VCby5kZWZhdWx0ID0gY29udGV4dC5vbGREZWZhdWx0O1xuXG4gICAgICBkZWxldGUgbmV3U291cmNlQm8uZGVmYXVsdDtcbiAgICB9XG4gIH0pKTtcblxuICAvLyB1cGRhdGUgYXR0YWNobWVudHNcbiAgZnVuY3Rpb24gdXBkYXRlQXR0YWNobWVudChlKSB7XG4gICAgc2VsZi51cGRhdGVBdHRhY2htZW50KGUuY29udGV4dCk7XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ2VsZW1lbnQudXBkYXRlQXR0YWNobWVudCcgXSwgaWZCcG1uKHVwZGF0ZUF0dGFjaG1lbnQpKTtcbiAgdGhpcy5yZXZlcnRlZChbICdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnIF0sIGlmQnBtbih1cGRhdGVBdHRhY2htZW50KSk7XG59XG5cbmluaGVyaXRzKEJwbW5VcGRhdGVyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5CcG1uVXBkYXRlci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtbkZhY3RvcnknLFxuICAnY29ubmVjdGlvbkRvY2tpbmcnLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuXG4vLyBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVBdHRhY2htZW50ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBidXNpbmVzc09iamVjdCA9IHNoYXBlLmJ1c2luZXNzT2JqZWN0LFxuICAgICAgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgYnVzaW5lc3NPYmplY3QuYXR0YWNoZWRUb1JlZiA9IGhvc3QgJiYgaG9zdC5idXNpbmVzc09iamVjdDtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVQYXJlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBvbGRQYXJlbnQpIHtcblxuICAvLyBkbyBub3QgdXBkYXRlIEJQTU4gMi4wIGxhYmVsIHBhcmVudFxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIExhYmVsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZGF0YSBzdG9yZXMgaW4gY29sbGFib3JhdGlvbnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBieSBEYXRhU3RvcmVCZWhhdmlvclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcbiAgICAgIGVsZW1lbnQucGFyZW50ICYmXG4gICAgICBpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhcmVudFNoYXBlID0gZWxlbWVudC5wYXJlbnQ7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gcGFyZW50U2hhcGUgJiYgcGFyZW50U2hhcGUuYnVzaW5lc3NPYmplY3QsXG4gICAgICBwYXJlbnREaSA9IHBhcmVudEJ1c2luZXNzT2JqZWN0ICYmIHBhcmVudEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgdGhpcy51cGRhdGVGbG93Tm9kZVJlZnMoYnVzaW5lc3NPYmplY3QsIHBhcmVudEJ1c2luZXNzT2JqZWN0LCBvbGRQYXJlbnQgJiYgb2xkUGFyZW50LmJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nKSkge1xuICAgIGlmIChlbGVtZW50LnNvdXJjZSkge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LnNvdXJjZS5idXNpbmVzc09iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgaWYgKGVsZW1lbnQudGFyZ2V0KSB7XG4gICAgICBwYXJlbnRCdXNpbmVzc09iamVjdCA9IGVsZW1lbnQudGFyZ2V0LmJ1c2luZXNzT2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnRCdXNpbmVzc09iamVjdCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgcGFyZW50QnVzaW5lc3NPYmplY3QpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgJiYgYnVzaW5lc3NPYmplY3QuZGF0YU9iamVjdFJlZikge1xuICAgIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QuZGF0YU9iamVjdFJlZiwgcGFyZW50QnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgdGhpcy51cGRhdGVEaVBhcmVudChidXNpbmVzc09iamVjdC5kaSwgcGFyZW50RGkpO1xufTtcblxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQm91bmRzID0gZnVuY3Rpb24oc2hhcGUpIHtcblxuICB2YXIgZGkgPSBzaGFwZS5idXNpbmVzc09iamVjdC5kaTtcblxuICB2YXIgdGFyZ2V0ID0gKHNoYXBlIGluc3RhbmNlb2YgTGFiZWwpID8gdGhpcy5fZ2V0TGFiZWwoZGkpIDogZGk7XG5cbiAgdmFyIGJvdW5kcyA9IHRhcmdldC5ib3VuZHM7XG5cbiAgaWYgKCFib3VuZHMpIHtcbiAgICBib3VuZHMgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUJvdW5kcygpO1xuICAgIHRhcmdldC5zZXQoJ2JvdW5kcycsIGJvdW5kcyk7XG4gIH1cblxuICBhc3NpZ24oYm91bmRzLCB7XG4gICAgeDogc2hhcGUueCxcbiAgICB5OiBzaGFwZS55LFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodFxuICB9KTtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVGbG93Tm9kZVJlZnMgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCwgbmV3Q29udGFpbm1lbnQsIG9sZENvbnRhaW5tZW50KSB7XG5cbiAgaWYgKG9sZENvbnRhaW5tZW50ID09PSBuZXdDb250YWlubWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBvbGRSZWZzLCBuZXdSZWZzO1xuXG4gIGlmIChpcyAob2xkQ29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG9sZFJlZnMgPSBvbGRDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvblJlbW92ZShvbGRSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoaXMobmV3Q29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG5ld1JlZnMgPSBuZXdDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvbkFkZChuZXdSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cbn07XG5cblxuLy8gdXBkYXRlIGV4aXN0aW5nIHNvdXJjZUVsZW1lbnQgYW5kIHRhcmdldEVsZW1lbnQgZGkgaW5mb3JtYXRpb25cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVEaUNvbm5lY3Rpb24gPSBmdW5jdGlvbihkaSwgbmV3U291cmNlLCBuZXdUYXJnZXQpIHtcblxuICBpZiAoZGkuc291cmNlRWxlbWVudCAmJiBkaS5zb3VyY2VFbGVtZW50LmJwbW5FbGVtZW50ICE9PSBuZXdTb3VyY2UpIHtcbiAgICBkaS5zb3VyY2VFbGVtZW50ID0gbmV3U291cmNlICYmIG5ld1NvdXJjZS5kaTtcbiAgfVxuXG4gIGlmIChkaS50YXJnZXRFbGVtZW50ICYmIGRpLnRhcmdldEVsZW1lbnQuYnBtbkVsZW1lbnQgIT09IG5ld1RhcmdldCkge1xuICAgIGRpLnRhcmdldEVsZW1lbnQgPSBuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0LmRpO1xuICB9XG5cbn07XG5cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZURpUGFyZW50ID0gZnVuY3Rpb24oZGksIHBhcmVudERpKSB7XG5cbiAgaWYgKHBhcmVudERpICYmICFpcyhwYXJlbnREaSwgJ2JwbW5kaTpCUE1OUGxhbmUnKSkge1xuICAgIHBhcmVudERpID0gcGFyZW50RGkuJHBhcmVudDtcbiAgfVxuXG4gIGlmIChkaS4kcGFyZW50ID09PSBwYXJlbnREaSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwbGFuZUVsZW1lbnRzID0gKHBhcmVudERpIHx8IGRpLiRwYXJlbnQpLmdldCgncGxhbmVFbGVtZW50Jyk7XG5cbiAgaWYgKHBhcmVudERpKSB7XG4gICAgcGxhbmVFbGVtZW50cy5wdXNoKGRpKTtcbiAgICBkaS4kcGFyZW50ID0gcGFyZW50RGk7XG4gIH0gZWxzZSB7XG4gICAgY29sbGVjdGlvblJlbW92ZShwbGFuZUVsZW1lbnRzLCBkaSk7XG4gICAgZGkuJHBhcmVudCA9IG51bGw7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25zKGVsZW1lbnQpIHtcbiAgd2hpbGUgKGVsZW1lbnQgJiYgIWlzKGVsZW1lbnQsICdicG1uOkRlZmluaXRpb25zJykpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudC4kcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS5nZXRMYW5lU2V0ID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG5cbiAgdmFyIGxhbmVTZXQsIGxhbmVTZXRzO1xuXG4gIC8vIGJwbW46TGFuZVxuICBpZiAoaXMoY29udGFpbmVyLCAnYnBtbjpMYW5lJykpIHtcbiAgICBsYW5lU2V0ID0gY29udGFpbmVyLmNoaWxkTGFuZVNldDtcblxuICAgIGlmICghbGFuZVNldCkge1xuICAgICAgbGFuZVNldCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpMYW5lU2V0Jyk7XG4gICAgICBjb250YWluZXIuY2hpbGRMYW5lU2V0ID0gbGFuZVNldDtcbiAgICAgIGxhbmVTZXQuJHBhcmVudCA9IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFuZVNldDtcbiAgfVxuXG4gIC8vIGJwbW46UGFydGljaXBhbnRcbiAgaWYgKGlzKGNvbnRhaW5lciwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wcm9jZXNzUmVmO1xuICB9XG5cbiAgLy8gYnBtbjpGbG93RWxlbWVudHNDb250YWluZXJcbiAgbGFuZVNldHMgPSBjb250YWluZXIuZ2V0KCdsYW5lU2V0cycpO1xuICBsYW5lU2V0ID0gbGFuZVNldHNbMF07XG5cbiAgaWYgKCFsYW5lU2V0KSB7XG4gICAgbGFuZVNldCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpMYW5lU2V0Jyk7XG4gICAgbGFuZVNldC4kcGFyZW50ID0gY29udGFpbmVyO1xuICAgIGxhbmVTZXRzLnB1c2gobGFuZVNldCk7XG4gIH1cblxuICByZXR1cm4gbGFuZVNldDtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVTZW1hbnRpY1BhcmVudCA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0LCBuZXdQYXJlbnQsIHZpc3VhbFBhcmVudCkge1xuXG4gIHZhciBjb250YWlubWVudCxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBpZiAoYnVzaW5lc3NPYmplY3QuJHBhcmVudCA9PT0gbmV3UGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhSW5wdXQnKSB8fCBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YU91dHB1dCcpKSB7XG5cbiAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICdwcm9jZXNzUmVmJyBpbiBuZXdQYXJlbnQpIHtcbiAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC5wcm9jZXNzUmVmO1xuICAgIH1cblxuICAgIC8vIGFscmVhZHkgaW4gY29ycmVjdCBpb1NwZWNpZmljYXRpb25cbiAgICBpZiAoJ2lvU3BlY2lmaWNhdGlvbicgaW4gbmV3UGFyZW50ICYmIG5ld1BhcmVudC5pb1NwZWNpZmljYXRpb24gPT09IGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkxhbmUnKSkge1xuXG4gICAgaWYgKG5ld1BhcmVudCkge1xuICAgICAgbmV3UGFyZW50ID0gdGhpcy5nZXRMYW5lU2V0KG5ld1BhcmVudCk7XG4gICAgfVxuXG4gICAgY29udGFpbm1lbnQgPSAnbGFuZXMnO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dFbGVtZW50JykpIHtcblxuICAgIGlmIChuZXdQYXJlbnQpIHtcblxuICAgICAgaWYgKGlzKG5ld1BhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucHJvY2Vzc1JlZjtcbiAgICAgIH0gZWxzZVxuXG4gICAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpMYW5lJykpIHtcbiAgICAgICAgZG8ge1xuXG4gICAgICAgICAgLy8gdW53cmFwIExhbmUgLT4gTGFuZVNldCAtPiAoTGFuZSB8IEZsb3dFbGVtZW50c0NvbnRhaW5lcilcbiAgICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQuJHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9IHdoaWxlIChpcyhuZXdQYXJlbnQsICdicG1uOkxhbmUnKSk7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250YWlubWVudCA9ICdmbG93RWxlbWVudHMnO1xuXG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46QXJ0aWZhY3QnKSkge1xuXG4gICAgd2hpbGUgKG5ld1BhcmVudCAmJlxuICAgICAgICAgICAhaXMobmV3UGFyZW50LCAnYnBtbjpQcm9jZXNzJykgJiZcbiAgICAgICAgICAgIWlzKG5ld1BhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmXG4gICAgICAgICAgICFpcyhuZXdQYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuXG4gICAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC5wcm9jZXNzUmVmO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC4kcGFyZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5tZW50ID0gJ2FydGlmYWN0cyc7XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46TWVzc2FnZUZsb3cnKSkge1xuICAgIGNvbnRhaW5tZW50ID0gJ21lc3NhZ2VGbG93cyc7XG5cbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgY29udGFpbm1lbnQgPSAncGFydGljaXBhbnRzJztcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGFydGljaXBhbnRzIHByb2Nlc3MgaXMgcHJvcGVybHkgYXR0YWNoZWQgLyBkZXRhY2hlZFxuICAgIC8vIGZyb20gdGhlIFhNTCBkb2N1bWVudFxuXG4gICAgdmFyIHByb2Nlc3MgPSBidXNpbmVzc09iamVjdC5wcm9jZXNzUmVmLFxuICAgICAgICBkZWZpbml0aW9ucztcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBkZWZpbml0aW9ucyA9IGdldERlZmluaXRpb25zKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgfHwgbmV3UGFyZW50KTtcblxuICAgICAgaWYgKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcbiAgICAgICAgY29sbGVjdGlvblJlbW92ZShkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBwcm9jZXNzKTtcbiAgICAgICAgcHJvY2Vzcy4kcGFyZW50ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1BhcmVudCkge1xuICAgICAgICBjb2xsZWN0aW9uQWRkKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIHByb2Nlc3MpO1xuICAgICAgICBwcm9jZXNzLiRwYXJlbnQgPSBkZWZpbml0aW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJykpIHtcbiAgICBjb250YWlubWVudCA9ICdkYXRhT3V0cHV0QXNzb2NpYXRpb25zJztcbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgY29udGFpbm1lbnQgPSAnZGF0YUlucHV0QXNzb2NpYXRpb25zJztcbiAgfVxuXG4gIGlmICghY29udGFpbm1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKFxuICAgICAgJ25vIHBhcmVudCBmb3Ige2VsZW1lbnR9IGluIHtwYXJlbnR9JyxcbiAgICAgIHtcbiAgICAgICAgZWxlbWVudDogYnVzaW5lc3NPYmplY3QuaWQsXG4gICAgICAgIHBhcmVudDogbmV3UGFyZW50LmlkXG4gICAgICB9XG4gICAgKSk7XG4gIH1cblxuICB2YXIgY2hpbGRyZW47XG5cbiAgaWYgKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcblxuICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBwYXJlbnRcbiAgICBjaGlsZHJlbiA9IGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQuZ2V0KGNvbnRhaW5tZW50KTtcbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGNoaWxkcmVuLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoIW5ld1BhcmVudCkge1xuICAgIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBudWxsO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gYWRkIHRvIG5ldyBwYXJlbnRcbiAgICBjaGlsZHJlbiA9IG5ld1BhcmVudC5nZXQoY29udGFpbm1lbnQpO1xuICAgIGNoaWxkcmVuLnB1c2goYnVzaW5lc3NPYmplY3QpO1xuICAgIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBuZXdQYXJlbnQ7XG4gIH1cblxuICBpZiAodmlzdWFsUGFyZW50KSB7XG4gICAgdmFyIGRpQ2hpbGRyZW4gPSB2aXN1YWxQYXJlbnQuZ2V0KGNvbnRhaW5tZW50KTtcblxuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2hpbGRyZW4sIGJ1c2luZXNzT2JqZWN0KTtcblxuICAgIGlmIChuZXdQYXJlbnQpIHtcblxuICAgICAgaWYgKCFkaUNoaWxkcmVuKSB7XG4gICAgICAgIGRpQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgbmV3UGFyZW50LnNldChjb250YWlubWVudCwgZGlDaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIGRpQ2hpbGRyZW4ucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgfVxuICB9XG59O1xuXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICBjb25uZWN0aW9uLmJ1c2luZXNzT2JqZWN0LmRpLnNldCgnd2F5cG9pbnQnLCB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaVdheXBvaW50cyhjb25uZWN0aW9uLndheXBvaW50cykpO1xufTtcblxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbiksXG4gICAgICBuZXdTb3VyY2UgPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uLnNvdXJjZSksXG4gICAgICBuZXdUYXJnZXQgPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uLnRhcmdldCksXG4gICAgICB2aXN1YWxQYXJlbnQ7XG5cbiAgaWYgKCFpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YUFzc29jaWF0aW9uJykpIHtcblxuICAgIHZhciBpbnZlcnNlU2V0ID0gaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlNlcXVlbmNlRmxvdycpO1xuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiAhPT0gbmV3U291cmNlKSB7XG4gICAgICBpZiAoaW52ZXJzZVNldCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiAmJiBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYuZ2V0KCdvdXRnb2luZycpLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgaWYgKG5ld1NvdXJjZSAmJiBuZXdTb3VyY2UuZ2V0KCdvdXRnb2luZycpKSB7XG4gICAgICAgICAgbmV3U291cmNlLmdldCgnb3V0Z29pbmcnKS5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYgPSBuZXdTb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiAhPT0gbmV3VGFyZ2V0KSB7XG4gICAgICBpZiAoaW52ZXJzZVNldCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiAmJiBidXNpbmVzc09iamVjdC50YXJnZXRSZWYuZ2V0KCdpbmNvbWluZycpLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBuZXdUYXJnZXQuZ2V0KCdpbmNvbWluZycpKSB7XG4gICAgICAgICAgbmV3VGFyZ2V0LmdldCgnaW5jb21pbmcnKS5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidXNpbmVzc09iamVjdC50YXJnZXRSZWYgPSBuZXdUYXJnZXQ7XG4gICAgfVxuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykpIHtcblxuICAgIC8vIGhhbmRsZSBvYm5veGlvdXMgaXNNc29tZSBzb3VyY2VSZWZcbiAgICBidXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZVJlZicpWzBdID0gbmV3U291cmNlO1xuXG4gICAgdmlzdWFsUGFyZW50ID0gY29udGV4dC5wYXJlbnQgfHwgY29udGV4dC5uZXdQYXJlbnQgfHwgbmV3VGFyZ2V0O1xuXG4gICAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgbmV3VGFyZ2V0LCB2aXN1YWxQYXJlbnQpO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgdmlzdWFsUGFyZW50ID0gY29udGV4dC5wYXJlbnQgfHwgY29udGV4dC5uZXdQYXJlbnQgfHwgbmV3U291cmNlO1xuXG4gICAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgbmV3U291cmNlLCB2aXN1YWxQYXJlbnQpO1xuXG4gICAgLy8gdGFyZ2V0UmVmID0gbmV3IHRhcmdldFxuICAgIGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiA9IG5ld1RhcmdldDtcbiAgfVxuXG4gIHRoaXMudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICB0aGlzLnVwZGF0ZURpQ29ubmVjdGlvbihidXNpbmVzc09iamVjdC5kaSwgbmV3U291cmNlLCBuZXdUYXJnZXQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLl9nZXRMYWJlbCA9IGZ1bmN0aW9uKGRpKSB7XG4gIGlmICghZGkubGFiZWwpIHtcbiAgICBkaS5sYWJlbCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpTGFiZWwoKTtcbiAgfVxuXG4gIHJldHVybiBkaS5sYWJlbDtcbn07XG5cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhlIGV2ZW50IGxpc3RlbmVyIGlzIG9ubHkgY2FsbGVkXG4gKiBpZiB0aGUgdG91Y2hlZCBlbGVtZW50IGlzIGEgQlBNTiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259IGd1YXJkZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gaWZCcG1uKGZuKSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICBmbihldmVudCk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IEJhc2VFbGVtZW50RmFjdG9yeSBmcm9tICdkaWFncmFtLWpzL2xpYi9jb3JlL0VsZW1lbnRGYWN0b3J5JztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9MQUJFTF9TSVpFXG59IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuXG4vKipcbiAqIEEgYnBtbi1hd2FyZSBmYWN0b3J5IGZvciBkaWFncmFtLWpzIHNoYXBlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbGVtZW50RmFjdG9yeShicG1uRmFjdG9yeSwgbW9kZGxlLCB0cmFuc2xhdGUpIHtcbiAgQmFzZUVsZW1lbnRGYWN0b3J5LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cbmluaGVyaXRzKEVsZW1lbnRGYWN0b3J5LCBCYXNlRWxlbWVudEZhY3RvcnkpO1xuXG5FbGVtZW50RmFjdG9yeS4kaW5qZWN0ID0gW1xuICAnYnBtbkZhY3RvcnknLFxuICAnbW9kZGxlJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5iYXNlQ3JlYXRlID0gQmFzZUVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGU7XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgYXR0cnMpIHtcblxuICAvLyBubyBzcGVjaWFsIG1hZ2ljIGZvciBsYWJlbHMsXG4gIC8vIHdlIGFzc3VtZSB0aGVpciBidXNpbmVzc09iamVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlZFxuICAvLyBhbmQgd2lyZWQgdmlhIGF0dHJzXG4gIGlmIChlbGVtZW50VHlwZSA9PT0gJ2xhYmVsJykge1xuICAgIHJldHVybiB0aGlzLmJhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGFzc2lnbih7IHR5cGU6ICdsYWJlbCcgfSwgREVGQVVMVF9MQUJFTF9TSVpFLCBhdHRycykpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlQnBtbkVsZW1lbnQoZWxlbWVudFR5cGUsIGF0dHJzKTtcbn07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVCcG1uRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnRUeXBlLCBhdHRycykge1xuICB2YXIgc2l6ZSxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBhdHRycyA9IGF0dHJzIHx8IHt9O1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGF0dHJzLmJ1c2luZXNzT2JqZWN0O1xuXG4gIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICBpZiAoIWF0dHJzLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIHNoYXBlIHR5cGUgc3BlY2lmaWVkJykpO1xuICAgIH1cblxuICAgIGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKGF0dHJzLnR5cGUpO1xuICB9XG5cbiAgaWYgKCFidXNpbmVzc09iamVjdC5kaSkge1xuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gJ3Jvb3QnKSB7XG4gICAgICBidXNpbmVzc09iamVjdC5kaSA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpUGxhbmUoYnVzaW5lc3NPYmplY3QsIFtdLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfZGknXG4gICAgICB9KTtcbiAgICB9IGVsc2VcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgYnVzaW5lc3NPYmplY3QuZGkgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUVkZ2UoYnVzaW5lc3NPYmplY3QsIFtdLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfZGknXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVzaW5lc3NPYmplY3QuZGkgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaVNoYXBlKGJ1c2luZXNzT2JqZWN0LCB7fSwge1xuICAgICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2RpJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHcm91cCcpKSB7XG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgaXNGcmFtZTogdHJ1ZVxuICAgIH0sIGF0dHJzKTtcbiAgfVxuXG4gIGlmIChhdHRycy5kaSkge1xuICAgIGFzc2lnbihidXNpbmVzc09iamVjdC5kaSwgYXR0cnMuZGkpO1xuXG4gICAgZGVsZXRlIGF0dHJzLmRpO1xuICB9XG5cbiAgYXBwbHlBdHRyaWJ1dGVzKGJ1c2luZXNzT2JqZWN0LCBhdHRycywgW1xuICAgICdwcm9jZXNzUmVmJyxcbiAgICAnaXNJbnRlcnJ1cHRpbmcnLFxuICAgICdhc3NvY2lhdGlvbkRpcmVjdGlvbicsXG4gICAgJ2lzRm9yQ29tcGVuc2F0aW9uJ1xuICBdKTtcblxuICBpZiAoYXR0cnMuaXNFeHBhbmRlZCkge1xuICAgIGFwcGx5QXR0cmlidXRlKGJ1c2luZXNzT2JqZWN0LmRpLCBhdHRycywgJ2lzRXhwYW5kZWQnKTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScpKSB7XG4gICAgYnVzaW5lc3NPYmplY3QuZGkuaXNNYXJrZXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBldmVudERlZmluaXRpb25zLFxuICAgICAgbmV3RXZlbnREZWZpbml0aW9uO1xuXG4gIGlmIChhdHRycy5ldmVudERlZmluaXRpb25UeXBlKSB7XG4gICAgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpIHx8IFtdO1xuICAgIG5ld0V2ZW50RGVmaW5pdGlvbiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZShhdHRycy5ldmVudERlZmluaXRpb25UeXBlLCBhdHRycy5ldmVudERlZmluaXRpb25BdHRycyk7XG5cbiAgICBpZiAoYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSA9PT0gJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKSB7XG4gICAgICBuZXdFdmVudERlZmluaXRpb24uY29uZGl0aW9uID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nKTtcbiAgICB9XG5cbiAgICBldmVudERlZmluaXRpb25zLnB1c2gobmV3RXZlbnREZWZpbml0aW9uKTtcblxuICAgIG5ld0V2ZW50RGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucyA9IGV2ZW50RGVmaW5pdGlvbnM7XG5cbiAgICBkZWxldGUgYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZTtcbiAgfVxuXG4gIHNpemUgPSB0aGlzLl9nZXREZWZhdWx0U2l6ZShidXNpbmVzc09iamVjdCk7XG5cbiAgYXR0cnMgPSBhc3NpZ24oe1xuICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcbiAgICBpZDogYnVzaW5lc3NPYmplY3QuaWRcbiAgfSwgc2l6ZSwgYXR0cnMpO1xuXG4gIHJldHVybiB0aGlzLmJhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGF0dHJzKTtcbn07XG5cblxuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLl9nZXREZWZhdWx0U2l6ZSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcblxuICAgIGlmIChpc0V4cGFuZGVkKHNlbWFudGljKSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDM1MCwgaGVpZ2h0OiAyMDAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGFzaycpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNTAsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAzNiwgaGVpZ2h0OiAzNiB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgaWYgKGlzRXhwYW5kZWQoc2VtYW50aWMpKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogNjAwLCBoZWlnaHQ6IDI1MCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogNDAwLCBoZWlnaHQ6IDYwIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNDAwLCBoZWlnaHQ6IDEwMCB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMzYsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNTAsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAxMDAsIGhlaWdodDogMzAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46R3JvdXAnKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAzMDAsIGhlaWdodDogMzAwIH07XG4gIH1cblxuICByZXR1cm4geyB3aWR0aDogMTAwLCBoZWlnaHQ6IDgwIH07XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIHBhcnRpY2lwYW50LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFthdHRyc10gYXR0cnNcbiAqXG4gKiBAcmV0dXJucyB7ZGpzLm1vZGVsLlNoYXBlfVxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlUGFydGljaXBhbnRTaGFwZSA9IGZ1bmN0aW9uKGF0dHJzKSB7XG5cbiAgaWYgKCFpc09iamVjdChhdHRycykpIHtcbiAgICBhdHRycyA9IHsgaXNFeHBhbmRlZDogYXR0cnMgfTtcbiAgfVxuXG4gIGF0dHJzID0gYXNzaWduKHsgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnIH0sIGF0dHJzIHx8IHt9KTtcblxuICAvLyBwYXJ0aWNpcGFudHMgYXJlIGV4cGFuZGVkIGJ5IGRlZmF1bHRcbiAgaWYgKGF0dHJzLmlzRXhwYW5kZWQgIT09IGZhbHNlKSB7XG4gICAgYXR0cnMucHJvY2Vzc1JlZiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9jZXNzJyk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jcmVhdGVTaGFwZShhdHRycyk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEFwcGx5IGF0dHJpYnV0ZXMgZnJvbSBhIG1hcCB0byB0aGUgZ2l2ZW4gZWxlbWVudCxcbiAqIHJlbW92ZSBhdHRyaWJ1dGUgZnJvbSB0aGUgbWFwIG9uIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7QmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJzIChpbi9vdXQgbWFwIG9mIGF0dHJpYnV0ZXMpXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGF0dHJpYnV0ZU5hbWVzIG5hbWUgb2YgYXR0cmlidXRlcyB0byBhcHBseVxuICovXG5mdW5jdGlvbiBhcHBseUF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cnMsIGF0dHJpYnV0ZU5hbWVzKSB7XG5cbiAgZm9yRWFjaChhdHRyaWJ1dGVOYW1lcywgZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICBpZiAoYXR0cnNbcHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwcGx5QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJzLCBwcm9wZXJ0eSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBuYW1lZCBwcm9wZXJ0eSB0byBlbGVtZW50IGFuZCBkcmFpbiBpdCBmcm9tIHRoZSBhdHRyc1xuICogY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Jhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyAoaW4vb3V0IG1hcCBvZiBhdHRyaWJ1dGVzKVxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWUgdG8gYXBwbHlcbiAqL1xuZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cnMsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgZWxlbWVudFthdHRyaWJ1dGVOYW1lXSA9IGF0dHJzW2F0dHJpYnV0ZU5hbWVdO1xuXG4gIGRlbGV0ZSBhdHRyc1thdHRyaWJ1dGVOYW1lXTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZU1vZGVsaW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nJztcblxuaW1wb3J0IFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZVByb3BlcnRpZXNIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVDYW52YXNSb290SGFuZGxlciBmcm9tICcuL2NtZC9VcGRhdGVDYW52YXNSb290SGFuZGxlcic7XG5pbXBvcnQgQWRkTGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvQWRkTGFuZUhhbmRsZXInO1xuaW1wb3J0IFNwbGl0TGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvU3BsaXRMYW5lSGFuZGxlcic7XG5pbXBvcnQgUmVzaXplTGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvUmVzaXplTGFuZUhhbmRsZXInO1xuaW1wb3J0IFVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcic7XG5pbXBvcnQgSWRDbGFpbUhhbmRsZXIgZnJvbSAnLi9jbWQvSWRDbGFpbUhhbmRsZXInO1xuaW1wb3J0IFNldENvbG9ySGFuZGxlciBmcm9tICcuL2NtZC9TZXRDb2xvckhhbmRsZXInO1xuXG5pbXBvcnQgVXBkYXRlTGFiZWxIYW5kbGVyIGZyb20gJy4uL2xhYmVsLWVkaXRpbmcvY21kL1VwZGF0ZUxhYmVsSGFuZGxlcic7XG5cblxuLyoqXG4gKiBCUE1OIDIuMCBtb2RlbGluZyBmZWF0dXJlcyBhY3RpdmF0b3JcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50RmFjdG9yeX0gZWxlbWVudEZhY3RvcnlcbiAqIEBwYXJhbSB7Q29tbWFuZFN0YWNrfSBjb21tYW5kU3RhY2tcbiAqIEBwYXJhbSB7QnBtblJ1bGVzfSBicG1uUnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxpbmcoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBjb21tYW5kU3RhY2ssXG4gICAgYnBtblJ1bGVzKSB7XG5cbiAgQmFzZU1vZGVsaW5nLmNhbGwodGhpcywgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBjb21tYW5kU3RhY2spO1xuXG4gIHRoaXMuX2JwbW5SdWxlcyA9IGJwbW5SdWxlcztcbn1cblxuaW5oZXJpdHMoTW9kZWxpbmcsIEJhc2VNb2RlbGluZyk7XG5cbk1vZGVsaW5nLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdjb21tYW5kU3RhY2snLFxuICAnYnBtblJ1bGVzJ1xuXTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuZ2V0SGFuZGxlcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhhbmRsZXJzID0gQmFzZU1vZGVsaW5nLnByb3RvdHlwZS5nZXRIYW5kbGVycy5jYWxsKHRoaXMpO1xuXG4gIGhhbmRsZXJzWydlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnXSA9IFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyO1xuICBoYW5kbGVyc1snY2FudmFzLnVwZGF0ZVJvb3QnXSA9IFVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5hZGQnXSA9IEFkZExhbmVIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5yZXNpemUnXSA9IFJlc2l6ZUxhbmVIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5zcGxpdCddID0gU3BsaXRMYW5lSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2xhbmUudXBkYXRlUmVmcyddID0gVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2lkLnVwZGF0ZUNsYWltJ10gPSBJZENsYWltSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2VsZW1lbnQuc2V0Q29sb3InXSA9IFNldENvbG9ySGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2VsZW1lbnQudXBkYXRlTGFiZWwnXSA9IFVwZGF0ZUxhYmVsSGFuZGxlcjtcblxuICByZXR1cm4gaGFuZGxlcnM7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS51cGRhdGVMYWJlbCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0xhYmVsLCBuZXdCb3VuZHMsIGhpbnRzKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZUxhYmVsJywge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgbmV3TGFiZWw6IG5ld0xhYmVsLFxuICAgIG5ld0JvdW5kczogbmV3Qm91bmRzLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIGhpbnRzKSB7XG5cbiAgdmFyIGJwbW5SdWxlcyA9IHRoaXMuX2JwbW5SdWxlcztcblxuICBpZiAoIWF0dHJzKSB7XG4gICAgYXR0cnMgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBpZiAoIWF0dHJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZVByb3BlcnRpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXG4gIH0pO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlc2l6ZUxhbmUgPSBmdW5jdGlvbihsYW5lU2hhcGUsIG5ld0JvdW5kcywgYmFsYW5jZWQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUucmVzaXplJywge1xuICAgIHNoYXBlOiBsYW5lU2hhcGUsXG4gICAgbmV3Qm91bmRzOiBuZXdCb3VuZHMsXG4gICAgYmFsYW5jZWQ6IGJhbGFuY2VkXG4gIH0pO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmFkZExhbmUgPSBmdW5jdGlvbih0YXJnZXRMYW5lU2hhcGUsIGxvY2F0aW9uKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiB0YXJnZXRMYW5lU2hhcGUsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUuYWRkJywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnRleHQubmV3TGFuZTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5zcGxpdExhbmUgPSBmdW5jdGlvbih0YXJnZXRMYW5lLCBjb3VudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnbGFuZS5zcGxpdCcsIHtcbiAgICBzaGFwZTogdGFyZ2V0TGFuZSxcbiAgICBjb3VudDogY291bnRcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgY3VycmVudCBkaWFncmFtIGludG8gYSBjb2xsYWJvcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5Sb290fSB0aGUgbmV3IHJvb3QgZWxlbWVudFxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubWFrZUNvbGxhYm9yYXRpb24gPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY29sbGFib3JhdGlvbkVsZW1lbnQgPSB0aGlzLl9jcmVhdGUoJ3Jvb3QnLCB7XG4gICAgdHlwZTogJ2JwbW46Q29sbGFib3JhdGlvbidcbiAgfSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbmV3Um9vdDogY29sbGFib3JhdGlvbkVsZW1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29sbGFib3JhdGlvbkVsZW1lbnQ7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlTGFuZVJlZnMgPSBmdW5jdGlvbihmbG93Tm9kZVNoYXBlcywgbGFuZVNoYXBlcykge1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdsYW5lLnVwZGF0ZVJlZnMnLCB7XG4gICAgZmxvd05vZGVTaGFwZXM6IGZsb3dOb2RlU2hhcGVzLFxuICAgIGxhbmVTaGFwZXM6IGxhbmVTaGFwZXNcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgY3VycmVudCBkaWFncmFtIGludG8gYSBwcm9jZXNzLlxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5Sb290fSB0aGUgbmV3IHJvb3QgZWxlbWVudFxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubWFrZVByb2Nlc3MgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgcHJvY2Vzc0VsZW1lbnQgPSB0aGlzLl9jcmVhdGUoJ3Jvb3QnLCB7XG4gICAgdHlwZTogJ2JwbW46UHJvY2VzcydcbiAgfSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbmV3Um9vdDogcHJvY2Vzc0VsZW1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNsYWltSWQgPSBmdW5jdGlvbihpZCwgbW9kZGxlRWxlbWVudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnaWQudXBkYXRlQ2xhaW0nLCB7XG4gICAgaWQ6IGlkLFxuICAgIGVsZW1lbnQ6IG1vZGRsZUVsZW1lbnQsXG4gICAgY2xhaW1pbmc6IHRydWVcbiAgfSk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS51bmNsYWltSWQgPSBmdW5jdGlvbihpZCwgbW9kZGxlRWxlbWVudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnaWQudXBkYXRlQ2xhaW0nLCB7XG4gICAgaWQ6IGlkLFxuICAgIGVsZW1lbnQ6IG1vZGRsZUVsZW1lbnRcbiAgfSk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUuc2V0Q29sb3IgPSBmdW5jdGlvbihlbGVtZW50cywgY29sb3JzKSB7XG4gIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC5zZXRDb2xvcicsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgY29sb3JzOiBjb2xvcnNcbiAgfSk7XG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZCxcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgc3Vic3RyYWN0XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvTWF0aCc7XG5cbmltcG9ydCB7XG4gIGhhc0V4dGVybmFsTGFiZWxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxudmFyIEFMSUdOTUVOVFMgPSBbXG4gICd0b3AnLFxuICAnYm90dG9tJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnXG5dO1xuXG52YXIgRUxFTUVOVF9MQUJFTF9ESVNUQU5DRSA9IDEwO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFrZXMgc3VyZSB0aGF0IGV4dGVybmFsIGxhYmVscyBhcmUgYWRkZWRcbiAqIHRvZ2V0aGVyIHdpdGggcmVzcGVjdGl2ZSBlbGVtZW50cyBhbmQgcHJvcGVybHkgdXBkYXRlZCAoREkgd2lzZSlcbiAqIGR1cmluZyBtb3ZlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgY2hlY2tMYWJlbEFkanVzdG1lbnQoc291cmNlKTtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHRhcmdldCk7XG4gICAgfVxuICB9KTtcblxuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnbGFiZWwuY3JlYXRlJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHNoYXBlLmxhYmVsVGFyZ2V0KTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdlbGVtZW50cy5jcmVhdGUnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBjaGVja0xhYmVsQWRqdXN0bWVudChlbGVtZW50KSB7XG5cbiAgICAvLyBza2lwIG5vbi1leGlzdGluZyBsYWJlbHNcbiAgICBpZiAoIWhhc0V4dGVybmFsTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW1hbFBvc2l0aW9uID0gZ2V0T3B0aW1hbFBvc2l0aW9uKGVsZW1lbnQpO1xuXG4gICAgLy8gbm8gb3B0aW1hbCBwb3NpdGlvbiBmb3VuZFxuICAgIGlmICghb3B0aW1hbFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcHRpbWFsUG9zaXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcmllbnRhdGlvbikge1xuXG4gICAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCksXG4gICAgICAgIGxhYmVsID0gZWxlbWVudC5sYWJlbCxcbiAgICAgICAgbGFiZWxNaWQgPSBnZXRNaWQobGFiZWwpO1xuXG4gICAgLy8gaWdub3JlIGxhYmVscyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkXG4gICAgaWYgKCFsYWJlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudFRyYmwgPSBhc1RSQkwoZWxlbWVudCk7XG5cbiAgICB2YXIgbmV3TGFiZWxNaWQ7XG5cbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICAgIHk6IGVsZW1lbnRUcmJsLnRvcCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC5oZWlnaHQgLyAyXG4gICAgICB9O1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2xlZnQnOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudFRyYmwubGVmdCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdib3R0b20nOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudE1pZC54LFxuICAgICAgICB5OiBlbGVtZW50VHJibC5ib3R0b20gKyBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFICsgbGFiZWwuaGVpZ2h0IC8gMlxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyaWdodCc6XG5cbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50VHJibC5yaWdodCArIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgKyBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhID0gc3Vic3RyYWN0KG5ld0xhYmVsTWlkLCBsYWJlbE1pZCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlU2hhcGUobGFiZWwsIGRlbHRhKTtcbiAgfVxuXG59XG5cbmluaGVyaXRzKEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiBhbGlnbm1lbnRzIHdoaWNoIGFyZSB0YWtlbiBieSBhIGJvdW5kYXJ5J3MgaG9zdCBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFRha2VuSG9zdEFsaWdubWVudHMoZWxlbWVudCkge1xuXG4gIHZhciBob3N0RWxlbWVudCA9IGVsZW1lbnQuaG9zdCxcbiAgICAgIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCksXG4gICAgICBob3N0T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihlbGVtZW50TWlkLCBob3N0RWxlbWVudCk7XG5cbiAgdmFyIGZyZWVBbGlnbm1lbnRzO1xuXG4gIC8vIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBtdWx0aS1vcmllbnRhdGlvbiwgZS5nLiAndG9wLWxlZnQnXG4gIGlmIChob3N0T3JpZW50YXRpb24uaW5kZXhPZignLScpID49IDApIHtcbiAgICBmcmVlQWxpZ25tZW50cyA9IGhvc3RPcmllbnRhdGlvbi5zcGxpdCgnLScpO1xuICB9IGVsc2Uge1xuICAgIGZyZWVBbGlnbm1lbnRzID0gWyBob3N0T3JpZW50YXRpb24gXTtcbiAgfVxuXG4gIHZhciB0YWtlbkFsaWdubWVudHMgPSBBTElHTk1FTlRTLmZpbHRlcihmdW5jdGlvbihhbGlnbm1lbnQpIHtcblxuICAgIHJldHVybiBmcmVlQWxpZ25tZW50cy5pbmRleE9mKGFsaWdubWVudCkgPT09IC0xO1xuICB9KTtcblxuICByZXR1cm4gdGFrZW5BbGlnbm1lbnRzO1xuXG59XG5cbi8qKlxuICogUmV0dXJuIGFsaWdubWVudHMgd2hpY2ggYXJlIHRha2VuIGJ5IHJlbGF0ZWQgY29ubmVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFrZW5Db25uZWN0aW9uQWxpZ25tZW50cyhlbGVtZW50KSB7XG5cbiAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCk7XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IFtdLmNvbmNhdChcbiAgICBlbGVtZW50LmluY29taW5nLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYy53YXlwb2ludHNbYy53YXlwb2ludHMubGVuZ3RoIC0gMiBdO1xuICAgIH0pLFxuICAgIGVsZW1lbnQub3V0Z29pbmcubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjLndheXBvaW50c1sxXTtcbiAgICB9KVxuICApLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBnZXRBcHByb3hpbWF0ZU9yaWVudGF0aW9uKGVsZW1lbnRNaWQsIHBvaW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRha2VuQWxpZ25tZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG9wdGltYWwgbGFiZWwgcG9zaXRpb24gYXJvdW5kIGFuIGVsZW1lbnRcbiAqIG9yIF91bmRlZmluZWRfLCBpZiBub25lIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gcG9zaXRpb25pbmcgaWRlbnRpZmllclxuICovXG5mdW5jdGlvbiBnZXRPcHRpbWFsUG9zaXRpb24oZWxlbWVudCkge1xuXG4gIHZhciBsYWJlbE1pZCA9IGdldE1pZChlbGVtZW50LmxhYmVsKTtcblxuICB2YXIgZWxlbWVudE1pZCA9IGdldE1pZChlbGVtZW50KTtcblxuICB2YXIgbGFiZWxPcmllbnRhdGlvbiA9IGdldEFwcHJveGltYXRlT3JpZW50YXRpb24oZWxlbWVudE1pZCwgbGFiZWxNaWQpO1xuXG4gIGlmICghaXNBbGlnbmVkKGxhYmVsT3JpZW50YXRpb24pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IGdldFRha2VuQ29ubmVjdGlvbkFsaWdubWVudHMoZWxlbWVudCk7XG5cbiAgaWYgKGVsZW1lbnQuaG9zdCkge1xuICAgIHZhciB0YWtlbkhvc3RBbGlnbm1lbnRzID0gZ2V0VGFrZW5Ib3N0QWxpZ25tZW50cyhlbGVtZW50KTtcblxuICAgIHRha2VuQWxpZ25tZW50cyA9IHRha2VuQWxpZ25tZW50cy5jb25jYXQodGFrZW5Ib3N0QWxpZ25tZW50cyk7XG4gIH1cblxuICB2YXIgZnJlZUFsaWdubWVudHMgPSBBTElHTk1FTlRTLmZpbHRlcihmdW5jdGlvbihhbGlnbm1lbnQpIHtcblxuICAgIHJldHVybiB0YWtlbkFsaWdubWVudHMuaW5kZXhPZihhbGlnbm1lbnQpID09PSAtMTtcbiAgfSk7XG5cbiAgLy8gTk9USElORyBUTyBETzsgbGFiZWwgYWxyZWFkeSBhbGlnbmVkIGEuTy5LLlxuICBpZiAoZnJlZUFsaWdubWVudHMuaW5kZXhPZihsYWJlbE9yaWVudGF0aW9uKSAhPT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gZnJlZUFsaWdubWVudHNbMF07XG59XG5cbmZ1bmN0aW9uIGdldEFwcHJveGltYXRlT3JpZW50YXRpb24ocDAsIHAxKSB7XG4gIHJldHVybiBnZXRPcmllbnRhdGlvbihwMSwgcDAsIDUpO1xufVxuXG5mdW5jdGlvbiBpc0FsaWduZWQob3JpZW50YXRpb24pIHtcbiAgcmV0dXJuIEFMSUdOTUVOVFMuaW5kZXhPZihvcmllbnRhdGlvbikgIT09IC0xO1xufVxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcGVuZEJlaGF2aW9yKGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgYnBtblJ1bGVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIC8vIGFzc2lnbiBjb3JyZWN0IHNoYXBlIHBvc2l0aW9uIHVubGVzcyBhbHJlYWR5IHNldFxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuYXBwZW5kJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWNvbnRleHQucG9zaXRpb24pIHtcblxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICAgIGNvbnRleHQucG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogc291cmNlLnggKyBzb3VyY2Uud2lkdGggLyAyICsgNzUsXG4gICAgICAgICAgeTogc291cmNlLnkgLSAoNTApIC0gc2hhcGUuaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5wb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiBzb3VyY2UueCArIHNvdXJjZS53aWR0aCArIDgwICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IHNvdXJjZS55ICsgc291cmNlLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG5pbmhlcml0cyhBcHBlbmRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXBwZW5kQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2JwbW5SdWxlcydcbl07IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZpbHRlcixcclxuICBmb3JFYWNoXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFzc29jaWF0aW9uQmVoYXZpb3IoaW5qZWN0b3IsIG1vZGVsaW5nKSB7XHJcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XHJcblxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgbmV3UGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIHZhciBhc3NvY2lhdGlvbnMgPSBmaWx0ZXIoc2hhcGUuaW5jb21pbmcuY29uY2F0KHNoYXBlLm91dGdvaW5nKSwgZnVuY3Rpb24oY29ubmVjdGlvbikge1xyXG4gICAgICByZXR1cm4gaXMoY29ubmVjdGlvbiwgJ2JwbW46QXNzb2NpYXRpb24nKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZvckVhY2goYXNzb2NpYXRpb25zLCBmdW5jdGlvbihhc3NvY2lhdGlvbikge1xyXG4gICAgICBtb2RlbGluZy5tb3ZlQ29ubmVjdGlvbihhc3NvY2lhdGlvbiwgeyB4OiAwLCB5OiAwIH0sIG5ld1BhcmVudCk7XHJcbiAgICB9KTtcclxuICB9LCB0cnVlKTtcclxufVxyXG5cclxuaW5oZXJpdHMoQXNzb2NpYXRpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbkFzc29jaWF0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnaW5qZWN0b3InLFxyXG4gICdtb2RlbGluZydcclxuXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgZ2V0QnVzaW5lc3NPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogUmVwbGFjZSBpbnRlcm1lZGlhdGUgZXZlbnQgd2l0aCBib3VuZGFyeSBldmVudCB3aGVuIGNyZWF0aW5nIG9yIG1vdmluZyByZXN1bHRzIGluIGF0dGFjaGVkIGV2ZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdHRhY2hFdmVudEJlaGF2aW9yKGJwbW5SZXBsYWNlLCBpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMuY3JlYXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIHJldHVybiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KTtcbiAgICB9KTtcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgdmFyIGhvc3QgPSBlbGVtZW50c1sgaW5kZXggXTtcblxuICAgICAgY29udGV4dC5lbGVtZW50c1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKGVsZW1lbnRzWyBpbmRleCBdLCBob3N0KTtcbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGhvc3QgPSBjb250ZXh0Lm5ld0hvc3Q7XG5cbiAgICBpZiAoc2hhcGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IHNoYXBlc1swXTtcblxuICAgIGlmIChzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KSkge1xuICAgICAgY29udGV4dC5zaGFwZXMgPSBbIHNlbGYucmVwbGFjZVNoYXBlKHNoYXBlLCBob3N0KSBdO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbkF0dGFjaEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ2luamVjdG9yJ1xuXTtcblxuaW5oZXJpdHMoQXR0YWNoRXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXR0YWNoRXZlbnRCZWhhdmlvci5wcm90b3R5cGUucmVwbGFjZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIGhvc3QpIHtcbiAgdmFyIGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbihzaGFwZSk7XG5cbiAgdmFyIGJvdW5kYXJ5RXZlbnQgPSB7XG4gICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgaG9zdDogaG9zdFxuICB9O1xuXG4gIGlmIChldmVudERlZmluaXRpb24pIHtcbiAgICBib3VuZGFyeUV2ZW50LmV2ZW50RGVmaW5pdGlvblR5cGUgPSBldmVudERlZmluaXRpb24uJHR5cGU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQoc2hhcGUsIGJvdW5kYXJ5RXZlbnQsIHsgbGF5b3V0Q29ubmVjdGlvbjogZmFsc2UgfSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zO1xuXG4gIHJldHVybiBldmVudERlZmluaXRpb25zICYmIGV2ZW50RGVmaW5pdGlvbnNbMF07XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcGxhY2Uoc2hhcGUsIGhvc3QpIHtcbiAgcmV0dXJuICFpc0xhYmVsKHNoYXBlKSAmJlxuICAgIGlzQW55KHNoYXBlLCBbICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyBdKSAmJiAhIWhvc3Q7XG59XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIGJvdW5kYXJ5IGV2ZW50IGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJvdW5kYXJ5RXZlbnRCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgZnVuY3Rpb24gZ2V0Qm91bmRhcnlFdmVudHMoZWxlbWVudCkge1xuICAgIHJldHVybiBmaWx0ZXIoZWxlbWVudC5hdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICByZXR1cm4gaXMoYXR0YWNoZXIsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBhZnRlciBjb25uZWN0aW5nIHRvIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnY29ubmVjdGlvbi5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzb3VyY2UgPSBldmVudC5jb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuY29udGV4dC50YXJnZXQsXG4gICAgICAgIGJvdW5kYXJ5RXZlbnRzID0gZ2V0Qm91bmRhcnlFdmVudHModGFyZ2V0KTtcblxuICAgIGlmIChcbiAgICAgIGlzKHNvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSAmJlxuICAgICAgaXModGFyZ2V0LCAnYnBtbjpSZWNlaXZlVGFzaycpICYmXG4gICAgICBib3VuZGFyeUV2ZW50cy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhib3VuZGFyeUV2ZW50cyk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBhZnRlciByZXBsYWNpbmcgY29ubmVjdGVkIGdhdGV3YXkgd2l0aCBldmVudC1iYXNlZCBnYXRld2F5XG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgb2xkU291cmNlID0gZXZlbnQuY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGV2ZW50LmNvbnRleHQubmV3U291cmNlO1xuXG4gICAgaWYgKGlzKG9sZFNvdXJjZSwgJ2JwbW46R2F0ZXdheScpICYmXG4gICAgICAgIGlzKG5ld1NvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuICAgICAgZm9yRWFjaChuZXdTb3VyY2Uub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICAgICAgYXR0YWNoZWRib3VuZGFyeUV2ZW50cyA9IGdldEJvdW5kYXJ5RXZlbnRzKHRhcmdldCk7XG5cbiAgICAgICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UmVjZWl2ZVRhc2snKSAmJlxuICAgICAgICAgICAgYXR0YWNoZWRib3VuZGFyeUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMoYXR0YWNoZWRib3VuZGFyeUV2ZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbkJvdW5kYXJ5RXZlbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5pbmhlcml0cyhCb3VuZGFyeUV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGdldFBhcmVudCB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVCZWhhdmlvcihpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHBhcmVudCwgJ2JwbW46TGFuZScpICYmICFpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICBjb250ZXh0LnBhcmVudCA9IGdldFBhcmVudChwYXJlbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG4gICAgfVxuICB9KTtcblxufVxuXG5cbkNyZWF0ZUJlaGF2aW9yLiRpbmplY3QgPSBbICdpbmplY3RvcicgXTtcblxuaW5oZXJpdHMoQ3JlYXRlQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBjcmVhdGUgZGF0YSBvYmplY3QgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yKGV2ZW50QnVzLCBicG1uRmFjdG9yeSwgbW9kZGxlKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgJiYgc2hhcGUudHlwZSAhPT0gJ2xhYmVsJykge1xuXG4gICAgICAvLyBjcmVhdGUgYSBEYXRhT2JqZWN0IGV2ZXJ5IHRpbWUgYSBEYXRhT2JqZWN0UmVmZXJlbmNlIGlzIGNyZWF0ZWRcbiAgICAgIHZhciBkYXRhT2JqZWN0ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkRhdGFPYmplY3QnKTtcblxuICAgICAgLy8gc2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIERhdGFPYmplY3RcbiAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LmRhdGFPYmplY3RSZWYgPSBkYXRhT2JqZWN0O1xuICAgIH1cbiAgfSk7XG5cbn1cblxuQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeScsXG4gICdtb2RkbGUnXG5dO1xuXG5pbmhlcml0cyhDcmVhdGVEYXRhT2JqZWN0QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCQm94IH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmluZFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGFzVFJCTCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyA9IDIwLFxuICAgIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcgPSAyMDtcblxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVF9CT1JERVJfV0lEVEggPSAzMDtcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyBiZWhhdmlvciBmb3IgY3JlYXRpbmcgcGFydGljaXBhbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yKGNhbnZhcywgZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvLyBmaXQgcGFydGljaXBhbnRcbiAgZXZlbnRCdXMub24oW1xuICAgICdjcmVhdGUuc3RhcnQnLFxuICAgICdzaGFwZS5tb3ZlLnN0YXJ0J1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSB8fFxuICAgICAgIWlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHxcbiAgICAgICFyb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgY29ubmVjdGlvbnMsIGdyb3VwcyBhbmQgbGFiZWxzXG4gICAgdmFyIGNoaWxkcmVuID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAhaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSAmJlxuICAgICAgICAhaXNMYWJlbChlbGVtZW50KSAmJlxuICAgICAgICAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gZW5zdXJlIGZvciBhdmFpbGFibGUgY2hpbGRyZW4gdG8gY2FsY3VsYXRlIGJvdW5kc1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuQkJveCA9IGdldEJCb3goY2hpbGRyZW4pO1xuXG4gICAgdmFyIHBhcnRpY2lwYW50Qm91bmRzID0gZ2V0UGFydGljaXBhbnRCb3VuZHMoc2hhcGUsIGNoaWxkcmVuQkJveCk7XG5cbiAgICAvLyBhc3NpZ24gd2lkdGggYW5kIGhlaWdodFxuICAgIGFzc2lnbihzaGFwZSwgcGFydGljaXBhbnRCb3VuZHMpO1xuXG4gICAgLy8gYXNzaWduIGNyZWF0ZSBjb25zdHJhaW50c1xuICAgIGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHMgPSBnZXRQYXJ0aWNpcGFudENyZWF0ZUNvbnN0cmFpbnRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpO1xuICB9KTtcblxuICAvLyBmb3JjZSBob3ZlcmluZyBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIHJvb3RFbGVtZW50R2Z4ID0gY2FudmFzLmdldEdyYXBoaWNzKHJvb3RFbGVtZW50KTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUhvdmVyaW5nUHJvY2VzcyhldmVudCkge1xuICAgICAgZXZlbnQuZWxlbWVudCA9IHJvb3RFbGVtZW50O1xuICAgICAgZXZlbnQuZ2Z4ID0gcm9vdEVsZW1lbnRHZng7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgSElHSF9QUklPUklUWSwgZW5zdXJlSG92ZXJpbmdQcm9jZXNzKTtcblxuICAgICAgZXZlbnRCdXMub25jZSgnY3JlYXRlLmNsZWFudXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50LmhvdmVyJywgZW5zdXJlSG92ZXJpbmdQcm9jZXNzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZW5zdXJlQ29sbGFib3JhdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBjb2xsYWJvcmF0aW9uO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgICAgY29sbGFib3JhdGlvbiA9IHJvb3RFbGVtZW50O1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHVwZGF0ZSByb290IGVsZW1lbnQgYnkgbWFraW5nIGNvbGxhYm9yYXRpb25cbiAgICAgIGNvbGxhYm9yYXRpb24gPSBtb2RlbGluZy5tYWtlQ29sbGFib3JhdGlvbigpO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBjb250ZXh0LnByb2Nlc3MgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgY29udGV4dC5wYXJlbnQgPSBjb2xsYWJvcmF0aW9uO1xuICB9XG5cbiAgLy8gdHVybiBwcm9jZXNzIGludG8gY29sbGFib3JhdGlvbiBiZWZvcmUgYWRkaW5nIHBhcnRpY2lwYW50XG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGlzKHBhcmVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgICBlbnN1cmVDb2xsYWJvcmF0aW9uKGNvbnRleHQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5leGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBjb250ZXh0Lm9sZFByb2Nlc3NSZWYgPSBzaGFwZS5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBzaGFwZS5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gcHJvY2Vzcy5idXNpbmVzc09iamVjdDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucmV2ZXJ0KCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG5cbiAgICAgIC8vIHJlLXVzZSBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWYgPSBjb250ZXh0Lm9sZFByb2Nlc3NSZWY7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG5cbiAgICAgIC8vIG1vdmUgY2hpbGRyZW4gZnJvbSBwcm9jZXNzIHRvIHBhcnRpY2lwYW50XG4gICAgICB2YXIgcHJvY2Vzc0NoaWxkcmVuID0gcHJvY2Vzcy5jaGlsZHJlbi5zbGljZSgpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMocHJvY2Vzc0NoaWxkcmVuLCB7IHg6IDAsIHk6IDAgfSwgc2hhcGUpO1xuICAgIH1cblxuICB9LCB0cnVlKTtcblxuICAvLyB0dXJuIHByb2Nlc3MgaW50byBjb2xsYWJvcmF0aW9uIHdoZW4gY3JlYXRpbmcgcGFydGljaXBhbnRzXG4gIHRoaXMucHJlRXhlY3V0ZSgnZWxlbWVudHMuY3JlYXRlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwYXJ0aWNpcGFudDtcblxuICAgIHZhciBoYXNQYXJ0aWNpcGFudHMgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgaWYgKGhhc1BhcnRpY2lwYW50cyAmJiBpcyhwYXJlbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgZW5zdXJlQ29sbGFib3JhdGlvbihjb250ZXh0KTtcblxuICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgICBjb250ZXh0Lm9sZFByb2Nlc3NSZWYgPSBwYXJ0aWNpcGFudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBwYXJ0aWNpcGFudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gcGFyZW50LmJ1c2luZXNzT2JqZWN0O1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5yZXZlcnQoJ2VsZW1lbnRzLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBwcm9jZXNzID0gY29udGV4dC5wcm9jZXNzLFxuICAgICAgICBwYXJ0aWNpcGFudDtcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBwYXJ0aWNpcGFudCA9IGZpbmRQYXJ0aWNpcGFudChlbGVtZW50cyk7XG5cbiAgICAgIC8vIHJlLXVzZSBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgICAgIHBhcnRpY2lwYW50LmJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWYgPSBjb250ZXh0Lm9sZFByb2Nlc3NSZWY7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcHJvY2VzcyA9IGNvbnRleHQucHJvY2VzcyxcbiAgICAgICAgcGFydGljaXBhbnQ7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgICAvLyBtb3ZlIGNoaWxkcmVuIGZyb20gcHJvY2VzcyB0byBmaXJzdCBwYXJ0aWNpcGFudFxuICAgICAgdmFyIHByb2Nlc3NDaGlsZHJlbiA9IHByb2Nlc3MuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHByb2Nlc3NDaGlsZHJlbiwgeyB4OiAwLCB5OiAwIH0sIHBhcnRpY2lwYW50KTtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbn1cblxuQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFBhcnRpY2lwYW50Qm91bmRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpIHtcbiAgY2hpbGRyZW5CQm94ID0ge1xuICAgIHdpZHRoOiBjaGlsZHJlbkJCb3gud2lkdGggKyBIT1JJWk9OVEFMX1BBUlRJQ0lQQU5UX1BBRERJTkcgKiAyICsgUEFSVElDSVBBTlRfQk9SREVSX1dJRFRILFxuICAgIGhlaWdodDogY2hpbGRyZW5CQm94LmhlaWdodCArIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcgKiAyXG4gIH07XG5cbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoc2hhcGUud2lkdGgsIGNoaWxkcmVuQkJveC53aWR0aCksXG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChzaGFwZS5oZWlnaHQsIGNoaWxkcmVuQkJveC5oZWlnaHQpO1xuXG4gIHJldHVybiB7XG4gICAgeDogLXdpZHRoIC8gMixcbiAgICB5OiAtaGVpZ2h0IC8gMixcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRDcmVhdGVDb25zdHJhaW50cyhzaGFwZSwgY2hpbGRyZW5CQm94KSB7XG4gIGNoaWxkcmVuQkJveCA9IGFzVFJCTChjaGlsZHJlbkJCb3gpO1xuXG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBjaGlsZHJlbkJCb3gudG9wICsgc2hhcGUuaGVpZ2h0IC8gMiAtIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcsXG4gICAgbGVmdDogY2hpbGRyZW5CQm94LnJpZ2h0IC0gc2hhcGUud2lkdGggLyAyICsgSE9SSVpPTlRBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIHRvcDogY2hpbGRyZW5CQm94LmJvdHRvbSAtIHNoYXBlLmhlaWdodCAvIDIgKyBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIHJpZ2h0OiBjaGlsZHJlbkJCb3gubGVmdCArIHNoYXBlLndpZHRoIC8gMiAtIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyAtIFBBUlRJQ0lQQU5UX0JPUkRFUl9XSURUSFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gZmluZFBhcnRpY2lwYW50KGVsZW1lbnRzKSB7XG4gIHJldHVybiBmaW5kKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG4gIH0pO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBUQVJHRVRfUkVGX1BMQUNFSE9MREVSX05BTUUgPSAnX190YXJnZXRSZWZfcGxhY2Vob2xkZXInO1xuXG5cbi8qKlxuICogVGhpcyBiZWhhdmlvciBtYWtlcyBzdXJlIHdlIGFsd2F5cyBzZXQgYSBmYWtlXG4gKiBEYXRhSW5wdXRBc3NvY2lhdGlvbiN0YXJnZXRSZWYgYXMgZGVtYW5kZWQgYnkgdGhlIEJQTU4gMi4wXG4gKiBYU0Qgc2NoZW1hLlxuICpcbiAqIFRoZSByZWZlcmVuY2UgaXMgc2V0IHRvIGEgYnBtbjpQcm9wZXJ0eXsgbmFtZTogJ19fdGFyZ2V0UmVmX3BsYWNlaG9sZGVyJyB9XG4gKiB3aGljaCBpcyBjcmVhdGVkIG9uIHRoZSBmbHkgYW5kIGNsZWFuZWQgdXAgYWZ0ZXJ3YXJkcyBpZiBub3QgbmVlZGVkXG4gKiBhbnltb3JlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBicG1uRmFjdG9yeSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnXG4gIF0sIGlmRGF0YUlucHV0QXNzb2NpYXRpb24oZml4VGFyZ2V0UmVmKSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZEYXRhSW5wdXRBc3NvY2lhdGlvbihmaXhUYXJnZXRSZWYpKTtcblxuXG4gIGZ1bmN0aW9uIHVzZXNUYXJnZXRSZWYoZWxlbWVudCwgdGFyZ2V0UmVmLCByZW1vdmVkQ29ubmVjdGlvbikge1xuXG4gICAgdmFyIGlucHV0QXNzb2NpYXRpb25zID0gZWxlbWVudC5nZXQoJ2RhdGFJbnB1dEFzc29jaWF0aW9ucycpO1xuXG4gICAgcmV0dXJuIGZpbmQoaW5wdXRBc3NvY2lhdGlvbnMsIGZ1bmN0aW9uKGFzc29jaWF0aW9uKSB7XG4gICAgICByZXR1cm4gYXNzb2NpYXRpb24gIT09IHJlbW92ZWRDb25uZWN0aW9uICYmXG4gICAgICAgICAgICAgYXNzb2NpYXRpb24udGFyZ2V0UmVmID09PSB0YXJnZXRSZWY7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUYXJnZXRSZWYoZWxlbWVudCwgY3JlYXRlKSB7XG5cbiAgICB2YXIgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0KCdwcm9wZXJ0aWVzJyk7XG5cbiAgICB2YXIgdGFyZ2V0UmVmUHJvcCA9IGZpbmQocHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHAubmFtZSA9PT0gVEFSR0VUX1JFRl9QTEFDRUhPTERFUl9OQU1FO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0YXJnZXRSZWZQcm9wICYmIGNyZWF0ZSkge1xuICAgICAgdGFyZ2V0UmVmUHJvcCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9wZXJ0eScsIHtcbiAgICAgICAgbmFtZTogVEFSR0VUX1JFRl9QTEFDRUhPTERFUl9OQU1FXG4gICAgICB9KTtcblxuICAgICAgY29sbGVjdGlvbkFkZChwcm9wZXJ0aWVzLCB0YXJnZXRSZWZQcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0UmVmUHJvcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFudXBUYXJnZXRSZWYoZWxlbWVudCwgY29ubmVjdGlvbikge1xuXG4gICAgdmFyIHRhcmdldFJlZlByb3AgPSBnZXRUYXJnZXRSZWYoZWxlbWVudCk7XG5cbiAgICBpZiAoIXRhcmdldFJlZlByb3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXNUYXJnZXRSZWYoZWxlbWVudCwgdGFyZ2V0UmVmUHJvcCwgY29ubmVjdGlvbikpIHtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUoZWxlbWVudC5nZXQoJ3Byb3BlcnRpZXMnKSwgdGFyZ2V0UmVmUHJvcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB0YXJnZXRSZWYgaXMgc2V0IHRvIGEgdmFsaWQgcHJvcGVydHkgb3JcbiAgICogYG51bGxgIGlmIHRoZSBjb25uZWN0aW9uIGlzIGRldGFjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgZnVuY3Rpb24gZml4VGFyZ2V0UmVmKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25CbyA9IGNvbm5lY3Rpb24uYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICB0YXJnZXRCbyA9IHRhcmdldCAmJiB0YXJnZXQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG5ld1RhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0LFxuICAgICAgICBuZXdUYXJnZXRCbyA9IG5ld1RhcmdldCAmJiBuZXdUYXJnZXQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG9sZFRhcmdldCA9IGNvbnRleHQub2xkVGFyZ2V0IHx8IGNvbnRleHQudGFyZ2V0LFxuICAgICAgICBvbGRUYXJnZXRCbyA9IG9sZFRhcmdldCAmJiBvbGRUYXJnZXQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICB2YXIgZGF0YUFzc29jaWF0aW9uID0gY29ubmVjdGlvbi5idXNpbmVzc09iamVjdCxcbiAgICAgICAgdGFyZ2V0UmVmUHJvcDtcblxuICAgIGlmIChvbGRUYXJnZXRCbyAmJiBvbGRUYXJnZXRCbyAhPT0gdGFyZ2V0Qm8pIHtcbiAgICAgIGNsZWFudXBUYXJnZXRSZWYob2xkVGFyZ2V0Qm8sIGNvbm5lY3Rpb25Cbyk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1RhcmdldEJvICYmIG5ld1RhcmdldEJvICE9PSB0YXJnZXRCbykge1xuICAgICAgY2xlYW51cFRhcmdldFJlZihuZXdUYXJnZXRCbywgY29ubmVjdGlvbkJvKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Qm8pIHtcbiAgICAgIHRhcmdldFJlZlByb3AgPSBnZXRUYXJnZXRSZWYodGFyZ2V0Qm8sIHRydWUpO1xuICAgICAgZGF0YUFzc29jaWF0aW9uLnRhcmdldFJlZiA9IHRhcmdldFJlZlByb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFBc3NvY2lhdGlvbi50YXJnZXRSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5EYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeSdcbl07XG5cbmluaGVyaXRzKERhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuLyoqXG4gKiBPbmx5IGNhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW4gdGhlIGV2ZW50XG4gKiB0b3VjaGVzIGEgYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGlmRGF0YUlucHV0QXNzb2NpYXRpb24oZm4pIHtcblxuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nKSkge1xuICAgICAgcmV0dXJuIGZuKGV2ZW50KTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbmltcG9ydCBVcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIgZnJvbSAnLi4vY21kL1VwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlcic7XHJcblxyXG5cclxuLyoqXHJcbiAqIEJQTU4gc3BlY2lmaWMgZGF0YSBzdG9yZSBiZWhhdmlvclxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGF0YVN0b3JlQmVoYXZpb3IoXHJcbiAgICBjYW52YXMsIGNvbW1hbmRTdGFjaywgZWxlbWVudFJlZ2lzdHJ5LFxyXG4gICAgZXZlbnRCdXMpIHtcclxuXHJcbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdkYXRhU3RvcmUudXBkYXRlQ29udGFpbm1lbnQnLCBVcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIpO1xyXG5cclxuICBmdW5jdGlvbiBnZXRGaXJzdFBhcnRpY2lwYW50KCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKTtcclxuICAgIH0pWzBdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RGF0YVN0b3JlcyhlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcclxuICAgICAgcmV0dXJuIGlzKGNoaWxkLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJiAhY2hpbGQubGFiZWxUYXJnZXQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUsIG5ld0RhdGFTdG9yZVBhcmVudCkge1xyXG4gICAgdmFyIGRhdGFTdG9yZUJvID0gZGF0YVN0b3JlLmJ1c2luZXNzT2JqZWN0IHx8IGRhdGFTdG9yZTtcclxuXHJcbiAgICBuZXdEYXRhU3RvcmVQYXJlbnQgPSBuZXdEYXRhU3RvcmVQYXJlbnQgfHwgZ2V0Rmlyc3RQYXJ0aWNpcGFudCgpO1xyXG5cclxuICAgIGlmIChuZXdEYXRhU3RvcmVQYXJlbnQpIHtcclxuICAgICAgdmFyIG5ld0RhdGFTdG9yZVBhcmVudEJvID0gbmV3RGF0YVN0b3JlUGFyZW50LmJ1c2luZXNzT2JqZWN0IHx8IG5ld0RhdGFTdG9yZVBhcmVudDtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdkYXRhU3RvcmUudXBkYXRlQ29udGFpbm1lbnQnLCB7XHJcbiAgICAgICAgZGF0YVN0b3JlQm86IGRhdGFTdG9yZUJvLFxyXG4gICAgICAgIG5ld1NlbWFudGljUGFyZW50OiBuZXdEYXRhU3RvcmVQYXJlbnRCby5wcm9jZXNzUmVmIHx8IG5ld0RhdGFTdG9yZVBhcmVudEJvLFxyXG4gICAgICAgIG5ld0RpUGFyZW50OiBuZXdEYXRhU3RvcmVQYXJlbnRCby5kaVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBkaXNhYmxlIGF1dG8tcmVzaXplIGZvciBkYXRhIHN0b3Jlc1xyXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnKSB7XHJcblxyXG4gICAgICBpZiAoIWNvbnRleHQuaGludHMpIHtcclxuICAgICAgICBjb250ZXh0LmhpbnRzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHByZXZlbnQgYXV0byByZXNpemluZ1xyXG4gICAgICBjb250ZXh0LmhpbnRzLmF1dG9SZXNpemUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGRpc2FibGUgYXV0by1yZXNpemUgZm9yIGRhdGEgc3RvcmVzXHJcbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcclxuXHJcbiAgICB2YXIgZGF0YVN0b3JlUmVmZXJlbmNlcyA9IHNoYXBlcy5maWx0ZXIoZnVuY3Rpb24oc2hhcGUpIHtcclxuICAgICAgcmV0dXJuIGlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChkYXRhU3RvcmVSZWZlcmVuY2VzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoIWNvbnRleHQuaGludHMpIHtcclxuICAgICAgICBjb250ZXh0LmhpbnRzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHByZXZlbnQgYXV0byByZXNpemluZyBmb3IgZGF0YSBzdG9yZSByZWZlcmVuY2VzXHJcbiAgICAgIGNvbnRleHQuaGludHMuYXV0b1Jlc2l6ZSA9IHNoYXBlcy5maWx0ZXIoZnVuY3Rpb24oc2hhcGUpIHtcclxuICAgICAgICByZXR1cm4gIWlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyB1cGRhdGUgcGFyZW50IG9uIGRhdGEgc3RvcmUgY3JlYXRlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHBhcmVudCA9IHNoYXBlLnBhcmVudDtcclxuXHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJlxyXG4gICAgICAgIHNoYXBlLnR5cGUgIT09ICdsYWJlbCcgJiZcclxuICAgICAgICBpcyhwYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xyXG5cclxuICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KHNoYXBlKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHVwZGF0ZSBwYXJlbnQgb24gZGF0YSBzdG9yZSBtb3ZlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBvbGRQYXJlbnQgPSBjb250ZXh0Lm9sZFBhcmVudCxcclxuICAgICAgICBwYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKGlzKG9sZFBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcblxyXG4gICAgICAvLyBkbyBub3RoaW5nIGlmIG5vdCBuZWNlc3NhcnlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnICYmXHJcbiAgICAgICAgaXMocGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuXHJcbiAgICAgIHZhciBwYXJ0aWNpcGFudCA9IGlzKG9sZFBhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSA/XHJcbiAgICAgICAgb2xkUGFyZW50IDpcclxuICAgICAgICBnZXRBbmNlc3RvcihvbGRQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XHJcblxyXG4gICAgICB1cGRhdGVEYXRhU3RvcmVQYXJlbnQoc2hhcGUsIHBhcnRpY2lwYW50KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHVwZGF0ZSBkYXRhIHN0b3JlIHBhcmVudHMgb24gcGFydGljaXBhbnQgb3Igc3VicHJvY2VzcyBkZWxldGVkXHJcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcclxuXHJcbiAgICBpZiAoaXNBbnkoc2hhcGUsIFsgJ2JwbW46UGFydGljaXBhbnQnLCAnYnBtbjpTdWJQcm9jZXNzJyBdKVxyXG4gICAgICAgICYmIGlzKHJvb3RFbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuICAgICAgZ2V0RGF0YVN0b3Jlcyhyb290RWxlbWVudClcclxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGlzRGVzY2VuZGFudChkYXRhU3RvcmUsIHNoYXBlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KGRhdGFTdG9yZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIHVwZGF0ZSBkYXRhIHN0b3JlIHBhcmVudHMgb24gY29sbGFib3JhdGlvbiAtPiBwcm9jZXNzXHJcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIG9sZFJvb3QgPSBjb250ZXh0Lm9sZFJvb3QsXHJcbiAgICAgICAgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdDtcclxuXHJcbiAgICB2YXIgZGF0YVN0b3JlcyA9IGdldERhdGFTdG9yZXMob2xkUm9vdCk7XHJcblxyXG4gICAgZGF0YVN0b3Jlcy5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG5cclxuICAgICAgaWYgKGlzKG5ld1Jvb3QsICdicG1uOlByb2Nlc3MnKSkge1xyXG4gICAgICAgIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUsIG5ld1Jvb3QpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbkRhdGFTdG9yZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ2NvbW1hbmRTdGFjaycsXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuXTtcclxuXHJcbmluaGVyaXRzKERhdGFTdG9yZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNEZXNjZW5kYW50KGRlc2NlbmRhbnQsIGFuY2VzdG9yKSB7XHJcbiAgdmFyIGRlc2NlbmRhbnRCbyA9IGRlc2NlbmRhbnQuYnVzaW5lc3NPYmplY3QgfHwgZGVzY2VuZGFudCxcclxuICAgICAgYW5jZXN0b3JCbyA9IGFuY2VzdG9yLmJ1c2luZXNzT2JqZWN0IHx8IGFuY2VzdG9yO1xyXG5cclxuICB3aGlsZSAoZGVzY2VuZGFudEJvLiRwYXJlbnQpIHtcclxuICAgIGlmIChkZXNjZW5kYW50Qm8uJHBhcmVudCA9PT0gYW5jZXN0b3JCby5wcm9jZXNzUmVmIHx8IGFuY2VzdG9yQm8pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzY2VuZGFudEJvID0gZGVzY2VuZGFudEJvLiRwYXJlbnQ7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFuY2VzdG9yKGVsZW1lbnQsIHR5cGUpIHtcclxuXHJcbiAgd2hpbGUgKGVsZW1lbnQucGFyZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudC5wYXJlbnQsIHR5cGUpKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQ7XHJcbiAgfVxyXG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRDaGlsZExhbmVzXG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBlYWNoRWxlbWVudFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBkZWxldGUgbGFuZSBiZWhhdmlvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVMYW5lQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCBzcGFjZVRvb2wpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICBmdW5jdGlvbiBjb21wZW5zYXRlTGFuZURlbGV0ZShzaGFwZSwgb2xkUGFyZW50KSB7XG5cbiAgICB2YXIgc2libGluZ3MgPSBnZXRDaGlsZExhbmVzKG9sZFBhcmVudCk7XG5cbiAgICB2YXIgdG9wQWZmZWN0ZWQgPSBbXTtcbiAgICB2YXIgYm90dG9tQWZmZWN0ZWQgPSBbXTtcblxuICAgIGVhY2hFbGVtZW50KHNpYmxpbmdzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGlmIChlbGVtZW50LnkgPiBzaGFwZS55KSB7XG4gICAgICAgIGJvdHRvbUFmZmVjdGVkLnB1c2goZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3BBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgICB9KTtcblxuICAgIGlmICghc2libGluZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldDtcblxuICAgIGlmIChib3R0b21BZmZlY3RlZC5sZW5ndGggJiYgdG9wQWZmZWN0ZWQubGVuZ3RoKSB7XG4gICAgICBvZmZzZXQgPSBzaGFwZS5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvcEFkanVzdG1lbnRzLFxuICAgICAgICBib3R0b21BZGp1c3RtZW50cztcblxuICAgIGlmICh0b3BBZmZlY3RlZC5sZW5ndGgpIHtcbiAgICAgIHRvcEFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKFxuICAgICAgICB0b3BBZmZlY3RlZCwgJ3knLCBvZmZzZXQsIHNoYXBlLnkgLSAxMCk7XG5cbiAgICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoXG4gICAgICAgIHRvcEFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgICAgdG9wQWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogMCwgeTogb2Zmc2V0IH0sICdzJyk7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbUFmZmVjdGVkLmxlbmd0aCkge1xuICAgICAgYm90dG9tQWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoXG4gICAgICAgIGJvdHRvbUFmZmVjdGVkLCAneScsIC1vZmZzZXQsIHNoYXBlLnkgKyBzaGFwZS5oZWlnaHQgKyAxMCk7XG5cbiAgICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoXG4gICAgICAgIGJvdHRvbUFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgICAgYm90dG9tQWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogMCwgeTogLW9mZnNldCB9LCAnbicpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFkanVzdCBzaXplcyBvZiBvdGhlciBsYW5lcyBhZnRlciBsYW5lIGRlbGV0aW9uXG4gICAqL1xuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUuZGVsZXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQ7XG5cbiAgICAvLyBvbmx5IGNvbXBlbnNhdGUgbGFuZSBkZWxldGVzXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29tcGVuc2F0ZSByb290IGRlbGV0ZXMgb25seVxuICAgIGlmIChoaW50cyAmJiBoaW50cy5uZXN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb21wZW5zYXRlTGFuZURlbGV0ZShzaGFwZSwgb2xkUGFyZW50KTtcbiAgfSk7XG59XG5cbkRlbGV0ZUxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAnc3BhY2VUb29sJ1xuXTtcblxuaW5oZXJpdHMoRGVsZXRlTGFuZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogUmVwbGFjZSBib3VuZGFyeSBldmVudCB3aXRoIGludGVybWVkaWF0ZSBldmVudCB3aGVuIGNyZWF0aW5nIG9yIG1vdmluZyByZXN1bHRzIGluIGRldGFjaGVkIGV2ZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZXRhY2hFdmVudEJlaGF2aW9yKGJwbW5SZXBsYWNlLCBpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMuY3JlYXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihzaGFwZSkge1xuICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICByZXR1cm4gc2hvdWxkUmVwbGFjZShzaGFwZSwgaG9zdCk7XG4gICAgfSkubWFwKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudHMuaW5kZXhPZihzaGFwZSk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgY29udGV4dC5lbGVtZW50c1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKGVsZW1lbnRzWyBpbmRleCBdKTtcbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0O1xuXG4gICAgc2hhcGVzLmZvckVhY2goZnVuY3Rpb24oc2hhcGUsIGluZGV4KSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIGlmIChzaG91bGRSZXBsYWNlKHNoYXBlLCBpbmNsdWRlcyhzaGFwZXMsIGhvc3QpID8gaG9zdCA6IG5ld0hvc3QpKSB7XG4gICAgICAgIHNoYXBlc1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKHNoYXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG59XG5cbkRldGFjaEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ2luamVjdG9yJ1xuXTtcblxuaW5oZXJpdHMoRGV0YWNoRXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuRGV0YWNoRXZlbnRCZWhhdmlvci5wcm90b3R5cGUucmVwbGFjZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgdmFyIGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbihzaGFwZSksXG4gICAgICBpbnRlcm1lZGlhdGVFdmVudDtcblxuICBpZiAoZXZlbnREZWZpbml0aW9uKSB7XG4gICAgaW50ZXJtZWRpYXRlRXZlbnQgPSB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6IGV2ZW50RGVmaW5pdGlvbi4kdHlwZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJtZWRpYXRlRXZlbnQgPSB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQoc2hhcGUsIGludGVybWVkaWF0ZUV2ZW50LCB7IGxheW91dENvbm5lY3Rpb246IGZhbHNlIH0pO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucztcblxuICByZXR1cm4gZXZlbnREZWZpbml0aW9ucyAmJiBldmVudERlZmluaXRpb25zWzBdO1xufVxuXG5mdW5jdGlvbiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KSB7XG4gIHJldHVybiAhaXNMYWJlbChzaGFwZSkgJiYgaXMoc2hhcGUsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiAhaG9zdDtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBpc051bWJlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGdldE1pZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGdldEFwcHJveEludGVyc2VjdGlvblxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0xpbmVJbnRlcnNlY3Rpb24nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BPbkZsb3dCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVjb25uZWN0IHN0YXJ0IC8gZW5kIG9mIGEgY29ubmVjdGlvbiBhZnRlclxuICAgKiBkcm9wcGluZyBhbiBlbGVtZW50IG9uIGEgZmxvdy5cbiAgICovXG5cbiAgZnVuY3Rpb24gaW5zZXJ0U2hhcGUoc2hhcGUsIHRhcmdldEZsb3csIHBvc2l0aW9uT3JCb3VuZHMpIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gdGFyZ2V0Rmxvdy53YXlwb2ludHMsXG4gICAgICAgIHdheXBvaW50c0JlZm9yZSxcbiAgICAgICAgd2F5cG9pbnRzQWZ0ZXIsXG4gICAgICAgIGRvY2tpbmdQb2ludCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGluY29taW5nQ29ubmVjdGlvbixcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uLFxuICAgICAgICBvbGRPdXRnb2luZyA9IHNoYXBlLm91dGdvaW5nLnNsaWNlKCksXG4gICAgICAgIG9sZEluY29taW5nID0gc2hhcGUuaW5jb21pbmcuc2xpY2UoKTtcblxuICAgIHZhciBtaWQ7XG5cbiAgICBpZiAoaXNOdW1iZXIocG9zaXRpb25PckJvdW5kcy53aWR0aCkpIHtcbiAgICAgIG1pZCA9IGdldE1pZChwb3NpdGlvbk9yQm91bmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkID0gcG9zaXRpb25PckJvdW5kcztcbiAgICB9XG5cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgbWlkKTtcblxuICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHdheXBvaW50c0JlZm9yZSA9IHdheXBvaW50cy5zbGljZSgwLCBpbnRlcnNlY3Rpb24uaW5kZXgpO1xuICAgICAgd2F5cG9pbnRzQWZ0ZXIgPSB3YXlwb2ludHMuc2xpY2UoaW50ZXJzZWN0aW9uLmluZGV4ICsgKGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyAxIDogMCkpO1xuXG4gICAgICAvLyBkdWUgdG8gaW5hY2N1cmFjeSBpbnRlcnNlY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIGZvdW5kXG4gICAgICBpZiAoIXdheXBvaW50c0JlZm9yZS5sZW5ndGggfHwgIXdheXBvaW50c0FmdGVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY2tpbmdQb2ludCA9IGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XSA6IG1pZDtcblxuICAgICAgLy8gaWYgbGFzdCB3YXlwb2ludEJlZm9yZSBpcyBpbnNpZGUgc2hhcGUncyBib3VuZHMsIGlnbm9yZSBkb2NraW5nIHBvaW50XG4gICAgICBpZiAoIWlzUG9pbnRJbnNpZGVCQm94KHNoYXBlLCB3YXlwb2ludHNCZWZvcmVbd2F5cG9pbnRzQmVmb3JlLmxlbmd0aC0xXSkpIHtcbiAgICAgICAgd2F5cG9pbnRzQmVmb3JlLnB1c2goY29weShkb2NraW5nUG9pbnQpKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgZmlyc3Qgd2F5cG9pbnRBZnRlciBpcyBpbnNpZGUgc2hhcGUncyBib3VuZHMsIGlnbm9yZSBkb2NraW5nIHBvaW50XG4gICAgICBpZiAoIWlzUG9pbnRJbnNpZGVCQm94KHNoYXBlLCB3YXlwb2ludHNBZnRlclswXSkpIHtcbiAgICAgICAgd2F5cG9pbnRzQWZ0ZXIudW5zaGlmdChjb3B5KGRvY2tpbmdQb2ludCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNvdXJjZSA9IHRhcmdldEZsb3cuc291cmNlO1xuICAgIHRhcmdldCA9IHRhcmdldEZsb3cudGFyZ2V0O1xuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KHNvdXJjZSwgc2hhcGUsIHRhcmdldEZsb3cpKSB7XG5cbiAgICAgIC8vIHJlY29ubmVjdCBzb3VyY2UgLT4gaW5zZXJ0ZWQgc2hhcGVcbiAgICAgIG1vZGVsaW5nLnJlY29ubmVjdEVuZCh0YXJnZXRGbG93LCBzaGFwZSwgd2F5cG9pbnRzQmVmb3JlIHx8IG1pZCk7XG5cbiAgICAgIGluY29taW5nQ29ubmVjdGlvbiA9IHRhcmdldEZsb3c7XG4gICAgfVxuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KHNoYXBlLCB0YXJnZXQsIHRhcmdldEZsb3cpKSB7XG5cbiAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9uKSB7XG5cbiAgICAgICAgLy8gcmVjb25uZWN0IGluc2VydGVkIHNoYXBlIC0+IGVuZFxuICAgICAgICBtb2RlbGluZy5yZWNvbm5lY3RTdGFydCh0YXJnZXRGbG93LCBzaGFwZSwgd2F5cG9pbnRzQWZ0ZXIgfHwgbWlkKTtcblxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb24gPSB0YXJnZXRGbG93O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uID0gbW9kZWxpbmcuY29ubmVjdChcbiAgICAgICAgICBzaGFwZSwgdGFyZ2V0LCB7IHR5cGU6IHRhcmdldEZsb3cudHlwZSwgd2F5cG9pbnRzOiB3YXlwb2ludHNBZnRlciB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGR1cGxpY2F0ZUNvbm5lY3Rpb25zID0gW10uY29uY2F0KFxuXG4gICAgICBpbmNvbWluZ0Nvbm5lY3Rpb24gJiYgZmlsdGVyKG9sZEluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnNvdXJjZSA9PT0gaW5jb21pbmdDb25uZWN0aW9uLnNvdXJjZTtcbiAgICAgIH0pIHx8IFtdLFxuXG4gICAgICBvdXRnb2luZ0Nvbm5lY3Rpb24gJiYgZmlsdGVyKG9sZE91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnRhcmdldCA9PT0gb3V0Z29pbmdDb25uZWN0aW9uLnRhcmdldDtcbiAgICAgIH0pIHx8IFtdXG4gICAgKTtcblxuICAgIGlmIChkdXBsaWNhdGVDb25uZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKGR1cGxpY2F0ZUNvbm5lY3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgbmV3UGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICAgIHNoYXBlID0gc2hhcGVzWzBdO1xuXG4gICAgaWYgKCFzaGFwZSB8fCAhbmV3UGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIG5ldyBwYXJlbnQgaXMgYSBjb25uZWN0aW9uLFxuICAgIC8vIGNoYW5nZSBpdCB0byB0aGUgbmV3IHBhcmVudCdzIHBhcmVudFxuICAgIGlmIChuZXdQYXJlbnQgJiYgbmV3UGFyZW50LndheXBvaW50cykge1xuICAgICAgY29udGV4dC5uZXdQYXJlbnQgPSBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIHZhciBzaGFwZU1pZCA9IGdldE1pZChzaGFwZSk7XG4gICAgdmFyIG5ld1NoYXBlTWlkID0ge1xuICAgICAgeDogc2hhcGVNaWQueCArIGRlbHRhLngsXG4gICAgICB5OiBzaGFwZU1pZC55ICsgZGVsdGEueVxuICAgIH07XG5cbiAgICAvLyBmaW5kIGEgY29ubmVjdGlvbiB3aGljaCBpbnRlcnNlY3RzIHdpdGggdGhlXG4gICAgLy8gZWxlbWVudCdzIG1pZCBwb2ludFxuICAgIHZhciBjb25uZWN0aW9uID0gZmluZChuZXdQYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5JbnNlcnQgPSBicG1uUnVsZXMuY2FuSW5zZXJ0KHNoYXBlcywgZWxlbWVudCk7XG5cbiAgICAgIHJldHVybiBjYW5JbnNlcnQgJiYgZ2V0QXBwcm94SW50ZXJzZWN0aW9uKGVsZW1lbnQud2F5cG9pbnRzLCBuZXdTaGFwZU1pZCk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgY29udGV4dC50YXJnZXRGbG93ID0gY29ubmVjdGlvbjtcbiAgICAgIGNvbnRleHQucG9zaXRpb24gPSBuZXdTaGFwZU1pZDtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIHRhcmdldEZsb3cgPSBjb250ZXh0LnRhcmdldEZsb3csXG4gICAgICAgIHBvc2l0aW9uID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIGlmICh0YXJnZXRGbG93KSB7XG4gICAgICBpbnNlcnRTaGFwZShzaGFwZXNbMF0sIHRhcmdldEZsb3csIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChicG1uUnVsZXMuY2FuSW5zZXJ0KHNoYXBlLCBwYXJlbnQpKSB7XG4gICAgICBjb250ZXh0LnRhcmdldEZsb3cgPSBwYXJlbnQ7XG4gICAgICBjb250ZXh0LnBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgdGFyZ2V0RmxvdyA9IGNvbnRleHQudGFyZ2V0RmxvdyxcbiAgICAgICAgcG9zaXRpb25PckJvdW5kcyA9IGNvbnRleHQucG9zaXRpb247XG5cbiAgICBpZiAodGFyZ2V0Rmxvdykge1xuICAgICAgaW5zZXJ0U2hhcGUoc2hhcGUsIHRhcmdldEZsb3csIHBvc2l0aW9uT3JCb3VuZHMpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbmluaGVyaXRzKERyb3BPbkZsb3dCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuRHJvcE9uRmxvd0JlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uUnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94KGJib3gsIHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQueCxcbiAgICAgIHkgPSBwb2ludC55O1xuXG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gY29weShvYmopIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgb2JqKTtcbn1cblxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVtb3ZlIGV4aXN0aW5nIHNlcXVlbmNlIGZsb3dzIG9mIGV2ZW50LWJhc2VkIHRhcmdldCBiZWZvcmUgY29ubmVjdGluZ1xuICAgKiBmcm9tIGV2ZW50LWJhc2VkIGdhdGV3YXkuXG4gICAqL1xuICB0aGlzLnByZUV4ZWN1dGVkKCdjb25uZWN0aW9uLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgZXhpc3RpbmdJbmNvbWluZ0Nvbm5lY3Rpb25zID0gdGFyZ2V0LmluY29taW5nLnNsaWNlKCk7XG5cbiAgICBpZiAoY29udGV4dC5oaW50cyAmJiBjb250ZXh0LmhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXMoc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpICYmXG4gICAgICB0YXJnZXQuaW5jb21pbmcubGVuZ3RoXG4gICAgKSB7XG5cbiAgICAgIGV4aXN0aW5nSW5jb21pbmdDb25uZWN0aW9ucy5maWx0ZXIoaXNTZXF1ZW5jZUZsb3cpXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oc2VxdWVuY2VGbG93KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogIEFmdGVyIHJlcGxhY2luZyBzaGFwZSB3aXRoIGV2ZW50LWJhc2VkIGdhdGV3YXksIHJlbW92ZSBpbmNvbWluZyBzZXF1ZW5jZVxuICAgKiAgZmxvd3Mgb2YgZXZlbnQtYmFzZWQgdGFyZ2V0cyB3aGljaCBkbyBub3QgYmVsb25nIHRvIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgICogIHNvdXJjZS5cbiAgICovXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZSxcbiAgICAgICAgbmV3U2hhcGVUYXJnZXRzLFxuICAgICAgICBuZXdTaGFwZVRhcmdldHNJbmNvbWluZ1NlcXVlbmNlRmxvd3M7XG5cbiAgICBpZiAoIWlzKG5ld1NoYXBlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV3U2hhcGVUYXJnZXRzID0gbmV3U2hhcGUub3V0Z29pbmcuZmlsdGVyKGlzU2VxdWVuY2VGbG93KVxuICAgICAgLm1hcChmdW5jdGlvbihzZXF1ZW5jZUZsb3cpIHtcbiAgICAgICAgcmV0dXJuIHNlcXVlbmNlRmxvdy50YXJnZXQ7XG4gICAgICB9KTtcblxuICAgIG5ld1NoYXBlVGFyZ2V0c0luY29taW5nU2VxdWVuY2VGbG93cyA9IG5ld1NoYXBlVGFyZ2V0cy5yZWR1Y2UoZnVuY3Rpb24oc2VxdWVuY2VGbG93cywgdGFyZ2V0KSB7XG4gICAgICB2YXIgaW5jb21pbmdTZXF1ZW5jZUZsb3dzID0gdGFyZ2V0LmluY29taW5nLmZpbHRlcihpc1NlcXVlbmNlRmxvdyk7XG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZUZsb3dzLmNvbmNhdChpbmNvbWluZ1NlcXVlbmNlRmxvd3MpO1xuICAgIH0sIFtdKTtcblxuICAgIG5ld1NoYXBlVGFyZ2V0c0luY29taW5nU2VxdWVuY2VGbG93cy5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgaWYgKHNlcXVlbmNlRmxvdy5zb3VyY2UgIT09IG5ld1NoYXBlKSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oc2VxdWVuY2VGbG93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbkV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NlcXVlbmNlRmxvdyhjb25uZWN0aW9uKSB7XG4gIHJldHVybiBpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcbn1cbiIsImltcG9ydCB7IGdldExhbmVzUm9vdCB9IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcclxudmFyIEhJR0hFU1RfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb3JyZWN0IGhvdmVyIHRhcmdldHMgaW4gY2VydGFpbiBzaXR1YXRpb25zIHRvIGltcHJvdmUgZGlhZ3JhbSBpbnRlcmFjdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGaXhIb3ZlckJlaGF2aW9yKGVsZW1lbnRSZWdpc3RyeSwgZXZlbnRCdXMsIGNhbnZhcykge1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLmhvdmVyJyxcclxuICAgICdjcmVhdGUubW92ZScsXHJcbiAgICAnY3JlYXRlLmVuZCcsXHJcbiAgICAnc2hhcGUubW92ZS5ob3ZlcicsXHJcbiAgICAnc2hhcGUubW92ZS5tb3ZlJyxcclxuICAgICdzaGFwZS5tb3ZlLmVuZCdcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSB8fCBldmVudC5zaGFwZSxcclxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyO1xyXG5cclxuICAgIC8vIGVuc3VyZSBlbGVtZW50cyBhcmUgbm90IGRyb3BwZWQgb250byBhIGJwbW46TGFuZSBidXQgb250b1xyXG4gICAgLy8gdGhlIHVuZGVybHlpbmcgYnBtbjpQYXJ0aWNpcGFudFxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykgJiYgIWlzQW55KHNoYXBlLCBbICdicG1uOkxhbmUnLCAnYnBtbjpQYXJ0aWNpcGFudCcgXSkpIHtcclxuICAgICAgZXZlbnQuaG92ZXIgPSBnZXRMYW5lc1Jvb3QoaG92ZXIpO1xyXG4gICAgICBldmVudC5ob3ZlckdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhldmVudC5ob3Zlcik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XHJcblxyXG4gICAgLy8gZW5zdXJlIGJwbW46R3JvdXAgYW5kIGxhYmVsIGVsZW1lbnRzIGFyZSBkcm9wcGVkXHJcbiAgICAvLyBhbHdheXMgb250byB0aGUgcm9vdFxyXG4gICAgaWYgKGhvdmVyICE9PSByb290RWxlbWVudCAmJiAoc2hhcGUubGFiZWxUYXJnZXQgfHwgaXMoc2hhcGUsICdicG1uOkdyb3VwJykpKSB7XHJcbiAgICAgIGV2ZW50LmhvdmVyID0gcm9vdEVsZW1lbnQ7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LmhvdmVyJyxcclxuICAgICdjb25uZWN0Lm91dCcsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gICAgJ2Nvbm5lY3QuY2xlYW51cCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuaG92ZXInLFxyXG4gICAgJ2dsb2JhbC1jb25uZWN0Lm91dCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuZW5kJyxcclxuICAgICdnbG9iYWwtY29ubmVjdC5jbGVhbnVwJ1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcjtcclxuXHJcbiAgICAvLyBlbnN1cmUgY29ubmVjdGlvbnMgc3RhcnQvZW5kIG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoaG92ZXIsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdiZW5kcG9pbnQubW92ZS5ob3ZlcidcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXHJcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcclxuXHJcbiAgICAvLyBlbnN1cmUgcmVjb25uZWN0IHN0YXJ0L2VuZCBvbiBicG1uOlBhcnRpY2lwYW50LFxyXG4gICAgLy8gbm90IHRoZSB1bmRlcmx5aW5nIGJwbW46TGFuZVxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykgJiYgL3JlY29ubmVjdC8udGVzdCh0eXBlKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LnN0YXJ0J1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0O1xyXG5cclxuICAgIC8vIGVuc3VyZSBjb25uZWN0IHN0YXJ0IG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoc3RhcnQsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBjb250ZXh0LnN0YXJ0ID0gZ2V0TGFuZXNSb290KHN0YXJ0KSB8fCBzdGFydDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGFsbG93IG1vdmVtZW50IG9mIHBhcnRpY2lwYW50cyBmcm9tIGxhbmVzXHJcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBISUdIRVNUX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIHNoYXBlID0gZXZlbnQuc2hhcGU7XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykpIHtcclxuICAgICAgZXZlbnQuc2hhcGUgPSBnZXRMYW5lc1Jvb3Qoc2hhcGUpIHx8IHNoYXBlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxufVxyXG5cclxuRml4SG92ZXJCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdlbGVtZW50UmVnaXN0cnknLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2NhbnZhcydcclxuXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVDYXRlZ29yeVZhbHVlXG59IGZyb20gJy4vdXRpbC9DYXRlZ29yeVV0aWwnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIEdyb3VwIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyb3VwQmVoYXZpb3IoXG4gICAgYnBtbkZhY3RvcnksXG4gICAgY2FudmFzLFxuICAgIGVsZW1lbnRSZWdpc3RyeSxcbiAgICBldmVudEJ1cyxcbiAgICBpbmplY3RvcixcbiAgICBtb2RkbGVDb3B5XG4pIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgcHJvY2VzcyBkZWZpbml0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbnMoKSB7XG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdEVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJlZmVyZW5jZWQgY2F0ZWdvcnkgdmFsdWUgZm9yIGEgZ2l2ZW4gZ3JvdXAgc2hhcGVcbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVSZWZlcmVuY2VkQ2F0ZWdvcnlWYWx1ZShzaGFwZSkge1xuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxuICAgICAgICBjYXRlZ29yeVZhbHVlID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZjtcblxuICAgIGlmICghY2F0ZWdvcnlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjYXRlZ29yeSA9IGNhdGVnb3J5VmFsdWUuJHBhcmVudDtcblxuICAgIGlmICghY2F0ZWdvcnlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2F0ZWdvcnkuY2F0ZWdvcnlWYWx1ZSwgY2F0ZWdvcnlWYWx1ZSk7XG5cbiAgICAvLyBjbGVhbnVwIGNhdGVnb3J5IGlmIGl0IGlzIGVtcHR5XG4gICAgaWYgKGNhdGVnb3J5ICYmICFjYXRlZ29yeS5jYXRlZ29yeVZhbHVlLmxlbmd0aCkge1xuICAgICAgcmVtb3ZlQ2F0ZWdvcnkoY2F0ZWdvcnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZ2l2ZW4gY2F0ZWdvcnkgZnJvbSB0aGUgZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlQ2F0ZWdvcnkoY2F0ZWdvcnkpIHtcblxuICAgIHZhciBkZWZpbml0aW9ucyA9IGdldERlZmluaXRpb25zKCk7XG5cbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIGNhdGVnb3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBncm91cCBlbGVtZW50IGluIHRoZSBjdXJyZW50IHJlZ2lzdHJ5XG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5zaGFwZT59IGEgbGlzdCBvZiBncm91cCBzaGFwZXNcbiAgICovXG4gIGZ1bmN0aW9uIGdldEdyb3VwRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGlzKGUsICdicG1uOkdyb3VwJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGdpdmVuIGNhdGVnb3J5VmFsdWUgaXMgcmVmZXJlbmNlZCBpbiBvbmUgb2YgdGhlIGdpdmVuIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLnNoYXBlPn0gZWxlbWVudHNcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVZhbHVlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc1JlZmVyZW5jZWQoZWxlbWVudHMsIGNhdGVnb3J5VmFsdWUpIHtcbiAgICByZXR1cm4gZWxlbWVudHMuc29tZShmdW5jdGlvbihlKSB7XG5cbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGUpO1xuXG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZlxuICAgICAgICAmJiBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmID09PSBjYXRlZ29yeVZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZSByZWZlcmVuY2VkIGNhdGVnb3J5ICsgdmFsdWUgd2hlbiBncm91cCB3YXMgZGVsZXRlZFxuICAgKi9cbiAgdGhpcy5leGVjdXRlZCgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpHcm91cCcpKSB7XG5cbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKSxcbiAgICAgICAgICBjYXRlZ29yeVZhbHVlUmVmID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZixcbiAgICAgICAgICBncm91cEVsZW1lbnRzID0gZ2V0R3JvdXBFbGVtZW50cygpO1xuXG4gICAgICBpZiAoIWlzUmVmZXJlbmNlZChncm91cEVsZW1lbnRzLCBjYXRlZ29yeVZhbHVlUmVmKSkge1xuICAgICAgICByZW1vdmVSZWZlcmVuY2VkQ2F0ZWdvcnlWYWx1ZShzaGFwZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogcmUtYXR0YWNoIHJlbW92ZWQgY2F0ZWdvcnlcbiAgICovXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSkge1xuXG4gICAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSksXG4gICAgICAgICAgY2F0ZWdvcnlWYWx1ZVJlZiA9IGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIGNhdGVnb3J5ID0gY2F0ZWdvcnlWYWx1ZVJlZiA/IGNhdGVnb3J5VmFsdWVSZWYuJHBhcmVudCA6IG51bGw7XG5cbiAgICAgIGNvbGxlY3Rpb25BZGQoY2F0ZWdvcnkuZ2V0KCdjYXRlZ29yeVZhbHVlJyksIGNhdGVnb3J5VmFsdWVSZWYpO1xuICAgICAgY29sbGVjdGlvbkFkZChkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBjYXRlZ29yeSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogY3JlYXRlIG5ldyBjYXRlZ29yeSArIHZhbHVlIHdoZW4gZ3JvdXAgd2FzIGNyZWF0ZWRcbiAgICovXG4gIHRoaXMuZXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XG5cbiAgICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkdyb3VwJykgJiYgIWJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYpIHtcblxuICAgICAgdmFyIGRlZmluaXRpb25zID0gZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBjYXRlZ29yeVZhbHVlID0gY3JlYXRlQ2F0ZWdvcnlWYWx1ZShkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpO1xuXG4gICAgICAvLyBsaW5rIHRoZSByZWZlcmVuY2UgdG8gdGhlIEdyb3VwXG4gICAgICBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmID0gY2F0ZWdvcnlWYWx1ZTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgdGhpcy5yZXZlcnQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSkge1xuICAgICAgcmVtb3ZlUmVmZXJlbmNlZENhdGVnb3J5VmFsdWUoc2hhcGUpO1xuXG4gICAgICBkZWxldGUgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmNhdGVnb3J5VmFsdWVSZWY7XG5cbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvcHkgYnBtbjpDYXRlZ29yeVZhbHVlIHdoZW4gY29weWluZyBlbGVtZW50XG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0eScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5LFxuICAgICAgICBjYXRlZ29yeVZhbHVlO1xuXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnYnBtbjpDYXRlZ29yeVZhbHVlJykpIHtcbiAgICAgIGNhdGVnb3J5VmFsdWUgPSBjcmVhdGVDYXRlZ29yeVZhbHVlKGdldERlZmluaXRpb25zKCksIGJwbW5GYWN0b3J5KTtcblxuICAgICAgLy8gcmV0dXJuIGNvcHkgb2YgY2F0ZWdvcnlcbiAgICAgIHJldHVybiBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KHByb3BlcnR5LCBjYXRlZ29yeVZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkdyb3VwQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InLFxuICAnbW9kZGxlQ29weSdcbl07XG5cbmluaGVyaXRzKEdyb3VwQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IGxpbmVJbnRlcnNlY3QgZnJvbSAnLi91dGlsL0xpbmVJbnRlcnNlY3QnO1xuXG5cbi8qKlxuICogRml4IGJyb2tlbiBkb2NraW5ncyBhZnRlciBESSBpbXBvcnRzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEltcG9ydERvY2tpbmdGaXgoZXZlbnRCdXMpIHtcblxuICBmdW5jdGlvbiBhZGp1c3REb2NraW5nKHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCkge1xuXG4gICAgdmFyIGVsZW1lbnRUb3AgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICB5OiBlbGVtZW50TWlkLnkgLSA1MFxuICAgIH07XG5cbiAgICB2YXIgZWxlbWVudExlZnQgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLnggLSA1MCxcbiAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgIH07XG5cbiAgICB2YXIgdmVydGljYWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudFRvcCksXG4gICAgICAgIGhvcml6b250YWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudExlZnQpO1xuXG4gICAgLy8gb3JpZ2luYWwgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjZW50ZXIgY3Jvc3MgaW50ZXJzZWN0aW9uXG4gICAgdmFyIGNlbnRlckludGVyc2VjdDtcblxuICAgIGlmICh2ZXJ0aWNhbEludGVyc2VjdCAmJiBob3Jpem9udGFsSW50ZXJzZWN0KSB7XG4gICAgICBpZiAoZ2V0RGlzdGFuY2UodmVydGljYWxJbnRlcnNlY3QsIGVsZW1lbnRNaWQpID4gZ2V0RGlzdGFuY2UoaG9yaXpvbnRhbEludGVyc2VjdCwgZWxlbWVudE1pZCkpIHtcbiAgICAgICAgY2VudGVySW50ZXJzZWN0ID0gaG9yaXpvbnRhbEludGVyc2VjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRlckludGVyc2VjdCA9IHZlcnRpY2FsSW50ZXJzZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjZW50ZXJJbnRlcnNlY3QgPSB2ZXJ0aWNhbEludGVyc2VjdCB8fCBob3Jpem9udGFsSW50ZXJzZWN0O1xuICAgIH1cblxuICAgIHN0YXJ0UG9pbnQub3JpZ2luYWwgPSBjZW50ZXJJbnRlcnNlY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBmaXhEb2NraW5ncyhjb25uZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1swXSxcbiAgICAgIHdheXBvaW50c1sxXSxcbiAgICAgIGdldE1pZChjb25uZWN0aW9uLnNvdXJjZSlcbiAgICApO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1t3YXlwb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICB3YXlwb2ludHNbd2F5cG9pbnRzLmxlbmd0aCAtIDJdLFxuICAgICAgZ2V0TWlkKGNvbm5lY3Rpb24udGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBldmVudEJ1cy5vbignYnBtbkVsZW1lbnQuYWRkZWQnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGUuZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgZml4RG9ja2luZ3MoZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuSW1wb3J0RG9ja2luZ0ZpeC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwMS54IC0gcDIueCwgMikgKyBNYXRoLnBvdyhwMS55IC0gcDIueSwgMikpO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBlYWNoIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICogUG9vbCBhbmQgTGFuZSBpcyBhc3NpZ25lZCBhbiBpc0hvcml6b250YWwgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSXNIb3Jpem9udGFsRml4KGV2ZW50QnVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBlbGVtZW50VHlwZXNUb1VwZGF0ZSA9IFtcbiAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgJ2JwbW46TGFuZSdcbiAgXTtcblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLm1vdmUnLCAnc2hhcGUuY3JlYXRlJywgJ3NoYXBlLnJlc2l6ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChldmVudC5jb250ZXh0LnNoYXBlKTtcblxuICAgIGlmIChpc0FueShibywgZWxlbWVudFR5cGVzVG9VcGRhdGUpICYmICFiby5kaS5nZXQoJ2lzSG9yaXpvbnRhbCcpKSB7XG5cbiAgICAgIC8vIHNldCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gYXZvaWQgbW9kZWxpbmcjdXBkYXRlUHJvcGVydHkgc2lkZSBlZmZlY3RzXG4gICAgICBiby5kaS5zZXQoJ2lzSG9yaXpvbnRhbCcsIHRydWUpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuSXNIb3Jpem9udGFsRml4LiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoSXNIb3Jpem9udGFsRml4LCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBnZXRFeHRlcm5hbExhYmVsTWlkLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vLi4vbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYWJlbEFkanVzdG1lbnRcbn0gZnJvbSAnLi91dGlsL0xhYmVsTGF5b3V0VXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXROZXdBdHRhY2hQb2ludFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0F0dGFjaFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNaWQsXG4gIHJvdW5kUG9pbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBkZWx0YVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1Bvc2l0aW9uVXRpbCc7XG5cbmltcG9ydCB7XG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldERpc3RhbmNlUG9pbnRMaW5lLFxuICBwZXJwZW5kaWN1bGFyRm9vdFxufSBmcm9tICcuL3V0aWwvR2VvbWV0cmljVXRpbCc7XG5cbnZhciBERUZBVUxUX0xBQkVMX0RJTUVOU0lPTlMgPSB7XG4gIHdpZHRoOiA5MCxcbiAgaGVpZ2h0OiAyMFxufTtcblxudmFyIE5BTUVfUFJPUEVSVFkgPSAnbmFtZSc7XG52YXIgVEVYVF9QUk9QRVJUWSA9ICd0ZXh0JztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBleHRlcm5hbCBsYWJlbHMgYXJlIGFkZGVkXG4gKiB0b2dldGhlciB3aXRoIHJlc3BlY3RpdmUgZWxlbWVudHMgYW5kIHByb3Blcmx5IHVwZGF0ZWQgKERJIHdpc2UpXG4gKiBkdXJpbmcgbW92ZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsQmVoYXZpb3IoXG4gICAgZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uRmFjdG9yeSxcbiAgICB0ZXh0UmVuZGVyZXIpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGlmIG5hbWUgcHJvcGVydHkgd2FzIHVwZGF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKE5BTUVfUFJPUEVSVFkgaW4gcHJvcGVydGllcykge1xuICAgICAgbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgcHJvcGVydGllc1tOQU1FX1BST1BFUlRZXSk7XG4gICAgfVxuXG4gICAgaWYgKFRFWFRfUFJPUEVSVFkgaW4gcHJvcGVydGllc1xuICAgICAgICAmJiBpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG5cbiAgICAgIHZhciBuZXdCb3VuZHMgPSB0ZXh0UmVuZGVyZXIuZ2V0VGV4dEFubm90YXRpb25Cb3VuZHMoXG4gICAgICAgIHtcbiAgICAgICAgICB4OiBlbGVtZW50LngsXG4gICAgICAgICAgeTogZWxlbWVudC55LFxuICAgICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllc1tURVhUX1BST1BFUlRZXSB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgcHJvcGVydGllcy50ZXh0LCBuZXdCb3VuZHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY3JlYXRlIGxhYmVsIHNoYXBlIGFmdGVyIHNoYXBlL2Nvbm5lY3Rpb24gd2FzIGNyZWF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5jcmVhdGUnLCAnY29ubmVjdGlvbi5jcmVhdGUnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkgfHwgIWlzTGFiZWxFeHRlcm5hbChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG9ubHkgY3JlYXRlIGxhYmVsIGlmIGF0dHJpYnV0ZSBhdmFpbGFibGVcbiAgICBpZiAoIWdldExhYmVsKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhYmVsQ2VudGVyID0gZ2V0RXh0ZXJuYWxMYWJlbE1pZChlbGVtZW50KTtcblxuICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgeCBhbmQgeVxuICAgIHZhciBsYWJlbERpbWVuc2lvbnMgPSB0ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhcbiAgICAgIERFRkFVTFRfTEFCRUxfRElNRU5TSU9OUyxcbiAgICAgIGdldExhYmVsKGVsZW1lbnQpXG4gICAgKTtcblxuICAgIG1vZGVsaW5nLmNyZWF0ZUxhYmVsKGVsZW1lbnQsIGxhYmVsQ2VudGVyLCB7XG4gICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2xhYmVsJyxcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHdpZHRoOiBsYWJlbERpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGxhYmVsRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGFmdGVyIGxhYmVsIHNoYXBlIHdhcyBkZWxldGVkXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBsYWJlbFRhcmdldCA9IGNvbnRleHQubGFiZWxUYXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIC8vIGNoZWNrIGlmIGxhYmVsXG4gICAgaWYgKGxhYmVsVGFyZ2V0ICYmIGhpbnRzLnVuc2V0TGFiZWwgIT09IGZhbHNlKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYWJlbChsYWJlbFRhcmdldCwgbnVsbCwgbnVsbCwgeyByZW1vdmVTaGFwZTogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB1cGRhdGUgZGkgaW5mb3JtYXRpb24gb24gbGFiZWwgY3JlYXRpb25cbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdsYWJlbC5jcmVhdGUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBidXNpbmVzc09iamVjdCxcbiAgICAgICAgZGk7XG5cbiAgICAvLyB3ZSB3YW50IHRvIHRyaWdnZXIgb24gcmVhbCBsYWJlbHMgb25seVxuICAgIGlmICghZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlIHdhbnQgdG8gdHJpZ2dlciBvbiBCUE1OIGVsZW1lbnRzIG9ubHlcbiAgICBpZiAoIWlzKGVsZW1lbnQubGFiZWxUYXJnZXQgfHwgZWxlbWVudCwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICBkaSA9IGJ1c2luZXNzT2JqZWN0LmRpO1xuXG5cbiAgICBpZiAoIWRpLmxhYmVsKSB7XG4gICAgICBkaS5sYWJlbCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbmRpOkJQTU5MYWJlbCcsIHtcbiAgICAgICAgYm91bmRzOiBicG1uRmFjdG9yeS5jcmVhdGUoJ2RjOkJvdW5kcycpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3NpZ24oZGkubGFiZWwuYm91bmRzLCB7XG4gICAgICB4OiBlbGVtZW50LngsXG4gICAgICB5OiBlbGVtZW50LnksXG4gICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0VmlzaWJsZUxhYmVsQWRqdXN0bWVudChldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBsYWJlbCA9IGNvbm5lY3Rpb24ubGFiZWwsXG4gICAgICAgIGhpbnRzID0gYXNzaWduKHt9LCBjb250ZXh0LmhpbnRzKSxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMgfHwgY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIG9sZFdheXBvaW50cyA9IGNvbnRleHQub2xkV2F5cG9pbnRzO1xuXG5cbiAgICBpZiAodHlwZW9mIGhpbnRzLnN0YXJ0Q2hhbmdlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpbnRzLnN0YXJ0Q2hhbmdlZCA9ICEhaGludHMuY29ubmVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGludHMuZW5kQ2hhbmdlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpbnRzLmVuZENoYW5nZWQgPSAhIWhpbnRzLmNvbm5lY3Rpb25FbmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExhYmVsQWRqdXN0bWVudChsYWJlbCwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKTtcbiAgfVxuXG4gIHRoaXMucG9zdEV4ZWN1dGUoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmxhYmVsQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGxhYmVsID0gY29ubmVjdGlvbi5sYWJlbCxcbiAgICAgICAgbGFiZWxBZGp1c3RtZW50O1xuXG4gICAgLy8gaGFuZGxlIG1pc3NpbmcgbGFiZWwgYXMgd2VsbCBhcyB0aGUgY2FzZVxuICAgIC8vIHRoYXQgdGhlIGxhYmVsIHBhcmVudCBkb2VzIG5vdCBleGlzdCAoeWV0KSxcbiAgICAvLyBiZWNhdXNlIGl0IGlzIGJlaW5nIHBhc3RlZCAvIGNyZWF0ZWQgdmlhIG11bHRpIGVsZW1lbnQgY3JlYXRlXG4gICAgLy9cbiAgICAvLyBDZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9wdWxsLzEyMjdcbiAgICBpZiAoIWxhYmVsIHx8ICFsYWJlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsYWJlbEFkanVzdG1lbnQgPSBnZXRWaXNpYmxlTGFiZWxBZGp1c3RtZW50KGV2ZW50KTtcblxuICAgIG1vZGVsaW5nLm1vdmVTaGFwZShsYWJlbCwgbGFiZWxBZGp1c3RtZW50KTtcbiAgfSk7XG5cblxuICAvLyBrZWVwIGxhYmVsIHBvc2l0aW9uIG9uIHNoYXBlIHJlcGxhY2VcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5yZXBsYWNlJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlLFxuICAgICAgICBvbGRTaGFwZSA9IGNvbnRleHQub2xkU2hhcGU7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChuZXdTaGFwZSk7XG5cbiAgICBpZiAoYnVzaW5lc3NPYmplY3RcbiAgICAgICYmIGlzTGFiZWxFeHRlcm5hbChidXNpbmVzc09iamVjdClcbiAgICAgICYmIG9sZFNoYXBlLmxhYmVsXG4gICAgICAmJiBuZXdTaGFwZS5sYWJlbCkge1xuICAgICAgbmV3U2hhcGUubGFiZWwueCA9IG9sZFNoYXBlLmxhYmVsLng7XG4gICAgICBuZXdTaGFwZS5sYWJlbC55ID0gb2xkU2hhcGUubGFiZWwueTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gbW92ZSBleHRlcm5hbCBsYWJlbCBhZnRlciByZXNpemluZ1xuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5yZXNpemUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzLFxuICAgICAgICBvbGRCb3VuZHMgPSBjb250ZXh0Lm9sZEJvdW5kcztcblxuICAgIGlmIChoYXNFeHRlcm5hbExhYmVsKHNoYXBlKSkge1xuXG4gICAgICB2YXIgbGFiZWwgPSBzaGFwZS5sYWJlbCxcbiAgICAgICAgICBsYWJlbE1pZCA9IGdldE1pZChsYWJlbCksXG4gICAgICAgICAgZWRnZXMgPSBhc0VkZ2VzKG9sZEJvdW5kcyk7XG5cbiAgICAgIC8vIGdldCBuZWFyZXN0IGJvcmRlciBwb2ludCB0byBsYWJlbCBhcyByZWZlcmVuY2UgcG9pbnRcbiAgICAgIHZhciByZWZlcmVuY2VQb2ludCA9IGdldFJlZmVyZW5jZVBvaW50KGxhYmVsTWlkLCBlZGdlcyk7XG5cbiAgICAgIHZhciBkZWx0YSA9IGdldFJlZmVyZW5jZVBvaW50RGVsdGEocmVmZXJlbmNlUG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGxhYmVsLCBkZWx0YSk7XG5cbiAgICB9XG5cbiAgfSk7XG5cbn1cblxuaW5oZXJpdHMoTGFiZWxCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuTGFiZWxCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAnYnBtbkZhY3RvcnknLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhIHJlZmVyZW5jZSBwb2ludCBkZWx0YSByZWxhdGl2ZSB0byBhIG5ldyBwb3NpdGlvblxuICogb2YgYSBjZXJ0YWluIGVsZW1lbnQncyBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogQHBhcmFtIHtCb3VuZHN9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm4ge0RlbHRhfSBkZWx0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlUG9pbnREZWx0YShyZWZlcmVuY2VQb2ludCwgb2xkQm91bmRzLCBuZXdCb3VuZHMpIHtcblxuICB2YXIgbmV3UmVmZXJlbmNlUG9pbnQgPSBnZXROZXdBdHRhY2hQb2ludChyZWZlcmVuY2VQb2ludCwgb2xkQm91bmRzLCBuZXdCb3VuZHMpO1xuXG4gIHJldHVybiByb3VuZFBvaW50KGRlbHRhKG5ld1JlZmVyZW5jZVBvaW50LCByZWZlcmVuY2VQb2ludCkpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgbmVhcmVzdCBwb2ludCAocmVmZXJlbmNlIHBvaW50KSBmb3IgYSBnaXZlbiBwb2ludFxuICogb250byBnaXZlbiBzZXQgb2YgbGluZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50LCBQb2ludD59IGxpbmVzXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICpcbiAqIEBwYXJhbSB7UG9pbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWZlcmVuY2VQb2ludChwb2ludCwgbGluZXMpIHtcblxuICBpZiAoIWxpbmVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZWFyZXN0TGluZSA9IGdldE5lYXJlc3RMaW5lKHBvaW50LCBsaW5lcyk7XG5cbiAgcmV0dXJuIHBlcnBlbmRpY3VsYXJGb290KHBvaW50LCBuZWFyZXN0TGluZSk7XG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gYm91bmRzIHRvIGEgbGluZXMgYXJyYXkgY29udGFpbmluZyBhbGwgZWRnZXNcbiAqXG4gKiBAcGFyYW0ge0JvdW5kc3xQb2ludH0gYm91bmRzXG4gKlxuICogQHJldHVybiBBcnJheTxQb2ludD5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRWRnZXMoYm91bmRzKSB7XG4gIHJldHVybiBbXG4gICAgWyAvLyB0b3BcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9XG4gICAgXSxcbiAgICBbIC8vIHJpZ2h0XG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCB8fCAwKVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyBib3R0b21cbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCB8fCAwKVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyBsZWZ0XG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH1cbiAgICBdXG4gIF07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmVhcmVzdCBsaW5lIGZvciBhIGdpdmVuIHBvaW50IGJ5IGRpc3RhbmNlXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogQHBhcmFtIEFycmF5PFBvaW50PiBsaW5lc1xuICpcbiAqIEByZXR1cm4gQXJyYXk8UG9pbnQ+XG4gKi9cbmZ1bmN0aW9uIGdldE5lYXJlc3RMaW5lKHBvaW50LCBsaW5lcykge1xuXG4gIHZhciBkaXN0YW5jZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBsLFxuICAgICAgZGlzdGFuY2U6IGdldERpc3RhbmNlUG9pbnRMaW5lKHBvaW50LCBsKVxuICAgIH07XG4gIH0pO1xuXG4gIHZhciBzb3J0ZWQgPSBzb3J0QnkoZGlzdGFuY2VzLCAnZGlzdGFuY2UnKTtcblxuICByZXR1cm4gc29ydGVkWzBdLmxpbmU7XG59XG4iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIENPTExBQl9FUlJfTVNHID0gJ2Zsb3cgZWxlbWVudHMgbXVzdCBiZSBjaGlsZHJlbiBvZiBwb29scy9wYXJ0aWNpcGFudHMnLFxuICAgIFBST0NFU1NfRVJSX01TRyA9ICdwYXJ0aWNpcGFudHMgY2Fubm90IGJlIHBhc3RlZCBvbnRvIGEgbm9uLWVtcHR5IHByb2Nlc3MgZGlhZ3JhbSc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxpbmdGZWVkYmFjayhldmVudEJ1cywgdG9vbHRpcHMsIHRyYW5zbGF0ZSkge1xuXG4gIGZ1bmN0aW9uIHNob3dFcnJvcihwb3NpdGlvbiwgbWVzc2FnZSwgdGltZW91dCkge1xuICAgIHRvb2x0aXBzLmFkZCh7XG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiBwb3NpdGlvbi54ICsgNSxcbiAgICAgICAgeTogcG9zaXRpb24ueSArIDVcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgdGltZW91dDogdGltZW91dCB8fCAyMDAwLFxuICAgICAgaHRtbDogJzxkaXY+JyArIG1lc3NhZ2UgKyAnPC9kaXY+J1xuICAgIH0pO1xuICB9XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUubW92ZS5yZWplY3RlZCcsICdjcmVhdGUucmVqZWN0ZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpICYmIGlzKHNoYXBlLCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgICBzaG93RXJyb3IoZXZlbnQsIHRyYW5zbGF0ZShDT0xMQUJfRVJSX01TRykpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZWxlbWVudHMucGFzdGUucmVqZWN0ZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBwb3NpdGlvbiA9IGNvbnRleHQucG9zaXRpb24sXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICBzaG93RXJyb3IocG9zaXRpb24sIHRyYW5zbGF0ZShDT0xMQUJfRVJSX01TRykpO1xuICAgIH1cblxuICAgIGlmIChpcyh0YXJnZXQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgc2hvd0Vycm9yKHBvc2l0aW9uLCB0cmFuc2xhdGUoUFJPQ0VTU19FUlJfTVNHKSwgMzAwMCk7XG4gICAgfVxuICB9KTtcbn1cblxuTW9kZWxpbmdGZWVkYmFjay4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAndG9vbHRpcHMnLFxuICAndHJhbnNsYXRlJ1xuXTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IGxpbmVJbnRlcnNlY3QgZnJvbSAnLi91dGlsL0xpbmVJbnRlcnNlY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZUVsZW1lbnRCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogQ29tYmluZSBzZXF1ZW5jZSBmbG93cyB3aGVuIGRlbGV0aW5nIGFuIGVsZW1lbnRcbiAgICogaWYgdGhlcmUgaXMgb25lIGluY29taW5nIGFuZCBvbmUgb3V0Z29pbmdcbiAgICogc2VxdWVuY2UgZmxvd1xuICAgKi9cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGU7XG5cbiAgICAvLyBvbmx5IGhhbmRsZSBbYV0gLT4gW3NoYXBlXSAtPiBbYl0gcGF0dGVybnNcbiAgICBpZiAoc2hhcGUuaW5jb21pbmcubGVuZ3RoICE9PSAxIHx8IHNoYXBlLm91dGdvaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbkNvbm5lY3Rpb24gPSBzaGFwZS5pbmNvbWluZ1swXSxcbiAgICAgICAgb3V0Q29ubmVjdGlvbiA9IHNoYXBlLm91dGdvaW5nWzBdO1xuXG4gICAgLy8gb25seSBoYW5kbGUgc2VxdWVuY2UgZmxvd3NcbiAgICBpZiAoIWlzKGluQ29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgIWlzKG91dENvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KGluQ29ubmVjdGlvbi5zb3VyY2UsIG91dENvbm5lY3Rpb24udGFyZ2V0LCBpbkNvbm5lY3Rpb24pKSB7XG5cbiAgICAgIC8vIGNvbXB1dGUgbmV3LCBjb21iaW5lZCB3YXlwb2ludHNcbiAgICAgIHZhciBuZXdXYXlwb2ludHMgPSBnZXROZXdXYXlwb2ludHMoaW5Db25uZWN0aW9uLndheXBvaW50cywgb3V0Q29ubmVjdGlvbi53YXlwb2ludHMpO1xuXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3RFbmQoaW5Db25uZWN0aW9uLCBvdXRDb25uZWN0aW9uLnRhcmdldCwgbmV3V2F5cG9pbnRzKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbmluaGVyaXRzKFJlbW92ZUVsZW1lbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuUmVtb3ZlRWxlbWVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uUnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREb2NraW5nKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn1cblxuXG5mdW5jdGlvbiBnZXROZXdXYXlwb2ludHMoaW5XYXlwb2ludHMsIG91dFdheXBvaW50cykge1xuXG4gIHZhciBpbnRlcnNlY3Rpb24gPSBsaW5lSW50ZXJzZWN0KFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMl0pLFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMV0pLFxuICAgIGdldERvY2tpbmcob3V0V2F5cG9pbnRzWzFdKSxcbiAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1swXSkpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgaW5XYXlwb2ludHMuc2xpY2UoMCwgaW5XYXlwb2ludHMubGVuZ3RoIC0gMSksXG4gICAgICBbIGludGVyc2VjdGlvbiBdLFxuICAgICAgb3V0V2F5cG9pbnRzLnNsaWNlKDEpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW1xuICAgICAgZ2V0RG9ja2luZyhpbldheXBvaW50c1swXSksXG4gICAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1tvdXRXYXlwb2ludHMubGVuZ3RoIC0gMV0pXG4gICAgXTtcbiAgfVxufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgcmVtb3ZlIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgLyoqXG4gICAqIG1vcnBoIGNvbGxhYm9yYXRpb24gZGlhZ3JhbSBpbnRvIHByb2Nlc3MgZGlhZ3JhbVxuICAgKiBhZnRlciB0aGUgbGFzdCBwYXJ0aWNpcGFudCBoYXMgYmVlbiByZW1vdmVkXG4gICAqL1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIGJlaGF2aW9yIGlmIHRoZSBzaGFwZSB0byBiZSByZW1vdmVkXG4gICAgLy8gaXMgYSBwYXJ0aWNpcGFudFxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgY29udGV4dC5jb2xsYWJvcmF0aW9uUm9vdCA9IHBhcmVudDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjb2xsYWJvcmF0aW9uUm9vdCA9IGNvbnRleHQuY29sbGFib3JhdGlvblJvb3Q7XG5cbiAgICBpZiAoY29sbGFib3JhdGlvblJvb3QgJiYgIWNvbGxhYm9yYXRpb25Sb290LmJ1c2luZXNzT2JqZWN0LnBhcnRpY2lwYW50cy5sZW5ndGgpIHtcblxuICAgICAgLy8gcmVwbGFjZSBlbXB0eSBjb2xsYWJvcmF0aW9uIHdpdGggcHJvY2VzcyBkaWFncmFtXG4gICAgICBtb2RlbGluZy5tYWtlUHJvY2VzcygpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbn1cblxuUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnbW9kZWxpbmcnIF07XG5cbmluaGVyaXRzKFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgZmluZCxcbiAgbWF0Y2hQYXR0ZXJuXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uUnVsZXMsIGluamVjdG9yKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBkcmFnZ2luZyA9IGluamVjdG9yLmdldCgnZHJhZ2dpbmcnLCBmYWxzZSk7XG5cbiAgZnVuY3Rpb24gZml4Q29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBwYXJlbnQgPSBjb25uZWN0aW9uLnBhcmVudDtcblxuICAgIC8vIGRvIG5vdCBkbyBhbnl0aGluZyBpZiBjb25uZWN0aW9uXG4gICAgLy8gaXMgYWxyZWFkeSBkZWxldGVkIChtYXkgaGFwcGVuIGR1ZSB0byBvdGhlclxuICAgIC8vIGJlaGF2aW9ycyBwbHVnZ2VkLWluIGJlZm9yZSlcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXBsYWNlbWVudFR5cGUsXG4gICAgICAgIHJlbW92ZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGluY29taW5nIG9yIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAgICogY2FuIHN0YXkgb3IgY291bGQgYmUgc3Vic3RpdHV0ZWQgd2l0aCBhblxuICAgICAqIGFwcHJvcHJpYXRlIHJlcGxhY2VtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBob2xkcyB0cnVlIGZvciBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3cuXG4gICAgICovXG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3coc291cmNlLCB0YXJnZXQpKSB7XG4gICAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdE1lc3NhZ2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpNZXNzYWdlRmxvdyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJhbnNmb3JtIG1lc3NhZ2UgZmxvd3MgaW50byBzZXF1ZW5jZSBmbG93cywgaWYgcG9zc2libGVcblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG5cbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpTZXF1ZW5jZUZsb3cnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpBc3NvY2lhdGlvbicpICYmICFicG1uUnVsZXMuY2FuQ29ubmVjdEFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICB9XG5cblxuICAgIC8vIHJlbW92ZSBpbnZhbGlkIGNvbm5lY3Rpb24sXG4gICAgLy8gdW5sZXNzIGl0IGhhcyBiZWVuIHJlbW92ZWQgYWxyZWFkeVxuICAgIGlmIChyZW1vdmUpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gcmVwbGFjZSBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3dcblxuICAgIGlmIChyZXBsYWNlbWVudFR5cGUpIHtcbiAgICAgIG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgICAgdHlwZTogcmVwbGFjZW1lbnRUeXBlLFxuICAgICAgICB3YXlwb2ludHM6IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29udGV4dC5uZXdTb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0IHx8IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBhbGxvd2VkLFxuICAgICAgICByZXBsYWNlbWVudDtcblxuICAgIGFsbG93ZWQgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG5cbiAgICBpZiAoIWFsbG93ZWQgfHwgYWxsb3dlZC50eXBlID09PSBjb25uZWN0aW9uLnR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXBsYWNlbWVudCA9IG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgIHR5cGU6IGFsbG93ZWQudHlwZSxcbiAgICAgIHdheXBvaW50czogY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIG9sZCBjb25uZWN0aW9uXG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICAgIC8vIHJlcGxhY2UgY29ubmVjdGlvbiBpbiBjb250ZXh0IHRvIHJlY29ubmVjdCBlbmQvc3RhcnRcbiAgICBjb250ZXh0LmNvbm5lY3Rpb24gPSByZXBsYWNlbWVudDtcblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihjb25uZWN0aW9uLCByZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbW9ua2V5LXBhdGNoIHNlbGVjdGlvbiBzYXZlZCBpbiBkcmFnZ2luZyBpbiBvcmRlciB0byByZS1zZWxlY3QgaXQgd2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWRcbiAgZnVuY3Rpb24gY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihvbGRDb25uZWN0aW9uLCBuZXdDb25uZWN0aW9uKSB7XG4gICAgdmFyIGNvbnRleHQgPSBkcmFnZ2luZy5jb250ZXh0KCksXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gY29udGV4dCAmJiBjb250ZXh0LnBheWxvYWQucHJldmlvdXNTZWxlY3Rpb24sXG4gICAgICAgIGluZGV4O1xuXG4gICAgLy8gZG8gbm90aGluZyBpZiBub3QgZHJhZ2dpbmcgb3Igbm8gc2VsZWN0aW9uIHdhcyBwcmVzZW50XG4gICAgaWYgKCFwcmV2aW91c1NlbGVjdGlvbiB8fCAhcHJldmlvdXNTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXggPSBwcmV2aW91c1NlbGVjdGlvbi5pbmRleE9mKG9sZENvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZpb3VzU2VsZWN0aW9uLnNwbGljZShpbmRleCwgMSwgbmV3Q29ubmVjdGlvbik7XG4gIH1cblxuICAvLyBsaWZlY3ljbGUgaG9va3NcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBhbGxDb25uZWN0aW9ucyA9IGNsb3N1cmUuYWxsQ29ubmVjdGlvbnM7XG5cbiAgICBmb3JFYWNoKGFsbENvbm5lY3Rpb25zLCBmaXhDb25uZWN0aW9uKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBjb25uZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIGNvbmRpdGlvbiBvbiBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmIChwcm9wZXJ0aWVzLmRlZmF1bHQpIHtcbiAgICAgIGNvbm5lY3Rpb24gPSBmaW5kKFxuICAgICAgICBlbGVtZW50Lm91dGdvaW5nLFxuICAgICAgICBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5idXNpbmVzc09iamVjdC5kZWZhdWx0LmlkIH0pXG4gICAgICApO1xuXG4gICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGNvbm5lY3Rpb24sIHsgY29uZGl0aW9uRXhwcmVzc2lvbjogdW5kZWZpbmVkIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGZyb20gc291cmNlIG9uIGNoYW5nZSB0byBjb25kaXRpb25hbFxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbmRpdGlvbkV4cHJlc3Npb24gJiYgYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgPT09IGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQuc291cmNlLCB7IGRlZmF1bHQ6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbmhlcml0cyhSZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdicG1uUnVsZXMnLFxuICAnaW5qZWN0b3InXG5dO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzRXZlbnRTdWJQcm9jZXNzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyByZXBsYWNlIGJlaGF2aW9yLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlRWxlbWVudEJlaGF2aW91cihcbiAgICBicG1uUmVwbGFjZSxcbiAgICBicG1uUnVsZXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGluamVjdG9yLFxuICAgIG1vZGVsaW5nLFxuICAgIHNlbGVjdGlvblxuKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIHRoaXMuX2JwbW5SZXBsYWNlID0gYnBtblJlcGxhY2U7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuXG4gIC8vIHJlcGxhY2UgZWxlbWVudHMgb24gbW92ZVxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdlbGVtZW50cy5tb3ZlJyBdLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0Lm5ld1BhcmVudCxcbiAgICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICAgIGZvckVhY2goY29udGV4dC5jbG9zdXJlLnRvcExldmVsLCBmdW5jdGlvbih0b3BMZXZlbEVsZW1lbnRzKSB7XG4gICAgICBpZiAoaXNFdmVudFN1YlByb2Nlc3ModG9wTGV2ZWxFbGVtZW50cykpIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5jb25jYXQodG9wTGV2ZWxFbGVtZW50cy5jaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmNvbmNhdCh0b3BMZXZlbEVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHNldCB0YXJnZXQgdG8gaG9zdCBpZiBhdHRhY2hpbmdcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxICYmIG5ld0hvc3QpIHtcbiAgICAgIHRhcmdldCA9IG5ld0hvc3Q7XG4gICAgfVxuXG4gICAgdmFyIGNhblJlcGxhY2UgPSBicG1uUnVsZXMuY2FuUmVwbGFjZShlbGVtZW50cywgdGFyZ2V0KTtcblxuICAgIGlmIChjYW5SZXBsYWNlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VFbGVtZW50cyhlbGVtZW50cywgY2FuUmVwbGFjZS5yZXBsYWNlbWVudHMsIG5ld0hvc3QpO1xuICAgIH1cbiAgfSwgdGhpcyk7XG5cbiAgLy8gdXBkYXRlIGF0dGFjaG1lbnRzIG9uIGhvc3QgcmVwbGFjZVxuICB0aGlzLnBvc3RFeGVjdXRlKFsgJ3NoYXBlLnJlcGxhY2UnIF0sIDE1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGUsXG4gICAgICAgIGF0dGFjaGVycyA9IG9sZFNoYXBlLmF0dGFjaGVycyxcbiAgICAgICAgY2FuUmVwbGFjZTtcblxuICAgIGlmIChhdHRhY2hlcnMgJiYgYXR0YWNoZXJzLmxlbmd0aCkge1xuICAgICAgY2FuUmVwbGFjZSA9IGJwbW5SdWxlcy5jYW5SZXBsYWNlKGF0dGFjaGVycywgbmV3U2hhcGUpO1xuXG4gICAgICB0aGlzLnJlcGxhY2VFbGVtZW50cyhhdHRhY2hlcnMsIGNhblJlcGxhY2UucmVwbGFjZW1lbnRzKTtcbiAgICB9XG5cbiAgfSwgdGhpcyk7XG5cbiAgLy8ga2VlcCBJRCBvbiBzaGFwZSByZXBsYWNlXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnJlcGxhY2UnIF0sIDE1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGU7XG5cbiAgICBtb2RlbGluZy51bmNsYWltSWQob2xkU2hhcGUuYnVzaW5lc3NPYmplY3QuaWQsIG9sZFNoYXBlLmJ1c2luZXNzT2JqZWN0KTtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKG5ld1NoYXBlLCB7IGlkOiBvbGRTaGFwZS5pZCB9KTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKFJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5SZXBsYWNlRWxlbWVudEJlaGF2aW91ci5wcm90b3R5cGUucmVwbGFjZUVsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMsIG5ld0VsZW1lbnRzKSB7XG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnksXG4gICAgICBicG1uUmVwbGFjZSA9IHRoaXMuX2JwbW5SZXBsYWNlLFxuICAgICAgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uO1xuXG4gIGZvckVhY2gobmV3RWxlbWVudHMsIGZ1bmN0aW9uKHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSB7XG4gICAgICB0eXBlOiByZXBsYWNlbWVudC5uZXdFbGVtZW50VHlwZVxuICAgIH07XG5cbiAgICB2YXIgb2xkRWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQocmVwbGFjZW1lbnQub2xkRWxlbWVudElkKTtcblxuICAgIHZhciBpZHggPSBlbGVtZW50cy5pbmRleE9mKG9sZEVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHNbaWR4XSA9IGJwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQsIHsgc2VsZWN0OiBmYWxzZSB9KTtcbiAgfSk7XG5cbiAgaWYgKG5ld0VsZW1lbnRzKSB7XG4gICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50cyk7XG4gIH1cbn07XG5cblJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdicG1uUmVwbGFjZScsXG4gICdicG1uUnVsZXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NlbGVjdGlvbidcbl07XG4iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBnZXRQYXJ0aWNpcGFudFJlc2l6ZUNvbnN0cmFpbnRzIH0gZnJvbSAnLi91dGlsL1Jlc2l6ZVV0aWwnO1xyXG5cclxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xyXG5cclxuZXhwb3J0IHZhciBMQU5FX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDYwIH07XHJcblxyXG5leHBvcnQgdmFyIFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDE1MCB9O1xyXG5cclxuZXhwb3J0IHZhciBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDE0MCwgaGVpZ2h0OiAxMjAgfTtcclxuXHJcbmV4cG9ydCB2YXIgVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogNTAsIGhlaWdodDogMzAgfTtcclxuXHJcblxyXG4vKipcclxuICogU2V0IG1pbmltdW0gYm91bmRzL3Jlc2l6ZSBjb25zdHJhaW50cyBvbiByZXNpemUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVCZWhhdmlvcihldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcclxuICAgICAgICBiYWxhbmNlZCA9IGNvbnRleHQuYmFsYW5jZWQ7XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykgfHwgaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgY29udGV4dC5yZXNpemVDb25zdHJhaW50cyA9IGdldFBhcnRpY2lwYW50UmVzaXplQ29uc3RyYWludHMoc2hhcGUsIGRpcmVjdGlvbiwgYmFsYW5jZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKHNoYXBlKSkge1xyXG4gICAgICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcclxuICAgICAgY29udGV4dC5taW5EaW1lbnNpb25zID0gVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5SZXNpemVCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIHJvdW5kQm91bmRzXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaGFzUHJpbWFyeU1vZGlmaWVyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvTW91c2UnO1xuXG52YXIgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZID0gMTAwMTtcblxuXG4vKipcbiAqIEludm9rZSB7QGxpbmsgTW9kZWxpbmcjcmVzaXplTGFuZX0gaW5zdGVhZCBvZlxuICoge0BsaW5rIE1vZGVsaW5nI3Jlc2l6ZVNoYXBlfSB3aGVuIHJlc2l6aW5nIGEgTGFuZVxuICogb3IgUGFydGljaXBhbnQgc2hhcGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZUxhbmVCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBldmVudEJ1cy5vbigncmVzaXplLnN0YXJ0JywgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZICsgNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykgfHwgaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgICAgLy8gc2hvdWxkIHdlIHJlc2l6ZSB0aGUgb3Bwb3NpdGUgbGFuZShzKSBpblxuICAgICAgLy8gb3JkZXIgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHJlc2l6ZSBvcGVyYXRpb24/XG4gICAgICBjb250ZXh0LmJhbGFuY2VkID0gIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogSW50ZXJjZXB0IHJlc2l6ZSBlbmQgYW5kIGNhbGwgcmVzaXplIGxhbmUgZnVuY3Rpb24gaW5zdGVhZC5cbiAgICovXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuZW5kJywgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcztcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpIHx8IGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAgIGlmIChjYW5FeGVjdXRlKSB7XG5cbiAgICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBmb3IgbmV3IGJvdW5kc1xuICAgICAgICAvLyAoaW1wb3J0YW50IHdoZW4gem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgICAgICBuZXdCb3VuZHMgPSByb3VuZEJvdW5kcyhuZXdCb3VuZHMpO1xuXG4gICAgICAgIC8vIHBlcmZvcm0gdGhlIGFjdHVhbCByZXNpemVcbiAgICAgICAgbW9kZWxpbmcucmVzaXplTGFuZShzaGFwZSwgbmV3Qm91bmRzLCBjb250ZXh0LmJhbGFuY2VkKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3RvcCBwcm9wYWdhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cblJlc2l6ZUxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZmluZCxcclxuICBpc0FycmF5LFxyXG4gIG1hdGNoUGF0dGVybixcclxuICBzb21lXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxyXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gIGlzXHJcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBoYXNFdmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XHJcblxyXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBZGQgcmVmZXJlbmNlZCByb290IGVsZW1lbnRzIChlcnJvciwgZXNjYWxhdGlvbiwgbWVzc2FnZSwgc2lnbmFsKSBpZiB0aGV5IGRvbid0IGV4aXN0LlxyXG4gKiBDb3B5IHJlZmVyZW5jZWQgcm9vdCBlbGVtZW50cyBvbiBjb3B5ICYgcGFzdGUuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yKFxyXG4gICAgYnBtbmpzLCBldmVudEJ1cywgaW5qZWN0b3IsIG1vZGRsZUNvcHksIGJwbW5GYWN0b3J5XHJcbikge1xyXG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xyXG5cclxuICBmdW5jdGlvbiBjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2UoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkgfHxcclxuICAgICAgaGFzQW55RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIFtcclxuICAgICAgICAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xyXG4gICAgICBdKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhhc1Jvb3RFbGVtZW50KHJvb3RFbGVtZW50KSB7XHJcbiAgICB2YXIgZGVmaW5pdGlvbnMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKSxcclxuICAgICAgICByb290RWxlbWVudHMgPSBkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgIHJldHVybiAhIWZpbmQocm9vdEVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogcm9vdEVsZW1lbnQuaWQgfSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eU5hbWUoZXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICBpZiAoaXMoZXZlbnREZWZpbml0aW9uLCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnZXJyb3JSZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ2VzY2FsYXRpb25SZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ21lc3NhZ2VSZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnc2lnbmFsUmVmJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkpIHtcclxuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnbWVzc2FnZVJlZicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdldmVudERlZmluaXRpb25zJyksXHJcbiAgICAgICAgZXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uc1sgMCBdO1xyXG5cclxuICAgIHJldHVybiBldmVudERlZmluaXRpb24uZ2V0KGdldFJvb3RFbGVtZW50UmVmZXJlbmNlUHJvcGVydHlOYW1lKGV2ZW50RGVmaW5pdGlvbikpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QsIHJvb3RFbGVtZW50KSB7XHJcbiAgICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkpIHtcclxuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LnNldCgnbWVzc2FnZVJlZicsIHJvb3RFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpLFxyXG4gICAgICAgIGV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbnNbIDAgXTtcclxuXHJcbiAgICByZXR1cm4gZXZlbnREZWZpbml0aW9uLnNldChnZXRSb290RWxlbWVudFJlZmVyZW5jZVByb3BlcnR5TmFtZShldmVudERlZmluaXRpb24pLCByb290RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvLyBjcmVhdGUgc2hhcGVcclxuICB0aGlzLmV4ZWN1dGVkKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIGlmICghY2FuSGF2ZVJvb3RFbGVtZW50UmVmZXJlbmNlKHNoYXBlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50ID0gZ2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50cztcclxuXHJcbiAgICBpZiAocm9vdEVsZW1lbnQgJiYgIWhhc1Jvb3RFbGVtZW50KHJvb3RFbGVtZW50KSkge1xyXG4gICAgICByb290RWxlbWVudHMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKS5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgICAgLy8gYWRkIHJvb3QgZWxlbWVudFxyXG4gICAgICBjb2xsZWN0aW9uQWRkKHJvb3RFbGVtZW50cywgcm9vdEVsZW1lbnQpO1xyXG5cclxuICAgICAgY29udGV4dC5hZGRlZFJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfSwgdHJ1ZSk7XHJcblxyXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBhZGRlZFJvb3RFbGVtZW50ID0gY29udGV4dC5hZGRlZFJvb3RFbGVtZW50O1xyXG5cclxuICAgIGlmICghYWRkZWRSb290RWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvb3RFbGVtZW50cyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLmdldCgncm9vdEVsZW1lbnRzJyk7XHJcblxyXG4gICAgLy8gcmVtb3ZlIHJvb3QgZWxlbWVudFxyXG4gICAgY29sbGVjdGlvblJlbW92ZShyb290RWxlbWVudHMsIGFkZGVkUm9vdEVsZW1lbnQpO1xyXG4gIH0sIHRydWUpO1xyXG5cclxuICBldmVudEJ1cy5vbignY29weVBhc3RlLmNvcHlFbGVtZW50JywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXHJcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcclxuXHJcbiAgICBpZiAoIWNhbkhhdmVSb290RWxlbWVudFJlZmVyZW5jZShlbGVtZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBnZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCk7XHJcblxyXG4gICAgaWYgKHJvb3RFbGVtZW50KSB7XHJcbiAgICAgIGRlc2NyaXB0b3IucmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcclxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGRlc2NyaXB0b3IuYnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gICAgaWYgKCFjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2UoYnVzaW5lc3NPYmplY3QpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gZGVzY3JpcHRvci5yZWZlcmVuY2VkUm9vdEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFyZWZlcmVuY2VkUm9vdEVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGFzUm9vdEVsZW1lbnQocmVmZXJlbmNlZFJvb3RFbGVtZW50KSkge1xyXG4gICAgICByZWZlcmVuY2VkUm9vdEVsZW1lbnQgPSBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KFxyXG4gICAgICAgIHJlZmVyZW5jZWRSb290RWxlbWVudCxcclxuICAgICAgICBicG1uRmFjdG9yeS5jcmVhdGUocmVmZXJlbmNlZFJvb3RFbGVtZW50LiR0eXBlKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0LCByZWZlcmVuY2VkUm9vdEVsZW1lbnQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2JwbW5qcycsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnaW5qZWN0b3InLFxyXG4gICdtb2RkbGVDb3B5JyxcclxuICAnYnBtbkZhY3RvcnknXHJcbl07XHJcblxyXG5pbmhlcml0cyhSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBoYXNBbnlFdmVudERlZmluaXRpb24oZWxlbWVudCwgdHlwZXMpIHtcclxuICBpZiAoIWlzQXJyYXkodHlwZXMpKSB7XHJcbiAgICB0eXBlcyA9IFsgdHlwZXMgXTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzb21lKHR5cGVzLCBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHR5cGUpO1xyXG4gIH0pO1xyXG59IiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgTEFORV9NSU5fRElNRU5TSU9OUyxcclxuICBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUyxcclxuICBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUyxcclxuICBURVhUX0FOTk9UQVRJT05fTUlOX0RJTUVOU0lPTlNcclxufSBmcm9tICcuL1Jlc2l6ZUJlaGF2aW9yJztcclxuXHJcbmltcG9ydCB7IGdldENoaWxkTGFuZXMgfSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcclxuXHJcbnZhciBtYXggPSBNYXRoLm1heDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2xCZWhhdmlvcihldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuZ2V0TWluRGltZW5zaW9ucycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcclxuICAgICAgICBheGlzID0gY29udGV4dC5heGlzLFxyXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcclxuICAgICAgICBtaW5EaW1lbnNpb25zID0ge307XHJcblxyXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XHJcbiAgICAgIHZhciBpZCA9IHNoYXBlLmlkO1xyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcblxyXG4gICAgICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuICAgICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWluRGltZW5zaW9uc1sgaWQgXSA9IHtcclxuICAgICAgICAgICAgd2lkdGg6IFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGdldFBhcnRpY2lwYW50TWluSGVpZ2h0KHNoYXBlLCBzdGFydClcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChzaGFwZSkpIHtcclxuICAgICAgICBtaW5EaW1lbnNpb25zWyBpZCBdID0gU1VCX1BST0NFU1NfTUlOX0RJTUVOU0lPTlM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xyXG4gICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBURVhUX0FOTk9UQVRJT05fTUlOX0RJTUVOU0lPTlM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtaW5EaW1lbnNpb25zO1xyXG4gIH0pO1xyXG59XHJcblxyXG5TcGFjZVRvb2xCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChheGlzKSB7XHJcbiAgcmV0dXJuIGF4aXMgPT09ICd4JztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBtaW5pbXVtIGhlaWdodCBmb3IgcGFydGljaXBhbnQgdGFraW5nIGxhbmVzIGludG8gYWNjb3VudC5cclxuICpcclxuICogQHBhcmFtIHs8ZGpzLm1vZGVsLlNoYXBlPn0gcGFydGljaXBhbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQYXJ0aWNpcGFudE1pbkhlaWdodChwYXJ0aWNpcGFudCwgc3RhcnQpIHtcclxuICB2YXIgbGFuZXNNaW5IZWlnaHQ7XHJcblxyXG4gIGlmICghaGFzQ2hpbGRMYW5lcyhwYXJ0aWNpcGFudCkpIHtcclxuICAgIHJldHVybiBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUy5oZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBsYW5lc01pbkhlaWdodCA9IGdldExhbmVzTWluSGVpZ2h0KHBhcnRpY2lwYW50LCBzdGFydCk7XHJcblxyXG4gIHJldHVybiBtYXgoUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0LCBsYW5lc01pbkhlaWdodCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc0NoaWxkTGFuZXMoZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWdldENoaWxkTGFuZXMoZWxlbWVudCkubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMYW5lc01pbkhlaWdodChwYXJ0aWNpcGFudCwgcmVzaXplU3RhcnQpIHtcclxuICB2YXIgbGFuZXMgPSBnZXRDaGlsZExhbmVzKHBhcnRpY2lwYW50KSxcclxuICAgICAgcmVzaXplZExhbmU7XHJcblxyXG4gIC8vIGZpbmQgdGhlIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkXHJcbiAgcmVzaXplZExhbmUgPSBmaW5kUmVzaXplZExhbmUobGFuZXMsIHJlc2l6ZVN0YXJ0KTtcclxuXHJcbiAgLy8gcmVzaXplZCBsYW5lIGNhbm5vdCBzaHJpbmsgYmVsb3cgdGhlIG1pbmltdW0gaGVpZ2h0XHJcbiAgLy8gYnV0IHJlbWFpbmluZyBsYW5lcycgZGltZW5zaW9ucyBhcmUga2VwdCBpbnRhY3RcclxuICByZXR1cm4gcGFydGljaXBhbnQuaGVpZ2h0IC0gcmVzaXplZExhbmUuaGVpZ2h0ICsgTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGaW5kIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGxhbmVzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXNpemVTdGFydFxyXG4gKi9cclxuZnVuY3Rpb24gZmluZFJlc2l6ZWRMYW5lKGxhbmVzLCByZXNpemVTdGFydCkge1xyXG4gIHZhciBpLCBsYW5lLCBjaGlsZExhbmVzO1xyXG5cclxuICBmb3IgKGkgPSAwOyBpIDwgbGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGxhbmUgPSBsYW5lc1tpXTtcclxuXHJcbiAgICAvLyByZXNpemluZyBjdXJyZW50IGxhbmUgb3IgYSBsYW5lIG5lc3RlZFxyXG4gICAgaWYgKHJlc2l6ZVN0YXJ0ID49IGxhbmUueSAmJiByZXNpemVTdGFydCA8PSBsYW5lLnkgKyBsYW5lLmhlaWdodCkge1xyXG4gICAgICBjaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhsYW5lKTtcclxuXHJcbiAgICAgIC8vIGEgbmVzdGVkIGxhbmUgaXMgcmVzaXplZFxyXG4gICAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmluZFJlc2l6ZWRMYW5lKGNoaWxkTGFuZXMsIHJlc2l6ZVN0YXJ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY3VycmVudCBsYW5lIGlzIHRoZSByZXNpemVkIG9uZVxyXG4gICAgICByZXR1cm4gbGFuZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsLmpzJztcblxuLyoqXG4gKiBBZGQgc3RhcnQgZXZlbnQgcmVwbGFjaW5nIGVsZW1lbnQgd2l0aCBleHBhbmRlZCBzdWIgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvcihpbmplY3RvciwgbW9kZWxpbmcpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBvbGRTaGFwZSA9IGV2ZW50LmNvbnRleHQub2xkU2hhcGUsXG4gICAgICAgIG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZTtcblxuICAgIGlmIChcbiAgICAgICFpcyhuZXdTaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpIHx8XG4gICAgICAhaXMob2xkU2hhcGUsICdicG1uOlRhc2snKSB8fFxuICAgICAgIWlzRXhwYW5kZWQobmV3U2hhcGUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0U3RhcnRFdmVudFBvc2l0aW9uKG5ld1NoYXBlKTtcblxuICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcgfSwgcG9zaXRpb24sIG5ld1NoYXBlKTtcbiAgfSk7XG59XG5cblN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFN0YXJ0RXZlbnRQb3NpdGlvbihzaGFwZSkge1xuICByZXR1cm4ge1xuICAgIHg6IHNoYXBlLnggKyBzaGFwZS53aWR0aCAvIDYsXG4gICAgeTogc2hhcGUueSArIHNoYXBlLmhlaWdodCAvIDJcbiAgfTtcbn1cbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBjb21wdXRlQ2hpbGRyZW5CQm94XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Jlc2l6ZS9SZXNpemVVdGlsJztcblxuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91cihcbiAgICBldmVudEJ1cywgZWxlbWVudEZhY3RvcnksIG1vZGVsaW5nLFxuICAgIHJlc2l6ZSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIGZ1bmN0aW9uIGhpZGVFbXB0eUxhYmVscyhjaGlsZHJlbikge1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdsYWJlbCcgJiYgIWNoaWxkLmJ1c2luZXNzT2JqZWN0Lm5hbWUpIHtcbiAgICAgICAgICBjaGlsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHBhbmRlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbixcbiAgICAgICAgbmV3Qm91bmRzID0gZGVmYXVsdFNpemUsXG4gICAgICAgIHZpc2libGVFbGVtZW50cyxcbiAgICAgICAgdmlzaWJsZUJCb3g7XG5cbiAgICB2aXNpYmxlRWxlbWVudHMgPSBmaWx0ZXJWaXNpYmxlKGNoaWxkcmVuKS5jb25jYXQoWyBzaGFwZSBdKTtcblxuICAgIHZpc2libGVCQm94ID0gY29tcHV0ZUNoaWxkcmVuQkJveCh2aXNpYmxlRWxlbWVudHMpO1xuXG4gICAgaWYgKHZpc2libGVCQm94KSB7XG5cbiAgICAgIC8vIGNlbnRlciB0byB2aXNpYmxlQkJveCB3aXRoIG1heChkZWZhdWx0U2l6ZSwgY2hpbGRyZW5Cb3VuZHMpXG4gICAgICBuZXdCb3VuZHMud2lkdGggPSBNYXRoLm1heCh2aXNpYmxlQkJveC53aWR0aCwgbmV3Qm91bmRzLndpZHRoKTtcbiAgICAgIG5ld0JvdW5kcy5oZWlnaHQgPSBNYXRoLm1heCh2aXNpYmxlQkJveC5oZWlnaHQsIG5ld0JvdW5kcy5oZWlnaHQpO1xuXG4gICAgICBuZXdCb3VuZHMueCA9IHZpc2libGVCQm94LnggKyAodmlzaWJsZUJCb3gud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gdmlzaWJsZUJCb3gueSArICh2aXNpYmxlQkJveC5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY2VudGVyIHRvIGNvbGxhcHNlZCBzaGFwZSB3aXRoIGRlZmF1bHRTaXplXG4gICAgICBuZXdCb3VuZHMueCA9IHNoYXBlLnggKyAoc2hhcGUud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gc2hhcGUueSArIChzaGFwZS5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0JvdW5kcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbGxhcHNlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC0gZGVmYXVsdFNpemUud2lkdGgpIC8gMixcbiAgICAgIHk6IHNoYXBlLnkgKyAoc2hhcGUuaGVpZ2h0IC0gZGVmYXVsdFNpemUuaGVpZ2h0KSAvIDIsXG4gICAgICB3aWR0aDogZGVmYXVsdFNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IGRlZmF1bHRTaXplLmhlaWdodFxuICAgIH07XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXNoYXBlLmNvbGxhcHNlZCkge1xuXG4gICAgICAvLyBhbGwgY2hpbGRyZW4gZ290IG1hZGUgdmlzaWJsZSB0aHJvdWdoIGRqcywgaGlkZSBlbXB0eSBsYWJlbHNcbiAgICAgIGhpZGVFbXB0eUxhYmVscyhzaGFwZS5jaGlsZHJlbik7XG5cbiAgICAgIC8vIHJlbW92ZSBjb2xsYXBzZWQgbWFya2VyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdChzaGFwZSkuZGkuaXNFeHBhbmRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gcGxhY2UgY29sbGFwc2VkIG1hcmtlclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnc2hhcGUudG9nZ2xlQ29sbGFwc2UnIF0sIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuXG4gICAgLy8gcmV2ZXJ0IHJlbW92aW5nL3BsYWNpbmcgY29sbGFwc2VkIG1hcmtlclxuICAgIGlmICghc2hhcGUuY29sbGFwc2VkKSB7XG4gICAgICBnZXRCdXNpbmVzc09iamVjdChzaGFwZSkuZGkuaXNFeHBhbmRlZCA9IHRydWU7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRlZmF1bHRTaXplID0gZWxlbWVudEZhY3RvcnkuX2dldERlZmF1bHRTaXplKHNoYXBlKSxcbiAgICAgICAgbmV3Qm91bmRzO1xuXG4gICAgaWYgKHNoYXBlLmNvbGxhcHNlZCkge1xuXG4gICAgICAvLyByZXNpemUgdG8gZGVmYXVsdCBzaXplIG9mIGNvbGxhcHNlZCBzaGFwZXNcbiAgICAgIG5ld0JvdW5kcyA9IGNvbGxhcHNlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHJlc2l6ZSB0byBib3VuZHMgb2YgbWF4KHZpc2libGUgY2hpbGRyZW4sIGRlZmF1bHRTaXplKVxuICAgICAgbmV3Qm91bmRzID0gZXhwYW5kZWRCb3VuZHMoc2hhcGUsIGRlZmF1bHRTaXplKTtcbiAgICB9XG5cbiAgICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzLCBudWxsLCB7XG4gICAgICBhdXRvUmVzaXplOiBzaGFwZS5jb2xsYXBzZWQgPyBmYWxzZSA6ICdud3NlJ1xuICAgIH0pO1xuICB9KTtcblxufVxuXG5cbmluaGVyaXRzKFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdtb2RlbGluZydcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGZpbHRlclZpc2libGUoZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuICFlLmhpZGRlbjtcbiAgfSk7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcbmltcG9ydCB7IGlzTGFiZWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cblxuLyoqXG4gKiBVbmNsYWltcyBtb2RlbCBJRHMgb24gZWxlbWVudCBkZWxldGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGRsZVxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVW5jbGFpbUlkQmVoYXZpb3IoY2FudmFzLCBpbmplY3RvciwgbW9kZGxlLCBtb2RlbGluZykge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHNoYXBlQm8gPSBzaGFwZS5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChpc0xhYmVsKHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpc0V4cGFuZGVkKHNoYXBlKSkge1xuICAgICAgbW9kZGxlLmlkcy51bmNsYWltKHNoYXBlQm8ucHJvY2Vzc1JlZi5pZCk7XG4gICAgfVxuXG4gICAgbW9kZWxpbmcudW5jbGFpbUlkKHNoYXBlQm8uaWQsIHNoYXBlQm8pO1xuICB9KTtcblxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkJvID0gY29ubmVjdGlvbi5idXNpbmVzc09iamVjdDtcblxuICAgIG1vZGVsaW5nLnVuY2xhaW1JZChjb25uZWN0aW9uQm8uaWQsIGNvbm5lY3Rpb25Cbyk7XG4gIH0pO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgcm9vdEVsZW1lbnRCbyA9IHJvb3RFbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgbW9kZGxlLmlkcy51bmNsYWltKHJvb3RFbGVtZW50Qm8uaWQpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoVW5jbGFpbUlkQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblVuY2xhaW1JZEJlaGF2aW9yLiRpbmplY3QgPSBbICdjYW52YXMnLCAnaW5qZWN0b3InLCAnbW9kZGxlJywgJ21vZGVsaW5nJyBdOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbi8qKlxuICogQSBiZWhhdmlvciB0aGF0IHVuc2V0cyB0aGUgRGVmYXVsdCBwcm9wZXJ0eSBvZlxuICogc2VxdWVuY2UgZmxvdyBzb3VyY2Ugb24gZWxlbWVudCBkZWxldGUsIGlmIHRoZVxuICogcmVtb3ZlZCBlbGVtZW50IGlzIHRoZSBHYXRld2F5IG9yIFRhc2sncyBkZWZhdWx0IGZsb3cuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERlbGV0ZVNlcXVlbmNlRmxvd0JlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2U7XG5cbiAgICBpZiAoaXNEZWZhdWx0Rmxvdyhjb25uZWN0aW9uLCBzb3VyY2UpKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKHNvdXJjZSwge1xuICAgICAgICAnZGVmYXVsdCc6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmluaGVyaXRzKERlbGV0ZVNlcXVlbmNlRmxvd0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5EZWxldGVTZXF1ZW5jZUZsb3dCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0RlZmF1bHRGbG93KGNvbm5lY3Rpb24sIHNvdXJjZSkge1xuXG4gIGlmICghaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChzb3VyY2UpLFxuICAgICAgc2VxdWVuY2VGbG93ID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbik7XG5cbiAgcmV0dXJuIHNvdXJjZUJvLmdldCgnZGVmYXVsdCcpID09PSBzZXF1ZW5jZUZsb3c7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMCxcbiAgICBISUdIX1BSSU9SSVRZID0gNTAwMDtcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgZGVsZXRlIGxhbmUgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCB0cmFuc2xhdGUpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIE9rLCB0aGlzIGlzIGl0OlxuICAgKlxuICAgKiBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgTGFuZSNmbG93Tm9kZVJlZnMgX2FuZF9cbiAgICogRmxvd05vZGUjbGFuZXMgd2l0aCBldmVyeSBGbG93Tm9kZSBtb3ZlL3Jlc2l6ZSBhbmRcbiAgICogTGFuZSBtb3ZlL3Jlc2l6ZS5cbiAgICpcbiAgICogV2Ugd2FudCB0byBncm91cCB0aGF0IHN0dWZmIHRvIHJlY29tcHV0ZSBjb250YWlubWVudHNcbiAgICogYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBZZWEhXG4gICAqL1xuXG4gIC8vIHRoZSB1cGRhdGUgY29udGV4dFxuICB2YXIgY29udGV4dDtcblxuXG4gIGZ1bmN0aW9uIGluaXRDb250ZXh0KCkge1xuICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG5ldyBVcGRhdGVDb250ZXh0KCk7XG4gICAgY29udGV4dC5lbnRlcigpO1xuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnb3V0IG9mIGJvdW5kcyByZWxlYXNlJykpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVsZWFzZUNvbnRleHQoKSB7XG5cbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ291dCBvZiBib3VuZHMgcmVsZWFzZScpKTtcbiAgICB9XG5cbiAgICB2YXIgdHJpZ2dlclVwZGF0ZSA9IGNvbnRleHQubGVhdmUoKTtcblxuICAgIGlmICh0cmlnZ2VyVXBkYXRlKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYW5lUmVmcyhjb250ZXh0LmZsb3dOb2RlcywgY29udGV4dC5sYW5lcyk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cmlnZ2VyVXBkYXRlO1xuICB9XG5cblxuICB2YXIgbGFuZVJlZlVwZGF0ZUV2ZW50cyA9IFtcbiAgICAnc3BhY2VUb29sJyxcbiAgICAnbGFuZS5hZGQnLFxuICAgICdsYW5lLnJlc2l6ZScsXG4gICAgJ2xhbmUuc3BsaXQnLFxuICAgICdlbGVtZW50cy5jcmVhdGUnLFxuICAgICdlbGVtZW50cy5kZWxldGUnLFxuICAgICdlbGVtZW50cy5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLnJlc2l6ZSdcbiAgXTtcblxuXG4gIC8vIGxpc3RlbiB0byBhIGxvdCBvZiBzdHVmZiB0byBncm91cCBsYW5lIHVwZGF0ZXNcblxuICB0aGlzLnByZUV4ZWN1dGUobGFuZVJlZlVwZGF0ZUV2ZW50cywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpbml0Q29udGV4dCgpO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChsYW5lUmVmVXBkYXRlRXZlbnRzLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVsZWFzZUNvbnRleHQoKTtcbiAgfSk7XG5cblxuICAvLyBNYXJrIGZsb3cgbm9kZXMgKyBsYW5lcyB0aGF0IG5lZWQgYW4gdXBkYXRlXG5cbiAgdGhpcy5wcmVFeGVjdXRlKFtcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ3NoYXBlLnJlc2l6ZSdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgdmFyIHVwZGF0ZUNvbnRleHQgPSBnZXRDb250ZXh0KCk7XG5cbiAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBsYWJlbHNcbiAgICBpZiAoc2hhcGUubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgICAgdXBkYXRlQ29udGV4dC5hZGRMYW5lKHNoYXBlKTtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICAgIHVwZGF0ZUNvbnRleHQuYWRkRmxvd05vZGUoc2hhcGUpO1xuICAgIH1cbiAgfSk7XG59XG5cblVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycgLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuaW5oZXJpdHMoVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuZnVuY3Rpb24gVXBkYXRlQ29udGV4dCgpIHtcblxuICB0aGlzLmZsb3dOb2RlcyA9IFtdO1xuICB0aGlzLmxhbmVzID0gW107XG5cbiAgdGhpcy5jb3VudGVyID0gMDtcblxuICB0aGlzLmFkZExhbmUgPSBmdW5jdGlvbihsYW5lKSB7XG4gICAgdGhpcy5sYW5lcy5wdXNoKGxhbmUpO1xuICB9O1xuXG4gIHRoaXMuYWRkRmxvd05vZGUgPSBmdW5jdGlvbihmbG93Tm9kZSkge1xuICAgIHRoaXMuZmxvd05vZGVzLnB1c2goZmxvd05vZGUpO1xuICB9O1xuXG4gIHRoaXMuZW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNvdW50ZXIrKztcbiAgfTtcblxuICB0aGlzLmxlYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jb3VudGVyLS07XG5cbiAgICByZXR1cm4gIXRoaXMuY291bnRlcjtcbiAgfTtcbn0iLCJpbXBvcnQgQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3IgZnJvbSAnLi9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcic7XG5pbXBvcnQgQXBwZW5kQmVoYXZpb3IgZnJvbSAnLi9BcHBlbmRCZWhhdmlvcic7XG5pbXBvcnQgQXNzb2NpYXRpb25CZWhhdmlvciBmcm9tICcuL0Fzc29jaWF0aW9uQmVoYXZpb3InO1xuaW1wb3J0IEF0dGFjaEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9BdHRhY2hFdmVudEJlaGF2aW9yJztcbmltcG9ydCBCb3VuZGFyeUV2ZW50QmVoYXZpb3IgZnJvbSAnLi9Cb3VuZGFyeUV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IFJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3IgZnJvbSAnLi9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yJztcbmltcG9ydCBDcmVhdGVCZWhhdmlvciBmcm9tICcuL0NyZWF0ZUJlaGF2aW9yJztcbmltcG9ydCBGaXhIb3ZlckJlaGF2aW9yIGZyb20gJy4vRml4SG92ZXJCZWhhdmlvcic7XG5pbXBvcnQgQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yJztcbmltcG9ydCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcic7XG5pbXBvcnQgRGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvciBmcm9tICcuL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3InO1xuaW1wb3J0IERhdGFTdG9yZUJlaGF2aW9yIGZyb20gJy4vRGF0YVN0b3JlQmVoYXZpb3InO1xuaW1wb3J0IERlbGV0ZUxhbmVCZWhhdmlvciBmcm9tICcuL0RlbGV0ZUxhbmVCZWhhdmlvcic7XG5pbXBvcnQgRGV0YWNoRXZlbnRCZWhhdmlvciBmcm9tICcuL0RldGFjaEV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IERyb3BPbkZsb3dCZWhhdmlvciBmcm9tICcuL0Ryb3BPbkZsb3dCZWhhdmlvcic7XG5pbXBvcnQgRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciBmcm9tICcuL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3InO1xuaW1wb3J0IEdyb3VwQmVoYXZpb3IgZnJvbSAnLi9Hcm91cEJlaGF2aW9yJztcbmltcG9ydCBJbXBvcnREb2NraW5nRml4IGZyb20gJy4vSW1wb3J0RG9ja2luZ0ZpeCc7XG5pbXBvcnQgSXNIb3Jpem9udGFsRml4IGZyb20gJy4vSXNIb3Jpem9udGFsRml4JztcbmltcG9ydCBMYWJlbEJlaGF2aW9yIGZyb20gJy4vTGFiZWxCZWhhdmlvcic7XG5pbXBvcnQgTW9kZWxpbmdGZWVkYmFjayBmcm9tICcuL01vZGVsaW5nRmVlZGJhY2snO1xuaW1wb3J0IFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yJztcbmltcG9ydCBSZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcic7XG5pbXBvcnQgUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXIgZnJvbSAnLi9SZXBsYWNlRWxlbWVudEJlaGF2aW91cic7XG5pbXBvcnQgUmVzaXplQmVoYXZpb3IgZnJvbSAnLi9SZXNpemVCZWhhdmlvcic7XG5pbXBvcnQgUmVzaXplTGFuZUJlaGF2aW9yIGZyb20gJy4vUmVzaXplTGFuZUJlaGF2aW9yJztcbmltcG9ydCBSZW1vdmVFbGVtZW50QmVoYXZpb3IgZnJvbSAnLi9SZW1vdmVFbGVtZW50QmVoYXZpb3InO1xuaW1wb3J0IFNwYWNlVG9vbEJlaGF2aW9yIGZyb20gJy4vU3BhY2VUb29sQmVoYXZpb3InO1xuaW1wb3J0IFN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9TdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yJztcbmltcG9ydCBUb2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIgZnJvbSAnLi9Ub2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXInO1xuaW1wb3J0IFVuY2xhaW1JZEJlaGF2aW9yIGZyb20gJy4vVW5jbGFpbUlkQmVoYXZpb3InO1xuaW1wb3J0IFVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yIGZyb20gJy4vVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3InO1xuaW1wb3J0IFVuc2V0RGVmYXVsdEZsb3dCZWhhdmlvciBmcm9tICcuL1Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnYWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3InLFxuICAgICdhcHBlbmRCZWhhdmlvcicsXG4gICAgJ2Fzc29jaWF0aW9uQmVoYXZpb3InLFxuICAgICdhdHRhY2hFdmVudEJlaGF2aW9yJyxcbiAgICAnYm91bmRhcnlFdmVudEJlaGF2aW9yJyxcbiAgICAncm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZUJlaGF2aW9yJyxcbiAgICAnZml4SG92ZXJCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZURhdGFPYmplY3RCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InLFxuICAgICdkYXRhU3RvcmVCZWhhdmlvcicsXG4gICAgJ2RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3InLFxuICAgICdkZWxldGVMYW5lQmVoYXZpb3InLFxuICAgICdkZXRhY2hFdmVudEJlaGF2aW9yJyxcbiAgICAnZHJvcE9uRmxvd0JlaGF2aW9yJyxcbiAgICAnZXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvcicsXG4gICAgJ2dyb3VwQmVoYXZpb3InLFxuICAgICdpbXBvcnREb2NraW5nRml4JyxcbiAgICAnaXNIb3Jpem9udGFsRml4JyxcbiAgICAnbGFiZWxCZWhhdmlvcicsXG4gICAgJ21vZGVsaW5nRmVlZGJhY2snLFxuICAgICdyZW1vdmVFbGVtZW50QmVoYXZpb3InLFxuICAgICdyZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yJyxcbiAgICAncmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvcicsXG4gICAgJ3JlcGxhY2VFbGVtZW50QmVoYXZpb3VyJyxcbiAgICAncmVzaXplQmVoYXZpb3InLFxuICAgICdyZXNpemVMYW5lQmVoYXZpb3InLFxuICAgICd0b2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXInLFxuICAgICdzcGFjZVRvb2xCZWhhdmlvcicsXG4gICAgJ3N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3InLFxuICAgICd1bmNsYWltSWRCZWhhdmlvcicsXG4gICAgJ3Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvcicsXG4gICAgJ3VwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yJ1xuICBdLFxuICBhZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcjogWyAndHlwZScsIEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yIF0sXG4gIGFwcGVuZEJlaGF2aW9yOiBbICd0eXBlJywgQXBwZW5kQmVoYXZpb3IgXSxcbiAgYXNzb2NpYXRpb25CZWhhdmlvcjogWyAndHlwZScsIEFzc29jaWF0aW9uQmVoYXZpb3IgXSxcbiAgYXR0YWNoRXZlbnRCZWhhdmlvcjogWyAndHlwZScsIEF0dGFjaEV2ZW50QmVoYXZpb3IgXSxcbiAgYm91bmRhcnlFdmVudEJlaGF2aW9yOiBbICd0eXBlJywgQm91bmRhcnlFdmVudEJlaGF2aW9yIF0sXG4gIHJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3I6IFsgJ3R5cGUnLCBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yIF0sXG4gIGNyZWF0ZUJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlQmVoYXZpb3IgXSxcbiAgZml4SG92ZXJCZWhhdmlvcjogWyAndHlwZScsIEZpeEhvdmVyQmVoYXZpb3IgXSxcbiAgY3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yIF0sXG4gIGNyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIF0sXG4gIGRhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yIF0sXG4gIGRhdGFTdG9yZUJlaGF2aW9yOiBbICd0eXBlJywgRGF0YVN0b3JlQmVoYXZpb3IgXSxcbiAgZGVsZXRlTGFuZUJlaGF2aW9yOiBbICd0eXBlJywgRGVsZXRlTGFuZUJlaGF2aW9yIF0sXG4gIGRldGFjaEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBEZXRhY2hFdmVudEJlaGF2aW9yIF0sXG4gIGRyb3BPbkZsb3dCZWhhdmlvcjogWyAndHlwZScsIERyb3BPbkZsb3dCZWhhdmlvciBdLFxuICBldmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yOiBbICd0eXBlJywgRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciBdLFxuICBncm91cEJlaGF2aW9yOiBbICd0eXBlJywgR3JvdXBCZWhhdmlvciBdLFxuICBpbXBvcnREb2NraW5nRml4OiBbICd0eXBlJywgSW1wb3J0RG9ja2luZ0ZpeCBdLFxuICBpc0hvcml6b250YWxGaXg6IFsgJ3R5cGUnLCBJc0hvcml6b250YWxGaXggXSxcbiAgbGFiZWxCZWhhdmlvcjogWyAndHlwZScsIExhYmVsQmVoYXZpb3IgXSxcbiAgbW9kZWxpbmdGZWVkYmFjazogWyAndHlwZScsIE1vZGVsaW5nRmVlZGJhY2sgXSxcbiAgcmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvcjogWyAndHlwZScsIFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IgXSxcbiAgcmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcjogWyAndHlwZScsIFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IgXSxcbiAgcmVwbGFjZUVsZW1lbnRCZWhhdmlvdXI6IFsgJ3R5cGUnLCBSZXBsYWNlRWxlbWVudEJlaGF2aW91ciBdLFxuICByZXNpemVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUJlaGF2aW9yIF0sXG4gIHJlc2l6ZUxhbmVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUxhbmVCZWhhdmlvciBdLFxuICByZW1vdmVFbGVtZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBSZW1vdmVFbGVtZW50QmVoYXZpb3IgXSxcbiAgdG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyIDogWyAndHlwZScsIFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciBdLFxuICBzcGFjZVRvb2xCZWhhdmlvcjogWyAndHlwZScsIFNwYWNlVG9vbEJlaGF2aW9yIF0sXG4gIHN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBTdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yIF0sXG4gIHVuY2xhaW1JZEJlaGF2aW9yOiBbICd0eXBlJywgVW5jbGFpbUlkQmVoYXZpb3IgXSxcbiAgdXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3I6IFsgJ3R5cGUnLCBVcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvciBdLFxuICB1bnNldERlZmF1bHRGbG93QmVoYXZpb3I6IFsgJ3R5cGUnLCBVbnNldERlZmF1bHRGbG93QmVoYXZpb3IgXVxufTtcbiIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBicG1uOkNhdGVnb3J5VmFsdWUgaW5zaWRlIGEgbmV3IGJwbW46Q2F0ZWdvcnlcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IGNhdGVnb3J5VmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXRlZ29yeVZhbHVlKGRlZmluaXRpb25zLCBicG1uRmFjdG9yeSkge1xuICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeVZhbHVlJyksXG4gICAgICBjYXRlZ29yeSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeScsIHtcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZTogWyBjYXRlZ29yeVZhbHVlIF1cbiAgICAgIH0pO1xuXG4gIC8vIGFkZCB0byBjb3JyZWN0IHBsYWNlXG4gIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgY2F0ZWdvcnkpO1xuICBnZXRCdXNpbmVzc09iamVjdChjYXRlZ29yeSkuJHBhcmVudCA9IGRlZmluaXRpb25zO1xuICBnZXRCdXNpbmVzc09iamVjdChjYXRlZ29yeVZhbHVlKS4kcGFyZW50ID0gY2F0ZWdvcnk7XG5cbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWU7XG5cbn0iLCIvKipcbiAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBhIHZlY3RvclxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHJldHVybiB7RmxvYXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JMZW5ndGgodikge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHYueCwgMikgKyBNYXRoLnBvdyh2LnksIDIpKTtcbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFuZ2xlIGJldHdlZW4gYSBsaW5lIGEgdGhlIHlBeGlzXG4gKlxuICogQHBhcmFtIHtBcnJheX1cbiAqIEByZXR1cm4ge0Zsb2F0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5nbGUobGluZSkge1xuXG4gIC8vIHJldHVybiB2YWx1ZSBpcyBiZXR3ZWVuIDAsIDE4MCBhbmQgLTE4MCwgLTBcbiAgLy8gQGphbnN0dWVtbWVsOiBtYXliZSByZXBsYWNlIHJldHVybiBhL2Igd2l0aCBiL2FcbiAgcmV0dXJuIE1hdGguYXRhbigobGluZVsxXS55IC0gbGluZVswXS55KSAvIChsaW5lWzFdLnggLSBsaW5lWzBdLngpKTtcbn1cblxuXG4vKipcbiAqIFJvdGF0ZXMgYSB2ZWN0b3IgYnkgYSBnaXZlbiBhbmdsZVxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHBhcmFtIHtGbG9hdH0gQW5nbGUgaW4gcmFkaWFuc1xuICogQHJldHVybiB7VmVjdG9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yKHZlY3RvciwgYW5nbGUpIHtcbiAgcmV0dXJuICghYW5nbGUpID8gdmVjdG9yIDoge1xuICAgIHg6IE1hdGguY29zKGFuZ2xlKSAqIHZlY3Rvci54IC0gTWF0aC5zaW4oYW5nbGUpICogdmVjdG9yLnksXG4gICAgeTogTWF0aC5zaW4oYW5nbGUpICogdmVjdG9yLnggKyBNYXRoLmNvcyhhbmdsZSkgKiB2ZWN0b3IueVxuICB9O1xufVxuXG5cbi8qKlxuICogU29sdmVzIGEgMkQgZXF1YXRpb24gc3lzdGVtXG4gKiBhICsgcipiID0gYywgd2hlcmUgYSxiLGMgYXJlIDJEIHZlY3RvcnNcbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn1cbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHBhcmFtIHtWZWN0b3J9XG4gKiBAcmV0dXJuIHtGbG9hdH1cbiAqL1xuZnVuY3Rpb24gc29sdmVMYW1iYVN5c3RlbShhLCBiLCBjKSB7XG5cbiAgLy8gdGhlIDJkIHN5c3RlbVxuICB2YXIgc3lzdGVtID0gW1xuICAgIHsgbjogYVswXSAtIGNbMF0sIGxhbWJkYTogYlswXSB9LFxuICAgIHsgbjogYVsxXSAtIGNbMV0sIGxhbWJkYTogYlsxXSB9XG4gIF07XG5cbiAgLy8gc29sdmVcbiAgdmFyIG4gPSBzeXN0ZW1bMF0ubiAqIGJbMF0gKyBzeXN0ZW1bMV0ubiAqIGJbMV0sXG4gICAgICBsID0gc3lzdGVtWzBdLmxhbWJkYSAqIGJbMF0gKyBzeXN0ZW1bMV0ubGFtYmRhICogYlsxXTtcblxuICByZXR1cm4gLW4vbDtcbn1cblxuXG4vKipcbiAqIFBvc2l0aW9uIG9mIHBlcnBlbmRpY3VsYXIgZm9vdFxuICpcbiAqIEBwYXJhbSB7UG9pbnR9XG4gKiBAcGFyYW0gWyB7UG9pbnR9LCB7UG9pbnR9IF0gbGluZSBkZWZpbmVkIHRocm91Z2ggdHdvIHBvaW50c1xuICogQHJldHVybiB7UG9pbnR9IHRoZSBwZXJwZW5kaWN1bGFyIGZvb3QgcG9zaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcnBlbmRpY3VsYXJGb290KHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIGEgPSBsaW5lWzBdLCBiID0gbGluZVsxXTtcblxuICAvLyByZWxhdGl2ZSBwb3NpdGlvbiBvZiBiIGZyb20gYVxuICB2YXIgYmQgPSB7IHg6IGIueCAtIGEueCwgeTogYi55IC0gYS55IH07XG5cbiAgLy8gc29sdmUgZXF1YXRpb24gc3lzdGVtIHRvIHRoZSBwYXJhbWV0cml6ZWQgdmVjdG9ycyBwYXJhbSByZWFsIHZhbHVlXG4gIHZhciByID0gc29sdmVMYW1iYVN5c3RlbShbIGEueCwgYS55IF0sIFsgYmQueCwgYmQueSBdLCBbIHBvaW50LngsIHBvaW50LnkgXSk7XG5cbiAgcmV0dXJuIHsgeDogYS54ICsgcipiZC54LCB5OiBhLnkgKyByKmJkLnkgfTtcbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCBhbmQgYSBsaW5lXG4gKlxuICogQHBhcmFtIHtQb2ludH1cbiAqIEBwYXJhbSBbIHtQb2ludH0sIHtQb2ludH0gXSBsaW5lIGRlZmluZWQgdGhyb3VnaCB0d28gcG9pbnRzXG4gKiBAcmV0dXJuIHtGbG9hdH0gZGlzdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlUG9pbnRMaW5lKHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIHBmUG9pbnQgPSBwZXJwZW5kaWN1bGFyRm9vdChwb2ludCwgbGluZSk7XG5cbiAgLy8gZGlzdGFuY2UgdmVjdG9yXG4gIHZhciBjb25uZWN0aW9uVmVjdG9yID0ge1xuICAgIHg6IHBmUG9pbnQueCAtIHBvaW50LngsXG4gICAgeTogcGZQb2ludC55IC0gcG9pbnQueVxuICB9O1xuXG4gIHJldHVybiB2ZWN0b3JMZW5ndGgoY29ubmVjdGlvblZlY3Rvcik7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqXG4gKiBAcGFyYW0ge1BvaW50fVxuICogQHBhcmFtIHtQb2ludH1cbiAqIEByZXR1cm4ge0Zsb2F0fSBkaXN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VQb2ludFBvaW50KHBvaW50MSwgcG9pbnQyKSB7XG5cbiAgcmV0dXJuIHZlY3Rvckxlbmd0aCh7XG4gICAgeDogcG9pbnQxLnggLSBwb2ludDIueCxcbiAgICB5OiBwb2ludDEueSAtIHBvaW50Mi55XG4gIH0pO1xufSIsImltcG9ydCB7XG4gIGdldERpc3RhbmNlUG9pbnRQb2ludCxcbiAgcm90YXRlVmVjdG9yLFxuICBnZXRBbmdsZVxufSBmcm9tICcuL0dlb21ldHJpY1V0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRBdHRhY2htZW50XG59IGZyb20gJy4vTGluZUF0dGFjaG1lbnRVdGlsJztcblxuaW1wb3J0IHtcbiAgcm91bmRQb2ludFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdMYWJlbExpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cykge1xuXG4gIHZhciBpbmRleCA9IGF0dGFjaG1lbnQuc2VnbWVudEluZGV4O1xuXG4gIHZhciBvZmZzZXQgPSBuZXdXYXlwb2ludHMubGVuZ3RoIC0gb2xkV2F5cG9pbnRzLmxlbmd0aDtcblxuICAvLyBzZWdtZW50TW92ZSBoYXBwZW5lZFxuICBpZiAoaGludHMuc2VnbWVudE1vdmUpIHtcblxuICAgIHZhciBvbGRTZWdtZW50U3RhcnRJbmRleCA9IGhpbnRzLnNlZ21lbnRNb3ZlLnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBuZXdTZWdtZW50U3RhcnRJbmRleCA9IGhpbnRzLnNlZ21lbnRNb3ZlLm5ld1NlZ21lbnRTdGFydEluZGV4O1xuXG4gICAgLy8gaWYgbGFiZWwgd2FzIG9uIG1vdmVkIHNlZ21lbnQgcmV0dXJuIG5ldyBzZWdtZW50IGluZGV4XG4gICAgaWYgKGluZGV4ID09PSBvbGRTZWdtZW50U3RhcnRJbmRleCkge1xuICAgICAgcmV0dXJuIG5ld1NlZ21lbnRTdGFydEluZGV4O1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGlzIGFmdGVyIG5ldyBzZWdtZW50IGluZGV4XG4gICAgaWYgKGluZGV4ID49IG5ld1NlZ21lbnRTdGFydEluZGV4KSB7XG4gICAgICByZXR1cm4gKGluZGV4K29mZnNldCA8IG5ld1NlZ21lbnRTdGFydEluZGV4KSA/IG5ld1NlZ21lbnRTdGFydEluZGV4IDogaW5kZXgrb2Zmc2V0O1xuICAgIH1cblxuICAgIC8vIGlmIGxhYmVsIGlzIGJlZm9yZSBuZXcgc2VnbWVudCBpbmRleFxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8vIGJlbmRwb2ludE1vdmUgaGFwcGVuZWRcbiAgaWYgKGhpbnRzLmJlbmRwb2ludE1vdmUpIHtcblxuICAgIHZhciBpbnNlcnQgPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmluc2VydCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmJlbmRwb2ludEluZGV4LFxuICAgICAgICBuZXdJbmRleDtcblxuICAgIC8vIHdheXBvaW50cyBsZW5ndGggZGlkbnQgY2hhbmdlXG4gICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGJlaGluZCBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPj0gYmVuZHBvaW50SW5kZXgpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5zZXJ0ID8gaW5kZXggKyAxIDogaW5kZXggLSAxO1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGJlZm9yZSBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPCBiZW5kcG9pbnRJbmRleCkge1xuXG4gICAgICBuZXdJbmRleCA9IGluZGV4O1xuXG4gICAgICAvLyBkZWNpZGUgbGFiZWwgc2hvdWxkIHRha2UgcmlnaHQgb3IgbGVmdCBzZWdtZW50XG4gICAgICBpZiAoaW5zZXJ0ICYmIGF0dGFjaG1lbnQudHlwZSAhPT0gJ2JlbmRwb2ludCcgJiYgYmVuZHBvaW50SW5kZXgtMSA9PT0gaW5kZXgpIHtcblxuICAgICAgICB2YXIgcmVsID0gcmVsYXRpdmVQb3NpdGlvbk1pZFdheXBvaW50KG5ld1dheXBvaW50cywgYmVuZHBvaW50SW5kZXgpO1xuXG4gICAgICAgIGlmIChyZWwgPCBhdHRhY2htZW50LnJlbGF0aXZlTG9jYXRpb24pIHtcbiAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0luZGV4O1xuICB9XG5cbiAgLy8gc3RhcnQvZW5kIGNoYW5nZWRcbiAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGlmIChoaW50cy5jb25uZWN0aW9uU3RhcnQpIHtcbiAgICByZXR1cm4gKGluZGV4ID09PSAwKSA/IDAgOiBudWxsO1xuICB9XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25FbmQpIHtcbiAgICByZXR1cm4gKGluZGV4ID09PSBvbGRXYXlwb2ludHMubGVuZ3RoIC0gMikgPyBuZXdXYXlwb2ludHMubGVuZ3RoIC0gMiA6IG51bGw7XG4gIH1cblxuICAvLyBpZiBub3RoaW5nIGZpdHMsIHJldHVybiBudWxsXG4gIHJldHVybiBudWxsO1xufVxuXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSByZXF1aXJlZCBhZGp1c3RtZW50IChtb3ZlIGRlbHRhKSBmb3IgdGhlIGdpdmVuIGxhYmVsXG4gKiBhZnRlciB0aGUgY29ubmVjdGlvbiB3YXlwb2ludHMgZ290IHVwZGF0ZWQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuTGFiZWx9IGxhYmVsXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbmV3V2F5cG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gb2xkV2F5cG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH0gZGVsdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsQWRqdXN0bWVudChsYWJlbCwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKSB7XG5cbiAgdmFyIHggPSAwLFxuICAgICAgeSA9IDA7XG5cbiAgdmFyIGxhYmVsUG9zaXRpb24gPSBnZXRMYWJlbE1pZChsYWJlbCk7XG5cbiAgLy8gZ2V0IGNsb3Nlc3QgYXR0YWNobWVudFxuICB2YXIgYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQobGFiZWxQb3NpdGlvbiwgb2xkV2F5cG9pbnRzKSxcbiAgICAgIG9sZExhYmVsTGluZUluZGV4ID0gYXR0YWNobWVudC5zZWdtZW50SW5kZXgsXG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA9IGZpbmROZXdMYWJlbExpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cyk7XG5cbiAgaWYgKG5ld0xhYmVsTGluZUluZGV4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG5cbiAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICAvLyBUT0RPKEBqYW5zdHVlbW1lbCk6IHRocm93IGFuIGVycm9yIGhlcmUgd2hlbiBjb25uZWN0aW9uU2VnbWVudE1vdmUgaXMgcmVmYWN0b3JlZFxuICBpZiAobmV3TGFiZWxMaW5lSW5kZXggPCAwIHx8XG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA+IG5ld1dheXBvaW50cy5sZW5ndGggLSAyKSB7XG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG5cbiAgdmFyIG9sZExhYmVsTGluZSA9IGdldExpbmUob2xkV2F5cG9pbnRzLCBvbGRMYWJlbExpbmVJbmRleCksXG4gICAgICBuZXdMYWJlbExpbmUgPSBnZXRMaW5lKG5ld1dheXBvaW50cywgbmV3TGFiZWxMaW5lSW5kZXgpLFxuICAgICAgb2xkRm9vdCA9IGF0dGFjaG1lbnQucG9zaXRpb247XG5cbiAgdmFyIHJlbGF0aXZlRm9vdFBvc2l0aW9uID0gZ2V0UmVsYXRpdmVGb290UG9zaXRpb24ob2xkTGFiZWxMaW5lLCBvbGRGb290KSxcbiAgICAgIGFuZ2xlRGVsdGEgPSBnZXRBbmdsZURlbHRhKG9sZExhYmVsTGluZSwgbmV3TGFiZWxMaW5lKTtcblxuICAvLyBzcGVjaWFsIHJ1bGUgaWYgbGFiZWwgb24gYmVuZHBvaW50XG4gIGlmIChhdHRhY2htZW50LnR5cGUgPT09ICdiZW5kcG9pbnQnKSB7XG5cbiAgICB2YXIgb2Zmc2V0ID0gbmV3V2F5cG9pbnRzLmxlbmd0aCAtIG9sZFdheXBvaW50cy5sZW5ndGgsXG4gICAgICAgIG9sZEJlbmRwb2ludEluZGV4ID0gYXR0YWNobWVudC5iZW5kcG9pbnRJbmRleCxcbiAgICAgICAgb2xkQmVuZHBvaW50ID0gb2xkV2F5cG9pbnRzW29sZEJlbmRwb2ludEluZGV4XTtcblxuICAgIC8vIGJlbmRwb2ludCBwb3NpdGlvbiBoYXNuJ3QgY2hhbmdlZCwgcmV0dXJuIHNhbWUgcG9zaXRpb25cbiAgICBpZiAobmV3V2F5cG9pbnRzLmluZGV4T2Yob2xkQmVuZHBvaW50KSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgICB9XG5cbiAgICAvLyBuZXcgYmVuZHBvaW50IGFuZCBvbGQgYmVuZHBvaW50IGhhdmUgc2FtZSBpbmRleCwgdGhlbiBqdXN0IHJldHVybiB0aGUgb2Zmc2V0XG4gICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgdmFyIG5ld0JlbmRwb2ludCA9IG5ld1dheXBvaW50c1tvbGRCZW5kcG9pbnRJbmRleF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IG5ld0JlbmRwb2ludC54IC0gYXR0YWNobWVudC5wb3NpdGlvbi54LFxuICAgICAgICB5OiBuZXdCZW5kcG9pbnQueSAtIGF0dGFjaG1lbnQucG9zaXRpb24ueVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpZiBiZW5kcG9pbnRzIGdldCByZW1vdmVkXG4gICAgaWYgKG9mZnNldCA8IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggIT09IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggPCBvbGRXYXlwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgcmVsYXRpdmVGb290UG9zaXRpb24gPSByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQob2xkV2F5cG9pbnRzLCBvbGRCZW5kcG9pbnRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0Zvb3QgPSB7XG4gICAgeDogKG5ld0xhYmVsTGluZVsxXS54IC0gbmV3TGFiZWxMaW5lWzBdLngpICogcmVsYXRpdmVGb290UG9zaXRpb24gKyBuZXdMYWJlbExpbmVbMF0ueCxcbiAgICB5OiAobmV3TGFiZWxMaW5lWzFdLnkgLSBuZXdMYWJlbExpbmVbMF0ueSkgKiByZWxhdGl2ZUZvb3RQb3NpdGlvbiArIG5ld0xhYmVsTGluZVswXS55XG4gIH07XG5cbiAgLy8gdGhlIHJvdGF0ZWQgdmVjdG9yIHRvIGxhYmVsXG4gIHZhciBuZXdMYWJlbFZlY3RvciA9IHJvdGF0ZVZlY3Rvcih7XG4gICAgeDogbGFiZWxQb3NpdGlvbi54IC0gb2xkRm9vdC54LFxuICAgIHk6IGxhYmVsUG9zaXRpb24ueSAtIG9sZEZvb3QueVxuICB9LCBhbmdsZURlbHRhKTtcblxuICAvLyB0aGUgbmV3IHJlbGF0aXZlIHBvc2l0aW9uXG4gIHggPSBuZXdGb290LnggKyBuZXdMYWJlbFZlY3Rvci54IC0gbGFiZWxQb3NpdGlvbi54O1xuICB5ID0gbmV3Rm9vdC55ICsgbmV3TGFiZWxWZWN0b3IueSAtIGxhYmVsUG9zaXRpb24ueTtcblxuICByZXR1cm4gcm91bmRQb2ludCh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pO1xufVxuXG5cbi8vIEhFTFBFUlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQod2F5cG9pbnRzLCBpZHgpIHtcblxuICB2YXIgZGlzdGFuY2VTZWdtZW50MSA9IGdldERpc3RhbmNlUG9pbnRQb2ludCh3YXlwb2ludHNbaWR4LTFdLCB3YXlwb2ludHNbaWR4XSksXG4gICAgICBkaXN0YW5jZVNlZ21lbnQyID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KHdheXBvaW50c1tpZHhdLCB3YXlwb2ludHNbaWR4KzFdKTtcblxuICB2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IGRpc3RhbmNlU2VnbWVudDEgLyAoZGlzdGFuY2VTZWdtZW50MSArIGRpc3RhbmNlU2VnbWVudDIpO1xuXG4gIHJldHVybiByZWxhdGl2ZVBvc2l0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRMYWJlbE1pZChsYWJlbCkge1xuICByZXR1cm4ge1xuICAgIHg6IGxhYmVsLnggKyBsYWJlbC53aWR0aCAvIDIsXG4gICAgeTogbGFiZWwueSArIGxhYmVsLmhlaWdodCAvIDJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5nbGVEZWx0YShsMSwgbDIpIHtcbiAgdmFyIGExID0gZ2V0QW5nbGUobDEpLFxuICAgICAgYTIgPSBnZXRBbmdsZShsMik7XG4gIHJldHVybiBhMiAtIGExO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lKHdheXBvaW50cywgaWR4KSB7XG4gIHJldHVybiBbIHdheXBvaW50c1tpZHhdLCB3YXlwb2ludHNbaWR4KzFdIF07XG59XG5cbmZ1bmN0aW9uIGdldFJlbGF0aXZlRm9vdFBvc2l0aW9uKGxpbmUsIGZvb3QpIHtcblxuICB2YXIgbGVuZ3RoID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KGxpbmVbMF0sIGxpbmVbMV0pLFxuICAgICAgbGVuZ3RoVG9Gb290ID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KGxpbmVbMF0sIGZvb3QpO1xuXG4gIHJldHVybiBsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoVG9Gb290IC8gbGVuZ3RoO1xufVxuIiwidmFyIHNxcnQgPSBNYXRoLnNxcnQsXG4gICAgbWluID0gTWF0aC5taW4sXG4gICAgbWF4ID0gTWF0aC5tYXgsXG4gICAgYWJzID0gTWF0aC5hYnM7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgKHBvd2VyIHRvIHR3bykgb2YgYSBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNxKG4pIHtcbiAgcmV0dXJuIE1hdGgucG93KG4sIDIpO1xufVxuXG4vKipcbiAqIEdldCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcDFcbiAqIEBwYXJhbSB7UG9pbnR9IHAyXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIHNxcnQoc3EocDEueCAtIHAyLngpICsgc3EocDEueSAtIHAyLnkpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGF0dGFjaG1lbnQgb2YgdGhlIGdpdmVuIHBvaW50IG9uIHRoZSBzcGVjaWZpZWQgbGluZS5cbiAqXG4gKiBUaGUgYXR0YWNobWVudCBpcyBlaXRoZXIgYSBiZW5kcG9pbnQgKGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBwb2ludClcbiAqIG9yIHNlZ21lbnQgKGF0dGFjaGVkIHRvIGEgbG9jYXRpb24gb24gYSBsaW5lIHNlZ21lbnQpIGF0dGFjaG1lbnQ6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIHBvaW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ2JlbmRwb2ludCcsXG4gKiAgIGJlbmRwb2ludEluZGV4OiAzLFxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICpcbiAqIHZhciBzZWdtZW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ3NlZ21lbnQnLFxuICogICBzZWdtZW50SW5kZXg6IDIsXG4gKiAgIHJlbGF0aXZlTG9jYXRpb246IDAuMzEsIC8vIGF0dGFjaCBwb2ludCBsb2NhdGlvbiBiZXR3ZWVuIDAgKGF0IHN0YXJ0KSBhbmQgMSAoYXQgZW5kKVxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBsaW5lXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhdHRhY2htZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRhY2htZW50KHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIGlkeCA9IDAsXG4gICAgICBzZWdtZW50U3RhcnQsXG4gICAgICBzZWdtZW50RW5kLFxuICAgICAgc2VnbWVudFN0YXJ0RGlzdGFuY2UsXG4gICAgICBzZWdtZW50RW5kRGlzdGFuY2UsXG4gICAgICBhdHRhY2htZW50UG9zaXRpb24sXG4gICAgICBtaW5EaXN0YW5jZSxcbiAgICAgIGludGVyc2VjdGlvbnMsXG4gICAgICBhdHRhY2htZW50LFxuICAgICAgYXR0YWNobWVudERpc3RhbmNlLFxuICAgICAgY2xvc2VzdEF0dGFjaG1lbnREaXN0YW5jZSxcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50O1xuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbGluZS5sZW5ndGggLSAxOyBpZHgrKykge1xuXG4gICAgc2VnbWVudFN0YXJ0ID0gbGluZVtpZHhdO1xuICAgIHNlZ21lbnRFbmQgPSBsaW5lW2lkeCArIDFdO1xuXG4gICAgaWYgKHBvaW50c0VxdWFsKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkpIHtcbiAgICAgIGludGVyc2VjdGlvbnMgPSBbIHNlZ21lbnRTdGFydCBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWdtZW50U3RhcnREaXN0YW5jZSA9IGdldERpc3RhbmNlKHBvaW50LCBzZWdtZW50U3RhcnQpO1xuICAgICAgc2VnbWVudEVuZERpc3RhbmNlID0gZ2V0RGlzdGFuY2UocG9pbnQsIHNlZ21lbnRFbmQpO1xuXG4gICAgICBtaW5EaXN0YW5jZSA9IG1pbihzZWdtZW50U3RhcnREaXN0YW5jZSwgc2VnbWVudEVuZERpc3RhbmNlKTtcblxuICAgICAgaW50ZXJzZWN0aW9ucyA9IGdldENpcmNsZVNlZ21lbnRJbnRlcnNlY3Rpb25zKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgcG9pbnQsIG1pbkRpc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGJldHdlZW4gWzEsIDJdIGNpcmNsZSAtPiBsaW5lIGludGVyc2VjdGlvbnMnKTtcbiAgICB9XG5cbiAgICAvLyBvbmUgaW50ZXJzZWN0aW9uIC0+IGJlbmRwb2ludCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBhdHRhY2htZW50ID0ge1xuICAgICAgICB0eXBlOiAnYmVuZHBvaW50JyxcbiAgICAgICAgcG9zaXRpb246IGludGVyc2VjdGlvbnNbMF0sXG4gICAgICAgIHNlZ21lbnRJbmRleDogaWR4LFxuICAgICAgICBiZW5kcG9pbnRJbmRleDogcG9pbnRzRXF1YWwoc2VnbWVudFN0YXJ0LCBpbnRlcnNlY3Rpb25zWzBdKSA/IGlkeCA6IGlkeCArIDFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdHdvIGludGVyc2VjdGlvbnMgLT4gc2VnbWVudCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAyKSB7XG5cbiAgICAgIGF0dGFjaG1lbnRQb3NpdGlvbiA9IG1pZChpbnRlcnNlY3Rpb25zWzBdLCBpbnRlcnNlY3Rpb25zWzFdKTtcblxuICAgICAgYXR0YWNobWVudCA9IHtcbiAgICAgICAgdHlwZTogJ3NlZ21lbnQnLFxuICAgICAgICBwb3NpdGlvbjogYXR0YWNobWVudFBvc2l0aW9uLFxuICAgICAgICBzZWdtZW50SW5kZXg6IGlkeCxcbiAgICAgICAgcmVsYXRpdmVMb2NhdGlvbjogZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBhdHRhY2htZW50UG9zaXRpb24pIC8gZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhdHRhY2htZW50RGlzdGFuY2UgPSBnZXREaXN0YW5jZShhdHRhY2htZW50LnBvc2l0aW9uLCBwb2ludCk7XG5cbiAgICBpZiAoIWNsb3Nlc3RBdHRhY2htZW50IHx8IGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPiBhdHRhY2htZW50RGlzdGFuY2UpIHtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50ID0gYXR0YWNobWVudDtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPSBhdHRhY2htZW50RGlzdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsb3Nlc3RBdHRhY2htZW50O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIGEgY2lyY2xlIGFuZCBhIGxpbmUgc2VnbWVudC5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBzMSBzZWdtZW50IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBzMiBzZWdtZW50IGVuZFxuICogQHBhcmFtIHtQb2ludH0gY2MgY2lyY2xlIGNlbnRlclxuICogQHBhcmFtIHtudW1iZXJ9IGNyIGNpcmNsZSByYWRpdXNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IGludGVyc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0Q2lyY2xlU2VnbWVudEludGVyc2VjdGlvbnMoczEsIHMyLCBjYywgY3IpIHtcblxuICB2YXIgYmFYID0gczIueCAtIHMxLng7XG4gIHZhciBiYVkgPSBzMi55IC0gczEueTtcbiAgdmFyIGNhWCA9IGNjLnggLSBzMS54O1xuICB2YXIgY2FZID0gY2MueSAtIHMxLnk7XG5cbiAgdmFyIGEgPSBiYVggKiBiYVggKyBiYVkgKiBiYVk7XG4gIHZhciBiQnkyID0gYmFYICogY2FYICsgYmFZICogY2FZO1xuICB2YXIgYyA9IGNhWCAqIGNhWCArIGNhWSAqIGNhWSAtIGNyICogY3I7XG5cbiAgdmFyIHBCeTIgPSBiQnkyIC8gYTtcbiAgdmFyIHEgPSBjIC8gYTtcblxuICB2YXIgZGlzYyA9IHBCeTIgKiBwQnkyIC0gcTtcblxuICAvLyBjaGVjayBhZ2FpbnN0IG5lZ2F0aXZlIHZhbHVlIHRvIHdvcmsgYXJvdW5kXG4gIC8vIG5lZ2F0aXZlLCB2ZXJ5IGNsb3NlIHRvIHplcm8gcmVzdWx0cyAoLTRlLTE1KVxuICAvLyBiZWluZyBwcm9kdWNlZCBpbiBzb21lIGVudmlyb25tZW50c1xuICBpZiAoZGlzYyA8IDAgJiYgZGlzYyA+IC0wLjAwMDAwMSkge1xuICAgIGRpc2MgPSAwO1xuICB9XG5cbiAgaWYgKGRpc2MgPCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gaWYgZGlzYyA9PSAwIC4uLiBkZWFsdCB3aXRoIGxhdGVyXG4gIHZhciB0bXBTcXJ0ID0gc3FydChkaXNjKTtcbiAgdmFyIGFiU2NhbGluZ0ZhY3RvcjEgPSAtcEJ5MiArIHRtcFNxcnQ7XG4gIHZhciBhYlNjYWxpbmdGYWN0b3IyID0gLXBCeTIgLSB0bXBTcXJ0O1xuXG4gIHZhciBpMSA9IHtcbiAgICB4OiBzMS54IC0gYmFYICogYWJTY2FsaW5nRmFjdG9yMSxcbiAgICB5OiBzMS55IC0gYmFZICogYWJTY2FsaW5nRmFjdG9yMVxuICB9O1xuXG4gIGlmIChkaXNjID09PSAwKSB7IC8vIGFiU2NhbGluZ0ZhY3RvcjEgPT0gYWJTY2FsaW5nRmFjdG9yMlxuICAgIHJldHVybiBbIGkxIF07XG4gIH1cblxuICB2YXIgaTIgPSB7XG4gICAgeDogczEueCAtIGJhWCAqIGFiU2NhbGluZ0ZhY3RvcjIsXG4gICAgeTogczEueSAtIGJhWSAqIGFiU2NhbGluZ0ZhY3RvcjJcbiAgfTtcblxuICAvLyByZXR1cm4gb25seSBwb2ludHMgb24gbGluZSBzZWdtZW50XG4gIHJldHVybiBbIGkxLCBpMiBdLmZpbHRlcihmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIGlzUG9pbnRJblNlZ21lbnQocCwgczEsIHMyKTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gaXNQb2ludEluU2VnbWVudChwLCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpIHtcbiAgcmV0dXJuIChcbiAgICBmZW5jZWQocC54LCBzZWdtZW50U3RhcnQueCwgc2VnbWVudEVuZC54KSAmJlxuICAgIGZlbmNlZChwLnksIHNlZ21lbnRTdGFydC55LCBzZWdtZW50RW5kLnkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZlbmNlZChuLCByYW5nZVN0YXJ0LCByYW5nZUVuZCkge1xuXG4gIC8vIHVzZSBtYXRjaGluZyB0aHJlc2hvbGQgdG8gd29yayBhcm91bmRcbiAgLy8gcHJlY2lzaW9uIGVycm9ycyBpbiBpbnRlcnNlY3Rpb24gY29tcHV0YXRpb25cblxuICByZXR1cm4gKFxuICAgIG4gPj0gbWluKHJhbmdlU3RhcnQsIHJhbmdlRW5kKSAtIEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIG4gPD0gbWF4KHJhbmdlU3RhcnQsIHJhbmdlRW5kKSArIEVRVUFMX1RIUkVTSE9MRFxuICApO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBtaWQgb2YgdHdvIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwMVxuICogQHBhcmFtIHtQb2ludH0gcDJcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZnVuY3Rpb24gbWlkKHAxLCBwMikge1xuXG4gIHJldHVybiB7XG4gICAgeDogKHAxLnggKyBwMi54KSAvIDIsXG4gICAgeTogKHAxLnkgKyBwMi55KSAvIDJcbiAgfTtcbn1cblxudmFyIEVRVUFMX1RIUkVTSE9MRCA9IDAuMTtcblxuZnVuY3Rpb24gcG9pbnRzRXF1YWwocDEsIHAyKSB7XG5cbiAgcmV0dXJuIChcbiAgICBhYnMocDEueCAtIHAyLngpIDw9IEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIGFicyhwMS55IC0gcDIueSkgPD0gRVFVQUxfVEhSRVNIT0xEXG4gICk7XG59XG4iLCIvKipcbiAqIFJldHVybnMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byBsaW5lIHNlZ21lbnRzIGEgYW5kIGIuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gbDFzXG4gKiBAcGFyYW0ge1BvaW50fSBsMWVcbiAqIEBwYXJhbSB7UG9pbnR9IGwyc1xuICogQHBhcmFtIHtQb2ludH0gbDJlXG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpbmVJbnRlcnNlY3QobDFzLCBsMWUsIGwycywgbDJlKSB7XG5cbiAgLy8gaWYgdGhlIGxpbmVzIGludGVyc2VjdCwgdGhlIHJlc3VsdCBjb250YWlucyB0aGUgeCBhbmQgeSBvZiB0aGVcbiAgLy8gaW50ZXJzZWN0aW9uICh0cmVhdGluZyB0aGUgbGluZXMgYXMgaW5maW5pdGUpIGFuZCBib29sZWFucyBmb3JcbiAgLy8gd2hldGhlciBsaW5lIHNlZ21lbnQgMSBvciBsaW5lIHNlZ21lbnQgMiBjb250YWluIHRoZSBwb2ludFxuICB2YXIgZGVub21pbmF0b3IsIGEsIGIsIGMsIG51bWVyYXRvcjtcblxuICBkZW5vbWluYXRvciA9ICgobDJlLnkgLSBsMnMueSkgKiAobDFlLnggLSBsMXMueCkpIC0gKChsMmUueCAtIGwycy54KSAqIChsMWUueSAtIGwxcy55KSk7XG5cbiAgaWYgKGRlbm9taW5hdG9yID09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGEgPSBsMXMueSAtIGwycy55O1xuICBiID0gbDFzLnggLSBsMnMueDtcbiAgbnVtZXJhdG9yID0gKChsMmUueCAtIGwycy54KSAqIGEpIC0gKChsMmUueSAtIGwycy55KSAqIGIpO1xuXG4gIGMgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjtcblxuICAvLyBpZiB3ZSBjYXN0IHRoZXNlIGxpbmVzIGluZmluaXRlbHkgaW5cbiAgLy8gYm90aCBkaXJlY3Rpb25zLCB0aGV5IGludGVyc2VjdCBoZXJlXG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChsMXMueCArIChjICogKGwxZS54IC0gbDFzLngpKSksXG4gICAgeTogTWF0aC5yb3VuZChsMXMueSArIChjICogKGwxZS55IC0gbDFzLnkpKSlcbiAgfTtcbn0iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNUUkJMXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBjb2xsZWN0TGFuZXMsXHJcbiAgZ2V0TGFuZXNSb290XHJcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxpbmcvdXRpbC9MYW5lVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBMQU5FX01JTl9ESU1FTlNJT05TIH0gZnJvbSAnLi4vUmVzaXplQmVoYXZpb3InO1xyXG5cclxudmFyIGFicyA9IE1hdGguYWJzLFxyXG4gICAgbWluID0gTWF0aC5taW4sXHJcbiAgICBtYXggPSBNYXRoLm1heDtcclxuXHJcblxyXG5mdW5jdGlvbiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIGNob2ljZSkge1xyXG4gIHZhciBjdXJyZW50ID0gdHJibFthdHRyXTtcclxuXHJcbiAgLy8gbWFrZSBzdXJlIHRvIHNldCB0aGUgdmFsdWUgaWYgaXQgZG9lcyBub3QgZXhpc3RcclxuICAvLyBvciBhcHBseSB0aGUgY29ycmVjdCB2YWx1ZSBieSBjb21wYXJpbmcgYWdhaW5zdFxyXG4gIC8vIGNob2ljZSh2YWx1ZSwgY3VycmVudFZhbHVlKVxyXG4gIHRyYmxbYXR0cl0gPSBjdXJyZW50ID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGNob2ljZSh2YWx1ZSwgY3VycmVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE1pbih0cmJsLCBhdHRyLCB2YWx1ZSkge1xyXG4gIHJldHVybiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIG1pbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE1heCh0cmJsLCBhdHRyLCB2YWx1ZSkge1xyXG4gIHJldHVybiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIG1heCk7XHJcbn1cclxuXHJcbnZhciBMQU5FX1JJR0hUX1BBRERJTkcgPSAyMCxcclxuICAgIExBTkVfTEVGVF9QQURESU5HID0gNTAsXHJcbiAgICBMQU5FX1RPUF9QQURESU5HID0gMjAsXHJcbiAgICBMQU5FX0JPVFRPTV9QQURESU5HID0gMjA7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50UmVzaXplQ29uc3RyYWludHMobGFuZVNoYXBlLCByZXNpemVEaXJlY3Rpb24sIGJhbGFuY2VkKSB7XHJcbiAgdmFyIGxhbmVzUm9vdCA9IGdldExhbmVzUm9vdChsYW5lU2hhcGUpO1xyXG5cclxuICB2YXIgaXNGaXJzdCA9IHRydWUsXHJcbiAgICAgIGlzTGFzdCA9IHRydWU7XHJcblxyXG4gIC8vIG1heCB0b3AvYm90dG9tIHNpemUgZm9yIGxhbmVzXHJcbiAgdmFyIGFsbExhbmVzID0gY29sbGVjdExhbmVzKGxhbmVzUm9vdCwgWyBsYW5lc1Jvb3QgXSk7XHJcblxyXG4gIHZhciBsYW5lVHJibCA9IGFzVFJCTChsYW5lU2hhcGUpO1xyXG5cclxuICB2YXIgbWF4VHJibCA9IHt9LFxyXG4gICAgICBtaW5UcmJsID0ge307XHJcblxyXG4gIGlmICgvZS8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICBtaW5UcmJsLnJpZ2h0ID0gbGFuZVRyYmwubGVmdCArIExBTkVfTUlOX0RJTUVOU0lPTlMud2lkdGg7XHJcbiAgfSBlbHNlXHJcbiAgaWYgKC93Ly50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgIG1pblRyYmwubGVmdCA9IGxhbmVUcmJsLnJpZ2h0IC0gTEFORV9NSU5fRElNRU5TSU9OUy53aWR0aDtcclxuICB9XHJcblxyXG4gIGFsbExhbmVzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHtcclxuXHJcbiAgICB2YXIgb3RoZXJUcmJsID0gYXNUUkJMKG90aGVyKTtcclxuXHJcbiAgICBpZiAoL24vLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xyXG5cclxuICAgICAgaWYgKG90aGVyVHJibC50b3AgPCAobGFuZVRyYmwudG9wIC0gMTApKSB7XHJcbiAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtYXggdG9wIHNpemUgKGJhc2VkIG9uIG5leHQgZWxlbWVudClcclxuICAgICAgaWYgKGJhbGFuY2VkICYmIGFicyhsYW5lVHJibC50b3AgLSBvdGhlclRyYmwuYm90dG9tKSA8IDEwKSB7XHJcbiAgICAgICAgYWRkTWF4KG1heFRyYmwsICd0b3AnLCBvdGhlclRyYmwudG9wICsgTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtaW4gdG9wIHNpemUgKGJhc2VkIG9uIHNlbGYgb3IgbmVzdGVkIGVsZW1lbnQpXHJcbiAgICAgIGlmIChhYnMobGFuZVRyYmwudG9wIC0gb3RoZXJUcmJsLnRvcCkgPCA1KSB7XHJcbiAgICAgICAgYWRkTWluKG1pblRyYmwsICd0b3AnLCBvdGhlclRyYmwuYm90dG9tIC0gTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9zLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuXHJcbiAgICAgIGlmIChvdGhlclRyYmwuYm90dG9tID4gKGxhbmVUcmJsLmJvdHRvbSArIDEwKSkge1xyXG4gICAgICAgIGlzTGFzdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtYXggYm90dG9tIHNpemUgKGJhc2VkIG9uIHByZXZpb3VzIGVsZW1lbnQpXHJcbiAgICAgIGlmIChiYWxhbmNlZCAmJiBhYnMobGFuZVRyYmwuYm90dG9tIC0gb3RoZXJUcmJsLnRvcCkgPCAxMCkge1xyXG4gICAgICAgIGFkZE1pbihtYXhUcmJsLCAnYm90dG9tJywgb3RoZXJUcmJsLmJvdHRvbSAtIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbWluIGJvdHRvbSBzaXplIChiYXNlZCBvbiBzZWxmIG9yIG5lc3RlZCBlbGVtZW50KVxyXG4gICAgICBpZiAoYWJzKGxhbmVUcmJsLmJvdHRvbSAtIG90aGVyVHJibC5ib3R0b20pIDwgNSkge1xyXG4gICAgICAgIGFkZE1heChtaW5UcmJsLCAnYm90dG9tJywgb3RoZXJUcmJsLnRvcCArIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBtYXggdG9wL2JvdHRvbS9sZWZ0L3JpZ2h0IHNpemUgYmFzZWQgb24gZmxvdyBub2Rlc1xyXG4gIHZhciBmbG93RWxlbWVudHMgPSBsYW5lc1Jvb3QuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKHMpIHtcclxuICAgIHJldHVybiAhcy5oaWRkZW4gJiYgIXMud2F5cG9pbnRzICYmIChpcyhzLCAnYnBtbjpGbG93RWxlbWVudCcpIHx8IGlzKHMsICdicG1uOkFydGlmYWN0JykpO1xyXG4gIH0pO1xyXG5cclxuICBmbG93RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihmbG93RWxlbWVudCkge1xyXG5cclxuICAgIHZhciBmbG93RWxlbWVudFRyYmwgPSBhc1RSQkwoZmxvd0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpc0ZpcnN0ICYmIC9uLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgICAgYWRkTWluKG1pblRyYmwsICd0b3AnLCBmbG93RWxlbWVudFRyYmwudG9wIC0gTEFORV9UT1BfUEFERElORyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9lLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgICAgYWRkTWF4KG1pblRyYmwsICdyaWdodCcsIGZsb3dFbGVtZW50VHJibC5yaWdodCArIExBTkVfUklHSFRfUEFERElORyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTGFzdCAmJiAvcy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1heChtaW5UcmJsLCAnYm90dG9tJywgZmxvd0VsZW1lbnRUcmJsLmJvdHRvbSArIExBTkVfQk9UVE9NX1BBRERJTkcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvdy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1pbihtaW5UcmJsLCAnbGVmdCcsIGZsb3dFbGVtZW50VHJibC5sZWZ0IC0gTEFORV9MRUZUX1BBRERJTkcpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbWluOiBtaW5UcmJsLFxyXG4gICAgbWF4OiBtYXhUcmJsXHJcbiAgfTtcclxufSIsImltcG9ydCB7XG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGVhY2hFbGVtZW50XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBnZXRMYW5lc1Jvb3QsXG4gIGdldENoaWxkTGFuZXMsXG4gIExBTkVfSU5ERU5UQVRJT05cbn0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBhbGxvd3MgdXMgdG8gYWRkIGEgbmV3IGxhbmVcbiAqIGFib3ZlIG9yIGJlbG93IGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTcGFjZVRvb2x9IHNwYWNlVG9vbFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGRMYW5lSGFuZGxlcihtb2RlbGluZywgc3BhY2VUb29sKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3NwYWNlVG9vbCA9IHNwYWNlVG9vbDtcbn1cblxuQWRkTGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3NwYWNlVG9vbCdcbl07XG5cblxuQWRkTGFuZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNwYWNlVG9vbCA9IHRoaXMuX3NwYWNlVG9vbCxcbiAgICAgIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGxvY2F0aW9uID0gY29udGV4dC5sb2NhdGlvbjtcblxuICB2YXIgbGFuZXNSb290ID0gZ2V0TGFuZXNSb290KHNoYXBlKTtcblxuICB2YXIgaXNSb290ID0gbGFuZXNSb290ID09PSBzaGFwZSxcbiAgICAgIGxhbmVQYXJlbnQgPSBpc1Jvb3QgPyBzaGFwZSA6IHNoYXBlLnBhcmVudDtcblxuICB2YXIgZXhpc3RpbmdDaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhsYW5lUGFyZW50KTtcblxuICAvLyAoMCkgYWRkIGEgbGFuZSBpZiB3ZSBjdXJyZW50bHkgZ290IG5vbmUgYW5kIGFyZSBhZGRpbmcgdG8gcm9vdFxuICBpZiAoIWV4aXN0aW5nQ2hpbGRMYW5lcy5sZW5ndGgpIHtcbiAgICBtb2RlbGluZy5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOkxhbmUnIH0sIHtcbiAgICAgIHg6IHNoYXBlLnggKyBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgeTogc2hhcGUueSxcbiAgICAgIHdpZHRoOiBzaGFwZS53aWR0aCAtIExBTkVfSU5ERU5UQVRJT04sXG4gICAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodFxuICAgIH0sIGxhbmVQYXJlbnQpO1xuICB9XG5cbiAgLy8gKDEpIGNvbGxlY3QgYWZmZWN0ZWQgZWxlbWVudHMgdG8gY3JlYXRlIG5lY2Vzc2FyeSBzcGFjZVxuICB2YXIgYWxsQWZmZWN0ZWQgPSBbXTtcblxuICBlYWNoRWxlbWVudChsYW5lc1Jvb3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBhbGxBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgLy8gaGFuZGxlIGVsZW1lbnQgbGFiZWxzIGluIHRoZSBkaWFncmFtIHJvb3RcbiAgICBpZiAoZWxlbWVudC5sYWJlbCkge1xuICAgICAgYWxsQWZmZWN0ZWQucHVzaChlbGVtZW50LmxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCA9PT0gc2hhcGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKGVsZW1lbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjICE9PSBzaGFwZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFyIG9mZnNldCA9IGxvY2F0aW9uID09PSAndG9wJyA/IC0xMjAgOiAxMjAsXG4gICAgICBsYW5lUG9zaXRpb24gPSBsb2NhdGlvbiA9PT0gJ3RvcCcgPyBzaGFwZS55IDogc2hhcGUueSArIHNoYXBlLmhlaWdodCxcbiAgICAgIHNwYWNlUG9zID0gbGFuZVBvc2l0aW9uICsgKGxvY2F0aW9uID09PSAndG9wJyA/IDEwIDogLTEwKSxcbiAgICAgIGRpcmVjdGlvbiA9IGxvY2F0aW9uID09PSAndG9wJyA/ICduJyA6ICdzJztcblxuICB2YXIgYWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoYWxsQWZmZWN0ZWQsICd5Jywgb2Zmc2V0LCBzcGFjZVBvcyk7XG5cbiAgc3BhY2VUb29sLm1ha2VTcGFjZShcbiAgICBhZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgYWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgeyB4OiAwLCB5OiBvZmZzZXQgfSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BhY2VQb3NcbiAgKTtcblxuICAvLyAoMikgY3JlYXRlIG5ldyBsYW5lIGF0IG9wZW4gc3BhY2VcbiAgY29udGV4dC5uZXdMYW5lID0gbW9kZWxpbmcuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpMYW5lJyB9LCB7XG4gICAgeDogc2hhcGUueCArIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgeTogbGFuZVBvc2l0aW9uIC0gKGxvY2F0aW9uID09PSAndG9wJyA/IDEyMCA6IDApLFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aCAtIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgaGVpZ2h0OiAxMjBcbiAgfSwgbGFuZVBhcmVudCk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSWRDbGFpbUhhbmRsZXIobW9kZGxlKSB7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcbn1cblxuSWRDbGFpbUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGRsZScgXTtcblxuXG5JZENsYWltSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGlkcyA9IHRoaXMuX21vZGRsZS5pZHMsXG4gICAgICBpZCA9IGNvbnRleHQuaWQsXG4gICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgY2xhaW1pbmcgPSBjb250ZXh0LmNsYWltaW5nO1xuXG4gIGlmIChjbGFpbWluZykge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWRzLnVuY2xhaW0oaWQpO1xuICB9XG59O1xuXG4vKipcbiAqIENvbW1hbmQgcmV2ZXJ0IGltcGxlbWVudGF0aW9uLlxuICovXG5JZENsYWltSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgaWRzID0gdGhpcy5fbW9kZGxlLmlkcyxcbiAgICAgIGlkID0gY29udGV4dC5pZCxcbiAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBjbGFpbWluZyA9IGNvbnRleHQuY2xhaW1pbmc7XG5cbiAgaWYgKGNsYWltaW5nKSB7XG4gICAgaWRzLnVuY2xhaW0oaWQpO1xuICB9IGVsc2Uge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudCk7XG4gIH1cbn07XG5cbiIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYW5lc1Jvb3QsXG4gIGNvbXB1dGVMYW5lc1Jlc2l6ZVxufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgZWFjaEVsZW1lbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIHN1YnN0cmFjdFRSQkxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZVV0aWwnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgcmVzaXplcyBhIGxhbmUuXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplTGFuZUhhbmRsZXIobW9kZWxpbmcsIHNwYWNlVG9vbCkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9zcGFjZVRvb2wgPSBzcGFjZVRvb2w7XG59XG5cblJlc2l6ZUxhbmVIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdtb2RlbGluZycsXG4gICdzcGFjZVRvb2wnXG5dO1xuXG5cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgIGJhbGFuY2VkID0gY29udGV4dC5iYWxhbmNlZDtcblxuICBpZiAoYmFsYW5jZWQgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5yZXNpemVCYWxhbmNlZChzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlc2l6ZVNwYWNlKHNoYXBlLCBuZXdCb3VuZHMpO1xuICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplIGJhbGFuY2VkLCBhZGp1c3RpbmcgbmV4dCAvIHByZXZpb3VzIGxhbmUgc2l6ZXMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKi9cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5yZXNpemVCYWxhbmNlZCA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgcmVzaXplTmVlZGVkID0gY29tcHV0ZUxhbmVzUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpO1xuXG4gIC8vIHJlc2l6ZSB0aGUgbGFuZVxuICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzKTtcblxuICAvLyByZXNpemUgb3RoZXIgbGFuZXMgYXMgbmVlZGVkXG4gIHJlc2l6ZU5lZWRlZC5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICBtb2RlbGluZy5yZXNpemVTaGFwZShyLnNoYXBlLCByLm5ld0JvdW5kcyk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlc2l6ZSwgbWFraW5nIGFjdHVhbCBzcGFjZSBhbmQgbW92aW5nIGJlbG93IC8gYWJvdmUgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKi9cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5yZXNpemVTcGFjZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMpIHtcbiAgdmFyIHNwYWNlVG9vbCA9IHRoaXMuX3NwYWNlVG9vbDtcblxuICB2YXIgc2hhcGVUcmJsID0gYXNUUkJMKHNoYXBlKSxcbiAgICAgIG5ld1RyYmwgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICB2YXIgdHJibERpZmYgPSBzdWJzdHJhY3RUUkJMKG5ld1RyYmwsIHNoYXBlVHJibCk7XG5cbiAgdmFyIGxhbmVzUm9vdCA9IGdldExhbmVzUm9vdChzaGFwZSk7XG5cbiAgdmFyIGFsbEFmZmVjdGVkID0gW10sXG4gICAgICBhbGxMYW5lcyA9IFtdO1xuXG4gIGVhY2hFbGVtZW50KGxhbmVzUm9vdCwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGFsbEFmZmVjdGVkLnB1c2goZWxlbWVudCk7XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGFsbExhbmVzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gIH0pO1xuXG4gIHZhciBjaGFuZ2UsXG4gICAgICBzcGFjZVBvcyxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIG9mZnNldCxcbiAgICAgIGFkanVzdG1lbnRzO1xuXG4gIGlmICh0cmJsRGlmZi5ib3R0b20gfHwgdHJibERpZmYudG9wKSB7XG5cbiAgICBjaGFuZ2UgPSB0cmJsRGlmZi5ib3R0b20gfHwgdHJibERpZmYudG9wO1xuICAgIHNwYWNlUG9zID0gc2hhcGUueSArICh0cmJsRGlmZi5ib3R0b20gPyBzaGFwZS5oZWlnaHQgOiAwKSArICh0cmJsRGlmZi5ib3R0b20gPyAtMTAgOiAxMCk7XG4gICAgZGlyZWN0aW9uID0gdHJibERpZmYuYm90dG9tID8gJ3MnIDogJ24nO1xuXG4gICAgb2Zmc2V0ID0gdHJibERpZmYudG9wID4gMCB8fCB0cmJsRGlmZi5ib3R0b20gPCAwID8gLWNoYW5nZSA6IGNoYW5nZTtcblxuICAgIGFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKGFsbEFmZmVjdGVkLCAneScsIG9mZnNldCwgc3BhY2VQb3MpO1xuXG4gICAgc3BhY2VUb29sLm1ha2VTcGFjZShhZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsIGFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLCB7IHg6IDAsIHk6IGNoYW5nZSB9LCBkaXJlY3Rpb24pO1xuICB9XG5cblxuICBpZiAodHJibERpZmYubGVmdCB8fCB0cmJsRGlmZi5yaWdodCkge1xuXG4gICAgY2hhbmdlID0gdHJibERpZmYucmlnaHQgfHwgdHJibERpZmYubGVmdDtcbiAgICBzcGFjZVBvcyA9IHNoYXBlLnggKyAodHJibERpZmYucmlnaHQgPyBzaGFwZS53aWR0aCA6IDApICsgKHRyYmxEaWZmLnJpZ2h0ID8gLTEwIDogMTAwKTtcbiAgICBkaXJlY3Rpb24gPSB0cmJsRGlmZi5yaWdodCA/ICdlJyA6ICd3JztcblxuICAgIG9mZnNldCA9IHRyYmxEaWZmLmxlZnQgPiAwIHx8IHRyYmxEaWZmLnJpZ2h0IDwgMCA/IC1jaGFuZ2UgOiBjaGFuZ2U7XG5cbiAgICBhZGp1c3RtZW50cyA9IHNwYWNlVG9vbC5jYWxjdWxhdGVBZGp1c3RtZW50cyhhbGxMYW5lcywgJ3gnLCBvZmZzZXQsIHNwYWNlUG9zKTtcblxuICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoYWRqdXN0bWVudHMubW92aW5nU2hhcGVzLCBhZGp1c3RtZW50cy5yZXNpemluZ1NoYXBlcywgeyB4OiBjaGFuZ2UsIHk6IDAgfSwgZGlyZWN0aW9uKTtcbiAgfVxufTsiLCJpbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBmb3JFYWNoXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuXHJcbnZhciBERUZBVUxUX0NPTE9SUyA9IHtcclxuICBmaWxsOiB1bmRlZmluZWQsXHJcbiAgc3Ryb2tlOiB1bmRlZmluZWRcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZXRDb2xvckhhbmRsZXIoY29tbWFuZFN0YWNrKSB7XHJcbiAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xyXG59XHJcblxyXG5TZXRDb2xvckhhbmRsZXIuJGluamVjdCA9IFtcclxuICAnY29tbWFuZFN0YWNrJ1xyXG5dO1xyXG5cclxuXHJcblNldENvbG9ySGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcclxuICAgICAgY29sb3JzID0gY29udGV4dC5jb2xvcnMgfHwgREVGQVVMVF9DT0xPUlM7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdmFyIGRpID0ge307XHJcblxyXG4gIGlmICgnZmlsbCcgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHsgZmlsbDogY29sb3JzLmZpbGwgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoJ3N0cm9rZScgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHsgc3Ryb2tlOiBjb2xvcnMuc3Ryb2tlIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cclxuICAgIHNlbGYuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XHJcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBkaTogZGlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG59OyIsImltcG9ydCB7XG4gIGdldENoaWxkTGFuZXMsXG4gIExBTkVfSU5ERU5UQVRJT05cbn0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBzcGxpdHMgYSBsYW5lIGludG8gYSBudW1iZXIgb2Ygc3ViLWxhbmVzLFxuICogY3JlYXRpbmcgbmV3IHN1YiBsYW5lcywgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwbGl0TGFuZUhhbmRsZXIobW9kZWxpbmcsIHRyYW5zbGF0ZSkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cblNwbGl0TGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuU3BsaXRMYW5lSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3TGFuZXNDb3VudCA9IGNvbnRleHQuY291bnQ7XG5cbiAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKHNoYXBlKSxcbiAgICAgIGV4aXN0aW5nTGFuZXNDb3VudCA9IGNoaWxkTGFuZXMubGVuZ3RoO1xuXG4gIGlmIChleGlzdGluZ0xhbmVzQ291bnQgPiBuZXdMYW5lc0NvdW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbW9yZSB0aGFuIHtjb3VudH0gY2hpbGQgbGFuZXMnLCB7IGNvdW50OiBuZXdMYW5lc0NvdW50IH0pKTtcbiAgfVxuXG4gIHZhciBuZXdMYW5lc0hlaWdodCA9IE1hdGgucm91bmQoc2hhcGUuaGVpZ2h0IC8gbmV3TGFuZXNDb3VudCk7XG5cbiAgLy8gSXRlcmF0ZSBmcm9tIHRvcCB0byBib3R0b20gaW4gY2hpbGQgbGFuZSBvcmRlcixcbiAgLy8gcmVzaXppbmcgZXhpc3RpbmcgbGFuZXMgYW5kIGNyZWF0aW5nIG5ldyBvbmVzXG4gIC8vIHNvIHRoYXQgdGhleSBzcGxpdCB0aGUgcGFyZW50IHByb3BvcnRpb25hbGx5LlxuICAvL1xuICAvLyBEdWUgdG8gcm91bmRpbmcgcmVsYXRlZCBlcnJvcnMsIHRoZSBib3R0b20gbGFuZVxuICAvLyBuZWVkcyB0byB0YWtlIHVwIGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICB2YXIgbGFuZVksXG4gICAgICBsYW5lSGVpZ2h0LFxuICAgICAgbGFuZUJvdW5kcyxcbiAgICAgIG5ld0xhbmVBdHRycyxcbiAgICAgIGlkeDtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG5ld0xhbmVzQ291bnQ7IGlkeCsrKSB7XG5cbiAgICBsYW5lWSA9IHNoYXBlLnkgKyBpZHggKiBuZXdMYW5lc0hlaWdodDtcblxuICAgIC8vIGlmIGJvdHRvbSBsYW5lXG4gICAgaWYgKGlkeCA9PT0gbmV3TGFuZXNDb3VudCAtIDEpIHtcbiAgICAgIGxhbmVIZWlnaHQgPSBzaGFwZS5oZWlnaHQgLSAobmV3TGFuZXNIZWlnaHQgKiBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW5lSGVpZ2h0ID0gbmV3TGFuZXNIZWlnaHQ7XG4gICAgfVxuXG4gICAgbGFuZUJvdW5kcyA9IHtcbiAgICAgIHg6IHNoYXBlLnggKyBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgeTogbGFuZVksXG4gICAgICB3aWR0aDogc2hhcGUud2lkdGggLSBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgaGVpZ2h0OiBsYW5lSGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChpZHggPCBleGlzdGluZ0xhbmVzQ291bnQpIHtcblxuICAgICAgLy8gcmVzaXplIGV4aXN0aW5nIGxhbmVcbiAgICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKGNoaWxkTGFuZXNbaWR4XSwgbGFuZUJvdW5kcyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGxhbmUgYXQgcG9zaXRpb25cbiAgICAgIG5ld0xhbmVBdHRycyA9IHtcbiAgICAgICAgdHlwZTogJ2JwbW46TGFuZSdcbiAgICAgIH07XG5cbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKG5ld0xhbmVBdHRycywgbGFuZUJvdW5kcywgc2hhcGUpO1xuICAgIH1cbiAgfVxufTtcbiIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVDYW52YXNSb290SGFuZGxlcihjYW52YXMsIG1vZGVsaW5nKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdtb2RlbGluZydcbl07XG5cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICB2YXIgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdCxcbiAgICAgIG5ld1Jvb3RCdXNpbmVzc09iamVjdCA9IG5ld1Jvb3QuYnVzaW5lc3NPYmplY3QsXG4gICAgICBvbGRSb290ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICBvbGRSb290QnVzaW5lc3NPYmplY3QgPSBvbGRSb290LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYnBtbkRlZmluaXRpb25zID0gb2xkUm9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsXG4gICAgICBkaVBsYW5lID0gb2xkUm9vdEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIC8vICgxKSByZXBsYWNlIHByb2Nlc3Mgb2xkIDw+IG5ldyByb290XG4gIGNhbnZhcy5zZXRSb290RWxlbWVudChuZXdSb290LCB0cnVlKTtcblxuICAvLyAoMikgdXBkYXRlIHJvb3QgZWxlbWVudHNcbiAgY29sbGVjdGlvbkFkZChicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBuZXdSb290QnVzaW5lc3NPYmplY3QpO1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IGJwbW5EZWZpbml0aW9ucztcblxuICBjb2xsZWN0aW9uUmVtb3ZlKGJwbW5EZWZpbml0aW9ucy5yb290RWxlbWVudHMsIG9sZFJvb3RCdXNpbmVzc09iamVjdCk7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50ID0gbnVsbDtcblxuICAvLyAoMykgd2lyZSBkaVxuICBvbGRSb290QnVzaW5lc3NPYmplY3QuZGkgPSBudWxsO1xuXG4gIGRpUGxhbmUuYnBtbkVsZW1lbnQgPSBuZXdSb290QnVzaW5lc3NPYmplY3Q7XG4gIG5ld1Jvb3RCdXNpbmVzc09iamVjdC5kaSA9IGRpUGxhbmU7XG5cbiAgY29udGV4dC5vbGRSb290ID0gb2xkUm9vdDtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHM/XG4gIC8vIHJldHVybiBbIG5ld1Jvb3QsIG9sZFJvb3QgXTtcbn07XG5cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBuZXdSb290ID0gY29udGV4dC5uZXdSb290LFxuICAgICAgbmV3Um9vdEJ1c2luZXNzT2JqZWN0ID0gbmV3Um9vdC5idXNpbmVzc09iamVjdCxcbiAgICAgIG9sZFJvb3QgPSBjb250ZXh0Lm9sZFJvb3QsXG4gICAgICBvbGRSb290QnVzaW5lc3NPYmplY3QgPSBvbGRSb290LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYnBtbkRlZmluaXRpb25zID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsXG4gICAgICBkaVBsYW5lID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIC8vICgxKSByZXBsYWNlIHByb2Nlc3Mgb2xkIDw+IG5ldyByb290XG4gIGNhbnZhcy5zZXRSb290RWxlbWVudChvbGRSb290LCB0cnVlKTtcblxuICAvLyAoMikgdXBkYXRlIHJvb3QgZWxlbWVudHNcbiAgY29sbGVjdGlvblJlbW92ZShicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBuZXdSb290QnVzaW5lc3NPYmplY3QpO1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IG51bGw7XG5cbiAgY29sbGVjdGlvbkFkZChicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBvbGRSb290QnVzaW5lc3NPYmplY3QpO1xuICBvbGRSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IGJwbW5EZWZpbml0aW9ucztcblxuICAvLyAoMykgd2lyZSBkaVxuICBuZXdSb290QnVzaW5lc3NPYmplY3QuZGkgPSBudWxsO1xuXG4gIGRpUGxhbmUuYnBtbkVsZW1lbnQgPSBvbGRSb290QnVzaW5lc3NPYmplY3Q7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC5kaSA9IGRpUGxhbmU7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHJldHVybiBjaGFuZ2VkIGVsZW1lbnRzP1xuICAvLyByZXR1cm4gWyBuZXdSb290LCBvbGRSb290IF07XG59OyIsImltcG9ydCB7XG4gIGNvbGxlY3RMYW5lcyxcbiAgZ2V0TGFuZXNSb290XG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIEZMT1dfTk9ERV9SRUZTX0FUVFIgPSAnZmxvd05vZGVSZWYnLFxuICAgIExBTkVTX0FUVFIgPSAnbGFuZXMnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgdXBkYXRlcyBsYW5lIHJlZnMgb24gY2hhbmdlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG5cblxuVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5wcm90b3R5cGUuY29tcHV0ZVVwZGF0ZXMgPSBmdW5jdGlvbihmbG93Tm9kZVNoYXBlcywgbGFuZVNoYXBlcykge1xuXG4gIHZhciBoYW5kbGVkTm9kZXMgPSBbXTtcblxuICB2YXIgdXBkYXRlcyA9IFtdO1xuXG4gIHZhciBwYXJ0aWNpcGFudENhY2hlID0ge307XG5cbiAgdmFyIGFsbEZsb3dOb2RlU2hhcGVzID0gW107XG5cbiAgZnVuY3Rpb24gaXNJbkxhbmVTaGFwZShlbGVtZW50LCBsYW5lU2hhcGUpIHtcblxuICAgIHZhciBsYW5lVHJibCA9IGFzVFJCTChsYW5lU2hhcGUpO1xuXG4gICAgdmFyIGVsZW1lbnRNaWQgPSB7XG4gICAgICB4OiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICAgIHk6IGVsZW1lbnQueSArIGVsZW1lbnQuaGVpZ2h0IC8gMlxuICAgIH07XG5cbiAgICByZXR1cm4gZWxlbWVudE1pZC54ID4gbGFuZVRyYmwubGVmdCAmJlxuICAgICAgICAgICBlbGVtZW50TWlkLnggPCBsYW5lVHJibC5yaWdodCAmJlxuICAgICAgICAgICBlbGVtZW50TWlkLnkgPiBsYW5lVHJibC50b3AgJiZcbiAgICAgICAgICAgZWxlbWVudE1pZC55IDwgbGFuZVRyYmwuYm90dG9tO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRmxvd05vZGVTaGFwZShmbG93Tm9kZVNoYXBlKSB7XG4gICAgaWYgKGhhbmRsZWROb2Rlcy5pbmRleE9mKGZsb3dOb2RlU2hhcGUpID09PSAtMSkge1xuICAgICAgYWxsRmxvd05vZGVTaGFwZXMucHVzaChmbG93Tm9kZVNoYXBlKTtcbiAgICAgIGhhbmRsZWROb2Rlcy5wdXNoKGZsb3dOb2RlU2hhcGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsbExhbmVTaGFwZXMoZmxvd05vZGVTaGFwZSkge1xuXG4gICAgdmFyIHJvb3QgPSBnZXRMYW5lc1Jvb3QoZmxvd05vZGVTaGFwZSk7XG5cbiAgICBpZiAoIXBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF0pIHtcbiAgICAgIHBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF0gPSBjb2xsZWN0TGFuZXMocm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXROZXdMYW5lcyhmbG93Tm9kZVNoYXBlKSB7XG4gICAgaWYgKCFmbG93Tm9kZVNoYXBlLnBhcmVudCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHZhciBhbGxMYW5lU2hhcGVzID0gZ2V0QWxsTGFuZVNoYXBlcyhmbG93Tm9kZVNoYXBlKTtcblxuICAgIHJldHVybiBhbGxMYW5lU2hhcGVzLmZpbHRlcihmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gaXNJbkxhbmVTaGFwZShmbG93Tm9kZVNoYXBlLCBsKTtcbiAgICB9KS5tYXAoZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIHJldHVybiBzaGFwZS5idXNpbmVzc09iamVjdDtcbiAgICB9KTtcbiAgfVxuXG4gIGxhbmVTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihsYW5lU2hhcGUpIHtcbiAgICB2YXIgcm9vdCA9IGdldExhbmVzUm9vdChsYW5lU2hhcGUpO1xuXG4gICAgaWYgKCFyb290IHx8IGhhbmRsZWROb2Rlcy5pbmRleE9mKHJvb3QpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbiA9IHJvb3QuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBpcyhjLCAnYnBtbjpGbG93Tm9kZScpO1xuICAgIH0pO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChhZGRGbG93Tm9kZVNoYXBlKTtcblxuICAgIGhhbmRsZWROb2Rlcy5wdXNoKHJvb3QpO1xuICB9KTtcblxuICBmbG93Tm9kZVNoYXBlcy5mb3JFYWNoKGFkZEZsb3dOb2RlU2hhcGUpO1xuXG5cbiAgYWxsRmxvd05vZGVTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihmbG93Tm9kZVNoYXBlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSBmbG93Tm9kZVNoYXBlLmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgdmFyIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpLFxuICAgICAgICByZW1vdmUgPSBsYW5lcy5zbGljZSgpLFxuICAgICAgICBhZGQgPSBnZXROZXdMYW5lcyhmbG93Tm9kZVNoYXBlKTtcblxuICAgIHVwZGF0ZXMucHVzaCh7IGZsb3dOb2RlOiBmbG93Tm9kZSwgcmVtb3ZlOiByZW1vdmUsIGFkZDogYWRkIH0pO1xuICB9KTtcblxuICBsYW5lU2hhcGVzLmZvckVhY2goZnVuY3Rpb24obGFuZVNoYXBlKSB7XG5cbiAgICB2YXIgbGFuZSA9IGxhbmVTaGFwZS5idXNpbmVzc09iamVjdDtcblxuICAgIC8vIGxhbmUgZ290IHJlbW92ZWQgWFgtKVxuICAgIGlmICghbGFuZVNoYXBlLnBhcmVudCkge1xuICAgICAgbGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUikuZm9yRWFjaChmdW5jdGlvbihmbG93Tm9kZSkge1xuICAgICAgICB1cGRhdGVzLnB1c2goeyBmbG93Tm9kZTogZmxvd05vZGUsIHJlbW92ZTogWyBsYW5lIF0sIGFkZDogW10gfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1cGRhdGVzO1xufTtcblxuVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgdXBkYXRlcyA9IGNvbnRleHQudXBkYXRlcztcblxuICBpZiAoIXVwZGF0ZXMpIHtcbiAgICB1cGRhdGVzID0gY29udGV4dC51cGRhdGVzID0gdGhpcy5jb21wdXRlVXBkYXRlcyhjb250ZXh0LmZsb3dOb2RlU2hhcGVzLCBjb250ZXh0LmxhbmVTaGFwZXMpO1xuICB9XG5cblxuICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24odXBkYXRlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSB1cGRhdGUuZmxvd05vZGUsXG4gICAgICAgIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpO1xuXG4gICAgLy8gdW53aXJlIG9sZFxuICAgIHVwZGF0ZS5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihvbGRMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGxhbmVzLCBvbGRMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUob2xkTGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcblxuICAgIC8vIHdpcmUgbmV3XG4gICAgdXBkYXRlLmFkZC5mb3JFYWNoKGZ1bmN0aW9uKG5ld0xhbmUpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFuZXMsIG5ld0xhbmUpO1xuICAgICAgY29sbGVjdGlvbkFkZChuZXdMYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKSwgZmxvd05vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHNcbiAgLy8gcmV0dXJuIFsgLi4uIF07XG59O1xuXG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgdXBkYXRlcyA9IGNvbnRleHQudXBkYXRlcztcblxuICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24odXBkYXRlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSB1cGRhdGUuZmxvd05vZGUsXG4gICAgICAgIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpO1xuXG4gICAgLy8gdW53aXJlIG5ld1xuICAgIHVwZGF0ZS5hZGQuZm9yRWFjaChmdW5jdGlvbihuZXdMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGxhbmVzLCBuZXdMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUobmV3TGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcblxuICAgIC8vIHdpcmUgb2xkXG4gICAgdXBkYXRlLnJlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKG9sZExhbmUpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFuZXMsIG9sZExhbmUpO1xuICAgICAgY29sbGVjdGlvbkFkZChvbGRMYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKSwgZmxvd05vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHNcbiAgLy8gcmV0dXJuIFsgLi4uIF07XG59O1xuIiwiaW1wb3J0IHtcbiAgcmVkdWNlLFxuICBrZXlzLFxuICBmb3JFYWNoLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBERUZBVUxUX0ZMT1cgPSAnZGVmYXVsdCcsXG4gICAgSUQgPSAnaWQnLFxuICAgIERJID0gJ2RpJztcblxudmFyIE5VTExfRElNRU5TSU9OUyA9IHtcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMFxufTtcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIGEgQlBNTiAyLjAgcHJvcGVydHkgdXBkYXRlLlxuICpcbiAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gc2V0IHNpbXBsZSBwcm9wZXJ0aWVzIG9uIGVsZW1lbnRzIHdpdGhcbiAqIGFuIHVuZGVybHlpbmcgQlBNTiBidXNpbmVzcyBvYmplY3QuXG4gKlxuICogVXNlIHJlc3BlY3RpdmUgZGlhZ3JhbS1qcyBwcm92aWRlZCBoYW5kbGVycyBpZiB5b3Ugd291bGRcbiAqIGxpa2UgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgbW9kZWxpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyKFxuICAgIGVsZW1lbnRSZWdpc3RyeSwgbW9kZGxlLCB0cmFuc2xhdGUsXG4gICAgbW9kZWxpbmcsIHRleHRSZW5kZXJlcikge1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3RleHRSZW5kZXJlciA9IHRleHRSZW5kZXJlcjtcbn1cblxuVXBkYXRlUHJvcGVydGllc0hhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdtb2RkbGUnLFxuICAndHJhbnNsYXRlJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgQlBNTiBlbGVtZW50IHdpdGggYSBsaXN0IG9mIG5ldyBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGNvbnRleHQuZWxlbWVudCB0aGUgZWxlbWVudCB0byB1cGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LnByb3BlcnRpZXMgYSBsaXN0IG9mIHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBlbGVtZW50J3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzaW5lc3NPYmplY3QgKHRoZSBCUE1OIG1vZGVsIGVsZW1lbnQpXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgY2hhbmdlZCA9IFsgZWxlbWVudCBdLFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ2VsZW1lbnQgcmVxdWlyZWQnKSk7XG4gIH1cblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgaWRzID0gdGhpcy5fbW9kZGxlLmlkcztcblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllcyA9IHVud3JhcEJ1c2luZXNzT2JqZWN0cyhjb250ZXh0LnByb3BlcnRpZXMpLFxuICAgICAgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyB8fCBnZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBwcm9wZXJ0aWVzKTtcblxuICBpZiAoaXNJZENoYW5nZShwcm9wZXJ0aWVzLCBidXNpbmVzc09iamVjdCkpIHtcbiAgICBpZHMudW5jbGFpbShidXNpbmVzc09iamVjdFtJRF0pO1xuXG4gICAgZWxlbWVudFJlZ2lzdHJ5LnVwZGF0ZUlkKGVsZW1lbnQsIHByb3BlcnRpZXNbSURdKTtcblxuICAgIGlkcy5jbGFpbShwcm9wZXJ0aWVzW0lEXSwgYnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgLy8gY29ycmVjdGx5IGluZGljYXRlIHZpc3VhbCBjaGFuZ2VzIG9uIGRlZmF1bHQgZmxvdyB1cGRhdGVzXG4gIGlmIChERUZBVUxUX0ZMT1cgaW4gcHJvcGVydGllcykge1xuXG4gICAgaWYgKHByb3BlcnRpZXNbREVGQVVMVF9GTE9XXSkge1xuICAgICAgY2hhbmdlZC5wdXNoKGVsZW1lbnRSZWdpc3RyeS5nZXQocHJvcGVydGllc1tERUZBVUxUX0ZMT1ddLmlkKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0W0RFRkFVTFRfRkxPV10pIHtcbiAgICAgIGNoYW5nZWQucHVzaChlbGVtZW50UmVnaXN0cnkuZ2V0KGJ1c2luZXNzT2JqZWN0W0RFRkFVTFRfRkxPV10uaWQpKTtcbiAgICB9XG4gIH1cblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBwcm9wZXJ0aWVzKTtcblxuICAvLyBzdG9yZSBvbGQgdmFsdWVzXG4gIGNvbnRleHQub2xkUHJvcGVydGllcyA9IG9sZFByb3BlcnRpZXM7XG4gIGNvbnRleHQuY2hhbmdlZCA9IGNoYW5nZWQ7XG5cbiAgLy8gaW5kaWNhdGUgY2hhbmdlZCBvbiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSB1cGRhdGVcbiAgcmV0dXJuIGNoYW5nZWQ7XG59O1xuXG5cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBsYWJlbCA9IGVsZW1lbnQubGFiZWw7XG5cbiAgdmFyIHRleHQgPSBsYWJlbCAmJiBnZXRCdXNpbmVzc09iamVjdChsYWJlbCkubmFtZTtcblxuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBnZXQgbGF5b3V0ZWQgdGV4dCBib3VuZHMgYW5kIHJlc2l6ZSBleHRlcm5hbFxuICAvLyBleHRlcm5hbCBsYWJlbCBhY2NvcmRpbmdseVxuICB2YXIgbmV3TGFiZWxCb3VuZHMgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhsYWJlbCwgdGV4dCk7XG5cbiAgdGhpcy5fbW9kZWxpbmcucmVzaXplU2hhcGUobGFiZWwsIG5ld0xhYmVsQm91bmRzLCBOVUxMX0RJTUVOU0lPTlMpO1xufTtcblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB1cGRhdGUgb24gYSBCUE1OIGVsZW1lbnRzIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlUHJvcGVydGllc0hhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICBvbGRQcm9wZXJ0aWVzID0gY29udGV4dC5vbGRQcm9wZXJ0aWVzLFxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgaWRzID0gdGhpcy5fbW9kZGxlLmlkcztcblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0aWVzKTtcblxuICBpZiAoaXNJZENoYW5nZShwcm9wZXJ0aWVzLCBidXNpbmVzc09iamVjdCkpIHtcbiAgICBpZHMudW5jbGFpbShwcm9wZXJ0aWVzW0lEXSk7XG5cbiAgICBlbGVtZW50UmVnaXN0cnkudXBkYXRlSWQoZWxlbWVudCwgb2xkUHJvcGVydGllc1tJRF0pO1xuXG4gICAgaWRzLmNsYWltKG9sZFByb3BlcnRpZXNbSURdLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcblxuXG5mdW5jdGlvbiBpc0lkQ2hhbmdlKHByb3BlcnRpZXMsIGJ1c2luZXNzT2JqZWN0KSB7XG4gIHJldHVybiBJRCBpbiBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXNbSURdICE9PSBidXNpbmVzc09iamVjdFtJRF07XG59XG5cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICB2YXIgcHJvcGVydHlOYW1lcyA9IGtleXMocHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuXG4gICAgLy8gaGFuZGxlIERJIHNlcGFyYXRlbHlcbiAgICBpZiAoa2V5ICE9PSBESSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBidXNpbmVzc09iamVjdC5nZXQoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREaVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QuZGksIGtleXMocHJvcGVydGllcy5kaSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuXG5mdW5jdGlvbiBnZXREaVByb3BlcnRpZXMoZGksIHByb3BlcnR5TmFtZXMpIHtcbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gZGkuZ2V0KGtleSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcblxuICAgIGlmIChrZXkgIT09IERJKSB7XG4gICAgICBidXNpbmVzc09iamVjdC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gb25seSB1cGRhdGUsIGlmIGJ1c2luZXNzT2JqZWN0LmRpIGV4aXN0c1xuICAgICAgaWYgKGJ1c2luZXNzT2JqZWN0LmRpKSB7XG4gICAgICAgIHNldERpUHJvcGVydGllcyhidXNpbmVzc09iamVjdC5kaSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gc2V0RGlQcm9wZXJ0aWVzKGRpLCBwcm9wZXJ0aWVzKSB7XG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIGRpLnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG59XG5cblxudmFyIHJlZmVyZW5jZVByb3BlcnR5TmFtZXMgPSBbICdkZWZhdWx0JyBdO1xuXG4vKipcbiAqIE1ha2Ugc3VyZSB3ZSB1bndyYXAgdGhlIGFjdHVhbCBidXNpbmVzcyBvYmplY3RcbiAqIGJlaGluZCBkaWFncmFtIGVsZW1lbnQgdGhhdCBtYXkgaGF2ZSBiZWVuXG4gKiBwYXNzZWQgYXMgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gcHJvcGVydGllc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdW53cmFwcGVkUHJvcHNcbiAqL1xuZnVuY3Rpb24gdW53cmFwQnVzaW5lc3NPYmplY3RzKHByb3BlcnRpZXMpIHtcblxuICB2YXIgdW53cmFwcGVkUHJvcHMgPSBhc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuXG4gIHJlZmVyZW5jZVByb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKG5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgdW53cmFwcGVkUHJvcHNbbmFtZV0gPSBnZXRCdXNpbmVzc09iamVjdCh1bndyYXBwZWRQcm9wc1tuYW1lXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdW53cmFwcGVkUHJvcHM7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyKGJwbW5VcGRhdGVyKSB7XHJcbiAgdGhpcy5fYnBtblVwZGF0ZXIgPSBicG1uVXBkYXRlcjtcclxufVxyXG5cclxuVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyLiRpbmplY3QgPSBbICdicG1uVXBkYXRlcicgXTtcclxuXHJcblxyXG5VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGRhdGFTdG9yZUJvID0gY29udGV4dC5kYXRhU3RvcmVCbyxcclxuICAgICAgbmV3U2VtYW50aWNQYXJlbnQgPSBjb250ZXh0Lm5ld1NlbWFudGljUGFyZW50LFxyXG4gICAgICBuZXdEaVBhcmVudCA9IGNvbnRleHQubmV3RGlQYXJlbnQ7XHJcblxyXG4gIGNvbnRleHQub2xkU2VtYW50aWNQYXJlbnQgPSBkYXRhU3RvcmVCby4kcGFyZW50O1xyXG4gIGNvbnRleHQub2xkRGlQYXJlbnQgPSBkYXRhU3RvcmVCby5kaS4kcGFyZW50O1xyXG5cclxuICAvLyB1cGRhdGUgc2VtYW50aWMgcGFyZW50XHJcbiAgdGhpcy5fYnBtblVwZGF0ZXIudXBkYXRlU2VtYW50aWNQYXJlbnQoZGF0YVN0b3JlQm8sIG5ld1NlbWFudGljUGFyZW50KTtcclxuXHJcbiAgLy8gdXBkYXRlIERJIHBhcmVudFxyXG4gIHRoaXMuX2JwbW5VcGRhdGVyLnVwZGF0ZURpUGFyZW50KGRhdGFTdG9yZUJvLmRpLCBuZXdEaVBhcmVudCk7XHJcbn07XHJcblxyXG5VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICB2YXIgZGF0YVN0b3JlQm8gPSBjb250ZXh0LmRhdGFTdG9yZUJvLFxyXG4gICAgICBvbGRTZW1hbnRpY1BhcmVudCA9IGNvbnRleHQub2xkU2VtYW50aWNQYXJlbnQsXHJcbiAgICAgIG9sZERpUGFyZW50ID0gY29udGV4dC5vbGREaVBhcmVudDtcclxuXHJcbiAgLy8gdXBkYXRlIHNlbWFudGljIHBhcmVudFxyXG4gIHRoaXMuX2JwbW5VcGRhdGVyLnVwZGF0ZVNlbWFudGljUGFyZW50KGRhdGFTdG9yZUJvLCBvbGRTZW1hbnRpY1BhcmVudCk7XHJcblxyXG4gIC8vIHVwZGF0ZSBESSBwYXJlbnRcclxuICB0aGlzLl9icG1uVXBkYXRlci51cGRhdGVEaVBhcmVudChkYXRhU3RvcmVCby5kaSwgb2xkRGlQYXJlbnQpO1xyXG59O1xyXG5cclxuIiwiaW1wb3J0IEJlaGF2aW9yTW9kdWxlIGZyb20gJy4vYmVoYXZpb3InO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBEaU9yZGVyaW5nTW9kdWxlIGZyb20gJy4uL2RpLW9yZGVyaW5nJztcbmltcG9ydCBPcmRlcmluZ01vZHVsZSBmcm9tICcuLi9vcmRlcmluZyc7XG5pbXBvcnQgUmVwbGFjZU1vZHVsZSBmcm9tICcuLi9yZXBsYWNlJztcblxuaW1wb3J0IENvbW1hbmRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZCc7XG5pbXBvcnQgVG9vbHRpcHNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbHRpcHMnO1xuaW1wb3J0IExhYmVsU3VwcG9ydE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1zdXBwb3J0JztcbmltcG9ydCBBdHRhY2hTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F0dGFjaC1zdXBwb3J0JztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcbmltcG9ydCBDaGFuZ2VTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0JztcbmltcG9ydCBTcGFjZVRvb2xNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbCc7XG5cbmltcG9ydCBCcG1uRmFjdG9yeSBmcm9tICcuL0JwbW5GYWN0b3J5JztcbmltcG9ydCBCcG1uVXBkYXRlciBmcm9tICcuL0JwbW5VcGRhdGVyJztcbmltcG9ydCBFbGVtZW50RmFjdG9yeSBmcm9tICcuL0VsZW1lbnRGYWN0b3J5JztcbmltcG9ydCBNb2RlbGluZyBmcm9tICcuL01vZGVsaW5nJztcbmltcG9ydCBCcG1uTGF5b3V0ZXIgZnJvbSAnLi9CcG1uTGF5b3V0ZXInO1xuaW1wb3J0IENyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnbW9kZWxpbmcnLFxuICAgICdicG1uVXBkYXRlcidcbiAgXSxcbiAgX19kZXBlbmRzX186IFtcbiAgICBCZWhhdmlvck1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBEaU9yZGVyaW5nTW9kdWxlLFxuICAgIE9yZGVyaW5nTW9kdWxlLFxuICAgIFJlcGxhY2VNb2R1bGUsXG4gICAgQ29tbWFuZE1vZHVsZSxcbiAgICBUb29sdGlwc01vZHVsZSxcbiAgICBMYWJlbFN1cHBvcnRNb2R1bGUsXG4gICAgQXR0YWNoU3VwcG9ydE1vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGUsXG4gICAgQ2hhbmdlU3VwcG9ydE1vZHVsZSxcbiAgICBTcGFjZVRvb2xNb2R1bGVcbiAgXSxcbiAgYnBtbkZhY3Rvcnk6IFsgJ3R5cGUnLCBCcG1uRmFjdG9yeSBdLFxuICBicG1uVXBkYXRlcjogWyAndHlwZScsIEJwbW5VcGRhdGVyIF0sXG4gIGVsZW1lbnRGYWN0b3J5OiBbICd0eXBlJywgRWxlbWVudEZhY3RvcnkgXSxcbiAgbW9kZWxpbmc6IFsgJ3R5cGUnLCBNb2RlbGluZyBdLFxuICBsYXlvdXRlcjogWyAndHlwZScsIEJwbW5MYXlvdXRlciBdLFxuICBjb25uZWN0aW9uRG9ja2luZzogWyAndHlwZScsIENyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcgXVxufTsiLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0UGFyZW50XG59IGZyb20gJy4vTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgc3Vic3RyYWN0VFJCTCxcbiAgcmVzaXplVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbCc7XG5cbnZhciBhYnMgPSBNYXRoLmFicztcblxuXG5mdW5jdGlvbiBnZXRUUkJMUmVzaXplKG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHJldHVybiBzdWJzdHJhY3RUUkJMKGFzVFJCTChuZXdCb3VuZHMpLCBhc1RSQkwob2xkQm91bmRzKSk7XG59XG5cblxudmFyIExBTkVfUEFSRU5UUyA9IFtcbiAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAnYnBtbjpQcm9jZXNzJyxcbiAgJ2JwbW46U3ViUHJvY2Vzcydcbl07XG5cbmV4cG9ydCB2YXIgTEFORV9JTkRFTlRBVElPTiA9IDMwO1xuXG5cbi8qKlxuICogQ29sbGVjdCBhbGwgbGFuZSBzaGFwZXMgaW4gdGhlIGdpdmVuIHBhcmVuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBbY29sbGVjdGVkU2hhcGVzXVxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RMYW5lcyhzaGFwZSwgY29sbGVjdGVkU2hhcGVzKSB7XG5cbiAgY29sbGVjdGVkU2hhcGVzID0gY29sbGVjdGVkU2hhcGVzIHx8IFtdO1xuXG4gIHNoYXBlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihzKSB7XG4gICAgaWYgKGlzKHMsICdicG1uOkxhbmUnKSkge1xuICAgICAgY29sbGVjdExhbmVzKHMsIGNvbGxlY3RlZFNoYXBlcyk7XG5cbiAgICAgIGNvbGxlY3RlZFNoYXBlcy5wdXNoKHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbGxlY3RlZFNoYXBlcztcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbGFuZSBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRMYW5lcyhzaGFwZSkge1xuICByZXR1cm4gc2hhcGUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gaXMoYywgJ2JwbW46TGFuZScpO1xuICB9KTtcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgcm9vdCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGdpdmVuIGxhbmUgc2hhcGVcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYW5lc1Jvb3Qoc2hhcGUpIHtcbiAgcmV0dXJuIGdldFBhcmVudChzaGFwZSwgTEFORV9QQVJFTlRTKSB8fCBzaGFwZTtcbn1cblxuXG4vKipcbiAqIENvbXB1dGUgdGhlIHJlcXVpcmVkIHJlc2l6ZSBvcGVyYXRpb25zIGZvciBsYW5lc1xuICogYWRqYWNlbnQgdG8gdGhlIGdpdmVuIHNoYXBlLCBhc3N1bWluZyBpdCB3aWxsIGJlXG4gKiByZXNpemVkIHRvIHRoZSBnaXZlbiBuZXcgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTGFuZXNSZXNpemUoc2hhcGUsIG5ld0JvdW5kcykge1xuXG4gIHZhciByb290RWxlbWVudCA9IGdldExhbmVzUm9vdChzaGFwZSk7XG5cbiAgdmFyIGluaXRpYWxTaGFwZXMgPSBpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpID8gW10gOiBbIHJvb3RFbGVtZW50IF07XG5cbiAgdmFyIGFsbExhbmVzID0gY29sbGVjdExhbmVzKHJvb3RFbGVtZW50LCBpbml0aWFsU2hhcGVzKSxcbiAgICAgIHNoYXBlVHJibCA9IGFzVFJCTChzaGFwZSksXG4gICAgICBzaGFwZU5ld1RyYmwgPSBhc1RSQkwobmV3Qm91bmRzKSxcbiAgICAgIHRyYmxSZXNpemUgPSBnZXRUUkJMUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpLFxuICAgICAgcmVzaXplTmVlZGVkID0gW107XG5cbiAgYWxsTGFuZXMuZm9yRWFjaChmdW5jdGlvbihvdGhlcikge1xuXG4gICAgaWYgKG90aGVyID09PSBzaGFwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3BSZXNpemUgPSAwLFxuICAgICAgICByaWdodFJlc2l6ZSA9IHRyYmxSZXNpemUucmlnaHQsXG4gICAgICAgIGJvdHRvbVJlc2l6ZSA9IDAsXG4gICAgICAgIGxlZnRSZXNpemUgPSB0cmJsUmVzaXplLmxlZnQ7XG5cbiAgICB2YXIgb3RoZXJUcmJsID0gYXNUUkJMKG90aGVyKTtcblxuICAgIGlmICh0cmJsUmVzaXplLnRvcCkge1xuICAgICAgaWYgKGFicyhvdGhlclRyYmwuYm90dG9tIC0gc2hhcGVUcmJsLnRvcCkgPCAxMCkge1xuICAgICAgICBib3R0b21SZXNpemUgPSBzaGFwZU5ld1RyYmwudG9wIC0gb3RoZXJUcmJsLmJvdHRvbTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFicyhvdGhlclRyYmwudG9wIC0gc2hhcGVUcmJsLnRvcCkgPCA1KSB7XG4gICAgICAgIHRvcFJlc2l6ZSA9IHNoYXBlTmV3VHJibC50b3AgLSBvdGhlclRyYmwudG9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmJsUmVzaXplLmJvdHRvbSkge1xuICAgICAgaWYgKGFicyhvdGhlclRyYmwudG9wIC0gc2hhcGVUcmJsLmJvdHRvbSkgPCAxMCkge1xuICAgICAgICB0b3BSZXNpemUgPSBzaGFwZU5ld1RyYmwuYm90dG9tIC0gb3RoZXJUcmJsLnRvcDtcbiAgICAgIH1cblxuICAgICAgaWYgKGFicyhvdGhlclRyYmwuYm90dG9tIC0gc2hhcGVUcmJsLmJvdHRvbSkgPCA1KSB7XG4gICAgICAgIGJvdHRvbVJlc2l6ZSA9IHNoYXBlTmV3VHJibC5ib3R0b20gLSBvdGhlclRyYmwuYm90dG9tO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b3BSZXNpemUgfHwgcmlnaHRSZXNpemUgfHwgYm90dG9tUmVzaXplIHx8IGxlZnRSZXNpemUpIHtcblxuICAgICAgcmVzaXplTmVlZGVkLnB1c2goe1xuICAgICAgICBzaGFwZTogb3RoZXIsXG4gICAgICAgIG5ld0JvdW5kczogcmVzaXplVFJCTChvdGhlciwge1xuICAgICAgICAgIHRvcDogdG9wUmVzaXplLFxuICAgICAgICAgIHJpZ2h0OiByaWdodFJlc2l6ZSxcbiAgICAgICAgICBib3R0b206IGJvdHRvbVJlc2l6ZSxcbiAgICAgICAgICBsZWZ0OiBsZWZ0UmVzaXplXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc2l6ZU5lZWRlZDtcbn0iLCJpbXBvcnQge1xuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGhhcyBhbnkgb2YgdGhlIGdpdmVuIHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdHlwZXNcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnkoZWxlbWVudCwgdHlwZXMpIHtcbiAgcmV0dXJuIHNvbWUodHlwZXMsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gaXMoZWxlbWVudCwgdCk7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhlIGdpdmVuIHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGFueVR5cGVcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudChlbGVtZW50LCBhbnlUeXBlKSB7XG5cbiAgaWYgKHR5cGVvZiBhbnlUeXBlID09PSAnc3RyaW5nJykge1xuICAgIGFueVR5cGUgPSBbIGFueVR5cGUgXTtcbiAgfVxuXG4gIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50KSkge1xuICAgIGlmIChpc0FueShlbGVtZW50LCBhbnlUeXBlKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IE9yZGVyaW5nUHJvdmlkZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3JkZXJpbmcvT3JkZXJpbmdQcm92aWRlcic7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgZmluZEluZGV4LFxuICBmaW5kXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIGEgc2ltcGxlIG9yZGVyaW5nIHByb3ZpZGVyIHRoYXQgbWFrZXMgc3VyZTpcbiAqXG4gKiAoMCkgbGFiZWxzIGFuZCBncm91cHMgYXJlIHJlbmRlcmVkIGFsd2F5cyBvbiB0b3BcbiAqICgxKSBlbGVtZW50cyBhcmUgb3JkZXJlZCBieSBhIHtsZXZlbH0gcHJvcGVydHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbk9yZGVyaW5nUHJvdmlkZXIoZXZlbnRCdXMsIGNhbnZhcywgdHJhbnNsYXRlKSB7XG5cbiAgT3JkZXJpbmdQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgb3JkZXJzID0gW1xuICAgIHsgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsIG9yZGVyOiB7IGxldmVsOiA2IH0gfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpTZXF1ZW5jZUZsb3cnLFxuICAgICAgb3JkZXI6IHtcbiAgICAgICAgbGV2ZWw6IDMsXG4gICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAgICAgJ2JwbW46Rmxvd0VsZW1lbnRzQ29udGFpbmVyJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIGhhbmRsZSBEYXRhQXNzb2NpYXRpb24ocykgbGlrZSBtZXNzYWdlIGZsb3dzIGFuZCByZW5kZXIgdGhlbSBhbHdheXMgb24gdG9wXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46RGF0YUFzc29jaWF0aW9uJyxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGxldmVsOiA5LFxuICAgICAgICBjb250YWluZXJzOiBbXG4gICAgICAgICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgICAgICAgJ2JwbW46UHJvY2VzcydcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46TWVzc2FnZUZsb3cnLCBvcmRlcjoge1xuICAgICAgICBsZXZlbDogOSxcbiAgICAgICAgY29udGFpbmVyczogWyAnYnBtbjpDb2xsYWJvcmF0aW9uJyBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICBvcmRlcjoge1xuICAgICAgICBsZXZlbDogNixcbiAgICAgICAgY29udGFpbmVyczogW1xuICAgICAgICAgICdicG1uOlBhcnRpY2lwYW50JyxcbiAgICAgICAgICAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInLFxuICAgICAgICAgICdicG1uOkNvbGxhYm9yYXRpb24nXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHsgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsIG9yZGVyOiB7IGxldmVsOiA4IH0gfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpHcm91cCcsXG4gICAgICBvcmRlcjoge1xuICAgICAgICBsZXZlbDogMTAsXG4gICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAnYnBtbjpDb2xsYWJvcmF0aW9uJyxcbiAgICAgICAgICAnYnBtbjpQcm9jZXNzJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7IHR5cGU6ICdicG1uOkZsb3dFbGVtZW50Jywgb3JkZXI6IHsgbGV2ZWw6IDUgfSB9LFxuICAgIHsgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnLCBvcmRlcjogeyBsZXZlbDogLTIgfSB9LFxuICAgIHsgdHlwZTogJ2JwbW46TGFuZScsIG9yZGVyOiB7IGxldmVsOiAtMSB9IH1cbiAgXTtcblxuICBmdW5jdGlvbiBjb21wdXRlT3JkZXIoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm4geyBsZXZlbDogMTAgfTtcbiAgICB9XG5cbiAgICB2YXIgZW50cnkgPSBmaW5kKG9yZGVycywgZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsgby50eXBlIF0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5Lm9yZGVyIHx8IHsgbGV2ZWw6IDEgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9yZGVyKGVsZW1lbnQpIHtcblxuICAgIHZhciBvcmRlciA9IGVsZW1lbnQub3JkZXI7XG5cbiAgICBpZiAoIW9yZGVyKSB7XG4gICAgICBlbGVtZW50Lm9yZGVyID0gb3JkZXIgPSBjb21wdXRlT3JkZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZEFjdHVhbFBhcmVudChlbGVtZW50LCBuZXdQYXJlbnQsIGNvbnRhaW5lcnMpIHtcblxuICAgIHZhciBhY3R1YWxQYXJlbnQgPSBuZXdQYXJlbnQ7XG5cbiAgICB3aGlsZSAoYWN0dWFsUGFyZW50KSB7XG5cbiAgICAgIGlmIChpc0FueShhY3R1YWxQYXJlbnQsIGNvbnRhaW5lcnMpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhY3R1YWxQYXJlbnQgPSBhY3R1YWxQYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIGlmICghYWN0dWFsUGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdubyBwYXJlbnQgZm9yIHtlbGVtZW50fSBpbiB7cGFyZW50fScsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgcGFyZW50OiBuZXdQYXJlbnQuaWRcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsUGFyZW50O1xuICB9XG5cbiAgdGhpcy5nZXRPcmRlcmluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld1BhcmVudCkge1xuXG4gICAgLy8gcmVuZGVyIGxhYmVscyBhbHdheXMgb24gdG9wXG4gICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmVudDogY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIGluZGV4OiAtMVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudE9yZGVyID0gZ2V0T3JkZXIoZWxlbWVudCk7XG5cblxuICAgIGlmIChlbGVtZW50T3JkZXIuY29udGFpbmVycykge1xuICAgICAgbmV3UGFyZW50ID0gZmluZEFjdHVhbFBhcmVudChlbGVtZW50LCBuZXdQYXJlbnQsIGVsZW1lbnRPcmRlci5jb250YWluZXJzKTtcbiAgICB9XG5cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSBuZXdQYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihlbGVtZW50KTtcblxuICAgIHZhciBpbnNlcnRJbmRleCA9IGZpbmRJbmRleChuZXdQYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG5cbiAgICAgIC8vIGRvIG5vdCBjb21wYXJlIHdpdGggbGFiZWxzLCB0aGV5IGFyZSBjcmVhdGVkXG4gICAgICAvLyBpbiB0aGUgd3Jvbmcgb3JkZXIgKHJpZ2h0IGFmdGVyIGVsZW1lbnRzKSBkdXJpbmcgaW1wb3J0IGFuZFxuICAgICAgLy8gbWVzcyB1cCB0aGUgcG9zaXRpb25pbmcuXG4gICAgICBpZiAoIWVsZW1lbnQubGFiZWxUYXJnZXQgJiYgY2hpbGQubGFiZWxUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudE9yZGVyLmxldmVsIDwgZ2V0T3JkZXIoY2hpbGQpLmxldmVsO1xuICAgIH0pO1xuXG5cbiAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGluIHRoZSBjaGlsZCBsaXN0IGF0XG4gICAgLy8gYSBzbWFsbGVyIGluZGV4LCB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgaW5zZXJ0IGluZGV4LlxuICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoYXQgdGhlIGVsZW1lbnQgaXMgYmVpbmcgcmVtb3ZlZFxuICAgIC8vIGJlZm9yZSBiZWluZyByZS1pbnNlcnRlZFxuICAgIGlmIChpbnNlcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIGN1cnJlbnRJbmRleCA8IGluc2VydEluZGV4KSB7XG4gICAgICAgIGluc2VydEluZGV4IC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiBpbnNlcnRJbmRleCxcbiAgICAgIHBhcmVudDogbmV3UGFyZW50XG4gICAgfTtcbiAgfTtcbn1cblxuQnBtbk9yZGVyaW5nUHJvdmlkZXIuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2NhbnZhcycsICd0cmFuc2xhdGUnIF07XG5cbmluaGVyaXRzKEJwbW5PcmRlcmluZ1Byb3ZpZGVyLCBPcmRlcmluZ1Byb3ZpZGVyKTsiLCJpbXBvcnQgdHJhbnNsYXRlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcblxuaW1wb3J0IEJwbW5PcmRlcmluZ1Byb3ZpZGVyIGZyb20gJy4vQnBtbk9yZGVyaW5nUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgdHJhbnNsYXRlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uT3JkZXJpbmdQcm92aWRlcicgXSxcbiAgYnBtbk9yZGVyaW5nUHJvdmlkZXI6IFsgJ3R5cGUnLCBCcG1uT3JkZXJpbmdQcm92aWRlciBdXG59OyIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIHBhbGV0dGUgcHJvdmlkZXIgZm9yIEJQTU4gMi4wIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWxldHRlUHJvdmlkZXIoXG4gICAgcGFsZXR0ZSwgY3JlYXRlLCBlbGVtZW50RmFjdG9yeSxcbiAgICBzcGFjZVRvb2wsIGxhc3NvVG9vbCwgaGFuZFRvb2wsXG4gICAgZ2xvYmFsQ29ubmVjdCwgdHJhbnNsYXRlKSB7XG5cbiAgdGhpcy5fcGFsZXR0ZSA9IHBhbGV0dGU7XG4gIHRoaXMuX2NyZWF0ZSA9IGNyZWF0ZTtcbiAgdGhpcy5fZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcbiAgdGhpcy5fc3BhY2VUb29sID0gc3BhY2VUb29sO1xuICB0aGlzLl9sYXNzb1Rvb2wgPSBsYXNzb1Rvb2w7XG4gIHRoaXMuX2hhbmRUb29sID0gaGFuZFRvb2w7XG4gIHRoaXMuX2dsb2JhbENvbm5lY3QgPSBnbG9iYWxDb25uZWN0O1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xufVxuXG5QYWxldHRlUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ3BhbGV0dGUnLFxuICAnY3JlYXRlJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ3NwYWNlVG9vbCcsXG4gICdsYXNzb1Rvb2wnLFxuICAnaGFuZFRvb2wnLFxuICAnZ2xvYmFsQ29ubmVjdCcsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cblBhbGV0dGVQcm92aWRlci5wcm90b3R5cGUuZ2V0UGFsZXR0ZUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGFjdGlvbnMgPSB7fSxcbiAgICAgIGNyZWF0ZSA9IHRoaXMuX2NyZWF0ZSxcbiAgICAgIGVsZW1lbnRGYWN0b3J5ID0gdGhpcy5fZWxlbWVudEZhY3RvcnksXG4gICAgICBzcGFjZVRvb2wgPSB0aGlzLl9zcGFjZVRvb2wsXG4gICAgICBsYXNzb1Rvb2wgPSB0aGlzLl9sYXNzb1Rvb2wsXG4gICAgICBoYW5kVG9vbCA9IHRoaXMuX2hhbmRUb29sLFxuICAgICAgZ2xvYmFsQ29ubmVjdCA9IHRoaXMuX2dsb2JhbENvbm5lY3QsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGUsIGdyb3VwLCBjbGFzc05hbWUsIHRpdGxlLCBvcHRpb25zKSB7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5lcihldmVudCkge1xuICAgICAgdmFyIHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoYXNzaWduKHsgdHlwZTogdHlwZSB9LCBvcHRpb25zKSk7XG5cbiAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LmRpLmlzRXhwYW5kZWQgPSBvcHRpb25zLmlzRXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xuICAgIH1cblxuICAgIHZhciBzaG9ydFR5cGUgPSB0eXBlLnJlcGxhY2UoL15icG1uOi8sICcnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBncm91cDogZ3JvdXAsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHRpdGxlOiB0aXRsZSB8fCB0cmFuc2xhdGUoJ0NyZWF0ZSB7dHlwZX0nLCB7IHR5cGU6IHNob3J0VHlwZSB9KSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZUxpc3RlbmVyLFxuICAgICAgICBjbGljazogY3JlYXRlTGlzdGVuZXJcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3VicHJvY2VzcyhldmVudCkge1xuICAgIHZhciBzdWJQcm9jZXNzID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoe1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIHZhciBzdGFydEV2ZW50ID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoe1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICB4OiA0MCxcbiAgICAgIHk6IDgyLFxuICAgICAgcGFyZW50OiBzdWJQcm9jZXNzXG4gICAgfSk7XG5cbiAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIFsgc3ViUHJvY2Vzcywgc3RhcnRFdmVudCBdLCB7XG4gICAgICBoaW50czoge1xuICAgICAgICBhdXRvU2VsZWN0OiBbIHN0YXJ0RXZlbnQgXVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFydGljaXBhbnQoZXZlbnQpIHtcbiAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVBhcnRpY2lwYW50U2hhcGUoKSk7XG4gIH1cblxuICBhc3NpZ24oYWN0aW9ucywge1xuICAgICdoYW5kLXRvb2wnOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1oYW5kLXRvb2wnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQWN0aXZhdGUgdGhlIGhhbmQgdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGhhbmRUb29sLmFjdGl2YXRlSGFuZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgICdsYXNzby10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFzc28tdG9vbCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBY3RpdmF0ZSB0aGUgbGFzc28gdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGxhc3NvVG9vbC5hY3RpdmF0ZVNlbGVjdGlvbihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgICdzcGFjZS10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3BhY2UtdG9vbCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBY3RpdmF0ZSB0aGUgY3JlYXRlL3JlbW92ZSBzcGFjZSB0b29sJyksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgc3BhY2VUb29sLmFjdGl2YXRlU2VsZWN0aW9uKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgJ2dsb2JhbC1jb25uZWN0LXRvb2wnOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jb25uZWN0aW9uLW11bHRpJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FjdGl2YXRlIHRoZSBnbG9iYWwgY29ubmVjdCB0b29sJyksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZ2xvYmFsQ29ubmVjdC50b2dnbGUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICAndG9vbC1zZXBhcmF0b3InOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIHNlcGFyYXRvcjogdHJ1ZVxuICAgIH0sXG4gICAgJ2NyZWF0ZS5zdGFydC1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOlN0YXJ0RXZlbnQnLCAnZXZlbnQnLCAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgU3RhcnRFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmludGVybWVkaWF0ZS1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnZXZlbnQnLCAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIEludGVybWVkaWF0ZS9Cb3VuZGFyeSBFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmVuZC1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkVuZEV2ZW50JywgJ2V2ZW50JywgJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBFbmRFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmV4Y2x1c2l2ZS1nYXRld2F5JzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsICdnYXRld2F5JywgJ2JwbW4taWNvbi1nYXRld2F5LW5vbmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgR2F0ZXdheScpXG4gICAgKSxcbiAgICAnY3JlYXRlLnRhc2snOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpUYXNrJywgJ2FjdGl2aXR5JywgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIFRhc2snKVxuICAgICksXG4gICAgJ2NyZWF0ZS5kYXRhLW9iamVjdCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLCAnZGF0YS1vYmplY3QnLCAnYnBtbi1pY29uLWRhdGEtb2JqZWN0JyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIERhdGFPYmplY3RSZWZlcmVuY2UnKVxuICAgICksXG4gICAgJ2NyZWF0ZS5kYXRhLXN0b3JlJzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJywgJ2RhdGEtc3RvcmUnLCAnYnBtbi1pY29uLWRhdGEtc3RvcmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgRGF0YVN0b3JlUmVmZXJlbmNlJylcbiAgICApLFxuICAgICdjcmVhdGUuc3VicHJvY2Vzcy1leHBhbmRlZCc6IHtcbiAgICAgIGdyb3VwOiAnYWN0aXZpdHknLFxuICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIGV4cGFuZGVkIFN1YlByb2Nlc3MnKSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZVN1YnByb2Nlc3MsXG4gICAgICAgIGNsaWNrOiBjcmVhdGVTdWJwcm9jZXNzXG4gICAgICB9XG4gICAgfSxcbiAgICAnY3JlYXRlLnBhcnRpY2lwYW50LWV4cGFuZGVkJzoge1xuICAgICAgZ3JvdXA6ICdjb2xsYWJvcmF0aW9uJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1wYXJ0aWNpcGFudCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdDcmVhdGUgUG9vbC9QYXJ0aWNpcGFudCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGRyYWdzdGFydDogY3JlYXRlUGFydGljaXBhbnQsXG4gICAgICAgIGNsaWNrOiBjcmVhdGVQYXJ0aWNpcGFudFxuICAgICAgfVxuICAgIH0sXG4gICAgJ2NyZWF0ZS5ncm91cCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkdyb3VwJywgJ2FydGlmYWN0JywgJ2JwbW4taWNvbi1ncm91cCcsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBHcm91cCcpXG4gICAgKSxcbiAgfSk7XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuIiwiaW1wb3J0IFBhbGV0dGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcGFsZXR0ZSc7XG5pbXBvcnQgQ3JlYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NyZWF0ZSc7XG5pbXBvcnQgU3BhY2VUb29sTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NwYWNlLXRvb2wnO1xuaW1wb3J0IExhc3NvVG9vbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sJztcbmltcG9ydCBIYW5kVG9vbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9oYW5kLXRvb2wnO1xuaW1wb3J0IEdsb2JhbENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ2xvYmFsLWNvbm5lY3QnO1xuaW1wb3J0IHRyYW5zbGF0ZSBmcm9tICdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZSc7XG5cbmltcG9ydCBQYWxldHRlUHJvdmlkZXIgZnJvbSAnLi9QYWxldHRlUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUGFsZXR0ZU1vZHVsZSxcbiAgICBDcmVhdGVNb2R1bGUsXG4gICAgU3BhY2VUb29sTW9kdWxlLFxuICAgIExhc3NvVG9vbE1vZHVsZSxcbiAgICBIYW5kVG9vbE1vZHVsZSxcbiAgICBHbG9iYWxDb25uZWN0TW9kdWxlLFxuICAgIHRyYW5zbGF0ZVxuICBdLFxuICBfX2luaXRfXzogWyAncGFsZXR0ZVByb3ZpZGVyJyBdLFxuICBwYWxldHRlUHJvdmlkZXI6IFsgJ3R5cGUnLCBQYWxldHRlUHJvdmlkZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzRXZlbnRTdWJQcm9jZXNzLFxuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNEaWZmZXJlbnRUeXBlXG59IGZyb20gJy4vdXRpbC9UeXBlVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCAqIGFzIHJlcGxhY2VPcHRpb25zIGZyb20gJy4uL3JlcGxhY2UvUmVwbGFjZU9wdGlvbnMnO1xuXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaXMgYW4gZWxlbWVudCBhZ25vc3RpYyByZXBsYWNlIG1lbnUgcHJvdmlkZXIgZm9yIHRoZSBwb3B1cCBtZW51LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlTWVudVByb3ZpZGVyKFxuICAgIHBvcHVwTWVudSwgbW9kZWxpbmcsIG1vZGRsZSxcbiAgICBicG1uUmVwbGFjZSwgcnVsZXMsIHRyYW5zbGF0ZSkge1xuXG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdGhpcy5yZWdpc3RlcigpO1xufVxuXG5SZXBsYWNlTWVudVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdwb3B1cE1lbnUnLFxuICAnbW9kZWxpbmcnLFxuICAnbW9kZGxlJyxcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ3J1bGVzJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciByZXBsYWNlIG1lbnUgcHJvdmlkZXIgaW4gdGhlIHBvcHVwIG1lbnVcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ2JwbW4tcmVwbGFjZScsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIEdldCBhbGwgZW50cmllcyBmcm9tIHJlcGxhY2VPcHRpb25zIGZvciB0aGUgZ2l2ZW4gZWxlbWVudCBhbmQgYXBwbHkgZmlsdGVyc1xuICogb24gdGhlbS4gR2V0IGZvciBleGFtcGxlIG9ubHkgZWxlbWVudHMsIHdoaWNoIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGVudHJ5IGl0ZW1zXG4gKi9cblJlcGxhY2VNZW51UHJvdmlkZXIucHJvdG90eXBlLmdldEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICB2YXIgcnVsZXMgPSB0aGlzLl9ydWxlcztcblxuICB2YXIgZW50cmllcztcblxuICBpZiAoIXJ1bGVzLmFsbG93ZWQoJ3NoYXBlLnJlcGxhY2UnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgZGlmZmVyZW50VHlwZSA9IGlzRGlmZmVyZW50VHlwZShlbGVtZW50KTtcblxuICAvLyBzdGFydCBldmVudHMgb3V0c2lkZSBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpcyhidXNpbmVzc09iamVjdC4kcGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuU1RBUlRfRVZFTlQsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZC9jb2xsYXBzZWQgcG9vbHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlBBUlRJQ0lQQU5ULCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgcmV0dXJuIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpICE9PSBlbnRyeS50YXJnZXQuaXNFeHBhbmRlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gc3RhcnQgZXZlbnRzIGluc2lkZSBldmVudCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3RhcnRFdmVudCcpICYmIGlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpKSB7XG4gICAgZW50cmllcyA9IGZpbHRlcihyZXBsYWNlT3B0aW9ucy5FVkVOVF9TVUJfUFJPQ0VTU19TVEFSVF9FVkVOVCwgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgdmFyIGlzSW50ZXJydXB0aW5nID0gdGFyZ2V0LmlzSW50ZXJydXB0aW5nICE9PSBmYWxzZTtcblxuICAgICAgdmFyIGlzSW50ZXJydXB0aW5nRXF1YWwgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5pc0ludGVycnVwdGluZyA9PT0gaXNJbnRlcnJ1cHRpbmc7XG5cbiAgICAgIC8vIGZpbHRlcnMgZWxlbWVudHMgd2hpY2ggdHlwZXMgYW5kIGV2ZW50IGRlZmluaXRpb24gYXJlIGVxdWFsIGJ1dCBoYXZlIGhhdmUgZGlmZmVyZW50IGludGVycnVwdGluZyB0eXBlc1xuICAgICAgcmV0dXJuIGRpZmZlcmVudFR5cGUoZW50cnkpIHx8ICFkaWZmZXJlbnRUeXBlKGVudHJ5KSAmJiAhaXNJbnRlcnJ1cHRpbmdFcXVhbDtcblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBzdGFydCBldmVudHMgaW5zaWRlIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTdGFydEV2ZW50JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpXG4gICAgICAmJiBpcyhidXNpbmVzc09iamVjdC4kcGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlNUQVJUX0VWRU5UX1NVQl9QUk9DRVNTLCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZW5kIGV2ZW50c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkVuZEV2ZW50JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuRU5EX0VWRU5ULCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgLy8gaGlkZSBjYW5jZWwgZW5kIGV2ZW50cyBvdXRzaWRlIHRyYW5zYWN0aW9uc1xuICAgICAgaWYgKHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlID09ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbicgJiYgIWlzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlmZmVyZW50VHlwZShlbnRyeSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGJvdW5kYXJ5IGV2ZW50c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSkge1xuXG4gICAgZW50cmllcyA9IGZpbHRlcihyZXBsYWNlT3B0aW9ucy5CT1VOREFSWV9FVkVOVCwgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldC5ldmVudERlZmluaXRpb24gPT0gJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJyAmJlxuICAgICAgICAgIWlzKGJ1c2luZXNzT2JqZWN0LmF0dGFjaGVkVG9SZWYsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGNhbmNlbEFjdGl2aXR5ID0gdGFyZ2V0LmNhbmNlbEFjdGl2aXR5ICE9PSBmYWxzZTtcblxuICAgICAgdmFyIGlzQ2FuY2VsQWN0aXZpdHlFcXVhbCA9IGJ1c2luZXNzT2JqZWN0LmNhbmNlbEFjdGl2aXR5ID09IGNhbmNlbEFjdGl2aXR5O1xuXG4gICAgICByZXR1cm4gZGlmZmVyZW50VHlwZShlbnRyeSkgfHwgIWRpZmZlcmVudFR5cGUoZW50cnkpICYmICFpc0NhbmNlbEFjdGl2aXR5RXF1YWw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGludGVybWVkaWF0ZSBldmVudHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JykgfHxcbiAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuSU5URVJNRURJQVRFX0VWRU5ULCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZ2F0ZXdheXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHYXRld2F5JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuR0FURVdBWSwgZGlmZmVyZW50VHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIHRyYW5zYWN0aW9uc1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVFJBTlNBQ1RJT04sIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZCBldmVudCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpc0V2ZW50U3ViUHJvY2VzcyhidXNpbmVzc09iamVjdCkgJiYgaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCkpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuRVZFTlRfU1VCX1BST0NFU1MsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlNVQlBST0NFU1NfRVhQQU5ERUQsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBjb2xsYXBzZWQgYWQgaG9jIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpBZEhvY1N1YlByb2Nlc3MnKSAmJiAhaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCkpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVEFTSywgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgdmFyIGlzVGFyZ2V0U3ViUHJvY2VzcyA9IHRhcmdldC50eXBlID09PSAnYnBtbjpTdWJQcm9jZXNzJztcblxuICAgICAgdmFyIGlzVGFyZ2V0RXhwYW5kZWQgPSB0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGlzRGlmZmVyZW50VHlwZShlbGVtZW50LCB0YXJnZXQpICYmICghaXNUYXJnZXRTdWJQcm9jZXNzIHx8IGlzVGFyZ2V0RXhwYW5kZWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBzZXF1ZW5jZSBmbG93c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNlcXVlbmNlRmxvd0VudHJpZXMoZWxlbWVudCwgcmVwbGFjZU9wdGlvbnMuU0VRVUVOQ0VfRkxPVyk7XG4gIH1cblxuICAvLyBmbG93IG5vZGVzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVEFTSywgZGlmZmVyZW50VHlwZSk7XG5cbiAgICAvLyBjb2xsYXBzZWQgU3ViUHJvY2VzcyBjYW4gbm90IGJlIHJlcGxhY2VkIHdpdGggaXRzZWxmXG4gICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgICBlbnRyaWVzID0gZmlsdGVyKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5sYWJlbCAhPT0gJ1N1YiBQcm9jZXNzIChjb2xsYXBzZWQpJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufTtcblxuXG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgaGVhZGVyIGl0ZW1zIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4gVGhpcyBpbmNsdWRlcyBidXR0b25zXG4gKiBmb3IgbXVsdGkgaW5zdGFuY2UgbWFya2VycyBhbmQgZm9yIHRoZSBhZCBob2MgbWFya2VyLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSBhIGxpc3Qgb2YgbWVudSBlbnRyeSBpdGVtc1xuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5nZXRIZWFkZXJFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBoZWFkZXJFbnRyaWVzID0gW107XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgaGVhZGVyRW50cmllcyA9IGhlYWRlckVudHJpZXMuY29uY2F0KHRoaXMuX2dldExvb3BFbnRyaWVzKGVsZW1lbnQpKTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiZcbiAgICAgICFpcyhlbGVtZW50LCAnYnBtbjpUcmFuc2FjdGlvbicpICYmXG4gICAgICAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICBoZWFkZXJFbnRyaWVzLnB1c2godGhpcy5fZ2V0QWRIb2NFbnRyeShlbGVtZW50KSk7XG4gIH1cblxuICByZXR1cm4gaGVhZGVyRW50cmllcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG1lbnUgZW50cnkgb2JqZWN0cyBmb3IgYSBnaXZlbiBlbGVtZW50IGFuZCBmaWx0ZXJzIHRoZSByZXBsYWNlT3B0aW9uc1xuICogYWNjb3JkaW5nIHRvIGEgZmlsdGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJlcGxhY2VPcHRpb25zXG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2NyZWF0ZUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlT3B0aW9ucykge1xuICB2YXIgbWVudUVudHJpZXMgPSBbXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChyZXBsYWNlT3B0aW9ucywgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHZhciBlbnRyeSA9IHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShkZWZpbml0aW9uLCBlbGVtZW50KTtcblxuICAgIG1lbnVFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9KTtcblxuICByZXR1cm4gbWVudUVudHJpZXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbWVudSBlbnRyeSBvYmplY3RzIGZvciBhIGdpdmVuIHNlcXVlbmNlIGZsb3cuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge09iamVjdH0gcmVwbGFjZU9wdGlvbnNcblxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2NyZWF0ZVNlcXVlbmNlRmxvd0VudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlT3B0aW9ucykge1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHZhciBtZW51RW50cmllcyA9IFtdO1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgbW9kZGxlID0gdGhpcy5fbW9kZGxlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHJlcGxhY2VPcHRpb25zLCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgc3dpdGNoIChlbnRyeS5hY3Rpb25OYW1lKSB7XG4gICAgY2FzZSAncmVwbGFjZS13aXRoLWRlZmF1bHQtZmxvdyc6XG4gICAgICBpZiAoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgIT09IGJ1c2luZXNzT2JqZWN0ICYmXG4gICAgICAgICAgICAoaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JykgfHxcbiAgICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkluY2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46Q29tcGxleEdhdGV3YXknKSB8fFxuICAgICAgICAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSkpIHtcblxuICAgICAgICBtZW51RW50cmllcy5wdXNoKHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShlbnRyeSwgZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LnNvdXJjZSwgeyBkZWZhdWx0OiBidXNpbmVzc09iamVjdCB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmVwbGFjZS13aXRoLWNvbmRpdGlvbmFsLWZsb3cnOlxuICAgICAgaWYgKCFidXNpbmVzc09iamVjdC5jb25kaXRpb25FeHByZXNzaW9uICYmIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSkge1xuXG4gICAgICAgIG1lbnVFbnRyaWVzLnB1c2goc2VsZi5fY3JlYXRlTWVudUVudHJ5KGVudHJ5LCBlbGVtZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgY29uZGl0aW9uRXhwcmVzc2lvbiA9IG1vZGRsZS5jcmVhdGUoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHsgYm9keTogJycgfSk7XG5cbiAgICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHsgY29uZGl0aW9uRXhwcmVzc2lvbjogY29uZGl0aW9uRXhwcmVzc2lvbiB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcblxuICAgICAgLy8gZGVmYXVsdCBmbG93c1xuICAgICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSAmJiBidXNpbmVzc09iamVjdC5jb25kaXRpb25FeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBtZW51RW50cmllcy5wdXNoKHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShlbnRyeSwgZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGNvbmRpdGlvbkV4cHJlc3Npb246IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25kaXRpb25hbCBmbG93c1xuICAgICAgaWYgKChpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkluY2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkNvbXBsZXhHYXRld2F5JykgfHxcbiAgICAgICAgICAgaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpBY3Rpdml0eScpKSAmJlxuICAgICAgICAgICBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYuZGVmYXVsdCA9PT0gYnVzaW5lc3NPYmplY3QpIHtcblxuICAgICAgICByZXR1cm4gbWVudUVudHJpZXMucHVzaChzZWxmLl9jcmVhdGVNZW51RW50cnkoZW50cnksIGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudC5zb3VyY2UsIHsgZGVmYXVsdDogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbWVudUVudHJpZXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHNpbmdsZSBtZW51IGVudHJ5IGl0ZW0uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBkZWZpbml0aW9uIGEgc2luZ2xlIHJlcGxhY2Ugb3B0aW9ucyBkZWZpbml0aW9uIG9iamVjdFxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbYWN0aW9uXSBhbiBhY3Rpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgd2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IGVudHJ5IGlzIGJlaW5nIHRyaWdnZXJlZC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG1lbnUgZW50cnkgaXRlbVxuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fY3JlYXRlTWVudUVudHJ5ID0gZnVuY3Rpb24oZGVmaW5pdGlvbiwgZWxlbWVudCwgYWN0aW9uKSB7XG4gIHZhciB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG4gIHZhciByZXBsYWNlRWxlbWVudCA9IHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50O1xuXG4gIHZhciByZXBsYWNlQWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIGRlZmluaXRpb24udGFyZ2V0KTtcbiAgfTtcblxuICBhY3Rpb24gPSBhY3Rpb24gfHwgcmVwbGFjZUFjdGlvbjtcblxuICB2YXIgbWVudUVudHJ5ID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoZGVmaW5pdGlvbi5sYWJlbCksXG4gICAgY2xhc3NOYW1lOiBkZWZpbml0aW9uLmNsYXNzTmFtZSxcbiAgICBpZDogZGVmaW5pdGlvbi5hY3Rpb25OYW1lLFxuICAgIGFjdGlvbjogYWN0aW9uXG4gIH07XG5cbiAgcmV0dXJuIG1lbnVFbnRyeTtcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCBvZiBtZW51IGl0ZW1zIGNvbnRhaW5pbmcgYnV0dG9ucyBmb3IgbXVsdGkgaW5zdGFuY2UgbWFya2Vyc1xuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2dldExvb3BFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBmdW5jdGlvbiB0b2dnbGVMb29wRW50cnkoZXZlbnQsIGVudHJ5KSB7XG4gICAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3M7XG5cbiAgICBpZiAoZW50cnkuYWN0aXZlKSB7XG4gICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzID0gc2VsZi5fbW9kZGxlLmNyZWF0ZShlbnRyeS5vcHRpb25zLmxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuXG4gICAgICBpZiAoZW50cnkub3B0aW9ucy5pc1NlcXVlbnRpYWwpIHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgPSBlbnRyeS5vcHRpb25zLmlzU2VxdWVudGlhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5fbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGxvb3BDaGFyYWN0ZXJpc3RpY3M6IGxvb3BDaGFyYWN0ZXJpc3RpY3MgfSk7XG4gIH1cblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBidXNpbmVzc09iamVjdC5sb29wQ2hhcmFjdGVyaXN0aWNzO1xuXG4gIHZhciBpc1NlcXVlbnRpYWwsXG4gICAgICBpc0xvb3AsXG4gICAgICBpc1BhcmFsbGVsO1xuXG4gIGlmIChsb29wQ2hhcmFjdGVyaXN0aWNzKSB7XG4gICAgaXNTZXF1ZW50aWFsID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG4gICAgaXNMb29wID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgPT09IHVuZGVmaW5lZDtcbiAgICBpc1BhcmFsbGVsID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgIT09IHVuZGVmaW5lZCAmJiAhbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG4gIH1cblxuXG4gIHZhciBsb29wRW50cmllcyA9IFtcbiAgICB7XG4gICAgICBpZDogJ3RvZ2dsZS1wYXJhbGxlbC1taScsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFyYWxsZWwtbWktbWFya2VyJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ1BhcmFsbGVsIE11bHRpIEluc3RhbmNlJyksXG4gICAgICBhY3RpdmU6IGlzUGFyYWxsZWwsXG4gICAgICBhY3Rpb246IHRvZ2dsZUxvb3BFbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljczogJ2JwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MnLFxuICAgICAgICBpc1NlcXVlbnRpYWw6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3RvZ2dsZS1zZXF1ZW50aWFsLW1pJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZXF1ZW50aWFsLW1pLW1hcmtlcicsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdTZXF1ZW50aWFsIE11bHRpIEluc3RhbmNlJyksXG4gICAgICBhY3RpdmU6IGlzU2VxdWVudGlhbCxcbiAgICAgIGFjdGlvbjogdG9nZ2xlTG9vcEVudHJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzOiAnYnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcycsXG4gICAgICAgIGlzU2VxdWVudGlhbDogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd0b2dnbGUtbG9vcCcsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbG9vcC1tYXJrZXInLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnTG9vcCcpLFxuICAgICAgYWN0aXZlOiBpc0xvb3AsXG4gICAgICBhY3Rpb246IHRvZ2dsZUxvb3BFbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljczogJ2JwbW46U3RhbmRhcmRMb29wQ2hhcmFjdGVyaXN0aWNzJ1xuICAgICAgfVxuICAgIH1cbiAgXTtcbiAgcmV0dXJuIGxvb3BFbnRyaWVzO1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgbWVudSBpdGVtcyBjb250YWluaW5nIGEgYnV0dG9uIGZvciB0aGUgYWQgaG9jIG1hcmtlclxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhIG1lbnUgaXRlbVxuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fZ2V0QWRIb2NFbnRyeSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgdmFyIGlzQWRIb2MgPSBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJyk7XG5cbiAgdmFyIHJlcGxhY2VFbGVtZW50ID0gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQ7XG5cbiAgdmFyIGFkSG9jRW50cnkgPSB7XG4gICAgaWQ6ICd0b2dnbGUtYWRob2MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1hZC1ob2MtbWFya2VyJyxcbiAgICB0aXRsZTogdHJhbnNsYXRlKCdBZC1ob2MnKSxcbiAgICBhY3RpdmU6IGlzQWRIb2MsXG4gICAgYWN0aW9uOiBmdW5jdGlvbihldmVudCwgZW50cnkpIHtcbiAgICAgIGlmIChpc0FkSG9jKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRWxlbWVudChlbGVtZW50LCB7IHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnIH0sIHtcbiAgICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgICBsYXlvdXRDb25uZWN0aW9uOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRWxlbWVudChlbGVtZW50LCB7IHR5cGU6ICdicG1uOkFkSG9jU3ViUHJvY2VzcycgfSwge1xuICAgICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICAgIGxheW91dENvbm5lY3Rpb246IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gYWRIb2NFbnRyeTtcbn07XG4iLCJpbXBvcnQgUG9wdXBNZW51TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUnO1xuaW1wb3J0IFJlcGxhY2VNb2R1bGUgZnJvbSAnLi4vcmVwbGFjZSc7XG5cbmltcG9ydCBSZXBsYWNlTWVudVByb3ZpZGVyIGZyb20gJy4vUmVwbGFjZU1lbnVQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFBvcHVwTWVudU1vZHVsZSxcbiAgICBSZXBsYWNlTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdyZXBsYWNlTWVudVByb3ZpZGVyJyBdLFxuICByZXBsYWNlTWVudVByb3ZpZGVyOiBbICd0eXBlJywgUmVwbGFjZU1lbnVQcm92aWRlciBdXG59OyIsImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUsIGlmIGFuIGVsZW1lbnQgaXMgZnJvbSBhIGRpZmZlcmVudCB0eXBlXG4gKiB0aGFuIGEgdGFyZ2V0IGRlZmluaXRpb24uIFRha2VzIGludG8gYWNjb3VudCB0aGUgdHlwZSxcbiAqIGV2ZW50IGRlZmluaXRpb24gdHlwZSBhbmQgdHJpZ2dlcmVkQnlFdmVudCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZmVyZW50VHlwZShlbGVtZW50KSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgICBldmVudERlZmluaXRpb24gPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zICYmIGJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnNbMF07XG5cbiAgICB2YXIgaXNUeXBlRXF1YWwgPSBidXNpbmVzc09iamVjdC4kdHlwZSA9PT0gdGFyZ2V0LnR5cGU7XG5cbiAgICB2YXIgaXNFdmVudERlZmluaXRpb25FcXVhbCA9IChcbiAgICAgIChldmVudERlZmluaXRpb24gJiYgZXZlbnREZWZpbml0aW9uLiR0eXBlKSA9PT0gdGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGVcbiAgICApO1xuXG4gICAgdmFyIGlzVHJpZ2dlcmVkQnlFdmVudEVxdWFsID0gKFxuICAgICAgYnVzaW5lc3NPYmplY3QudHJpZ2dlcmVkQnlFdmVudCA9PT0gdGFyZ2V0LnRyaWdnZXJlZEJ5RXZlbnRcbiAgICApO1xuXG4gICAgdmFyIGlzRXhwYW5kZWRFcXVhbCA9IChcbiAgICAgIHRhcmdldC5pc0V4cGFuZGVkID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRhcmdldC5pc0V4cGFuZGVkID09PSBpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gIWlzVHlwZUVxdWFsIHx8ICFpc0V2ZW50RGVmaW5pdGlvbkVxdWFsIHx8ICFpc1RyaWdnZXJlZEJ5RXZlbnRFcXVhbCB8fCAhaXNFeHBhbmRlZEVxdWFsO1xuICB9O1xufSIsImltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgY3NzRXNjYXBlIGZyb20gJ2Nzcy5lc2NhcGUnO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBxdWVyeSBhcyBkb21RdWVyeVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgYXR0ciBhcyBzdmdBdHRyXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVwbGFjZVByZXZpZXcoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgZWxlbWVudEZhY3RvcnksXG4gICAgY2FudmFzLCBwcmV2aWV3U3VwcG9ydCkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgdmlzdWFscyBvZiBhbGwgZWxlbWVudHMgaW4gdGhlIGNvbnRleHQgd2hpY2ggY2FuIGJlIHJlcGxhY2VkXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVZpc3VhbChjb250ZXh0KSB7XG5cbiAgICB2YXIgcmVwbGFjZW1lbnRzID0gY29udGV4dC5jYW5FeGVjdXRlLnJlcGxhY2VtZW50cztcblxuICAgIGZvckVhY2gocmVwbGFjZW1lbnRzLCBmdW5jdGlvbihyZXBsYWNlbWVudCkge1xuXG4gICAgICB2YXIgaWQgPSByZXBsYWNlbWVudC5vbGRFbGVtZW50SWQ7XG5cbiAgICAgIHZhciBuZXdFbGVtZW50ID0ge1xuICAgICAgICB0eXBlOiByZXBsYWNlbWVudC5uZXdFbGVtZW50VHlwZVxuICAgICAgfTtcblxuICAgICAgLy8gaWYgdGhlIHZpc3VhbCBvZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IHJlcGxhY2VkXG4gICAgICBpZiAoY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHNbaWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGlkKTtcblxuICAgICAgYXNzaWduKG5ld0VsZW1lbnQsIHsgeDogZWxlbWVudC54LCB5OiBlbGVtZW50LnkgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIHRlbXBvcmFyeSBzaGFwZVxuICAgICAgdmFyIHRlbXBTaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKG5ld0VsZW1lbnQpO1xuXG4gICAgICBjYW52YXMuYWRkU2hhcGUodGVtcFNoYXBlLCBlbGVtZW50LnBhcmVudCk7XG5cbiAgICAgIC8vIHNlbGVjdCB0aGUgb3JpZ2luYWwgU1ZHIGVsZW1lbnQgcmVsYXRlZCB0byB0aGUgZWxlbWVudCBhbmQgaGlkZSBpdFxuICAgICAgdmFyIGdmeCA9IGRvbVF1ZXJ5KCdbZGF0YS1lbGVtZW50LWlkPVwiJyArIGNzc0VzY2FwZShlbGVtZW50LmlkKSArICdcIl0nLCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICAgIGlmIChnZngpIHtcbiAgICAgICAgc3ZnQXR0cihnZngsIHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBjbG9uZSB0aGUgZ2Z4IG9mIHRoZSB0ZW1wb3Jhcnkgc2hhcGUgYW5kIGFkZCBpdCB0byB0aGUgZHJhZyBncm91cFxuICAgICAgdmFyIGRyYWdnZXIgPSBwcmV2aWV3U3VwcG9ydC5hZGREcmFnZ2VyKHRlbXBTaGFwZSwgY29udGV4dC5kcmFnR3JvdXApO1xuXG4gICAgICBjb250ZXh0LnZpc3VhbFJlcGxhY2VtZW50c1tpZF0gPSBkcmFnZ2VyO1xuXG4gICAgICBjYW52YXMucmVtb3ZlU2hhcGUodGVtcFNoYXBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2aXN1YWxzIG9mIHRoZSBwcmV2aW91c2x5IHJlcGxhY2VkIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gcmVzdG9yZVZpc3VhbChjb250ZXh0KSB7XG5cbiAgICB2YXIgdmlzdWFsUmVwbGFjZW1lbnRzID0gY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHM7XG5cbiAgICBmb3JFYWNoKHZpc3VhbFJlcGxhY2VtZW50cywgZnVuY3Rpb24oZHJhZ2dlciwgaWQpIHtcblxuICAgICAgdmFyIG9yaWdpbmFsR2Z4ID0gZG9tUXVlcnkoJ1tkYXRhLWVsZW1lbnQtaWQ9XCInICsgY3NzRXNjYXBlKGlkKSArICdcIl0nLCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICAgIGlmIChvcmlnaW5hbEdmeCkge1xuICAgICAgICBzdmdBdHRyKG9yaWdpbmFsR2Z4LCB7IGRpc3BsYXk6ICdpbmxpbmUnIH0pO1xuICAgICAgfVxuXG4gICAgICBkcmFnZ2VyLnJlbW92ZSgpO1xuXG4gICAgICBpZiAodmlzdWFsUmVwbGFjZW1lbnRzW2lkXSkge1xuICAgICAgICBkZWxldGUgdmlzdWFsUmVwbGFjZW1lbnRzW2lkXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGU7XG5cbiAgICBpZiAoIWNvbnRleHQudmlzdWFsUmVwbGFjZW1lbnRzKSB7XG4gICAgICBjb250ZXh0LnZpc3VhbFJlcGxhY2VtZW50cyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChjYW5FeGVjdXRlICYmIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzKSB7XG4gICAgICByZXBsYWNlVmlzdWFsKGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlVmlzdWFsKGNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG59XG5cbkJwbW5SZXBsYWNlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07XG5cbmluaGVyaXRzKEJwbW5SZXBsYWNlUHJldmlldywgQ29tbWFuZEludGVyY2VwdG9yKTsiLCJpbXBvcnQgUHJldmlld1N1cHBvcnRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcHJldmlldy1zdXBwb3J0JztcblxuaW1wb3J0IEJwbW5SZXBsYWNlUHJldmlldyBmcm9tICcuL0JwbW5SZXBsYWNlUHJldmlldyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBQcmV2aWV3U3VwcG9ydE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtblJlcGxhY2VQcmV2aWV3JyBdLFxuICBicG1uUmVwbGFjZVByZXZpZXc6IFsgJ3R5cGUnLCBCcG1uUmVwbGFjZVByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIHBpY2ssXG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBpc1VuZGVmaW5lZCxcbiAgaGFzXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2Vzc1xufSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7IGdldFByb3BlcnR5TmFtZXMgfSBmcm9tICcuLi9jb3B5LXBhc3RlL01vZGRsZUNvcHknO1xuXG5mdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCwgcHJvcGVydGllcykge1xuICBpZiAoIWlzQXJyYXkocHJvcGVydGllcykpIHtcbiAgICBwcm9wZXJ0aWVzID0gWyBwcm9wZXJ0aWVzIF07XG4gIH1cblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChzb3VyY2VbcHJvcGVydHldKSkge1xuICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9KTtcbn1cblxudmFyIENVU1RPTV9QUk9QRVJUSUVTID0gW1xuICAnY2FuY2VsQWN0aXZpdHknLFxuICAnaW5zdGFudGlhdGUnLFxuICAnZXZlbnRHYXRld2F5VHlwZScsXG4gICd0cmlnZ2VyZWRCeUV2ZW50JyxcbiAgJ2lzSW50ZXJydXB0aW5nJ1xuXTtcblxuXG5mdW5jdGlvbiB0b2dnZWxpbmcoZWxlbWVudCwgdGFyZ2V0KSB7XG5cbiAgdmFyIG9sZENvbGxhcHNlZCA9IChcbiAgICBlbGVtZW50ICYmIGhhcyhlbGVtZW50LCAnY29sbGFwc2VkJykgPyBlbGVtZW50LmNvbGxhcHNlZCA6ICFpc0V4cGFuZGVkKGVsZW1lbnQpXG4gICk7XG5cbiAgdmFyIHRhcmdldENvbGxhcHNlZDtcblxuICBpZiAodGFyZ2V0ICYmIChoYXModGFyZ2V0LCAnY29sbGFwc2VkJykgfHwgaGFzKHRhcmdldCwgJ2lzRXhwYW5kZWQnKSkpIHtcblxuICAgIC8vIHByb3BlcnR5IGlzIGV4cGxpY2l0bHkgc2V0IHNvIHVzZSBpdFxuICAgIHRhcmdldENvbGxhcHNlZCA9IChcbiAgICAgIGhhcyh0YXJnZXQsICdjb2xsYXBzZWQnKSA/IHRhcmdldC5jb2xsYXBzZWQgOiAhdGFyZ2V0LmlzRXhwYW5kZWRcbiAgICApO1xuICB9IGVsc2Uge1xuXG4gICAgLy8ga2VlcCBvbGQgc3RhdGVcbiAgICB0YXJnZXRDb2xsYXBzZWQgPSBvbGRDb2xsYXBzZWQ7XG4gIH1cblxuICBpZiAob2xkQ29sbGFwc2VkICE9PSB0YXJnZXRDb2xsYXBzZWQpIHtcbiAgICBlbGVtZW50LmNvbGxhcHNlZCA9IG9sZENvbGxhcHNlZDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgdGFrZXMgY2FyZSBvZiByZXBsYWNpbmcgQlBNTiBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVwbGFjZShcbiAgICBicG1uRmFjdG9yeSxcbiAgICBlbGVtZW50RmFjdG9yeSxcbiAgICBtb2RkbGVDb3B5LFxuICAgIG1vZGVsaW5nLFxuICAgIHJlcGxhY2UsXG4gICAgc2VsZWN0aW9uXG4pIHtcblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBuZXcgYnVzaW5lc3Mgb2JqZWN0IGZvciB0aGUgcmVwbGFjZW1lbnQgZWxlbWVudFxuICAgKiBhbmQgdHJpZ2dlcnMgdGhlIHJlcGxhY2Ugb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IFtoaW50c11cbiAgICpcbiAgICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIHRhcmdldCwgaGludHMpIHtcblxuICAgIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgICB2YXIgdHlwZSA9IHRhcmdldC50eXBlLFxuICAgICAgICBvbGRCdXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBpZiAoaXNTdWJQcm9jZXNzKG9sZEJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdicG1uOlN1YlByb2Nlc3MnKSB7XG4gICAgICAgIGlmICh0b2dnZWxpbmcoZWxlbWVudCwgdGFyZ2V0KSkge1xuXG4gICAgICAgICAgLy8gZXhwYW5kaW5nIG9yIGNvbGxhcHNpbmcgcHJvY2Vzc1xuICAgICAgICAgIG1vZGVsaW5nLnRvZ2dsZUNvbGxhcHNlKGVsZW1lbnQpO1xuXG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3QnVzaW5lc3NPYmplY3QgPSBicG1uRmFjdG9yeS5jcmVhdGUodHlwZSk7XG5cbiAgICB2YXIgbmV3RWxlbWVudCA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBidXNpbmVzc09iamVjdDogbmV3QnVzaW5lc3NPYmplY3RcbiAgICB9O1xuXG4gICAgdmFyIGVsZW1lbnRQcm9wcyA9IGdldFByb3BlcnR5TmFtZXMob2xkQnVzaW5lc3NPYmplY3QuJGRlc2NyaXB0b3IpLFxuICAgICAgICBuZXdFbGVtZW50UHJvcHMgPSBnZXRQcm9wZXJ0eU5hbWVzKG5ld0J1c2luZXNzT2JqZWN0LiRkZXNjcmlwdG9yLCB0cnVlKSxcbiAgICAgICAgY29weVByb3BzID0gaW50ZXJzZWN0aW9uKGVsZW1lbnRQcm9wcywgbmV3RWxlbWVudFByb3BzKTtcblxuICAgIC8vIGluaXRpYWxpemUgc3BlY2lhbCBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGFyZ2V0IGRlZmluaXRpb25cbiAgICBhc3NpZ24obmV3QnVzaW5lc3NPYmplY3QsIHBpY2sodGFyZ2V0LCBDVVNUT01fUFJPUEVSVElFUykpO1xuXG4gICAgdmFyIHByb3BlcnRpZXMgPSBmaWx0ZXIoY29weVByb3BzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHtcblxuICAgICAgLy8gY29weWluZyBldmVudCBkZWZpbml0aW9ucywgdW5sZXNzIHdlIHJlcGxhY2VcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdldmVudERlZmluaXRpb25zJykge1xuICAgICAgICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmV0YWluIGxvb3AgY2hhcmFjdGVyaXN0aWNzIGlmIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgLy8gaXMgbm90IGFuIGV2ZW50IHN1YiBwcm9jZXNzXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnbG9vcENoYXJhY3RlcmlzdGljcycpIHtcbiAgICAgICAgcmV0dXJuICFpc0V2ZW50U3ViUHJvY2VzcyhuZXdCdXNpbmVzc09iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNvIHRoZSBhcHBsaWVkIHByb3BlcnRpZXMgZnJvbSAndGFyZ2V0JyBkb24ndCBnZXQgbG9zdFxuICAgICAgaWYgKG5ld0J1c2luZXNzT2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAncHJvY2Vzc1JlZicgJiYgdGFyZ2V0LmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3RyaWdnZXJlZEJ5RXZlbnQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBuZXdCdXNpbmVzc09iamVjdCA9IG1vZGRsZUNvcHkuY29weUVsZW1lbnQoXG4gICAgICBvbGRCdXNpbmVzc09iamVjdCxcbiAgICAgIG5ld0J1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllc1xuICAgICk7XG5cbiAgICAvLyBpbml0aWFsaXplIGN1c3RvbSBCUE1OIGV4dGVuc2lvbnNcbiAgICBpZiAodGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGUpIHtcblxuICAgICAgLy8gb25seSBpbml0aWFsaXplIHdpdGggbmV3IGV2ZW50RGVmaW5pdGlvblxuICAgICAgLy8gaWYgd2UgZGlkIG5vdCBzZXQgYW4gZXZlbnQgZGVmaW5pdGlvbiB5ZXQsXG4gICAgICAvLyBpLmUuIGJlY2F1c2Ugd2UgY29waWVkIGl0XG4gICAgICBpZiAoIWhhc0V2ZW50RGVmaW5pdGlvbihuZXdCdXNpbmVzc09iamVjdCwgdGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGUpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuZXZlbnREZWZpbml0aW9uVHlwZSA9IHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlO1xuICAgICAgICBuZXdFbGVtZW50LmV2ZW50RGVmaW5pdGlvbkF0dHJzID0gdGFyZ2V0LmV2ZW50RGVmaW5pdGlvbkF0dHJzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcyhvbGRCdXNpbmVzc09iamVjdCwgJ2JwbW46QWN0aXZpdHknKSkge1xuXG4gICAgICBpZiAoaXNTdWJQcm9jZXNzKG9sZEJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgICAgIC8vIG5vIHRvZ2dlbGluZywgc28ga2VlcCBvbGQgc3RhdGVcbiAgICAgICAgbmV3RWxlbWVudC5pc0V4cGFuZGVkID0gaXNFeHBhbmRlZChvbGRCdXNpbmVzc09iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVsc2UgaWYgcHJvcGVydHkgaXMgZXhwbGljaXRseSBzZXQsIHVzZSBpdFxuICAgICAgZWxzZSBpZiAodGFyZ2V0ICYmIGhhcyh0YXJnZXQsICdpc0V4cGFuZGVkJykpIHtcbiAgICAgICAgbmV3RWxlbWVudC5pc0V4cGFuZGVkID0gdGFyZ2V0LmlzRXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IG5lZWQgYWxzbyB0byByZXNwZWN0IG1pbi9tYXggU2l6ZVxuICAgICAgLy8gY29weSBzaXplLCBmcm9tIGFuIGV4cGFuZGVkIHN1YnByb2Nlc3MgdG8gYW4gZXhwYW5kZWQgYWx0ZXJuYXRpdmUgc3VicHJvY2Vzc1xuICAgICAgLy8gZXhjZXB0IGJwbW46VGFzaywgYmVjYXVzZSBUYXNrIGlzIGFsd2F5cyBleHBhbmRlZFxuICAgICAgaWYgKChpc0V4cGFuZGVkKG9sZEJ1c2luZXNzT2JqZWN0KSAmJiAhaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOlRhc2snKSkgJiYgbmV3RWxlbWVudC5pc0V4cGFuZGVkKSB7XG4gICAgICAgIG5ld0VsZW1lbnQud2lkdGggPSBlbGVtZW50LndpZHRoO1xuICAgICAgICBuZXdFbGVtZW50LmhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBub3QgZXhwYW5kaW5nIHN1YiBwcm9jZXNzXG4gICAgaWYgKGlzU3ViUHJvY2VzcyhvbGRCdXNpbmVzc09iamVjdCkgJiYgIWlzU3ViUHJvY2VzcyhuZXdCdXNpbmVzc09iamVjdCkpIHtcbiAgICAgIGhpbnRzLm1vdmVDaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRyYW5zZm9ybSBjb2xsYXBzZWQvZXhwYW5kZWQgcG9vbHNcbiAgICBpZiAoaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgICAgLy8gY3JlYXRlIGV4cGFuZGVkIHBvb2xcbiAgICAgIGlmICh0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBuZXdCdXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlByb2Nlc3MnKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuIHdoZW4gdHJhbnNmb3JtaW5nIHRvIGNvbGxhcHNlZCBwb29sXG4gICAgICAgIGhpbnRzLm1vdmVDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBhcHBseSBzYW1lIHdpZHRoIGFuZCBkZWZhdWx0IGhlaWdodFxuICAgICAgbmV3RWxlbWVudC53aWR0aCA9IGVsZW1lbnQud2lkdGg7XG4gICAgICBuZXdFbGVtZW50LmhlaWdodCA9IGVsZW1lbnRGYWN0b3J5Ll9nZXREZWZhdWx0U2l6ZShuZXdCdXNpbmVzc09iamVjdCkuaGVpZ2h0O1xuICAgIH1cblxuICAgIG5ld0J1c2luZXNzT2JqZWN0Lm5hbWUgPSBvbGRCdXNpbmVzc09iamVjdC5uYW1lO1xuXG4gICAgLy8gcmV0YWluIGRlZmF1bHQgZmxvdydzIHJlZmVyZW5jZSBiZXR3ZWVuIGluY2x1c2l2ZSA8LT4gZXhjbHVzaXZlIGdhdGV3YXlzIGFuZCBhY3Rpdml0aWVzXG4gICAgaWYgKFxuICAgICAgaXNBbnkob2xkQnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICdicG1uOkluY2x1c2l2ZUdhdGV3YXknLFxuICAgICAgICAnYnBtbjpBY3Rpdml0eSdcbiAgICAgIF0pICYmXG4gICAgICBpc0FueShuZXdCdXNpbmVzc09iamVjdCwgW1xuICAgICAgICAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JyxcbiAgICAgICAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICdicG1uOkFjdGl2aXR5J1xuICAgICAgXSlcbiAgICApIHtcbiAgICAgIG5ld0J1c2luZXNzT2JqZWN0LmRlZmF1bHQgPSBvbGRCdXNpbmVzc09iamVjdC5kZWZhdWx0O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRhcmdldC5ob3N0ICYmXG4gICAgICAhaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgICAgaXMobmV3QnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKVxuICAgICkge1xuICAgICAgbmV3RWxlbWVudC5ob3N0ID0gdGFyZ2V0Lmhvc3Q7XG4gICAgfVxuXG4gICAgbmV3RWxlbWVudC5kaSA9IHt9O1xuXG4gICAgLy8gZmlsbCBhbmQgc3Ryb2tlIHdpbGwgYmUgc2V0IHRvIERJXG4gICAgY29weVByb3BlcnRpZXMob2xkQnVzaW5lc3NPYmplY3QuZGksIG5ld0VsZW1lbnQuZGksIFtcbiAgICAgICdmaWxsJyxcbiAgICAgICdzdHJva2UnXG4gICAgXSk7XG5cbiAgICBuZXdFbGVtZW50ID0gcmVwbGFjZS5yZXBsYWNlRWxlbWVudChlbGVtZW50LCBuZXdFbGVtZW50LCBoaW50cyk7XG5cbiAgICBpZiAoaGludHMuc2VsZWN0ICE9PSBmYWxzZSkge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChuZXdFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxuXG4gIHRoaXMucmVwbGFjZUVsZW1lbnQgPSByZXBsYWNlRWxlbWVudDtcbn1cblxuQnBtblJlcGxhY2UuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ21vZGRsZUNvcHknLFxuICAnbW9kZWxpbmcnLFxuICAncmVwbGFjZScsXG4gICdzZWxlY3Rpb24nXG5dO1xuXG5cbmZ1bmN0aW9uIGlzU3ViUHJvY2Vzcyhibykge1xuICByZXR1cm4gaXMoYm8sICdicG1uOlN1YlByb2Nlc3MnKTtcbn1cblxuZnVuY3Rpb24gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHR5cGUpIHtcblxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gdHlwZSAmJiBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKS5zb21lKGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXMoZGVmaW5pdGlvbiwgdHlwZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXB1dGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGExLCBhMikge1xuICByZXR1cm4gYTEuZmlsdGVyKGZ1bmN0aW9uKGVsKSB7XG4gICAgcmV0dXJuIGEyLmluZGV4T2YoZWwpICE9PSAtMTtcbiAgfSk7XG59XG4iLCJleHBvcnQgdmFyIFNUQVJUX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtaW50ZXJtZWRpYXRlLXRocm93aW5nJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10aW1lci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIFN0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgU1RBUlRfRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1pbnRlcm1lZGlhdGUtdGhyb3dpbmcnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIElOVEVSTUVESUFURV9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1pbnRlcm1lZGlhdGUtY2F0Y2gnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdMaW5rIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1saW5rLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1saW5rJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicsXG4gICAgICBldmVudERlZmluaXRpb25BdHRyczoge1xuICAgICAgICBuYW1lOiAnJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTGluayBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbGluay1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbGluaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nLFxuICAgICAgZXZlbnREZWZpbml0aW9uQXR0cnM6IHtcbiAgICAgICAgbmFtZTogJydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEVORF9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VzY2FsYXRpb24gRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Vycm9yIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtZXJyb3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDYW5jZWwgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtY2FuY2VsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGVybWluYXRlIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10ZXJtaW5hdGUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LXRlcm1pbmF0ZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUZXJtaW5hdGVFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEdBVEVXQVkgPSBbXG4gIHtcbiAgICBsYWJlbDogJ0V4Y2x1c2l2ZSBHYXRld2F5JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV4Y2x1c2l2ZS1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS14b3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BhcmFsbGVsIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZ2F0ZXdheScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWdhdGV3YXktcGFyYWxsZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFyYWxsZWxHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW5jbHVzaXZlIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtaW5jbHVzaXZlLWdhdGV3YXknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1nYXRld2F5LW9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkluY2x1c2l2ZUdhdGV3YXknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wbGV4IEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGxleC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1jb21wbGV4JyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkNvbXBsZXhHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgYmFzZWQgR2F0ZXdheScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ldmVudC1iYXNlZC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1ldmVudGJhc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JyxcbiAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSxcbiAgICAgIGV2ZW50R2F0ZXdheVR5cGU6ICdFeGNsdXNpdmUnXG4gICAgfVxuICB9XG5cbiAgLy8gR2F0ZXdheXMgZGVhY3RpdmF0ZWQgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9pc3N1ZXMvMTk0XG4gIC8vIHtcbiAgLy8gICBsYWJlbDogJ0V2ZW50IGJhc2VkIGluc3RhbnRpYXRpbmcgR2F0ZXdheScsXG4gIC8vICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leGNsdXNpdmUtZXZlbnQtYmFzZWQtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV4Y2x1c2l2ZS1ldmVudC1iYXNlZCcsXG4gIC8vICAgdGFyZ2V0OiB7XG4gIC8vICAgICB0eXBlOiAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSdcbiAgLy8gICB9LFxuICAvLyAgIG9wdGlvbnM6IHtcbiAgLy8gICAgIGJ1c2luZXNzT2JqZWN0OiB7IGluc3RhbnRpYXRlOiB0cnVlLCBldmVudEdhdGV3YXlUeXBlOiAnRXhjbHVzaXZlJyB9XG4gIC8vICAgfVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgbGFiZWw6ICdQYXJhbGxlbCBFdmVudCBiYXNlZCBpbnN0YW50aWF0aW5nIEdhdGV3YXknLFxuICAvLyAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZXZlbnQtYmFzZWQtaW5zdGFudGlhdGUtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXBhcmFsbGVsLWV2ZW50LWJhc2VkLWluc3RhbnRpYXRlLWdhdGV3YXknLFxuICAvLyAgIHRhcmdldDoge1xuICAvLyAgICAgdHlwZTogJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknXG4gIC8vICAgfSxcbiAgLy8gICBvcHRpb25zOiB7XG4gIC8vICAgICBidXNpbmVzc09iamVjdDogeyBpbnN0YW50aWF0ZTogdHJ1ZSwgZXZlbnRHYXRld2F5VHlwZTogJ1BhcmFsbGVsJyB9XG4gIC8vICAgfVxuICAvLyB9XG5dO1xuXG5leHBvcnQgdmFyIFNVQlBST0NFU1NfRVhQQU5ERUQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1RyYW5zYWN0aW9uJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRyYW5zYWN0aW9uJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhbnNhY3Rpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VHJhbnNhY3Rpb24nLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgU3ViIFByb2Nlc3MnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXZlbnQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV2ZW50LXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICB0cmlnZ2VyZWRCeUV2ZW50OiB0cnVlLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3ViIFByb2Nlc3MgKGNvbGxhcHNlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWNvbGxhcHNlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRSQU5TQUNUSU9OID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3VicHJvY2Vzcy1leHBhbmRlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0V2ZW50IFN1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV2ZW50LXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1ldmVudC1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgdHJpZ2dlcmVkQnlFdmVudDogdHJ1ZSxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVHJhbnNhY3Rpb24nLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdHJhbnNhY3Rpb24nLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi10cmFuc2FjdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpUcmFuc2FjdGlvbicsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRBU0sgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1Rhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXRhc2snLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlbmQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZW5kLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZW5kJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlNlbmRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmVjZWl2ZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXJlY2VpdmUtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXJlY2VpdmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UmVjZWl2ZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdVc2VyIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdXNlci10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdXNlcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpVc2VyVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hbnVhbCBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1hbnVhbC10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbWFudWFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOk1hbnVhbFRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCdXNpbmVzcyBSdWxlIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcnVsZS10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tYnVzaW5lc3MtcnVsZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2VydmljZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNlcnZpY2UtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNlcnZpY2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2VydmljZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTY3JpcHQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zY3JpcHQtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNjcmlwdCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTY3JpcHRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FsbCBBY3Rpdml0eScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jYWxsLWFjdGl2aXR5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY2FsbC1hY3Rpdml0eScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcyAoY29sbGFwc2VkKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb2xsYXBzZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtY29sbGFwc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzIChleHBhbmRlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXhwYW5kZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEJPVU5EQVJZX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10aW1lci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1lcnJvcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FuY2VsIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jYW5jZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29tcGVuc2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctbWVzc2FnZS1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctdGltZXItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW5vbi1pbnRlcnJ1cHRpbmctZXNjYWxhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nLFxuICAgICAgY2FuY2VsQWN0aXZpdHk6IGZhbHNlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1jb25kaXRpb25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1NfU1RBUlRfRVZFTlQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWVycm9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXRpbWVyLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbi1pbnRlcnJ1cHRpbmctc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgU0VRVUVOQ0VfRkxPVyA9IFtcbiAge1xuICAgIGxhYmVsOiAnU2VxdWVuY2UgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZXF1ZW5jZS1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRGVmYXVsdCBGbG93JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWRlZmF1bHQtZmxvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWRlZmF1bHQtZmxvdydcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29uZGl0aW9uYWwtZmxvdydcbiAgfVxuXTtcblxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnRXhwYW5kZWQgUG9vbCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leHBhbmRlZC1wb29sJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFydGljaXBhbnQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29sbGFwc2VkIFBvb2wnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXBvb2wnLFxuXG4gICAgLy8gVE9ETyhAamFuc3R1ZW1tZWwpOiBtYXliZSBkZXNpZ24gbmV3IGljb25cbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfVxuXTtcbiIsImltcG9ydCBDb3B5UGFzdGVNb2R1bGUgZnJvbSAnLi4vY29weS1wYXN0ZSc7XG5pbXBvcnQgUmVwbGFjZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcblxuaW1wb3J0IEJwbW5SZXBsYWNlIGZyb20gJy4vQnBtblJlcGxhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29weVBhc3RlTW9kdWxlLFxuICAgIFJlcGxhY2VNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlXG4gIF0sXG4gIGJwbW5SZXBsYWNlOiBbICd0eXBlJywgQnBtblJlcGxhY2UgXVxufTtcbiIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0UGFyZW50LFxuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzTGFiZWxcbn0gZnJvbSAnLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2VzcyxcbiAgaXNJbnRlcnJ1cHRpbmcsXG4gIGhhc0Vycm9yRXZlbnREZWZpbml0aW9uLFxuICBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLFxuICBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IFJ1bGVQcm92aWRlciBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9SdWxlUHJvdmlkZXInO1xuXG5pbXBvcnQge1xuICBnZXRCb3VuZGFyeUF0dGFjaG1lbnQgYXMgaXNCb3VuZGFyeUF0dGFjaG1lbnRcbn0gZnJvbSAnLi4vc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIG1vZGVsaW5nIHJ1bGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblJ1bGVzKGV2ZW50QnVzKSB7XG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcbn1cblxuaW5oZXJpdHMoQnBtblJ1bGVzLCBSdWxlUHJvdmlkZXIpO1xuXG5CcG1uUnVsZXMuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uc3RhcnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGNhblN0YXJ0Q29ubmVjdGlvbihzb3VyY2UpO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgdGFyZ2V0UGFyZW50ID0gaGludHMudGFyZ2V0UGFyZW50LFxuICAgICAgICB0YXJnZXRBdHRhY2ggPSBoaW50cy50YXJnZXRBdHRhY2g7XG5cbiAgICAvLyBkb24ndCBhbGxvdyBpbmNvbWluZyBjb25uZWN0aW9ucyBvblxuICAgIC8vIG5ld2x5IGNyZWF0ZWQgYm91bmRhcnkgZXZlbnRzXG4gICAgLy8gdG8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKHRhcmdldEF0dGFjaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IHNldCB0YXJnZXQgcGFyZW50IGZvciBzY29waW5nXG4gICAgLy8gY2hlY2tzIHRvIHdvcmtcbiAgICBpZiAodGFyZ2V0UGFyZW50KSB7XG4gICAgICB0YXJnZXQucGFyZW50ID0gdGFyZ2V0UGFyZW50O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gICAgfSBmaW5hbGx5IHtcblxuICAgICAgLy8gdW5zZXQgdGVtcG9yYXJ5IHRhcmdldCBwYXJlbnRcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQpIHtcbiAgICAgICAgdGFyZ2V0LnBhcmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBjYW5Db25uZWN0KHNvdXJjZSwgdGFyZ2V0LCBjb25uZWN0aW9uKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogY29udGV4dC5jb25uZWN0aW9uLnR5cGVcbiAgICB9O1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgcmV0dXJuIGNhblJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcG9zaXRpb24gPSBjb250ZXh0LnBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBldmVyeShlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gY2FuQ29ubmVjdChlbGVtZW50LnNvdXJjZSwgZWxlbWVudC50YXJnZXQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5ob3N0KSB7XG4gICAgICAgIHJldHVybiBjYW5BdHRhY2goZWxlbWVudCwgZWxlbWVudC5ob3N0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYW5DcmVhdGUoZWxlbWVudCwgdGFyZ2V0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoaXMuYWRkUnVsZSgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIHBvc2l0aW9uID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIHJldHVybiBjYW5BdHRhY2goc2hhcGVzLCB0YXJnZXQsIG51bGwsIHBvc2l0aW9uKSB8fFxuICAgICAgICAgICBjYW5SZXBsYWNlKHNoYXBlcywgdGFyZ2V0LCBwb3NpdGlvbikgfHxcbiAgICAgICAgICAgY2FuTW92ZShzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pIHx8XG4gICAgICAgICAgIGNhbkluc2VydChzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2FuQ3JlYXRlKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgY29udGV4dC5zb3VyY2UsXG4gICAgICBjb250ZXh0LnBvc2l0aW9uXG4gICAgKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdzaGFwZS5hdHRhY2gnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICByZXR1cm4gY2FuQXR0YWNoKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgbnVsbCxcbiAgICAgIGNvbnRleHQucG9zaXRpb25cbiAgICApO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2VsZW1lbnQuY29weScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgcmV0dXJuIGNhbkNvcHkoZWxlbWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn07XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29ubmVjdE1lc3NhZ2VGbG93ID0gY2FuQ29ubmVjdE1lc3NhZ2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3cgPSBjYW5Db25uZWN0U2VxdWVuY2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24gPSBjYW5Db25uZWN0RGF0YUFzc29jaWF0aW9uO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RBc3NvY2lhdGlvbiA9IGNhbkNvbm5lY3RBc3NvY2lhdGlvbjtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Nb3ZlID0gY2FuTW92ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5BdHRhY2ggPSBjYW5BdHRhY2g7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuUmVwbGFjZSA9IGNhblJlcGxhY2U7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuRHJvcCA9IGNhbkRyb3A7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuSW5zZXJ0ID0gY2FuSW5zZXJ0O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNyZWF0ZSA9IGNhbkNyZWF0ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Db25uZWN0ID0gY2FuQ29ubmVjdDtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5SZXNpemUgPSBjYW5SZXNpemU7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29weSA9IGNhbkNvcHk7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHJ1bGUgY2hlY2tpbmdcbiAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiBnaXZlbiBlbGVtZW50IGNhbiBiZSB1c2VkIGZvciBzdGFydGluZyBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IHNvdXJjZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY2FuU3RhcnRDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgaWYgKG5vbkV4aXN0aW5nT3JMYWJlbChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpGbG93Tm9kZScsXG4gICAgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJyxcbiAgICAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJyxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnLFxuICAgICdicG1uOkdyb3VwJ1xuICBdKTtcbn1cblxuZnVuY3Rpb24gbm9uRXhpc3RpbmdPckxhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFlbGVtZW50IHx8IGlzTGFiZWwoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuXG5mdW5jdGlvbiBnZXRPcmdhbml6YXRpb25hbFBhcmVudChlbGVtZW50KSB7XG5cbiAgZG8ge1xuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZiB8fFxuICAgICAgICBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KVxuICAgICAgKTtcbiAgICB9XG4gIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQpKTtcblxufVxuXG5mdW5jdGlvbiBpc1RleHRBbm5vdGF0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXAoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cblxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25Cb3VuZGFyeShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzRm9yQ29tcGVuc2F0aW9uKGUpIHtcbiAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGUpLmlzRm9yQ29tcGVuc2F0aW9uO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmdhbml6YXRpb24oYSwgYikge1xuICB2YXIgcGFyZW50QSA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGEpLFxuICAgICAgcGFyZW50QiA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGIpO1xuXG4gIHJldHVybiBwYXJlbnRBID09PSBwYXJlbnRCO1xufVxuXG5mdW5jdGlvbiBpc01lc3NhZ2VGbG93U291cmNlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnKSAmJlxuICAgICFpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgKFxuICAgICAgIWlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykgfHwgKFxuICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpUaHJvd0V2ZW50JykgJiZcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uT3JOb25lKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKVxuICAgICAgKVxuICAgIClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNNZXNzYWdlRmxvd1RhcmdldChlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJykgJiZcbiAgICAhaXMoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgIWlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpICYmIChcbiAgICAgICFpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpIHx8IChcbiAgICAgICAgaXMoZWxlbWVudCwgJ2JwbW46Q2F0Y2hFdmVudCcpICYmXG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbk9yTm9uZShlbGVtZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJylcbiAgICAgIClcbiAgICApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjb3BlUGFyZW50KGVsZW1lbnQpIHtcblxuICB2YXIgcGFyZW50ID0gZWxlbWVudDtcblxuICB3aGlsZSAoKHBhcmVudCA9IHBhcmVudC5wYXJlbnQpKSB7XG5cbiAgICBpZiAoaXMocGFyZW50LCAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInKSkge1xuICAgICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KHBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzKHBhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KHBhcmVudCkucHJvY2Vzc1JlZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNTYW1lU2NvcGUoYSwgYikge1xuICB2YXIgc2NvcGVQYXJlbnRBID0gZ2V0U2NvcGVQYXJlbnQoYSksXG4gICAgICBzY29wZVBhcmVudEIgPSBnZXRTY29wZVBhcmVudChiKTtcblxuICByZXR1cm4gc2NvcGVQYXJlbnRBID09PSBzY29wZVBhcmVudEI7XG59XG5cbmZ1bmN0aW9uIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCBldmVudERlZmluaXRpb24pIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuICEhZmluZChiby5ldmVudERlZmluaXRpb25zIHx8IFtdLCBmdW5jdGlvbihkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIGlzKGRlZmluaXRpb24sIGV2ZW50RGVmaW5pdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNFdmVudERlZmluaXRpb25Pck5vbmUoZWxlbWVudCwgZXZlbnREZWZpbml0aW9uKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAoYm8uZXZlbnREZWZpbml0aW9ucyB8fCBbXSkuZXZlcnkoZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBpcyhkZWZpbml0aW9uLCBldmVudERlZmluaXRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNTZXF1ZW5jZUZsb3dTb3VyY2UoZWxlbWVudCkge1xuICByZXR1cm4gKFxuICAgIGlzKGVsZW1lbnQsICdicG1uOkZsb3dOb2RlJykgJiZcbiAgICAhaXMoZWxlbWVudCwgJ2JwbW46RW5kRXZlbnQnKSAmJlxuICAgICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50KSAmJlxuICAgICEoaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpICYmXG4gICAgICBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpXG4gICAgKSAmJlxuICAgICFpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5KGVsZW1lbnQpICYmXG4gICAgIWlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU2VxdWVuY2VGbG93VGFyZ2V0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpICYmXG4gICAgIWlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJlxuICAgICFpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkgJiZcbiAgICAhKGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSAmJlxuICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKVxuICAgICkgJiZcbiAgICAhaXNGb3JDb21wZW5zYXRpb24oZWxlbWVudClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFdmVudEJhc2VkVGFyZ2V0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpSZWNlaXZlVGFzaycpIHx8IChcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSAmJiAoXG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC53YXlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudCkge1xuXG4gIHZhciBwYXJlbnRzID0gW107XG5cbiAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQ7XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcGFyZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBpc1BhcmVudChwb3NzaWJsZVBhcmVudCwgZWxlbWVudCkge1xuICB2YXIgYWxsUGFyZW50cyA9IGdldFBhcmVudHMoZWxlbWVudCk7XG4gIHJldHVybiBhbGxQYXJlbnRzLmluZGV4T2YocG9zc2libGVQYXJlbnQpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCwgY29ubmVjdGlvbikge1xuXG4gIGlmIChub25FeGlzdGluZ09yTGFiZWwoc291cmNlKSB8fCBub25FeGlzdGluZ09yTGFiZWwodGFyZ2V0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFpcyhjb25uZWN0aW9uLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgaWYgKGNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdicG1uOk1lc3NhZ2VGbG93JyB9O1xuICAgIH1cblxuICAgIGlmIChjYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2JwbW46U2VxdWVuY2VGbG93JyB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb25uZWN0RGF0YUFzc29jaWF0aW9uID0gY2FuQ29ubmVjdERhdGFBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCk7XG5cbiAgaWYgKGNvbm5lY3REYXRhQXNzb2NpYXRpb24pIHtcbiAgICByZXR1cm4gY29ubmVjdERhdGFBc3NvY2lhdGlvbjtcbiAgfVxuXG4gIGlmIChpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5KHNvdXJjZSkgJiYgaXNGb3JDb21wZW5zYXRpb24odGFyZ2V0KSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICBhc3NvY2lhdGlvbkRpcmVjdGlvbjogJ09uZSdcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNhbkNvbm5lY3RBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbidcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENhbiBhbiBlbGVtZW50IGJlIGRyb3BwZWQgaW50byB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjYW5Ecm9wKGVsZW1lbnQsIHRhcmdldCwgcG9zaXRpb24pIHtcblxuICAvLyBjYW4gbW92ZSBsYWJlbHMgYW5kIGdyb3VwcyBldmVyeXdoZXJlXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpIHx8IGlzR3JvdXAoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cbiAgLy8gZGlzYWxsb3cgdG8gY3JlYXRlIGVsZW1lbnRzIG9uIGNvbGxhcHNlZCBwb29sc1xuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpc0V4cGFuZGVkKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyB0byBjcmVhdGUgbmV3IHBhcnRpY2lwYW50cyBvblxuICAvLyBleGlzdGluZyBjb2xsYWJvcmF0aW9uIGFuZCBwcm9jZXNzIGRpYWdyYW1zXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGlzKHRhcmdldCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLy8gYWxsb3cgbW92aW5nIERhdGFJbnB1dCAvIERhdGFPdXRwdXQgd2l0aGluIGl0cyBvcmlnaW5hbCBjb250YWluZXIgb25seVxuICBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpEYXRhSW5wdXQnLCAnYnBtbjpEYXRhT3V0cHV0JyBdKSkge1xuXG4gICAgaWYgKGVsZW1lbnQucGFyZW50KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0ID09PSBlbGVtZW50LnBhcmVudDtcbiAgICB9XG4gIH1cblxuICAvLyBhbGxvdyBjcmVhdGluZyBsYW5lcyBvbiBwYXJ0aWNpcGFudHMgYW5kIG90aGVyIGxhbmVzIG9ubHlcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIHJldHVybiBpcyh0YXJnZXQsICdicG1uOlBhcnRpY2lwYW50JykgfHwgaXModGFyZ2V0LCAnYnBtbjpMYW5lJyk7XG4gIH1cblxuICAvLyBkaXNhbGxvdyBkcm9wcGluZyBib3VuZGFyeSBldmVudHMgd2hpY2ggY2Fubm90IHJlcGxhY2Ugd2l0aCBpbnRlcm1lZGlhdGUgZXZlbnRcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiAhaXNEcm9wcGFibGVCb3VuZGFyeUV2ZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZHJvcCBmbG93IGVsZW1lbnRzIG9udG8gZmxvdyBlbGVtZW50IGNvbnRhaW5lcnNcbiAgLy8gYW5kIHBhcnRpY2lwYW50c1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Rmxvd0VsZW1lbnQnKSAmJiAhaXMoZWxlbWVudCwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykpIHtcbiAgICBpZiAoaXModGFyZ2V0LCAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInKSkge1xuICAgICAgcmV0dXJuIGlzRXhwYW5kZWQodGFyZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbnkodGFyZ2V0LCBbICdicG1uOlBhcnRpY2lwYW50JywgJ2JwbW46TGFuZScgXSk7XG4gIH1cblxuICAvLyBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IGRhdGEgYXNzb2NpYXRpb25zIGFyZSBhbHdheXNcbiAgLy8gcmVuZGVyZWQgYW5kIG1vdmVkIHRvIHRvcCAoUHJvY2VzcyBvciBDb2xsYWJvcmF0aW9uIGxldmVsKVxuICAvL1xuICAvLyBhcnRpZmFjdHMgbWF5IGJlIHBsYWNlZCB3aGVyZXZlciwgdG9vXG4gIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOkFydGlmYWN0JywgJ2JwbW46RGF0YUFzc29jaWF0aW9uJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSkge1xuICAgIHJldHVybiBpc0FueSh0YXJnZXQsIFtcbiAgICAgICdicG1uOkNvbGxhYm9yYXRpb24nLFxuICAgICAgJ2JwbW46TGFuZScsXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAnYnBtbjpQcm9jZXNzJyxcbiAgICAgICdicG1uOlN1YlByb2Nlc3MnIF0pO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VGbG93JykpIHtcbiAgICByZXR1cm4gaXModGFyZ2V0LCAnYnBtbjpDb2xsYWJvcmF0aW9uJylcbiAgICAgIHx8IGVsZW1lbnQuc291cmNlLnBhcmVudCA9PSB0YXJnZXRcbiAgICAgIHx8IGVsZW1lbnQudGFyZ2V0LnBhcmVudCA9PSB0YXJnZXQ7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRHJvcHBhYmxlQm91bmRhcnlFdmVudChldmVudCkge1xuICByZXR1cm4gZ2V0QnVzaW5lc3NPYmplY3QoZXZlbnQpLmNhbmNlbEFjdGl2aXR5ICYmIChcbiAgICBoYXNOb0V2ZW50RGVmaW5pdGlvbihldmVudCkgfHwgaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZXZlbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQm91bmRhcnlFdmVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNMYWJlbChlbGVtZW50KSAmJiBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XG59XG5cbmZ1bmN0aW9uIGlzTGFuZShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpMYW5lJyk7XG59XG5cbi8qKlxuICogV2UgdHJlYXQgSW50ZXJtZWRpYXRlVGhyb3dFdmVudHMgYXMgYm91bmRhcnkgZXZlbnRzIGR1cmluZyBjcmVhdGUsXG4gKiB0aGlzIG11c3QgYmUgcmVmbGVjdGVkIGluIHRoZSBydWxlcy5cbiAqL1xuZnVuY3Rpb24gaXNCb3VuZGFyeUNhbmRpZGF0ZShlbGVtZW50KSB7XG4gIGlmIChpc0JvdW5kYXJ5RXZlbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykgJiYgaGFzTm9FdmVudERlZmluaXRpb24oZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpICYmXG4gICAgaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZWxlbWVudClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzTm9FdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8gJiYgIShiby5ldmVudERlZmluaXRpb25zICYmIGJvLmV2ZW50RGVmaW5pdGlvbnMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzT25lT2ZFdmVudERlZmluaXRpb25zKGVsZW1lbnQsIFtcbiAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicsXG4gICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGhhc09uZU9mRXZlbnREZWZpbml0aW9ucyhlbGVtZW50LCBldmVudERlZmluaXRpb25zKSB7XG4gIHJldHVybiBldmVudERlZmluaXRpb25zLnNvbWUoZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgZGVmaW5pdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1JlY2VpdmVUYXNrQWZ0ZXJFdmVudEJhc2VkR2F0ZXdheShlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSAmJlxuICAgIGZpbmQoZWxlbWVudC5pbmNvbWluZywgZnVuY3Rpb24oaW5jb21pbmcpIHtcbiAgICAgIHJldHVybiBpcyhpbmNvbWluZy5zb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5Jyk7XG4gICAgfSlcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5BdHRhY2goZWxlbWVudHMsIHRhcmdldCwgc291cmNlLCBwb3NpdGlvbikge1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIC8vIG9ubHkgKHJlLSlhdHRhY2ggb25lIGVsZW1lbnQgYXQgYSB0aW1lXG4gIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzWzBdO1xuXG4gIC8vIGRvIG5vdCBhdHRhY2ggbGFiZWxzXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb25seSBoYW5kbGUgYm91bmRhcnkgZXZlbnRzXG4gIGlmICghaXNCb3VuZGFyeUNhbmRpZGF0ZShlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGRpc2FsbG93IGRyb3Agb24gZXZlbnQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXNFdmVudFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubHkgYWxsb3cgZHJvcCBvbiBub24gY29tcGVuc2F0aW9uIGFjdGl2aXRpZXNcbiAgaWYgKCFpcyh0YXJnZXQsICdicG1uOkFjdGl2aXR5JykgfHwgaXNGb3JDb21wZW5zYXRpb24odGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubHkgYXR0YWNoIHRvIHN1YnByb2Nlc3MgYm9yZGVyXG4gIGlmIChwb3NpdGlvbiAmJiAhaXNCb3VuZGFyeUF0dGFjaG1lbnQocG9zaXRpb24sIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBkbyBub3QgYXR0YWNoIG9uIHJlY2VpdmUgdGFza3MgYWZ0ZXIgZXZlbnQgYmFzZWQgZ2F0ZXdheXNcbiAgaWYgKGlzUmVjZWl2ZVRhc2tBZnRlckV2ZW50QmFzZWRHYXRld2F5KHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gJ2F0dGFjaCc7XG59XG5cblxuLyoqXG4gKiBEZWZpbmVzIGhvdyB0byByZXBsYWNlIGVsZW1lbnRzIGZvciBhIGdpdmVuIHRhcmdldC5cbiAqXG4gKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgW3sgaWQ6ICdJbnRlcm1lZGlhdGVFdmVudF8yJyxcbiAqICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICogICB9LFxuICogICB7IGlkOiAnSW50ZXJtZWRpYXRlRXZlbnRfNScsXG4gKiAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gKiAgIH1dXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIHdoaWNoIGhhdmUgdG8gYmUgcmVwbGFjZWRcbiAqL1xuZnVuY3Rpb24gY2FuUmVwbGFjZShlbGVtZW50cywgdGFyZ2V0LCBwb3NpdGlvbikge1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGNhbkV4ZWN1dGUgPSB7XG4gICAgcmVwbGFjZW1lbnRzOiBbXVxuICB9O1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmICghaXNFdmVudFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuXG4gICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmXG4gICAgICAgICAgZWxlbWVudC50eXBlICE9PSAnbGFiZWwnICYmXG4gICAgICAgICAgY2FuRHJvcChlbGVtZW50LCB0YXJnZXQpKSB7XG5cbiAgICAgICAgLy8gcmVwbGFjZSBhIG5vbi1pbnRlcnJ1cHRpbmcgc3RhcnQgZXZlbnQgYnkgYSBibGFuayBpbnRlcnJ1cHRpbmcgc3RhcnQgZXZlbnRcbiAgICAgICAgLy8gd2hlbiB0aGUgdGFyZ2V0IGlzIG5vdCBhbiBldmVudCBzdWIgcHJvY2Vzc1xuICAgICAgICBpZiAoIWlzSW50ZXJydXB0aW5nKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlcGxhY2UgYW4gZXJyb3IvZXNjYWxhdGlvbi9jb21wZW5zYXRlIHN0YXJ0IGV2ZW50IGJ5IGEgYmxhbmsgaW50ZXJydXB0aW5nIHN0YXJ0IGV2ZW50XG4gICAgICAgIC8vIHdoZW4gdGhlIHRhcmdldCBpcyBub3QgYW4gZXZlbnQgc3ViIHByb2Nlc3NcbiAgICAgICAgaWYgKGhhc0Vycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHx8XG4gICAgICAgICAgICBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHx8XG4gICAgICAgICAgICBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlcGxhY2UgYSB0eXBlZCBzdGFydCBldmVudCBieSBhIGJsYW5rIGludGVycnVwdGluZyBzdGFydCBldmVudFxuICAgICAgICAvLyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBzdWIgcHJvY2VzcyBidXQgbm90IGFuIGV2ZW50IHN1YiBwcm9jZXNzXG4gICAgICAgIGlmIChoYXNPbmVPZkV2ZW50RGVmaW5pdGlvbnMoZWxlbWVudCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICAgICAgICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICAgICAgICBdKSAmJlxuICAgICAgICAgICAgaXModGFyZ2V0LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgICAgICBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG5ld0VsZW1lbnRUeXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpcyh0YXJnZXQsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgIGlmIChoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJykgJiZcbiAgICAgICAgICBlbGVtZW50LnR5cGUgIT09ICdsYWJlbCcpIHtcblxuICAgICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RW5kRXZlbnQnKSAmJiBjYW5Ecm9wKGVsZW1lbnQsIHRhcmdldCkpIHtcbiAgICAgICAgICBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG5ld0VsZW1lbnRUeXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgY2FuQXR0YWNoKGVsZW1lbnQsIHRhcmdldCwgbnVsbCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzLmxlbmd0aCA/IGNhbkV4ZWN1dGUgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2FuTW92ZShlbGVtZW50cywgdGFyZ2V0KSB7XG5cbiAgLy8gZG8gbm90IG1vdmUgc2VsZWN0aW9uIGNvbnRhaW5pbmcgbGFuZXNcbiAgaWYgKHNvbWUoZWxlbWVudHMsIGlzTGFuZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyBkZWZhdWx0IG1vdmUgY2hlY2sgdG8gc3RhcnQgbW92ZSBvcGVyYXRpb25cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50cy5ldmVyeShmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGNhbkRyb3AoZWxlbWVudCwgdGFyZ2V0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbkNyZWF0ZShzaGFwZSwgdGFyZ2V0LCBzb3VyY2UsIHBvc2l0aW9uKSB7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNMYWJlbChzaGFwZSkgfHwgaXNHcm91cChzaGFwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc1NhbWUoc291cmNlLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIGRvIG5vdCBkcm9wIHRoZSBlbGVtZW50XG4gIC8vIGludG8gc291cmNlXG4gIGlmIChzb3VyY2UgJiYgaXNQYXJlbnQoc291cmNlLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGNhbkRyb3Aoc2hhcGUsIHRhcmdldCwgcG9zaXRpb24pIHx8IGNhbkluc2VydChzaGFwZSwgdGFyZ2V0LCBwb3NpdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNhblJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKSB7XG4gIGlmIChpcyhzaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXhwYW5kZWQoc2hhcGUpICYmIChcbiAgICAgICAgIW5ld0JvdW5kcyB8fCAobmV3Qm91bmRzLndpZHRoID49IDEwMCAmJiBuZXdCb3VuZHMuaGVpZ2h0ID49IDgwKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgIHJldHVybiAhbmV3Qm91bmRzIHx8IChuZXdCb3VuZHMud2lkdGggPj0gMTMwICYmIG5ld0JvdW5kcy5oZWlnaHQgPj0gNjApO1xuICB9XG5cbiAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICFuZXdCb3VuZHMgfHwgKG5ld0JvdW5kcy53aWR0aCA+PSAyNTAgJiYgbmV3Qm91bmRzLmhlaWdodCA+PSA1MCk7XG4gIH1cblxuICBpZiAoaXNUZXh0QW5ub3RhdGlvbihzaGFwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0dyb3VwKHNoYXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrLCB3aGV0aGVyIG9uZSBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIGlzIGEgdGV4dCBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBpc09uZVRleHRBbm5vdGF0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgdmFyIHNvdXJjZVRleHRBbm5vdGF0aW9uID0gaXNUZXh0QW5ub3RhdGlvbihzb3VyY2UpLFxuICAgICAgdGFyZ2V0VGV4dEFubm90YXRpb24gPSBpc1RleHRBbm5vdGF0aW9uKHRhcmdldCk7XG5cbiAgcmV0dXJuIChcbiAgICAoc291cmNlVGV4dEFubm90YXRpb24gfHwgdGFyZ2V0VGV4dEFubm90YXRpb24pICYmXG4gICAgKHNvdXJjZVRleHRBbm5vdGF0aW9uICE9PSB0YXJnZXRUZXh0QW5ub3RhdGlvbilcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5Db25uZWN0QXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyBkbyBub3QgY29ubmVjdCBjb25uZWN0aW9uc1xuICBpZiAoaXNDb25uZWN0aW9uKHNvdXJjZSkgfHwgaXNDb25uZWN0aW9uKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjb21wZW5zYXRpb24gYm91bmRhcnkgZXZlbnRzIGFyZSBleGNlcHRpb25cbiAgaWYgKGlzQ29tcGVuc2F0aW9uQm91bmRhcnkoc291cmNlKSAmJiBpc0ZvckNvbXBlbnNhdGlvbih0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBkb24ndCBjb25uZWN0IHBhcmVudCA8LT4gY2hpbGRcbiAgaWYgKGlzUGFyZW50KHRhcmdldCwgc291cmNlKSB8fCBpc1BhcmVudChzb3VyY2UsIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyBjb25uZWN0aW9uIG9mIGFzc29jaWF0aW9ucyBiZXR3ZWVuIDwhVGV4dEFubm90YXRpb24+IGFuZCA8VGV4dEFubm90YXRpb24+XG4gIGlmIChpc09uZVRleHRBbm5vdGF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gY2FuIGNvbm5lY3QgYXNzb2NpYXRpb25zIHdoZXJlIHdlIGNhbiBjb25uZWN0XG4gIC8vIGRhdGEgYXNzb2NpYXRpb25zLCB0b28gKCEpXG4gIHJldHVybiAhIWNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBjYW5Db25uZWN0TWVzc2FnZUZsb3coc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyBkdXJpbmcgY29ubmVjdCB1c2VyIG1pZ2h0IG1vdmUgbW91c2Ugb3V0IG9mIGNhbnZhc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy8xMDMzXG4gIGlmIChnZXRSb290RWxlbWVudChzb3VyY2UpICYmICFnZXRSb290RWxlbWVudCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBpc01lc3NhZ2VGbG93U291cmNlKHNvdXJjZSkgJiZcbiAgICBpc01lc3NhZ2VGbG93VGFyZ2V0KHRhcmdldCkgJiZcbiAgICAhaXNTYW1lT3JnYW5pemF0aW9uKHNvdXJjZSwgdGFyZ2V0KVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgaWYgKFxuICAgIGlzRXZlbnRCYXNlZFRhcmdldCh0YXJnZXQpICYmXG4gICAgdGFyZ2V0LmluY29taW5nLmxlbmd0aCA+IDAgJiZcbiAgICBhcmVPdXRnb2luZ0V2ZW50QmFzZWRHYXRld2F5Q29ubmVjdGlvbnModGFyZ2V0LmluY29taW5nKSAmJlxuICAgICFpcyhzb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzU2VxdWVuY2VGbG93U291cmNlKHNvdXJjZSkgJiZcbiAgICAgICAgIGlzU2VxdWVuY2VGbG93VGFyZ2V0KHRhcmdldCkgJiZcbiAgICAgICAgIGlzU2FtZVNjb3BlKHNvdXJjZSwgdGFyZ2V0KSAmJlxuICAgICAgICAgIShpcyhzb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JykgJiYgIWlzRXZlbnRCYXNlZFRhcmdldCh0YXJnZXQpKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5Db25uZWN0RGF0YUFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgaWYgKGlzQW55KHNvdXJjZSwgWyAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSAmJlxuICAgICAgaXNBbnkodGFyZ2V0LCBbICdicG1uOkFjdGl2aXR5JywgJ2JwbW46VGhyb3dFdmVudCcgXSkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicgfTtcbiAgfVxuXG4gIGlmIChpc0FueSh0YXJnZXQsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkgJiZcbiAgICAgIGlzQW55KHNvdXJjZSwgWyAnYnBtbjpBY3Rpdml0eScsICdicG1uOkNhdGNoRXZlbnQnIF0pKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJyB9O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjYW5JbnNlcnQoc2hhcGUsIGZsb3csIHBvc2l0aW9uKSB7XG5cbiAgaWYgKCFmbG93KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc2hhcGUpKSB7XG4gICAgaWYgKHNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNoYXBlID0gc2hhcGVbMF07XG4gIH1cblxuICBpZiAoZmxvdy5zb3VyY2UgPT09IHNoYXBlIHx8XG4gICAgICBmbG93LnRhcmdldCA9PT0gc2hhcGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gZHJvcCBvbiB0aGVcbiAgLy8gdW5kZXJseWluZyBmbG93IHBhcmVudFxuICAvL1xuICAvLyBhdCB0aGlzIHBvaW50IHdlIGFyZSBub3QgcmVhbGx5IGFibGUgdG8gdGFsa1xuICAvLyBhYm91dCBjb25uZWN0aW9uIHJ1bGVzICh5ZXQpXG5cbiAgcmV0dXJuIChcbiAgICBpc0FueShmbG93LCBbICdicG1uOlNlcXVlbmNlRmxvdycsICdicG1uOk1lc3NhZ2VGbG93JyBdKSAmJlxuICAgICFpc0xhYmVsKGZsb3cpICYmXG4gICAgaXMoc2hhcGUsICdicG1uOkZsb3dOb2RlJykgJiZcbiAgICAhaXMoc2hhcGUsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgIGNhbkRyb3Aoc2hhcGUsIGZsb3cucGFyZW50LCBwb3NpdGlvbikpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhlbGVtZW50cywgZWxlbWVudCkge1xuICByZXR1cm4gKGVsZW1lbnRzICYmIGVsZW1lbnQpICYmIGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBjYW5Db3B5KGVsZW1lbnRzLCBlbGVtZW50KSB7XG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpICYmICFpbmNsdWRlcyhlbGVtZW50cywgZWxlbWVudC5wYXJlbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzT3V0Z29pbmdFdmVudEJhc2VkR2F0ZXdheUNvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXG4gIGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uc291cmNlKSB7XG4gICAgcmV0dXJuIGlzKGNvbm5lY3Rpb24uc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFyZU91dGdvaW5nRXZlbnRCYXNlZEdhdGV3YXlDb25uZWN0aW9ucyhjb25uZWN0aW9ucykge1xuICBjb25uZWN0aW9ucyA9IGNvbm5lY3Rpb25zIHx8IFtdO1xuXG4gIHJldHVybiBjb25uZWN0aW9ucy5zb21lKGlzT3V0Z29pbmdFdmVudEJhc2VkR2F0ZXdheUNvbm5lY3Rpb24pO1xufVxuXG5mdW5jdGlvbiBnZXRSb290RWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQYXJlbnQoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGdldFBhcmVudChlbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG59XG4iLCJpbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMnO1xuXG5pbXBvcnQgQnBtblJ1bGVzIGZyb20gJy4vQnBtblJ1bGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uUnVsZXMnIF0sXG4gIGJwbW5SdWxlczogWyAndHlwZScsIEJwbW5SdWxlcyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgbWFwLFxuICBmaWx0ZXIsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuXG4vKipcbiAqIFByb3ZpZGVzIGFiaWxpdHkgdG8gc2VhcmNoIHRocm91Z2ggQlBNTiBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uU2VhcmNoUHJvdmlkZXIoZWxlbWVudFJlZ2lzdHJ5LCBzZWFyY2hQYWQsIGNhbnZhcykge1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHNlYXJjaFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xufVxuXG5CcG1uU2VhcmNoUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdzZWFyY2hQYWQnLFxuICAnY2FudmFzJ1xuXTtcblxuXG4vKipcbiAqIEZpbmRzIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIGdpdmVuIHBhdHRlcm5cbiAqXG4gKiA8UmVzdWx0PiA6XG4gKiAge1xuICogICAgcHJpbWFyeVRva2VuczogPEFycmF5PFRva2VuPj4sXG4gKiAgICBzZWNvbmRhcnlUb2tlbnM6IDxBcnJheTxUb2tlbj4+LFxuICogICAgZWxlbWVudDogPEVsZW1lbnQ+XG4gKiAgfVxuICpcbiAqIDxUb2tlbj4gOlxuICogIHtcbiAqICAgIG5vcm1hbHxtYXRjaGVkOiA8c3RyaW5nPlxuICogIH1cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHBhdHRlcm5cbiAqIEByZXR1cm4ge0FycmF5PFJlc3VsdD59XG4gKi9cbkJwbW5TZWFyY2hQcm92aWRlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgdmFyIGVsZW1lbnRzID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIC8vIGRvIG5vdCBpbmNsdWRlIHJvb3QgZWxlbWVudFxuICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50ICE9PSByb290RWxlbWVudDtcbiAgfSk7XG5cbiAgZWxlbWVudHMgPSBtYXAoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJpbWFyeVRva2VuczogbWF0Y2hBbmRTcGxpdChnZXRMYWJlbChlbGVtZW50KSwgcGF0dGVybiksXG4gICAgICBzZWNvbmRhcnlUb2tlbnM6IG1hdGNoQW5kU3BsaXQoZWxlbWVudC5pZCwgcGF0dGVybiksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gZXhjbHVkZSBub24tbWF0Y2hlZCBlbGVtZW50c1xuICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBoYXNNYXRjaGVkKGVsZW1lbnQucHJpbWFyeVRva2VucykgfHwgaGFzTWF0Y2hlZChlbGVtZW50LnNlY29uZGFyeVRva2Vucyk7XG4gIH0pO1xuXG4gIGVsZW1lbnRzID0gc29ydEJ5KGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldExhYmVsKGVsZW1lbnQuZWxlbWVudCkgKyBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn07XG5cblxuZnVuY3Rpb24gaGFzTWF0Y2hlZCh0b2tlbnMpIHtcbiAgdmFyIG1hdGNoZWQgPSBmaWx0ZXIodG9rZW5zLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICEhdC5tYXRjaGVkO1xuICB9KTtcblxuICByZXR1cm4gbWF0Y2hlZC5sZW5ndGggPiAwO1xufVxuXG5cbmZ1bmN0aW9uIG1hdGNoQW5kU3BsaXQodGV4dCwgcGF0dGVybikge1xuICB2YXIgdG9rZW5zID0gW10sXG4gICAgICBvcmlnaW5hbFRleHQgPSB0ZXh0O1xuXG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICBwYXR0ZXJuID0gcGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuXG4gIHZhciBpID0gdGV4dC5pbmRleE9mKHBhdHRlcm4pO1xuXG4gIGlmIChpID4gLTEpIHtcbiAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICBub3JtYWw6IG9yaWdpbmFsVGV4dC5zdWJzdHIoMCwgaSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG1hdGNoZWQ6IG9yaWdpbmFsVGV4dC5zdWJzdHIoaSwgcGF0dGVybi5sZW5ndGgpXG4gICAgfSk7XG5cbiAgICBpZiAocGF0dGVybi5sZW5ndGggKyBpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgbm9ybWFsOiBvcmlnaW5hbFRleHQuc3Vic3RyKHBhdHRlcm4ubGVuZ3RoICsgaSwgdGV4dC5sZW5ndGgpXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbm9ybWFsOiBvcmlnaW5hbFRleHRcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59IiwiaW1wb3J0IFNlYXJjaFBhZE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWFyY2gtcGFkJztcblxuaW1wb3J0IEJwbW5TZWFyY2hQcm92aWRlciBmcm9tICcuL0JwbW5TZWFyY2hQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFNlYXJjaFBhZE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtblNlYXJjaCddLFxuICBicG1uU2VhcmNoOiBbICd0eXBlJywgQnBtblNlYXJjaFByb3ZpZGVyIF1cbn07XG4iLCJpbXBvcnQge1xyXG4gIG1pZCxcclxuICBzZXRTbmFwcGVkXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvU25hcFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNDbWQgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRPcmllbnRhdGlvblxyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBzb21lIH0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxudmFyIEhJR0hFUl9QUklPUklUWSA9IDEyNTA7XHJcblxyXG52YXIgQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQgPSA0MDtcclxuXHJcbnZhciBUQVJHRVRfQk9VTkRTX1BBRERJTkcgPSAyMCxcclxuICAgIFRBU0tfQk9VTkRTX1BBRERJTkcgPSAxMDtcclxuXHJcbnZhciBUQVJHRVRfQ0VOVEVSX1BBRERJTkcgPSAyMDtcclxuXHJcbnZhciBBWEVTID0gWyAneCcsICd5JyBdO1xyXG5cclxudmFyIGFicyA9IE1hdGguYWJzO1xyXG5cclxuLyoqXHJcbiAqIFNuYXAgZHVyaW5nIGNvbm5lY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uQ29ubmVjdFNuYXBwaW5nKGV2ZW50QnVzKSB7XHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2Nvbm5lY3QuaG92ZXInLFxyXG4gICAgJ2Nvbm5lY3QubW92ZScsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gIF0sIEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxyXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcclxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXHJcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXHJcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XHJcblxyXG4gICAgLy8gZG8gTk9UIHNuYXAgb24gQ01EXHJcbiAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAmJiBpc0NtZChldmVudC5vcmlnaW5hbEV2ZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxDb25uZWN0aW9uU3RhcnQpIHtcclxuICAgICAgY29udGV4dC5pbml0aWFsQ29ubmVjdGlvblN0YXJ0ID0gY29udGV4dC5jb25uZWN0aW9uU3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc25hcCBob3ZlclxyXG4gICAgaWYgKGNhbkV4ZWN1dGUgJiYgaG92ZXIpIHtcclxuICAgICAgc25hcFRvU2hhcGUoZXZlbnQsIGhvdmVyLCBnZXRUYXJnZXRCb3VuZHNQYWRkaW5nKGhvdmVyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhvdmVyICYmIGlzQW55VHlwZShjYW5FeGVjdXRlLCBbXHJcbiAgICAgICdicG1uOkFzc29jaWF0aW9uJyxcclxuICAgICAgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nLFxyXG4gICAgICAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nLFxyXG4gICAgICAnYnBtbjpTZXF1ZW5jZUZsb3cnXHJcbiAgICBdKSkge1xyXG4gICAgICBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCA9IG1pZChzdGFydCk7XHJcblxyXG4gICAgICAvLyBzbmFwIGhvdmVyXHJcbiAgICAgIGlmIChpc0FueShob3ZlciwgWyAnYnBtbjpFdmVudCcsICdicG1uOkdhdGV3YXknIF0pKSB7XHJcbiAgICAgICAgc25hcFRvUG9zaXRpb24oZXZlbnQsIG1pZChob3ZlcikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzbmFwIGhvdmVyXHJcbiAgICAgIGlmIChpc0FueShob3ZlciwgWyAnYnBtbjpUYXNrJywgJ2JwbW46U3ViUHJvY2VzcycgXSkpIHtcclxuICAgICAgICBzbmFwVG9UYXJnZXRNaWQoZXZlbnQsIGhvdmVyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc25hcCBzb3VyY2UgYW5kIHRhcmdldFxyXG4gICAgICBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgdGFyZ2V0ID09PSBzb3VyY2UuaG9zdCkge1xyXG4gICAgICAgIHNuYXBCb3VuZGFyeUV2ZW50TG9vcChldmVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2UgaWYgKGlzVHlwZShjYW5FeGVjdXRlLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XHJcblxyXG4gICAgICBpZiAoaXMoc3RhcnQsICdicG1uOkV2ZW50JykpIHtcclxuXHJcbiAgICAgICAgLy8gc25hcCBzdGFydFxyXG4gICAgICAgIGNvbnRleHQuY29ubmVjdGlvblN0YXJ0ID0gbWlkKHN0YXJ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpFdmVudCcpKSB7XHJcblxyXG4gICAgICAgIC8vIHNuYXAgaG92ZXJcclxuICAgICAgICBzbmFwVG9Qb3NpdGlvbihldmVudCwgbWlkKGhvdmVyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gdW4tc25hcCBzb3VyY2VcclxuICAgICAgY29udGV4dC5jb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmluaXRpYWxDb25uZWN0aW9uU3RhcnQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbkJwbW5Db25uZWN0U25hcHBpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuLy8gc25hcCB0byB0YXJnZXQgaWYgZXZlbnQgaW4gdGFyZ2V0XHJcbmZ1bmN0aW9uIHNuYXBUb1NoYXBlKGV2ZW50LCB0YXJnZXQsIHBhZGRpbmcpIHtcclxuICBBWEVTLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgdmFyIGRpbWVuc2lvbkZvckF4aXMgPSBnZXREaW1lbnNpb25Gb3JBeGlzKGF4aXMsIHRhcmdldCk7XHJcblxyXG4gICAgaWYgKGV2ZW50WyBheGlzIF0gPCB0YXJnZXRbIGF4aXMgXSArIHBhZGRpbmcpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgdGFyZ2V0WyBheGlzIF0gKyBwYWRkaW5nKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnRbIGF4aXMgXSA+IHRhcmdldFsgYXhpcyBdICsgZGltZW5zaW9uRm9yQXhpcyAtIHBhZGRpbmcpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgdGFyZ2V0WyBheGlzIF0gKyBkaW1lbnNpb25Gb3JBeGlzIC0gcGFkZGluZyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIHNuYXAgdG8gdGFyZ2V0IG1pZCBpZiBldmVudCBpbiB0YXJnZXQgbWlkXHJcbmZ1bmN0aW9uIHNuYXBUb1RhcmdldE1pZChldmVudCwgdGFyZ2V0KSB7XHJcbiAgdmFyIHRhcmdldE1pZCA9IG1pZCh0YXJnZXQpO1xyXG5cclxuICBBWEVTLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgaWYgKGlzTWlkKGV2ZW50LCB0YXJnZXQsIGF4aXMpKSB7XHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHRhcmdldE1pZFsgYXhpcyBdKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuLy8gc25hcCB0byBwcmV2ZW50IGxvb3Agb3ZlcmxhcHBpbmcgYm91bmRhcnkgZXZlbnRcclxuZnVuY3Rpb24gc25hcEJvdW5kYXJ5RXZlbnRMb29wKGV2ZW50KSB7XHJcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcclxuICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XHJcblxyXG4gIGlmIChpc1JldmVyc2UoY29udGV4dCkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBzb3VyY2VNaWQgPSBtaWQoc291cmNlKSxcclxuICAgICAgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2VNaWQsIHRhcmdldCwgLTEwKSxcclxuICAgICAgYXhlcyA9IFtdO1xyXG5cclxuICBpZiAoL3RvcHxib3R0b20vLnRlc3Qob3JpZW50YXRpb24pKSB7XHJcbiAgICBheGVzLnB1c2goJ3gnKTtcclxuICB9XHJcblxyXG4gIGlmICgvbGVmdHxyaWdodC8udGVzdChvcmllbnRhdGlvbikpIHtcclxuICAgIGF4ZXMucHVzaCgneScpO1xyXG4gIH1cclxuXHJcbiAgYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGF4aXMpIHtcclxuICAgIHZhciBjb29yZGluYXRlID0gZXZlbnRbIGF4aXMgXSwgbmV3Q29vcmRpbmF0ZTtcclxuXHJcbiAgICBpZiAoYWJzKGNvb3JkaW5hdGUgLSBzb3VyY2VNaWRbIGF4aXMgXSkgPCBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCkge1xyXG4gICAgICBpZiAoY29vcmRpbmF0ZSA+IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgbmV3Q29vcmRpbmF0ZSA9IHNvdXJjZU1pZFsgYXhpcyBdICsgQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbmV3Q29vcmRpbmF0ZSA9IHNvdXJjZU1pZFsgYXhpcyBdIC0gQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIG5ld0Nvb3JkaW5hdGUpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzbmFwVG9Qb3NpdGlvbihldmVudCwgcG9zaXRpb24pIHtcclxuICBzZXRTbmFwcGVkKGV2ZW50LCAneCcsIHBvc2l0aW9uLngpO1xyXG4gIHNldFNuYXBwZWQoZXZlbnQsICd5JywgcG9zaXRpb24ueSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVHlwZShhdHRycywgdHlwZSkge1xyXG4gIHJldHVybiBhdHRycyAmJiBhdHRycy50eXBlID09PSB0eXBlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FueVR5cGUoYXR0cnMsIHR5cGVzKSB7XHJcbiAgcmV0dXJuIHNvbWUodHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBpc1R5cGUoYXR0cnMsIHR5cGUpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREaW1lbnNpb25Gb3JBeGlzKGF4aXMsIGVsZW1lbnQpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gZWxlbWVudC53aWR0aCA6IGVsZW1lbnQuaGVpZ2h0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUYXJnZXRCb3VuZHNQYWRkaW5nKHRhcmdldCkge1xyXG4gIGlmIChpcyh0YXJnZXQsICdicG1uOlRhc2snKSkge1xyXG4gICAgcmV0dXJuIFRBU0tfQk9VTkRTX1BBRERJTkc7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBUQVJHRVRfQk9VTkRTX1BBRERJTkc7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc01pZChldmVudCwgdGFyZ2V0LCBheGlzKSB7XHJcbiAgcmV0dXJuIGV2ZW50WyBheGlzIF0gPiB0YXJnZXRbIGF4aXMgXSArIFRBUkdFVF9DRU5URVJfUEFERElOR1xyXG4gICAgJiYgZXZlbnRbIGF4aXMgXSA8IHRhcmdldFsgYXhpcyBdICsgZ2V0RGltZW5zaW9uRm9yQXhpcyhheGlzLCB0YXJnZXQpIC0gVEFSR0VUX0NFTlRFUl9QQURESU5HO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JldmVyc2UoY29udGV4dCkge1xyXG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXHJcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xyXG5cclxuICByZXR1cm4gaG92ZXIgJiYgc291cmNlICYmIGhvdmVyID09PSBzb3VyY2U7XHJcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ3JlYXRlTW92ZVNuYXBwaW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0NyZWF0ZU1vdmVTbmFwcGluZyc7XG5cbmltcG9ydCB7XG4gIGlzU25hcHBlZCxcbiAgc2V0U25hcHBlZCxcbiAgdG9wTGVmdCxcbiAgYm90dG9tUmlnaHRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvU25hcFV0aWwnO1xuXG5pbXBvcnQgeyBpc0V4cGFuZGVkIH0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRNaWRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCb3VuZGFyeUF0dGFjaG1lbnQgfSBmcm9tICcuL0JwbW5TbmFwcGluZ1V0aWwnO1xuXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDE1MDA7XG5cblxuLyoqXG4gKiBTbmFwIGR1cmluZyBjcmVhdGUgYW5kIG1vdmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcoZXZlbnRCdXMsIGluamVjdG9yKSB7XG4gIGluamVjdG9yLmludm9rZShDcmVhdGVNb3ZlU25hcHBpbmcsIHRoaXMpO1xuXG4gIC8vIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gIGV2ZW50QnVzLm9uKFsgJ2NyZWF0ZS5tb3ZlJywgJ2NyZWF0ZS5lbmQnIF0sIEhJR0hfUFJJT1JJVFksIHNldFNuYXBwZWRJZkNvbnN0cmFpbmVkKTtcblxuICAvLyBzbmFwIGJvdW5kYXJ5IGV2ZW50c1xuICBldmVudEJ1cy5vbihbXG4gICAgJ2NyZWF0ZS5tb3ZlJyxcbiAgICAnY3JlYXRlLmVuZCcsXG4gICAgJ3NoYXBlLm1vdmUubW92ZScsXG4gICAgJ3NoYXBlLm1vdmUuZW5kJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICB2YXIgY2FuQXR0YWNoID0gY2FuRXhlY3V0ZSAmJiAoY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcgfHwgY2FuRXhlY3V0ZS5hdHRhY2gpO1xuXG4gICAgaWYgKGNhbkF0dGFjaCAmJiAhaXNTbmFwcGVkKGV2ZW50KSkge1xuICAgICAgc25hcEJvdW5kYXJ5RXZlbnQoZXZlbnQsIHRhcmdldCk7XG4gICAgfVxuICB9KTtcbn1cblxuaW5oZXJpdHMoQnBtbkNyZWF0ZU1vdmVTbmFwcGluZywgQ3JlYXRlTW92ZVNuYXBwaW5nKTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InXG5dO1xuXG5CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5pbml0U25hcCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHZhciBzbmFwQ29udGV4dCA9IENyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuaW5pdFNuYXAuY2FsbCh0aGlzLCBldmVudCk7XG5cbiAgdmFyIHNoYXBlID0gZXZlbnQuc2hhcGU7XG5cbiAgdmFyIGlzTW92ZSA9ICEhdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCk7XG5cbiAgLy8gc25hcCB0byBkb2NraW5nIHBvaW50c1xuICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIGRvY2tpbmcgPSBjb25uZWN0aW9uLndheXBvaW50c1swXTtcblxuICAgIGRvY2tpbmcgPSBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmc7XG5cbiAgICBzbmFwQ29udGV4dC5zZXRTbmFwT3JpZ2luKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBnZXREb2NraW5nU25hcE9yaWdpbihkb2NraW5nLCBpc01vdmUsIGV2ZW50KSk7XG4gIH0pO1xuXG4gIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzW2Nvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgZG9ja2luZyA9IGRvY2tpbmcub3JpZ2luYWwgfHwgZG9ja2luZztcblxuICAgIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oY29ubmVjdGlvbi5pZCArICctZG9ja2luZycsIGdldERvY2tpbmdTbmFwT3JpZ2luKGRvY2tpbmcsIGlzTW92ZSwgZXZlbnQpKTtcbiAgfSk7XG5cbiAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAvLyBzbmFwIHRvIGJvcmRlcnMgd2l0aCBoaWdoZXIgcHJpb3JpdHlcbiAgICBzbmFwQ29udGV4dC5zZXRTbmFwTG9jYXRpb25zKFsgJ3RvcC1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICdtaWQnIF0pO1xuICB9XG5cbiAgcmV0dXJuIHNuYXBDb250ZXh0O1xufTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuYWRkU25hcFRhcmdldFBvaW50cyA9IGZ1bmN0aW9uKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQpIHtcbiAgQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzLmNhbGwodGhpcywgc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCk7XG5cbiAgdmFyIHNuYXBUYXJnZXRzID0gdGhpcy5nZXRTbmFwVGFyZ2V0cyhzaGFwZSwgdGFyZ2V0KTtcblxuICBmb3JFYWNoKHNuYXBUYXJnZXRzLCBmdW5jdGlvbihzbmFwVGFyZ2V0KSB7XG5cbiAgICAvLyBoYW5kbGUgVFJCTCBhbGlnbm1lbnRcbiAgICAvL1xuICAgIC8vICogd2l0aCBjb250YWluZXIgZWxlbWVudHNcbiAgICAvLyAqIHdpdGggdGV4dCBhbm5vdGF0aW9uc1xuICAgIGlmIChpc0NvbnRhaW5lcihzbmFwVGFyZ2V0KSB8fCBhcmVBbGwoWyBzaGFwZSwgc25hcFRhcmdldCBdLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBzbmFwUG9pbnRzLmFkZCgndG9wLWxlZnQnLCB0b3BMZWZ0KHNuYXBUYXJnZXQpKTtcbiAgICAgIHNuYXBQb2ludHMuYWRkKCdib3R0b20tcmlnaHQnLCBib3R0b21SaWdodChzbmFwVGFyZ2V0KSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIC8vIHNuYXAgdG8gZG9ja2luZyBwb2ludHMgaWYgbm90IGNyZWF0ZSBtb2RlXG4gIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCkpIHtcblxuICAgICAgaWYgKCFpbmNsdWRlcyhzbmFwVGFyZ2V0cywgY29ubmVjdGlvbi5zb3VyY2UpKSB7XG4gICAgICAgIHNuYXBQb2ludHMuYWRkKCdtaWQnLCBnZXRNaWQoY29ubmVjdGlvbi5zb3VyY2UpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRvY2tpbmcgPSBjb25uZWN0aW9uLndheXBvaW50c1swXTtcbiAgICAgIHNuYXBQb2ludHMuYWRkKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmcpO1xuICAgIH1cbiAgfSk7XG5cbiAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGlmIChlbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xuXG4gICAgICBpZiAoIWluY2x1ZGVzKHNuYXBUYXJnZXRzLCBjb25uZWN0aW9uLnRhcmdldCkpIHtcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIGdldE1pZChjb25uZWN0aW9uLnRhcmdldCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzWyBjb25uZWN0aW9uLndheXBvaW50cy5sZW5ndGggLSAxIF07XG5cbiAgICAgIHNuYXBQb2ludHMuYWRkKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmcpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYWRkIHNlcXVlbmNlIGZsb3cgcGFyZW50cyBhcyBzbmFwIHRhcmdldHNcbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICBzbmFwUG9pbnRzID0gdGhpcy5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQucGFyZW50KTtcbiAgfVxuXG4gIHJldHVybiBzbmFwUG9pbnRzO1xufTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuZ2V0U25hcFRhcmdldHMgPSBmdW5jdGlvbihzaGFwZSwgdGFyZ2V0KSB7XG4gIHJldHVybiBDcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBUYXJnZXRzLmNhbGwodGhpcywgc2hhcGUsIHRhcmdldClcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcblxuICAgICAgLy8gZG8gbm90IHNuYXAgdG8gbGFuZXNcbiAgICAgIHJldHVybiAhaXMoc25hcFRhcmdldCwgJ2JwbW46TGFuZScpO1xuICAgIH0pO1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNuYXBCb3VuZGFyeUV2ZW50KGV2ZW50LCB0YXJnZXQpIHtcbiAgdmFyIHRhcmdldFRSQkwgPSBhc1RSQkwodGFyZ2V0KTtcblxuICB2YXIgZGlyZWN0aW9uID0gZ2V0Qm91bmRhcnlBdHRhY2htZW50KGV2ZW50LCB0YXJnZXQpO1xuXG4gIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICB2YXIgb2Zmc2V0O1xuXG4gIGlmIChzaGFwZS5wYXJlbnQpIHtcbiAgICBvZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBnZXRNaWQoc2hhcGUpO1xuICB9XG5cbiAgaWYgKC90b3AvLnRlc3QoZGlyZWN0aW9uKSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd5JywgdGFyZ2V0VFJCTC50b3AgLSBvZmZzZXQueSk7XG4gIH0gZWxzZSBpZiAoL2JvdHRvbS8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3knLCB0YXJnZXRUUkJMLmJvdHRvbSAtIG9mZnNldC55KTtcbiAgfVxuXG4gIGlmICgvbGVmdC8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCB0YXJnZXRUUkJMLmxlZnQgLSBvZmZzZXQueCk7XG4gIH0gZWxzZSBpZiAoL3JpZ2h0Ly50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneCcsIHRhcmdldFRSQkwucmlnaHQgLSBvZmZzZXQueCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlQWxsKGVsZW1lbnRzLCB0eXBlKSB7XG4gIHJldHVybiBlbGVtZW50cy5ldmVyeShmdW5jdGlvbihlbCkge1xuICAgIHJldHVybiBpcyhlbCwgdHlwZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRhaW5lcihlbGVtZW50KSB7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG59XG5cblxuZnVuY3Rpb24gc2V0U25hcHBlZElmQ29uc3RyYWluZWQoZXZlbnQpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgY3JlYXRlQ29uc3RyYWludHMgPSBjb250ZXh0LmNyZWF0ZUNvbnN0cmFpbnRzO1xuXG4gIGlmICghY3JlYXRlQ29uc3RyYWludHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdG9wID0gY3JlYXRlQ29uc3RyYWludHMudG9wLFxuICAgICAgcmlnaHQgPSBjcmVhdGVDb25zdHJhaW50cy5yaWdodCxcbiAgICAgIGJvdHRvbSA9IGNyZWF0ZUNvbnN0cmFpbnRzLmJvdHRvbSxcbiAgICAgIGxlZnQgPSBjcmVhdGVDb25zdHJhaW50cy5sZWZ0O1xuXG4gIGlmICgobGVmdCAmJiBsZWZ0ID49IGV2ZW50LngpIHx8IChyaWdodCAmJiByaWdodCA8PSBldmVudC54KSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd4JywgZXZlbnQueCk7XG4gIH1cblxuICBpZiAoKHRvcCAmJiB0b3AgPj0gZXZlbnQueSkgfHwgKGJvdHRvbSAmJiBib3R0b20gPD0gZXZlbnQueSkpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneScsIGV2ZW50LnkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBnZXREb2NraW5nU25hcE9yaWdpbihkb2NraW5nLCBpc01vdmUsIGV2ZW50KSB7XG4gIHJldHVybiBpc01vdmUgPyAoXG4gICAge1xuICAgICAgeDogZG9ja2luZy54IC0gZXZlbnQueCxcbiAgICAgIHk6IGRvY2tpbmcueSAtIGV2ZW50LnlcbiAgICB9XG4gICkgOiB7XG4gICAgeDogZG9ja2luZy54LFxuICAgIHk6IGRvY2tpbmcueVxuICB9O1xufVxuIiwiaW1wb3J0IHsgZ2V0T3JpZW50YXRpb24gfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm91bmRhcnlBdHRhY2htZW50KHBvc2l0aW9uLCB0YXJnZXRCb3VuZHMpIHtcclxuXHJcbiAgdmFyIG9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24ocG9zaXRpb24sIHRhcmdldEJvdW5kcywgLTE1KTtcclxuXHJcbiAgaWYgKG9yaWVudGF0aW9uICE9PSAnaW50ZXJzZWN0Jykge1xyXG4gICAgcmV0dXJuIG9yaWVudGF0aW9uO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn0iLCJpbXBvcnQgQnBtbkNvbm5lY3RTbmFwcGluZyBmcm9tICcuL0JwbW5Db25uZWN0U25hcHBpbmcnO1xuaW1wb3J0IEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcgZnJvbSAnLi9CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nJztcbmltcG9ydCBTbmFwcGluZ01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgU25hcHBpbmdNb2R1bGUgXSxcbiAgX19pbml0X186IFtcbiAgICAnY29ubmVjdFNuYXBwaW5nJyxcbiAgICAnY3JlYXRlTW92ZVNuYXBwaW5nJ1xuICBdLFxuICBjb25uZWN0U25hcHBpbmc6IFsgJ3R5cGUnLCBCcG1uQ29ubmVjdFNuYXBwaW5nIF0sXG4gIGNyZWF0ZU1vdmVTbmFwcGluZzogWyAndHlwZScsIEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBnZXRFeHRlcm5hbExhYmVsQm91bmRzXG59IGZyb20gJy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZWxlbWVudFRvU3RyaW5nXG59IGZyb20gJy4vVXRpbCc7XG5cblxuZnVuY3Rpb24gZWxlbWVudERhdGEoc2VtYW50aWMsIGF0dHJzKSB7XG4gIHJldHVybiBhc3NpZ24oe1xuICAgIGlkOiBzZW1hbnRpYy5pZCxcbiAgICB0eXBlOiBzZW1hbnRpYy4kdHlwZSxcbiAgICBidXNpbmVzc09iamVjdDogc2VtYW50aWNcbiAgfSwgYXR0cnMpO1xufVxuXG5mdW5jdGlvbiBnZXRXYXlwb2ludHMoYm8sIHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IGJvLmRpLndheXBvaW50O1xuXG4gIGlmICghd2F5cG9pbnRzIHx8IHdheXBvaW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIFsgZ2V0TWlkKHNvdXJjZSksIGdldE1pZCh0YXJnZXQpIF07XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzLm1hcChmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIHsgeDogcC54LCB5OiBwLnkgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vdFlldERyYXduKHRyYW5zbGF0ZSwgc2VtYW50aWMsIHJlZlNlbWFudGljLCBwcm9wZXJ0eSkge1xuICByZXR1cm4gbmV3IEVycm9yKHRyYW5zbGF0ZSgnZWxlbWVudCB7ZWxlbWVudH0gcmVmZXJlbmNlZCBieSB7cmVmZXJlbmNlZH0je3Byb3BlcnR5fSBub3QgeWV0IGRyYXduJywge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhyZWZTZW1hbnRpYyksXG4gICAgcmVmZXJlbmNlZDogZWxlbWVudFRvU3RyaW5nKHNlbWFudGljKSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSkpO1xufVxuXG5cbi8qKlxuICogQW4gaW1wb3J0ZXIgdGhhdCBhZGRzIGJwbW4gZWxlbWVudHMgdG8gdGhlIGNhbnZhc1xuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0VsZW1lbnRGYWN0b3J5fSBlbGVtZW50RmFjdG9yeVxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5JbXBvcnRlcihcbiAgICBldmVudEJ1cywgY2FudmFzLCBlbGVtZW50RmFjdG9yeSxcbiAgICBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSwgdGV4dFJlbmRlcmVyKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX3RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcbiAgdGhpcy5fdGV4dFJlbmRlcmVyID0gdGV4dFJlbmRlcmVyO1xufVxuXG5CcG1uSW1wb3J0ZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAndHJhbnNsYXRlJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLyoqXG4gKiBBZGQgYnBtbiBlbGVtZW50IChzZW1hbnRpYykgdG8gdGhlIGNhbnZhcyBvbnRvIHRoZVxuICogc3BlY2lmaWVkIHBhcmVudCBzaGFwZS5cbiAqL1xuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihzZW1hbnRpYywgcGFyZW50RWxlbWVudCkge1xuXG4gIHZhciBkaSA9IHNlbWFudGljLmRpLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZSxcbiAgICAgIGhpZGRlbjtcblxuICB2YXIgcGFyZW50SW5kZXg7XG5cbiAgLy8gUk9PVCBFTEVNRU5UXG4gIC8vIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgd2UgZGVhbCB3aXRoIGFcbiAgLy8gaW52aXNpYmxlIHJvb3QgZWxlbWVudCAocHJvY2VzcyBvciBjb2xsYWJvcmF0aW9uKVxuICBpZiAoaXMoZGksICdicG1uZGk6QlBNTlBsYW5lJykpIHtcblxuICAgIC8vIGFkZCBhIHZpcnR1YWwgZWxlbWVudCAobm90IGJlaW5nIGRyYXduKVxuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVSb290KGVsZW1lbnREYXRhKHNlbWFudGljKSk7XG5cbiAgICB0aGlzLl9jYW52YXMuc2V0Um9vdEVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICAvLyBTSEFQRVxuICBlbHNlIGlmIChpcyhkaSwgJ2JwbW5kaTpCUE1OU2hhcGUnKSkge1xuXG4gICAgdmFyIGNvbGxhcHNlZCA9ICFpc0V4cGFuZGVkKHNlbWFudGljKSxcbiAgICAgICAgaXNGcmFtZSA9IGlzRnJhbWVFbGVtZW50KHNlbWFudGljKTtcbiAgICBoaWRkZW4gPSBwYXJlbnRFbGVtZW50ICYmIChwYXJlbnRFbGVtZW50LmhpZGRlbiB8fCBwYXJlbnRFbGVtZW50LmNvbGxhcHNlZCk7XG5cbiAgICB2YXIgYm91bmRzID0gc2VtYW50aWMuZGkuYm91bmRzO1xuXG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGVsZW1lbnREYXRhKHNlbWFudGljLCB7XG4gICAgICBjb2xsYXBzZWQ6IGNvbGxhcHNlZCxcbiAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgeDogTWF0aC5yb3VuZChib3VuZHMueCksXG4gICAgICB5OiBNYXRoLnJvdW5kKGJvdW5kcy55KSxcbiAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoYm91bmRzLmhlaWdodCksXG4gICAgICBpc0ZyYW1lOiBpc0ZyYW1lXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgIHRoaXMuX2F0dGFjaEJvdW5kYXJ5KHNlbWFudGljLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBpbnNlcnQgbGFuZXMgYmVoaW5kIG90aGVyIGZsb3cgbm9kZXMgKGNmLiAjNzI3KVxuICAgIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46TGFuZScpKSB7XG4gICAgICBwYXJlbnRJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSkge1xuXG4gICAgICAvLyBjaGVjayB3aGV0aGVyIGRhdGEgc3RvcmUgaXMgaW5zaWRlIG91ciBvdXRzaWRlIG9mIGl0cyBzZW1hbnRpYyBwYXJlbnRcbiAgICAgIGlmICghaXNQb2ludEluc2lkZUJCb3gocGFyZW50RWxlbWVudCwgZ2V0TWlkKGJvdW5kcykpKSB7XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jYW52YXMuYWRkU2hhcGUoZWxlbWVudCwgcGFyZW50RWxlbWVudCwgcGFyZW50SW5kZXgpO1xuICB9XG5cbiAgLy8gQ09OTkVDVElPTlxuICBlbHNlIGlmIChpcyhkaSwgJ2JwbW5kaTpCUE1ORWRnZScpKSB7XG5cbiAgICB2YXIgc291cmNlID0gdGhpcy5fZ2V0U291cmNlKHNlbWFudGljKSxcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0KHNlbWFudGljKTtcblxuICAgIGhpZGRlbiA9IHBhcmVudEVsZW1lbnQgJiYgKHBhcmVudEVsZW1lbnQuaGlkZGVuIHx8IHBhcmVudEVsZW1lbnQuY29sbGFwc2VkKTtcblxuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKGVsZW1lbnREYXRhKHNlbWFudGljLCB7XG4gICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICB3YXlwb2ludHM6IGdldFdheXBvaW50cyhzZW1hbnRpYywgc291cmNlLCB0YXJnZXQpXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgICAvLyByZW5kZXIgYWx3YXlzIG9uIHRvcDsgdGhpcyBlbnN1cmVzIERhdGFBc3NvY2lhdGlvbnNcbiAgICAgIC8vIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkgYWNyb3NzIGRpZmZlcmVudCBcImhhY2tzXCIgcGVvcGxlXG4gICAgICAvLyBsb3ZlIHRvIG1vZGVsIHN1Y2ggYXMgY3Jvc3MgcGFydGljaXBhbnQgLyBzdWIgcHJvY2Vzc1xuICAgICAgLy8gYXNzb2NpYXRpb25zXG4gICAgICBwYXJlbnRFbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBpbnNlcnQgc2VxdWVuY2UgZmxvd3MgYmVoaW5kIG90aGVyIGZsb3cgbm9kZXMgKGNmLiAjNzI3KVxuICAgIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgIHBhcmVudEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9jYW52YXMuYWRkQ29ubmVjdGlvbihlbGVtZW50LCBwYXJlbnRFbGVtZW50LCBwYXJlbnRJbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgndW5rbm93biBkaSB7ZGl9IGZvciBlbGVtZW50IHtzZW1hbnRpY30nLCB7XG4gICAgICBkaTogZWxlbWVudFRvU3RyaW5nKGRpKSxcbiAgICAgIHNlbWFudGljOiBlbGVtZW50VG9TdHJpbmcoc2VtYW50aWMpXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gKG9wdGlvbmFsKSBMQUJFTFxuICBpZiAoaXNMYWJlbEV4dGVybmFsKHNlbWFudGljKSAmJiBnZXRMYWJlbChlbGVtZW50KSkge1xuICAgIHRoaXMuYWRkTGFiZWwoc2VtYW50aWMsIGVsZW1lbnQpO1xuICB9XG5cblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdicG1uRWxlbWVudC5hZGRlZCcsIHsgZWxlbWVudDogZWxlbWVudCB9KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGJvdW5kYXJ5IGVsZW1lbnQgdG8gdGhlIGdpdmVuIGhvc3RcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJvdW5kYXJ5U2VtYW50aWNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGJvdW5kYXJ5RWxlbWVudFxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9hdHRhY2hCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5U2VtYW50aWMsIGJvdW5kYXJ5RWxlbWVudCkge1xuICB2YXIgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuICB2YXIgaG9zdFNlbWFudGljID0gYm91bmRhcnlTZW1hbnRpYy5hdHRhY2hlZFRvUmVmO1xuXG4gIGlmICghaG9zdFNlbWFudGljKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbWlzc2luZyB7c2VtYW50aWN9I2F0dGFjaGVkVG9SZWYnLCB7XG4gICAgICBzZW1hbnRpYzogZWxlbWVudFRvU3RyaW5nKGJvdW5kYXJ5U2VtYW50aWMpXG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIGhvc3QgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGhvc3RTZW1hbnRpYy5pZCksXG4gICAgICBhdHRhY2hlcnMgPSBob3N0ICYmIGhvc3QuYXR0YWNoZXJzO1xuXG4gIGlmICghaG9zdCkge1xuICAgIHRocm93IG5vdFlldERyYXduKHRyYW5zbGF0ZSwgYm91bmRhcnlTZW1hbnRpYywgaG9zdFNlbWFudGljLCAnYXR0YWNoZWRUb1JlZicpO1xuICB9XG5cbiAgLy8gd2lyZSBlbGVtZW50Lmhvc3QgPD4gaG9zdC5hdHRhY2hlcnNcbiAgYm91bmRhcnlFbGVtZW50Lmhvc3QgPSBob3N0O1xuXG4gIGlmICghYXR0YWNoZXJzKSB7XG4gICAgaG9zdC5hdHRhY2hlcnMgPSBhdHRhY2hlcnMgPSBbXTtcbiAgfVxuXG4gIGlmIChhdHRhY2hlcnMuaW5kZXhPZihib3VuZGFyeUVsZW1lbnQpID09PSAtMSkge1xuICAgIGF0dGFjaGVycy5wdXNoKGJvdW5kYXJ5RWxlbWVudCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBhZGQgbGFiZWwgZm9yIGFuIGVsZW1lbnRcbiAqL1xuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5hZGRMYWJlbCA9IGZ1bmN0aW9uKHNlbWFudGljLCBlbGVtZW50KSB7XG4gIHZhciBib3VuZHMsXG4gICAgICB0ZXh0LFxuICAgICAgbGFiZWw7XG5cbiAgYm91bmRzID0gZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhzZW1hbnRpYywgZWxlbWVudCk7XG5cbiAgdGV4dCA9IGdldExhYmVsKGVsZW1lbnQpO1xuXG4gIGlmICh0ZXh0KSB7XG5cbiAgICAvLyBnZXQgY29ycmVjdGVkIGJvdW5kcyBmcm9tIGFjdHVhbCBsYXlvdXRlZCB0ZXh0XG4gICAgYm91bmRzID0gdGhpcy5fdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsTGFiZWxCb3VuZHMoYm91bmRzLCB0ZXh0KTtcbiAgfVxuXG4gIGxhYmVsID0gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlTGFiZWwoZWxlbWVudERhdGEoc2VtYW50aWMsIHtcbiAgICBpZDogc2VtYW50aWMuaWQgKyAnX2xhYmVsJyxcbiAgICBsYWJlbFRhcmdldDogZWxlbWVudCxcbiAgICB0eXBlOiAnbGFiZWwnLFxuICAgIGhpZGRlbjogZWxlbWVudC5oaWRkZW4gfHwgIWdldExhYmVsKGVsZW1lbnQpLFxuICAgIHg6IE1hdGgucm91bmQoYm91bmRzLngpLFxuICAgIHk6IE1hdGgucm91bmQoYm91bmRzLnkpLFxuICAgIHdpZHRoOiBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCksXG4gICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGJvdW5kcy5oZWlnaHQpXG4gIH0pKTtcblxuICByZXR1cm4gdGhpcy5fY2FudmFzLmFkZFNoYXBlKGxhYmVsLCBlbGVtZW50LnBhcmVudCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZHJhd24gY29ubmVjdGlvbiBlbmQgYmFzZWQgb24gdGhlIGdpdmVuIHNpZGUuXG4gKlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBlbmQgaXMgbm90IHlldCBkcmF3blxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRFbmQgPSBmdW5jdGlvbihzZW1hbnRpYywgc2lkZSkge1xuXG4gIHZhciBlbGVtZW50LFxuICAgICAgcmVmU2VtYW50aWMsXG4gICAgICB0eXBlID0gc2VtYW50aWMuJHR5cGUsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgcmVmU2VtYW50aWMgPSBzZW1hbnRpY1tzaWRlICsgJ1JlZiddO1xuXG4gIC8vIGhhbmRsZSBteXN0ZXJpb3VzIGlzTWFueSBEYXRhQXNzb2NpYXRpb24jc291cmNlUmVmXG4gIGlmIChzaWRlID09PSAnc291cmNlJyAmJiB0eXBlID09PSAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpIHtcbiAgICByZWZTZW1hbnRpYyA9IHJlZlNlbWFudGljICYmIHJlZlNlbWFudGljWzBdO1xuICB9XG5cbiAgLy8gZml4IHNvdXJjZSAvIHRhcmdldCBmb3IgRGF0YUlucHV0QXNzb2NpYXRpb24gLyBEYXRhT3V0cHV0QXNzb2NpYXRpb25cbiAgaWYgKHNpZGUgPT09ICdzb3VyY2UnICYmIHR5cGUgPT09ICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicgfHxcbiAgICAgIHNpZGUgPT09ICd0YXJnZXQnICYmIHR5cGUgPT09ICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykge1xuXG4gICAgcmVmU2VtYW50aWMgPSBzZW1hbnRpYy4kcGFyZW50O1xuICB9XG5cbiAgZWxlbWVudCA9IHJlZlNlbWFudGljICYmIHRoaXMuX2dldEVsZW1lbnQocmVmU2VtYW50aWMpO1xuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBpZiAocmVmU2VtYW50aWMpIHtcbiAgICB0aHJvdyBub3RZZXREcmF3bih0cmFuc2xhdGUsIHNlbWFudGljLCByZWZTZW1hbnRpYywgc2lkZSArICdSZWYnKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCd7c2VtYW50aWN9I3tzaWRlfSBSZWYgbm90IHNwZWNpZmllZCcsIHtcbiAgICAgIHNlbWFudGljOiBlbGVtZW50VG9TdHJpbmcoc2VtYW50aWMpLFxuICAgICAgc2lkZTogc2lkZVxuICAgIH0pKTtcbiAgfVxufTtcblxuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5fZ2V0U291cmNlID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldEVuZChzZW1hbnRpYywgJ3NvdXJjZScpO1xufTtcblxuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5fZ2V0VGFyZ2V0ID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldEVuZChzZW1hbnRpYywgJ3RhcmdldCcpO1xufTtcblxuXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRFbGVtZW50ID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoc2VtYW50aWMuaWQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94KGJib3gsIHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQueCxcbiAgICAgIHkgPSBwb2ludC55O1xuXG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gaXNGcmFtZUVsZW1lbnQoc2VtYW50aWMpIHtcbiAgcmV0dXJuIGlzKHNlbWFudGljLCAnYnBtbjpHcm91cCcpO1xufSIsImltcG9ydCB7XG4gIGZpbHRlcixcbiAgZmluZCxcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBSZWZzIGZyb20gJ29iamVjdC1yZWZzJztcblxuaW1wb3J0IHtcbiAgZWxlbWVudFRvU3RyaW5nXG59IGZyb20gJy4vVXRpbCc7XG5cbnZhciBkaVJlZnMgPSBuZXcgUmVmcyhcbiAgeyBuYW1lOiAnYnBtbkVsZW1lbnQnLCBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gIHsgbmFtZTogJ2RpJywgY29uZmlndXJhYmxlOiB0cnVlIH1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFuIGVsZW1lbnQgaGFzIHRoZSBnaXZlbiBtZXRhLW1vZGVsIHR5cGVcbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSAgZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgIHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpcyhlbGVtZW50LCB0eXBlKSB7XG4gIHJldHVybiBlbGVtZW50LiRpbnN0YW5jZU9mKHR5cGUpO1xufVxuXG5cbi8qKlxuICogRmluZCBhIHN1aXRhYmxlIGRpc3BsYXkgY2FuZGlkYXRlIGZvciBkZWZpbml0aW9ucyB3aGVyZSB0aGUgREkgZG9lcyBub3RcbiAqIGNvcnJlY3RseSBzcGVjaWZ5IG9uZS5cbiAqL1xuZnVuY3Rpb24gZmluZERpc3BsYXlDYW5kaWRhdGUoZGVmaW5pdGlvbnMpIHtcbiAgcmV0dXJuIGZpbmQoZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGlzKGUsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlLCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG4gIH0pO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5UcmVlV2Fsa2VyKGhhbmRsZXIsIHRyYW5zbGF0ZSkge1xuXG4gIC8vIGxpc3Qgb2YgY29udGFpbmVycyBhbHJlYWR5IHdhbGtlZFxuICB2YXIgaGFuZGxlZEVsZW1lbnRzID0ge307XG5cbiAgLy8gbGlzdCBvZiBlbGVtZW50cyB0byBoYW5kbGUgZGVmZXJyZWQgdG8gZW5zdXJlXG4gIC8vIHByZXJlcXVpc2l0ZXMgYXJlIGRyYXduXG4gIHZhciBkZWZlcnJlZCA9IFtdO1xuXG4gIC8vIEhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGNvbnRleHR1YWwoZm4sIGN0eCkge1xuICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICBmbihlLCBjdHgpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVkKGVsZW1lbnQpIHtcbiAgICBoYW5kbGVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNIYW5kbGVkKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gaGFuZGxlZEVsZW1lbnRzW2VsZW1lbnQuaWRdO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaXQoZWxlbWVudCwgY3R4KSB7XG5cbiAgICB2YXIgZ2Z4ID0gZWxlbWVudC5nZng7XG5cbiAgICAvLyBhdm9pZCBtdWx0aXBsZSByZW5kZXJpbmcgb2YgZWxlbWVudHNcbiAgICBpZiAoZ2Z4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZSgnYWxyZWFkeSByZW5kZXJlZCB7ZWxlbWVudH0nLCB7IGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhlbGVtZW50KSB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjYWxsIGhhbmRsZXJcbiAgICByZXR1cm4gaGFuZGxlci5lbGVtZW50KGVsZW1lbnQsIGN0eCk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdFJvb3QoZWxlbWVudCwgZGlhZ3JhbSkge1xuICAgIHJldHVybiBoYW5kbGVyLnJvb3QoZWxlbWVudCwgZGlhZ3JhbSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdElmRGkoZWxlbWVudCwgY3R4KSB7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIGdmeCA9IGVsZW1lbnQuZGkgJiYgdmlzaXQoZWxlbWVudCwgY3R4KTtcblxuICAgICAgaGFuZGxlZChlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIGdmeDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dFcnJvcihlLm1lc3NhZ2UsIHsgZWxlbWVudDogZWxlbWVudCwgZXJyb3I6IGUgfSk7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IodHJhbnNsYXRlKCdmYWlsZWQgdG8gaW1wb3J0IHtlbGVtZW50fScsIHsgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGVsZW1lbnQpIH0pKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSwgY29udGV4dCkge1xuICAgIGhhbmRsZXIuZXJyb3IobWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICAvLyBESSBoYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJEaShkaSkge1xuICAgIHZhciBicG1uRWxlbWVudCA9IGRpLmJwbW5FbGVtZW50O1xuXG4gICAgaWYgKGJwbW5FbGVtZW50KSB7XG4gICAgICBpZiAoYnBtbkVsZW1lbnQuZGkpIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgdHJhbnNsYXRlKCdtdWx0aXBsZSBESSBlbGVtZW50cyBkZWZpbmVkIGZvciB7ZWxlbWVudH0nLCB7XG4gICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoYnBtbkVsZW1lbnQpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBlbGVtZW50OiBicG1uRWxlbWVudCB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaVJlZnMuYmluZChicG1uRWxlbWVudCwgJ2RpJyk7XG4gICAgICAgIGJwbW5FbGVtZW50LmRpID0gZGk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICB0cmFuc2xhdGUoJ25vIGJwbW5FbGVtZW50IHJlZmVyZW5jZWQgaW4ge2VsZW1lbnR9Jywge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhkaSlcbiAgICAgICAgfSksXG4gICAgICAgIHsgZWxlbWVudDogZGkgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEaWFncmFtKGRpYWdyYW0pIHtcbiAgICBoYW5kbGVQbGFuZShkaWFncmFtLnBsYW5lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYW5lKHBsYW5lKSB7XG4gICAgcmVnaXN0ZXJEaShwbGFuZSk7XG5cbiAgICBmb3JFYWNoKHBsYW5lLnBsYW5lRWxlbWVudCwgaGFuZGxlUGxhbmVFbGVtZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYW5lRWxlbWVudChwbGFuZUVsZW1lbnQpIHtcbiAgICByZWdpc3RlckRpKHBsYW5lRWxlbWVudCk7XG4gIH1cblxuXG4gIC8vIFNlbWFudGljIGhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogSGFuZGxlIGRlZmluaXRpb25zIGFuZCByZXR1cm4gdGhlIHJlbmRlcmVkIGRpYWdyYW0gKGlmIGFueSlcbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9ucyB0byB3YWxrIGFuZCBpbXBvcnRcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBbZGlhZ3JhbV0gc3BlY2lmaWMgZGlhZ3JhbSB0byBpbXBvcnQgYW5kIGRpc3BsYXlcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGRpYWdyYW0gdG8gZGlzcGxheSBjb3VsZCBiZSBmb3VuZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMsIGRpYWdyYW0pIHtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSB3YWxrIHRoZSBjb3JyZWN0IGJwbW5FbGVtZW50XG5cbiAgICB2YXIgZGlhZ3JhbXMgPSBkZWZpbml0aW9ucy5kaWFncmFtcztcblxuICAgIGlmIChkaWFncmFtICYmIGRpYWdyYW1zLmluZGV4T2YoZGlhZ3JhbSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdkaWFncmFtIG5vdCBwYXJ0IG9mIGJwbW46RGVmaW5pdGlvbnMnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFkaWFncmFtICYmIGRpYWdyYW1zICYmIGRpYWdyYW1zLmxlbmd0aCkge1xuICAgICAgZGlhZ3JhbSA9IGRpYWdyYW1zWzBdO1xuICAgIH1cblxuICAgIC8vIG5vIGRpYWdyYW0gLT4gbm90aGluZyB0byBpbXBvcnRcbiAgICBpZiAoIWRpYWdyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIGRpYWdyYW0gdG8gZGlzcGxheScpKTtcbiAgICB9XG5cbiAgICAvLyBsb2FkIERJIGZyb20gc2VsZWN0ZWQgZGlhZ3JhbSBvbmx5XG4gICAgaGFuZGxlRGlhZ3JhbShkaWFncmFtKTtcblxuXG4gICAgdmFyIHBsYW5lID0gZGlhZ3JhbS5wbGFuZTtcblxuICAgIGlmICghcGxhbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoXG4gICAgICAgICdubyBwbGFuZSBmb3Ige2VsZW1lbnR9JyxcbiAgICAgICAgeyBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoZGlhZ3JhbSkgfVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gcGxhbmUuYnBtbkVsZW1lbnQ7XG5cbiAgICAvLyBlbnN1cmUgd2UgZGVmYXVsdCB0byBhIHN1aXRhYmxlIGRpc3BsYXkgY2FuZGlkYXRlIChwcm9jZXNzIG9yIGNvbGxhYm9yYXRpb24pLFxuICAgIC8vIGV2ZW4gaWYgbm9uIGlzIHNwZWNpZmllZCBpbiBESVxuICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgIHJvb3RFbGVtZW50ID0gZmluZERpc3BsYXlDYW5kaWRhdGUoZGVmaW5pdGlvbnMpO1xuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIHByb2Nlc3Mgb3IgY29sbGFib3JhdGlvbiB0byBkaXNwbGF5JykpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICB0cmFuc2xhdGUoJ2NvcnJlY3RpbmcgbWlzc2luZyBicG1uRWxlbWVudCBvbiB7cGxhbmV9IHRvIHtyb290RWxlbWVudH0nLCB7XG4gICAgICAgICAgICBwbGFuZTogZWxlbWVudFRvU3RyaW5nKHBsYW5lKSxcbiAgICAgICAgICAgIHJvb3RFbGVtZW50OiBlbGVtZW50VG9TdHJpbmcocm9vdEVsZW1lbnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBjb3JyZWN0IERJIG9uIHRoZSBmbHlcbiAgICAgICAgcGxhbmUuYnBtbkVsZW1lbnQgPSByb290RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJEaShwbGFuZSk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgY3R4ID0gdmlzaXRSb290KHJvb3RFbGVtZW50LCBwbGFuZSk7XG5cbiAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgaGFuZGxlUHJvY2Vzcyhyb290RWxlbWVudCwgY3R4KTtcbiAgICB9IGVsc2UgaWYgKGlzKHJvb3RFbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcbiAgICAgIGhhbmRsZUNvbGxhYm9yYXRpb24ocm9vdEVsZW1lbnQsIGN0eCk7XG5cbiAgICAgIC8vIGZvcmNlIGRyYXdpbmcgb2YgZXZlcnl0aGluZyBub3QgeWV0IGRyYXduIHRoYXQgaXMgcGFydCBvZiB0aGUgdGFyZ2V0IERJXG4gICAgICBoYW5kbGVVbmhhbmRsZWRQcm9jZXNzZXMoZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZSgndW5zdXBwb3J0ZWQgYnBtbkVsZW1lbnQgZm9yIHtwbGFuZX06IHtyb290RWxlbWVudH0nLCB7XG4gICAgICAgICAgcGxhbmU6IGVsZW1lbnRUb1N0cmluZyhwbGFuZSksXG4gICAgICAgICAgcm9vdEVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhyb290RWxlbWVudClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIGFsbCBkZWZlcnJlZCBlbGVtZW50c1xuICAgIGhhbmRsZURlZmVycmVkKGRlZmVycmVkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURlZmVycmVkKCkge1xuXG4gICAgdmFyIGZuO1xuXG4gICAgLy8gZHJhaW4gZGVmZXJyZWQgdW50aWwgZW1wdHlcbiAgICB3aGlsZSAoZGVmZXJyZWQubGVuZ3RoKSB7XG4gICAgICBmbiA9IGRlZmVycmVkLnNoaWZ0KCk7XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUHJvY2Vzcyhwcm9jZXNzLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKHByb2Nlc3MsIGNvbnRleHQpO1xuICAgIGhhbmRsZUlvU3BlY2lmaWNhdGlvbihwcm9jZXNzLmlvU3BlY2lmaWNhdGlvbiwgY29udGV4dCk7XG5cbiAgICBoYW5kbGVBcnRpZmFjdHMocHJvY2Vzcy5hcnRpZmFjdHMsIGNvbnRleHQpO1xuXG4gICAgLy8gbG9nIHByb2Nlc3MgaGFuZGxlZFxuICAgIGhhbmRsZWQocHJvY2Vzcyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRQcm9jZXNzZXMocm9vdEVsZW1lbnRzLCBjdHgpIHtcblxuICAgIC8vIHdhbGsgdGhyb3VnaCBhbGwgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZHJhd24gYW5kIGRyYXcgdGhlbVxuICAgIC8vIGlmIHRoZXkgY29udGFpbiBsYW5lcyB3aXRoIERJIGluZm9ybWF0aW9uLlxuICAgIC8vIHdlIGRvIHRoaXMgdG8gcGFzcyB0aGUgZnJlZS1mbG9hdGluZyBsYW5lIHRlc3QgY2FzZXMgaW4gdGhlIE1JV0cgdGVzdCBzdWl0ZVxuICAgIHZhciBwcm9jZXNzZXMgPSBmaWx0ZXIocm9vdEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gIWlzSGFuZGxlZChlKSAmJiBpcyhlLCAnYnBtbjpQcm9jZXNzJykgJiYgZS5sYW5lU2V0cztcbiAgICB9KTtcblxuICAgIHByb2Nlc3Nlcy5mb3JFYWNoKGNvbnRleHR1YWwoaGFuZGxlUHJvY2VzcywgY3R4KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlRmxvdyhtZXNzYWdlRmxvdywgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShtZXNzYWdlRmxvdywgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlRmxvd3MobWVzc2FnZUZsb3dzLCBjb250ZXh0KSB7XG4gICAgZm9yRWFjaChtZXNzYWdlRmxvd3MsIGNvbnRleHR1YWwoaGFuZGxlTWVzc2FnZUZsb3csIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFBc3NvY2lhdGlvbihhc3NvY2lhdGlvbiwgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShhc3NvY2lhdGlvbiwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEYXRhSW5wdXQoZGF0YUlucHV0LCBjb250ZXh0KSB7XG4gICAgdmlzaXRJZkRpKGRhdGFJbnB1dCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEYXRhT3V0cHV0KGRhdGFPdXRwdXQsIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoZGF0YU91dHB1dCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVBcnRpZmFjdChhcnRpZmFjdCwgY29udGV4dCkge1xuXG4gICAgLy8gYnBtbjpUZXh0QW5ub3RhdGlvblxuICAgIC8vIGJwbW46R3JvdXBcbiAgICAvLyBicG1uOkFzc29jaWF0aW9uXG5cbiAgICB2aXNpdElmRGkoYXJ0aWZhY3QsIGNvbnRleHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RzKGFydGlmYWN0cywgY29udGV4dCkge1xuXG4gICAgZm9yRWFjaChhcnRpZmFjdHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChpcyhlLCAnYnBtbjpBc3NvY2lhdGlvbicpKSB7XG4gICAgICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaGFuZGxlQXJ0aWZhY3QoZSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlQXJ0aWZhY3QoZSwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJb1NwZWNpZmljYXRpb24oaW9TcGVjaWZpY2F0aW9uLCBjb250ZXh0KSB7XG5cbiAgICBpZiAoIWlvU3BlY2lmaWNhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvckVhY2goaW9TcGVjaWZpY2F0aW9uLmRhdGFJbnB1dHMsIGNvbnRleHR1YWwoaGFuZGxlRGF0YUlucHV0LCBjb250ZXh0KSk7XG4gICAgZm9yRWFjaChpb1NwZWNpZmljYXRpb24uZGF0YU91dHB1dHMsIGNvbnRleHR1YWwoaGFuZGxlRGF0YU91dHB1dCwgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3ViUHJvY2VzcyhzdWJQcm9jZXNzLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKHN1YlByb2Nlc3MsIGNvbnRleHQpO1xuICAgIGhhbmRsZUFydGlmYWN0cyhzdWJQcm9jZXNzLmFydGlmYWN0cywgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVGbG93Tm9kZShmbG93Tm9kZSwgY29udGV4dCkge1xuICAgIHZhciBjaGlsZEN0eCA9IHZpc2l0SWZEaShmbG93Tm9kZSwgY29udGV4dCk7XG5cbiAgICBpZiAoaXMoZmxvd05vZGUsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgaGFuZGxlU3ViUHJvY2VzcyhmbG93Tm9kZSwgY2hpbGRDdHggfHwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKGlzKGZsb3dOb2RlLCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgICBoYW5kbGVJb1NwZWNpZmljYXRpb24oZmxvd05vZGUuaW9TcGVjaWZpY2F0aW9uLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBkZWZlciBoYW5kbGluZyBvZiBhc3NvY2lhdGlvbnNcbiAgICAvLyBhZmZlY3RlZCB0eXBlczpcbiAgICAvL1xuICAgIC8vICAgKiBicG1uOkFjdGl2aXR5XG4gICAgLy8gICAqIGJwbW46VGhyb3dFdmVudFxuICAgIC8vICAgKiBicG1uOkNhdGNoRXZlbnRcbiAgICAvL1xuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBmb3JFYWNoKGZsb3dOb2RlLmRhdGFJbnB1dEFzc29jaWF0aW9ucywgY29udGV4dHVhbChoYW5kbGVEYXRhQXNzb2NpYXRpb24sIGNvbnRleHQpKTtcbiAgICAgIGZvckVhY2goZmxvd05vZGUuZGF0YU91dHB1dEFzc29jaWF0aW9ucywgY29udGV4dHVhbChoYW5kbGVEYXRhQXNzb2NpYXRpb24sIGNvbnRleHQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVNlcXVlbmNlRmxvdyhzZXF1ZW5jZUZsb3csIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoc2VxdWVuY2VGbG93LCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFFbGVtZW50KGRhdGFPYmplY3QsIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoZGF0YU9iamVjdCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMYW5lKGxhbmUsIGNvbnRleHQpIHtcblxuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBuZXdDb250ZXh0ID0gdmlzaXRJZkRpKGxhbmUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFuZS5jaGlsZExhbmVTZXQpIHtcbiAgICAgICAgaGFuZGxlTGFuZVNldChsYW5lLmNoaWxkTGFuZVNldCwgbmV3Q29udGV4dCB8fCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgd2lyZUZsb3dOb2RlUmVmcyhsYW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxhbmVTZXQobGFuZVNldCwgY29udGV4dCkge1xuICAgIGZvckVhY2gobGFuZVNldC5sYW5lcywgY29udGV4dHVhbChoYW5kbGVMYW5lLCBjb250ZXh0KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMYW5lU2V0cyhsYW5lU2V0cywgY29udGV4dCkge1xuICAgIGZvckVhY2gobGFuZVNldHMsIGNvbnRleHR1YWwoaGFuZGxlTGFuZVNldCwgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGV4dCkge1xuICAgIGhhbmRsZUZsb3dFbGVtZW50cyhjb250YWluZXIuZmxvd0VsZW1lbnRzLCBjb250ZXh0KTtcblxuICAgIGlmIChjb250YWluZXIubGFuZVNldHMpIHtcbiAgICAgIGhhbmRsZUxhbmVTZXRzKGNvbnRhaW5lci5sYW5lU2V0cywgY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmxvd0VsZW1lbnRzKGZsb3dFbGVtZW50cywgY29udGV4dCkge1xuICAgIGZvckVhY2goZmxvd0VsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoaXMoZSwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgICAgZGVmZXJyZWQucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVTZXF1ZW5jZUZsb3coZSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpcyhlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgICAgZGVmZXJyZWQudW5zaGlmdChmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVGbG93Tm9kZShlLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICAgICAgaGFuZGxlRmxvd05vZGUoZSwgY29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkRhdGFPYmplY3QnKSkge1xuXG4gICAgICAgIC8vIFNLSVAgKGFzc3VtZSBjb3JyZWN0IHJlZmVyZW5jaW5nIHZpYSBEYXRhT2JqZWN0UmVmZXJlbmNlKVxuICAgICAgfSBlbHNlIGlmIChpcyhlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSkge1xuICAgICAgICBoYW5kbGVEYXRhRWxlbWVudChlLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoaXMoZSwgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpKSB7XG4gICAgICAgIGhhbmRsZURhdGFFbGVtZW50KGUsIGNvbnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgdHJhbnNsYXRlKCd1bnJlY29nbml6ZWQgZmxvd0VsZW1lbnQge2VsZW1lbnR9IGluIGNvbnRleHQge2NvbnRleHR9Jywge1xuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGUpLFxuICAgICAgICAgICAgY29udGV4dDogKGNvbnRleHQgPyBlbGVtZW50VG9TdHJpbmcoY29udGV4dC5idXNpbmVzc09iamVjdCkgOiAnbnVsbCcpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBlbGVtZW50OiBlLCBjb250ZXh0OiBjb250ZXh0IH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50LCBjb250ZXh0KSB7XG4gICAgdmFyIG5ld0N0eCA9IHZpc2l0SWZEaShwYXJ0aWNpcGFudCwgY29udGV4dCk7XG5cbiAgICB2YXIgcHJvY2VzcyA9IHBhcnRpY2lwYW50LnByb2Nlc3NSZWY7XG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGhhbmRsZVByb2Nlc3MocHJvY2VzcywgbmV3Q3R4IHx8IGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbGxhYm9yYXRpb24oY29sbGFib3JhdGlvbikge1xuXG4gICAgZm9yRWFjaChjb2xsYWJvcmF0aW9uLnBhcnRpY2lwYW50cywgY29udGV4dHVhbChoYW5kbGVQYXJ0aWNpcGFudCkpO1xuXG4gICAgaGFuZGxlQXJ0aWZhY3RzKGNvbGxhYm9yYXRpb24uYXJ0aWZhY3RzKTtcblxuICAgIC8vIGhhbmRsZSBtZXNzYWdlIGZsb3dzIGxhdGVzdCBpbiB0aGUgcHJvY2Vzc1xuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBoYW5kbGVNZXNzYWdlRmxvd3MoY29sbGFib3JhdGlvbi5tZXNzYWdlRmxvd3MpO1xuICAgIH0pO1xuICB9XG5cblxuICBmdW5jdGlvbiB3aXJlRmxvd05vZGVSZWZzKGxhbmUpIHtcblxuICAgIC8vIHdpcmUgdGhlIHZpcnR1YWwgZmxvd05vZGVSZWZzIDwtPiByZWxhdGlvbnNoaXBcbiAgICBmb3JFYWNoKGxhbmUuZmxvd05vZGVSZWYsIGZ1bmN0aW9uKGZsb3dOb2RlKSB7XG4gICAgICB2YXIgbGFuZXMgPSBmbG93Tm9kZS5nZXQoJ2xhbmVzJyk7XG5cbiAgICAgIGlmIChsYW5lcykge1xuICAgICAgICBsYW5lcy5wdXNoKGxhbmUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQVBJIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICByZXR1cm4ge1xuICAgIGhhbmRsZURlZmVycmVkOiBoYW5kbGVEZWZlcnJlZCxcbiAgICBoYW5kbGVEZWZpbml0aW9uczogaGFuZGxlRGVmaW5pdGlvbnMsXG4gICAgaGFuZGxlU3ViUHJvY2VzczogaGFuZGxlU3ViUHJvY2VzcyxcbiAgICByZWdpc3RlckRpOiByZWdpc3RlckRpXG4gIH07XG59IiwiaW1wb3J0IEJwbW5UcmVlV2Fsa2VyIGZyb20gJy4vQnBtblRyZWVXYWxrZXInO1xuXG5cbi8qKlxuICogVGhlIGltcG9ydEJwbW5EaWFncmFtIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbXBvcnRCUE1ORGlhZ3JhbVJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiogVGhlIGltcG9ydEJwbW5EaWFncmFtIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydEJQTU5EaWFncmFtRXJyb3JcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4gKiBJbXBvcnQgdGhlIGRlZmluaXRpb25zIGludG8gYSBkaWFncmFtLlxuICpcbiAqIEVycm9ycyBhbmQgd2FybmluZ3MgYXJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIHNwZWNpZmllZCBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0gIHtkanMuRGlhZ3JhbX0gZGlhZ3JhbVxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudDxEZWZpbml0aW9ucz59IGRlZmluaXRpb25zXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50PEJQTU5EaWFncmFtPn0gW2JwbW5EaWFncmFtXSB0aGUgZGlhZ3JhbSB0byBiZSByZW5kZXJlZFxuICogKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0QlBNTkRpYWdyYW1SZXN1bHQsIEltcG9ydEJQTU5EaWFncmFtRXJyb3I+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0QnBtbkRpYWdyYW0oZGlhZ3JhbSwgZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKSB7XG5cbiAgdmFyIGltcG9ydGVyLFxuICAgICAgZXZlbnRCdXMsXG4gICAgICB0cmFuc2xhdGU7XG5cbiAgdmFyIGVycm9yLFxuICAgICAgd2FybmluZ3MgPSBbXTtcblxuICAvKipcbiAgICogV2FsayB0aGUgZGlhZ3JhbSBzZW1hbnRpY2FsbHksIGltcG9ydGluZyAoPWRyYXdpbmcpXG4gICAqIGFsbCBlbGVtZW50cyB5b3UgZW5jb3VudGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8RGVmaW5pdGlvbnM+fSBkZWZpbml0aW9uc1xuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fSBicG1uRGlhZ3JhbVxuICAgKi9cbiAgZnVuY3Rpb24gcmVuZGVyKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkge1xuXG4gICAgdmFyIHZpc2l0b3IgPSB7XG5cbiAgICAgIHJvb3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGltcG9ydGVyLmFkZChlbGVtZW50KTtcbiAgICAgIH0sXG5cbiAgICAgIGVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHBhcmVudFNoYXBlKSB7XG4gICAgICAgIHJldHVybiBpbXBvcnRlci5hZGQoZWxlbWVudCwgcGFyZW50U2hhcGUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCh7IG1lc3NhZ2U6IG1lc3NhZ2UsIGNvbnRleHQ6IGNvbnRleHQgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB3YWxrZXIgPSBuZXcgQnBtblRyZWVXYWxrZXIodmlzaXRvciwgdHJhbnNsYXRlKTtcblxuICAgIC8vIHRyYXZlcnNlIEJQTU4gMi4wIGRvY3VtZW50IG1vZGVsLFxuICAgIC8vIHN0YXJ0aW5nIGF0IGRlZmluaXRpb25zXG4gICAgd2Fsa2VyLmhhbmRsZURlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGltcG9ydGVyID0gZGlhZ3JhbS5nZXQoJ2JwbW5JbXBvcnRlcicpO1xuICAgICAgZXZlbnRCdXMgPSBkaWFncmFtLmdldCgnZXZlbnRCdXMnKTtcbiAgICAgIHRyYW5zbGF0ZSA9IGRpYWdyYW0uZ2V0KCd0cmFuc2xhdGUnKTtcblxuICAgICAgZXZlbnRCdXMuZmlyZSgnaW1wb3J0LnJlbmRlci5zdGFydCcsIHsgZGVmaW5pdGlvbnM6IGRlZmluaXRpb25zIH0pO1xuXG4gICAgICByZW5kZXIoZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKTtcblxuICAgICAgZXZlbnRCdXMuZmlyZSgnaW1wb3J0LnJlbmRlci5jb21wbGV0ZScsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICB3YXJuaW5nczogd2FybmluZ3NcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IHdhcm5pbmdzOiB3YXJuaW5ncyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgIGUud2FybmluZ3MgPSB3YXJuaW5ncztcbiAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBlbGVtZW50VG9TdHJpbmcoZSkge1xuICBpZiAoIWUpIHtcbiAgICByZXR1cm4gJzxudWxsPic7XG4gIH1cblxuICByZXR1cm4gJzwnICsgZS4kdHlwZSArIChlLmlkID8gJyBpZD1cIicgKyBlLmlkIDogJycpICsgJ1wiIC8+Jztcbn0iLCJpbXBvcnQgdHJhbnNsYXRlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcblxuaW1wb3J0IEJwbW5JbXBvcnRlciBmcm9tICcuL0JwbW5JbXBvcnRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICB0cmFuc2xhdGVcbiAgXSxcbiAgYnBtbkltcG9ydGVyOiBbICd0eXBlJywgQnBtbkltcG9ydGVyIF1cbn07IiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ21pbi1kYXNoJztcblxuLy8gVE9ETyhuaWtrdSk6IHJlbW92ZSB3aXRoIGZ1dHVyZSBicG1uLWpzIHZlcnNpb25cblxuLyoqXG4gKiBXcmFwcyBBUElzIHRvIGNoZWNrOlxuICpcbiAqIDEpIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkIC0+IFdhcm4gdXNlcnMgYWJvdXQgY2FsbGJhY2sgZGVwcmVjYXRpb24uXG4gKiAyKSBJZiBQcm9taXNlIGNsYXNzIGlzIGltcGxlbWVudGVkIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBGb3JDb21wYXRpYmlsaXR5KGFwaSkge1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcblxuICAgIGlmICghd2luZG93LlByb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgcG9seWZpbGwgUHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnTGVuID49IDEgJiYgaXNGdW5jdGlvbihhcmd1bWVudHNbYXJnTGVuIC0gMV0pKSB7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmdMZW4gLSAxXTtcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcihcbiAgICAgICAgJ1Bhc3NpbmcgY2FsbGJhY2tzIHRvICcgKyBhcGkubmFtZSArICcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgK1xuICAgICAgICAnUGxlYXNlIHN3aXRjaCB0byBwcm9taXNlczogaHR0cHM6Ly9icG1uLmlvL2wvbW92aW5nLXRvLXByb21pc2VzLmh0bWwnXG4gICAgICApKTtcblxuICAgICAgdmFyIGFyZ3NXaXRob3V0Q2FsbGJhY2sgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKTtcblxuICAgICAgYXBpLmFwcGx5KHRoaXMsIGFyZ3NXaXRob3V0Q2FsbGJhY2spLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG5cbiAgICAgICAgdmFyIGZpcnN0S2V5ID0gT2JqZWN0LmtleXMocmVzdWx0KVswXTtcblxuICAgICAgICAvLyBUaGUgQVBJcyB3ZSBhcmUgd3JhcHBpbmcgYWxsIHJlc29sdmUgYSBzaW5nbGUgaXRlbSBkZXBlbmRpbmcgb24gdGhlIEFQSS5cbiAgICAgICAgLy8gRm9yIGluc3RhbmNlLCBpbXBvcnRYTUwgcmVzb2x2ZXMgeyB3YXJuaW5ncyB9IGFuZCBzYXZlWE1MIHJldHVybnMgeyB4bWwgfS5cbiAgICAgICAgLy8gVGhhdCdzIHdoeSB3ZSBjYW4gY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZmlyc3QgaXRlbSBvZiByZXN1bHQuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHRbZmlyc3RLZXldKTtcblxuICAgICAgICAvLyBQYXNzaW5nIGEgc2Vjb25kIHBhcmFtdGVyIGluc3RlYWQgb2YgY2F0Y2ggYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGNhdGNoIGVycm9ycyB0aHJvd24gYnkgY2FsbGJhY2soKS5cbiAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIGVyci53YXJuaW5ncyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICByZXR1cm4gYXBpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4vTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwYW5kZWQoZWxlbWVudCkge1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpDYWxsQWN0aXZpdHknKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICByZXR1cm4gISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5kaS5pc0V4cGFuZGVkO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5wcm9jZXNzUmVmO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVycnVwdGluZyhlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ICYmIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlzSW50ZXJydXB0aW5nICE9PSBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS50cmlnZ2VyZWRCeUV2ZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIGV2ZW50VHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gIGlmIChiby5ldmVudERlZmluaXRpb25zKSB7XG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgaWYgKGlzKGV2ZW50LCBldmVudFR5cGUpKSB7XG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG4iLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vTW9kZWxVdGlsJztcblxuXG5leHBvcnQgdmFyIERFRkFVTFRfTEFCRUxfU0laRSA9IHtcbiAgd2lkdGg6IDkwLFxuICBoZWlnaHQ6IDIwXG59O1xuXG5leHBvcnQgdmFyIEZMT1dfTEFCRUxfSU5ERU5UID0gMTU7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNlbWFudGljIGhhcyBhbiBleHRlcm5hbCBsYWJlbFxuICpcbiAqIEBwYXJhbSB7QnBtbkVsZW1lbnR9IHNlbWFudGljXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGhhcyBsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYWJlbEV4dGVybmFsKHNlbWFudGljKSB7XG4gIHJldHVybiBpcyhzZW1hbnRpYywgJ2JwbW46RXZlbnQnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkdhdGV3YXknKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YUlucHV0JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT3V0cHV0JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOk1lc3NhZ2VGbG93JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpHcm91cCcpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBoYXMgYW4gZXh0ZXJuYWwgbGFiZWxcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBoYXMgbGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4dGVybmFsTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gaXNMYWJlbChlbGVtZW50LmxhYmVsKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBvc2l0aW9uIGZvciBzZXF1ZW5jZSBmbG93IGxhYmVsc1xuICpcbiAqIEBwYXJhbSAge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gKiBAcmV0dXJuIHtQb2ludH0gdGhlIGxhYmVsIHBvc2l0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93TGFiZWxQb3NpdGlvbih3YXlwb2ludHMpIHtcblxuICAvLyBnZXQgdGhlIHdheXBvaW50cyBtaWRcbiAgdmFyIG1pZCA9IHdheXBvaW50cy5sZW5ndGggLyAyIC0gMTtcblxuICB2YXIgZmlyc3QgPSB3YXlwb2ludHNbTWF0aC5mbG9vcihtaWQpXTtcbiAgdmFyIHNlY29uZCA9IHdheXBvaW50c1tNYXRoLmNlaWwobWlkICsgMC4wMSldO1xuXG4gIC8vIGdldCBwb3NpdGlvblxuICB2YXIgcG9zaXRpb24gPSBnZXRXYXlwb2ludHNNaWQod2F5cG9pbnRzKTtcblxuICAvLyBjYWxjdWxhdGUgYW5nbGVcbiAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuKChzZWNvbmQueSAtIGZpcnN0LnkpIC8gKHNlY29uZC54IC0gZmlyc3QueCkpO1xuXG4gIHZhciB4ID0gcG9zaXRpb24ueCxcbiAgICAgIHkgPSBwb3NpdGlvbi55O1xuXG4gIGlmIChNYXRoLmFicyhhbmdsZSkgPCBNYXRoLlBJIC8gMikge1xuICAgIHkgLT0gRkxPV19MQUJFTF9JTkRFTlQ7XG4gIH0gZWxzZSB7XG4gICAgeCArPSBGTE9XX0xBQkVMX0lOREVOVDtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyIG9mIHdheXBvaW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gKiBAcmV0dXJuIHtQb2ludH0gdGhlIG1pZCBwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2F5cG9pbnRzTWlkKHdheXBvaW50cykge1xuXG4gIHZhciBtaWQgPSB3YXlwb2ludHMubGVuZ3RoIC8gMiAtIDE7XG5cbiAgdmFyIGZpcnN0ID0gd2F5cG9pbnRzW01hdGguZmxvb3IobWlkKV07XG4gIHZhciBzZWNvbmQgPSB3YXlwb2ludHNbTWF0aC5jZWlsKG1pZCArIDAuMDEpXTtcblxuICByZXR1cm4ge1xuICAgIHg6IGZpcnN0LnggKyAoc2Vjb25kLnggLSBmaXJzdC54KSAvIDIsXG4gICAgeTogZmlyc3QueSArIChzZWNvbmQueSAtIGZpcnN0LnkpIC8gMlxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpIHtcblxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICByZXR1cm4gZ2V0Rmxvd0xhYmVsUG9zaXRpb24oZWxlbWVudC53YXlwb2ludHMpO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgKyBERUZBVUxUX0xBQkVMX1NJWkUuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGggLyAyLFxuICAgICAgeTogZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQgKyBERUZBVUxUX0xBQkVMX1NJWkUuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiBlbGVtZW50cyBsYWJlbCwgcGFyc2VkIGZyb20gdGhlIGVsZW1lbnRzIERJIG9yXG4gKiBnZW5lcmF0ZWQgZnJvbSBpdHMgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7QnBtbkVsZW1lbnR9IHNlbWFudGljXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbExhYmVsQm91bmRzKHNlbWFudGljLCBlbGVtZW50KSB7XG5cbiAgdmFyIG1pZCxcbiAgICAgIHNpemUsXG4gICAgICBib3VuZHMsXG4gICAgICBkaSA9IHNlbWFudGljLmRpLFxuICAgICAgbGFiZWwgPSBkaS5sYWJlbDtcblxuICBpZiAobGFiZWwgJiYgbGFiZWwuYm91bmRzKSB7XG4gICAgYm91bmRzID0gbGFiZWwuYm91bmRzO1xuXG4gICAgc2l6ZSA9IHtcbiAgICAgIHdpZHRoOiBNYXRoLm1heChERUZBVUxUX0xBQkVMX1NJWkUud2lkdGgsIGJvdW5kcy53aWR0aCksXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHRcbiAgICB9O1xuXG4gICAgbWlkID0ge1xuICAgICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyLFxuICAgICAgeTogYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG5cbiAgICBtaWQgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgc2l6ZSA9IERFRkFVTFRfTEFCRUxfU0laRTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oe1xuICAgIHg6IG1pZC54IC0gc2l6ZS53aWR0aCAvIDIsXG4gICAgeTogbWlkLnkgLSBzaXplLmhlaWdodCAvIDJcbiAgfSwgc2l6ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xufVxuIiwiLyoqXG4gKiBJcyBhbiBlbGVtZW50IG9mIHRoZSBnaXZlbiBCUE1OIHR5cGU/XG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V8TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzKGVsZW1lbnQsIHR5cGUpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuIGJvICYmICh0eXBlb2YgYm8uJGluc3RhbmNlT2YgPT09ICdmdW5jdGlvbicpICYmIGJvLiRpbnN0YW5jZU9mKHR5cGUpO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBidXNpbmVzcyBvYmplY3QgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChlbGVtZW50ICYmIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QpIHx8IGVsZW1lbnQ7XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgY2hhbmdlZCBvciBleGNoYW5nZWQuXG4gKlxuICogQHNlZSBodHRwOi8vYnBtbi5pby9saWNlbnNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5cbmltcG9ydCB7XG4gIGRvbWlmeSxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGVcbn0gZnJvbSAnbWluLWRvbSc7XG5cblxuLy8gaW5saW5lZCAuLi8uLi9yZXNvdXJjZXMvbG9nby5zdmdcbnZhciBCUE1OSU9fTE9HT19TVkcgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNC4wMiA1LjU3XCIgd2lkdGg9XCI1M1wiIGhlaWdodD1cIjIxXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGVcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xLjg4Ljkydi4xNGMwIC40MS0uMTMuNjgtLjQuOC4zMy4xNC40Ni40NC40Ni44NnYuMzNjMCAuNjEtLjMzLjk1LS45NS45NUgwVjBoLjk1Yy42NSAwIC45My4zLjkzLjkyek0uNjMuNTd2MS4wNmguMjRjLjI0IDAgLjM4LS4xLjM4LS40M1YuOThjMC0uMjgtLjEtLjQtLjMyLS40em0wIDEuNjN2MS4yMmguMzZjLjIgMCAuMzItLjEuMzItLjM5di0uMzVjMC0uMzctLjEyLS40OC0uNC0uNDhILjYzek00LjE4Ljk5di41MmMwIC42NC0uMzEuOTgtLjk0Ljk4aC0uM1Y0aC0uNjJWMGguOTJjLjYzIDAgLjk0LjM1Ljk0Ljk5ek0yLjk0LjU3djEuMzVoLjNjLjIgMCAuMy0uMDkuMy0uMzd2LS42YzAtLjI5LS4xLS4zOC0uMy0uMzhoLS4zem0yLjg5IDIuMjdMNi4yNSAwaC44OHY0aC0uNlYxLjEyTDYuMSAzLjk5aC0uNmwtLjQ2LTIuODJ2Mi44MmgtLjU1VjBoLjg3ek04LjE0IDEuMVY0aC0uNTZWMGguNzlMOSAyLjRWMGguNTZ2NGgtLjY0em0yLjQ5IDIuMjl2LjZoLS42di0uNnpNMTIuMTIgMWMwLS42My4zMy0xIC45NS0xIC42MSAwIC45NS4zNy45NSAxdjIuMDRjMCAuNjQtLjM0IDEtLjk1IDEtLjYyIDAtLjk1LS4zNy0uOTUtMXptLjYyIDIuMDhjMCAuMjguMTMuMzkuMzMuMzlzLjMyLS4xLjMyLS40Vi45OGMwLS4yOS0uMTItLjQtLjMyLS40cy0uMzMuMTEtLjMzLjR6XCIvPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTAgNC41M2gxNC4wMnYxLjA0SDB6TTExLjA4IDBoLjYzdi42MmgtLjYzem0uNjMgNFYxaC0uNjN2Mi45OHpcIi8+PC9zdmc+JztcblxuZXhwb3J0IHZhciBCUE1OSU9fSU1HID0gQlBNTklPX0xPR09fU1ZHO1xuXG5mdW5jdGlvbiBjc3MoYXR0cnMpIHtcbiAgcmV0dXJuIGF0dHJzLmpvaW4oJzsnKTtcbn1cblxuZXhwb3J0IHZhciBMSU5LX1NUWUxFUyA9IGNzcyhbXG4gICdjb2xvcjogIzQwNDA0MCdcbl0pO1xuXG52YXIgTElHSFRCT1hfU1RZTEVTID0gY3NzKFtcbiAgJ3otaW5kZXg6IDEwMDEnLFxuICAncG9zaXRpb246IGZpeGVkJyxcbiAgJ3RvcDogMCcsXG4gICdsZWZ0OiAwJyxcbiAgJ3JpZ2h0OiAwJyxcbiAgJ2JvdHRvbTogMCdcbl0pO1xuXG52YXIgQkFDS0RST1BfU1RZTEVTID0gY3NzKFtcbiAgJ3dpZHRoOiAxMDAlJyxcbiAgJ2hlaWdodDogMTAwJScsXG4gICdiYWNrZ3JvdW5kOiByZ2JhKDQwLDQwLDQwLDAuMiknXG5dKTtcblxudmFyIE5PVElDRV9TVFlMRVMgPSBjc3MoW1xuICAncG9zaXRpb246IGFic29sdXRlJyxcbiAgJ2xlZnQ6IDUwJScsXG4gICd0b3A6IDQwJScsXG4gICd0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlKScsXG4gICd3aWR0aDogMjYwcHgnLFxuICAncGFkZGluZzogMTBweCcsXG4gICdiYWNrZ3JvdW5kOiB3aGl0ZScsXG4gICdib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLDAsMCwwLjMpJyxcbiAgJ2ZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgJ2ZvbnQtc2l6ZTogMTRweCcsXG4gICdkaXNwbGF5OiBmbGV4JyxcbiAgJ2xpbmUtaGVpZ2h0OiAxLjMnXG5dKTtcblxudmFyIExJR0hUQk9YX01BUktVUCA9XG4gICc8ZGl2IGNsYXNzPVwiYmpzLXBvd2VyZWQtYnktbGlnaHRib3hcIiBzdHlsZT1cIicgKyBMSUdIVEJPWF9TVFlMRVMgKyAnXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiIHN0eWxlPVwiJyArIEJBQ0tEUk9QX1NUWUxFUyArICdcIj48L2Rpdj4nICtcbiAgICAnPGRpdiBjbGFzcz1cIm5vdGljZVwiIHN0eWxlPVwiJyArIE5PVElDRV9TVFlMRVMgKyAnXCI+JyArXG4gICAgICAnPGEgaHJlZj1cImh0dHBzOi8vYnBtbi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCIgc3R5bGU9XCJtYXJnaW46IDE1cHggMjBweCAxNXB4IDEwcHg7IGFsaWduLXNlbGY6IGNlbnRlcjsnICsgTElOS19TVFlMRVMgKyAnXCI+JyArXG4gICAgICAgIEJQTU5JT19JTUcgK1xuICAgICAgJzwvYT4nICtcbiAgICAgICc8c3Bhbj4nICtcbiAgICAgICAgJ1dlYi1iYXNlZCB0b29saW5nIGZvciBCUE1OLCBETU4gYW5kIENNTU4gZGlhZ3JhbXMgJyArXG4gICAgICAgICdwb3dlcmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL2JwbW4uaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiPmJwbW4uaW88L2E+LicgK1xuICAgICAgJzwvc3Bhbj4nICtcbiAgICAnPC9kaXY+JyArXG4gICc8L2Rpdj4nO1xuXG5cbnZhciBsaWdodGJveDtcblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW4oKSB7XG5cbiAgaWYgKCFsaWdodGJveCkge1xuICAgIGxpZ2h0Ym94ID0gZG9taWZ5KExJR0hUQk9YX01BUktVUCk7XG5cbiAgICBkb21EZWxlZ2F0ZS5iaW5kKGxpZ2h0Ym94LCAnLmJhY2tkcm9wJywgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGlnaHRib3gpO1xuICAgIH0pO1xuICB9XG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaWdodGJveCk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9saWIvRGlhZ3JhbSc7IiwiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdkaWRpJztcblxuaW1wb3J0IENvcmVNb2R1bGUgZnJvbSAnLi9jb3JlJztcblxuXG4vKipcbiAqIEJvb3RzdHJhcCBhbiBpbmplY3RvciBmcm9tIGEgbGlzdCBvZiBtb2R1bGVzLCBpbnN0YW50aWF0aW5nIGEgbnVtYmVyIG9mIGRlZmF1bHQgY29tcG9uZW50c1xuICpcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBib290c3RyYXBNb2R1bGVzXG4gKlxuICogQHJldHVybiB7ZGlkaS5JbmplY3Rvcn0gYSBpbmplY3RvciB0byB1c2UgdG8gYWNjZXNzIHRoZSBjb21wb25lbnRzXG4gKi9cbmZ1bmN0aW9uIGJvb3RzdHJhcChib290c3RyYXBNb2R1bGVzKSB7XG5cbiAgdmFyIG1vZHVsZXMgPSBbXSxcbiAgICAgIGNvbXBvbmVudHMgPSBbXTtcblxuICBmdW5jdGlvbiBoYXNNb2R1bGUobSkge1xuICAgIHJldHVybiBtb2R1bGVzLmluZGV4T2YobSkgPj0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZE1vZHVsZShtKSB7XG4gICAgbW9kdWxlcy5wdXNoKG0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaXQobSkge1xuICAgIGlmIChoYXNNb2R1bGUobSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAobS5fX2RlcGVuZHNfXyB8fCBbXSkuZm9yRWFjaCh2aXNpdCk7XG5cbiAgICBpZiAoaGFzTW9kdWxlKG0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRkTW9kdWxlKG0pO1xuXG4gICAgKG0uX19pbml0X18gfHwgW10pLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgY29tcG9uZW50cy5wdXNoKGMpO1xuICAgIH0pO1xuICB9XG5cbiAgYm9vdHN0cmFwTW9kdWxlcy5mb3JFYWNoKHZpc2l0KTtcblxuICB2YXIgaW5qZWN0b3IgPSBuZXcgSW5qZWN0b3IobW9kdWxlcyk7XG5cbiAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcblxuICAgIHRyeSB7XG5cbiAgICAgIC8vIGVhZ2VybHkgcmVzb2x2ZSBjb21wb25lbnQgKGZuIG9yIHN0cmluZylcbiAgICAgIGluamVjdG9yW3R5cGVvZiBjID09PSAnc3RyaW5nJyA/ICdnZXQnIDogJ2ludm9rZSddKGMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbnN0YW50aWF0ZSBjb21wb25lbnQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5qZWN0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbmplY3RvciBmcm9tIHBhc3NlZCBvcHRpb25zLlxuICpcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7ZGlkaS5JbmplY3Rvcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5qZWN0b3Iob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBjb25maWdNb2R1bGUgPSB7XG4gICAgJ2NvbmZpZyc6IFsndmFsdWUnLCBvcHRpb25zXVxuICB9O1xuXG4gIHZhciBtb2R1bGVzID0gWyBjb25maWdNb2R1bGUsIENvcmVNb2R1bGUgXS5jb25jYXQob3B0aW9ucy5tb2R1bGVzIHx8IFtdKTtcblxuICByZXR1cm4gYm9vdHN0cmFwKG1vZHVsZXMpO1xufVxuXG5cbi8qKlxuICogVGhlIG1haW4gZGlhZ3JhbS1qcyBlbnRyeSBwb2ludCB0aGF0IGJvb3RzdHJhcHMgdGhlIGRpYWdyYW0gd2l0aCB0aGUgZ2l2ZW5cbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVG8gcmVnaXN0ZXIgZXh0ZW5zaW9ucyB3aXRoIHRoZSBkaWFncmFtLCBwYXNzIHRoZW0gYXMgQXJyYXk8ZGlkaS5Nb2R1bGU+IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAY2xhc3MgZGpzLkRpYWdyYW1cbiAqIEBtZW1iZXJPZiBkanNcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGNhcHRpb24+Q3JlYXRpbmcgYSBwbHVnLWluIHRoYXQgbG9ncyB3aGVuZXZlciBhIHNoYXBlIGlzIGFkZGVkIHRvIHRoZSBjYW52YXMuPC9jYXB0aW9uPlxuICpcbiAqIC8vIHBsdWctaW4gaW1wbGVtZW5lbnRhdGlvblxuICogZnVuY3Rpb24gTXlMb2dnaW5nUGx1Z2luKGV2ZW50QnVzKSB7XG4gKiAgIGV2ZW50QnVzLm9uKCdzaGFwZS5hZGRlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coJ3NoYXBlICcsIGV2ZW50LnNoYXBlLCAnIHdhcyBhZGRlZCB0byB0aGUgZGlhZ3JhbScpO1xuICogICB9KTtcbiAqIH1cbiAqXG4gKiAvLyBleHBvcnQgYXMgbW9kdWxlXG4gKiBleHBvcnQgZGVmYXVsdCB7XG4gKiAgIF9faW5pdF9fOiBbICdteUxvZ2dpbmdQbHVnaW4nIF0sXG4gKiAgICAgbXlMb2dnaW5nUGx1Z2luOiBbICd0eXBlJywgTXlMb2dnaW5nUGx1Z2luIF1cbiAqIH07XG4gKlxuICpcbiAqIC8vIGluc3RhbnRpYXRlIHRoZSBkaWFncmFtIHdpdGggdGhlIG5ldyBwbHVnLWluXG4gKlxuICogaW1wb3J0IE15TG9nZ2luZ01vZHVsZSBmcm9tICdwYXRoLXRvLW15LWxvZ2dpbmctcGx1Z2luJztcbiAqXG4gKiB2YXIgZGlhZ3JhbSA9IG5ldyBEaWFncmFtKHtcbiAqICAgbW9kdWxlczogW1xuICogICAgIE15TG9nZ2luZ01vZHVsZVxuICogICBdXG4gKiB9KTtcbiAqXG4gKiBkaWFncmFtLmludm9rZShbICdjYW52YXMnLCBmdW5jdGlvbihjYW52YXMpIHtcbiAqICAgLy8gYWRkIHNoYXBlIHRvIGRyYXdpbmcgY2FudmFzXG4gKiAgIGNhbnZhcy5hZGRTaGFwZSh7IHg6IDEwLCB5OiAxMCB9KTtcbiAqIH0pO1xuICpcbiAqIC8vICdzaGFwZSAuLi4gd2FzIGFkZGVkIHRvIHRoZSBkaWFncmFtJyBsb2dnZWQgdG8gY29uc29sZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gZXh0ZXJuYWwgbW9kdWxlcyB0byBpbnN0YW50aWF0ZSB3aXRoIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2RpZGkuSW5qZWN0b3J9IFtpbmplY3Rvcl0gYW4gKG9wdGlvbmFsKSBpbmplY3RvciB0byBib290c3RyYXAgdGhlIGRpYWdyYW0gd2l0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWFncmFtKG9wdGlvbnMsIGluamVjdG9yKSB7XG5cbiAgLy8gY3JlYXRlIGluamVjdG9yIHVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZFxuICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3IgPSBpbmplY3RvciB8fCBjcmVhdGVJbmplY3RvcihvcHRpb25zKTtcblxuICAvLyBBUElcblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSBkaWFncmFtIHNlcnZpY2VcbiAgICpcbiAgICogQG1ldGhvZCBEaWFncmFtI2dldFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGlhZ3JhbSBzZXJ2aWNlIHRvIGJlIHJldHJpZXZlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdHJpY3Q9dHJ1ZV0gaWYgZmFsc2UsIHJlc29sdmUgbWlzc2luZyBzZXJ2aWNlcyB0byBudWxsXG4gICAqL1xuICB0aGlzLmdldCA9IGluamVjdG9yLmdldDtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBmdW5jdGlvbiBpbnRvIHdoaWNoIGRpYWdyYW0gc2VydmljZXMgYXJlIGluamVjdGVkXG4gICAqXG4gICAqIEBtZXRob2QgRGlhZ3JhbSNpbnZva2VcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3RbXX0gZm4gdGhlIGZ1bmN0aW9uIHRvIHJlc29sdmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGxvY2FscyBhIG51bWJlciBvZiBsb2NhbHMgdG8gdXNlIHRvIHJlc29sdmUgY2VydGFpbiBkZXBlbmRlbmNpZXNcbiAgICovXG4gIHRoaXMuaW52b2tlID0gaW5qZWN0b3IuaW52b2tlO1xuXG4gIC8vIGluaXRcblxuICAvLyBpbmRpY2F0ZSB2aWEgZXZlbnRcblxuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYWxsIHBsdWctaW5zIGFyZSBsb2FkZWQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGZpcmUgb3RoZXIgZXZlbnRzIHRvIGludGVyZXN0ZWQgcGx1Zy1pbnNcbiAgICpcbiAgICogQG1lbWJlck9mIERpYWdyYW1cbiAgICpcbiAgICogQGV2ZW50IGRpYWdyYW0uaW5pdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAqICAgZXZlbnRCdXMuZmlyZSgnbXktY3VzdG9tLWV2ZW50JywgeyBmb286ICdCQVInIH0pO1xuICAgKiB9KTtcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuZ2V0KCdldmVudEJ1cycpLmZpcmUoJ2RpYWdyYW0uaW5pdCcpO1xufVxuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGRpYWdyYW1cbiAqXG4gKiBAbWV0aG9kICBEaWFncmFtI2Rlc3Ryb3lcbiAqL1xuRGlhZ3JhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmdldCgnZXZlbnRCdXMnKS5maXJlKCdkaWFncmFtLmRlc3Ryb3knKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGhlIGRpYWdyYW0sIHJlbW92aW5nIGFsbCBjb250ZW50cy5cbiAqL1xuRGlhZ3JhbS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5nZXQoJ2V2ZW50QnVzJykuZmlyZSgnZGlhZ3JhbS5jbGVhcicpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGlzRnVuY3Rpb24sXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG4vKipcbiAqIEEgdXRpbGl0eSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBsdWctaW4gaW50byB0aGUgY29tbWFuZCBleGVjdXRpb24gZm9yXG4gKiBleHRlbnNpb24gYW5kL29yIHZhbGlkYXRpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG4gKlxuICogaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG4gKlxuICogZnVuY3Rpb24gQ29tbWFuZExvZ2dlcihldmVudEJ1cykge1xuICogICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG4gKlxuICogICB0aGlzLnByZUV4ZWN1dGUoZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgICBjb25zb2xlLmxvZygnY29tbWFuZCBwcmUtZXhlY3V0ZScsIGV2ZW50KTtcbiAqICAgfSk7XG4gKiB9XG4gKlxuICogaW5oZXJpdHMoQ29tbWFuZExvZ2dlciwgQ29tbWFuZEludGVyY2VwdG9yKTtcbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbW1hbmRJbnRlcmNlcHRvcihldmVudEJ1cykge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xufVxuXG5Db21tYW5kSW50ZXJjZXB0b3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5mdW5jdGlvbiB1bndyYXBFdmVudChmbiwgdGhhdCkge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZm4uY2FsbCh0aGF0IHx8IG51bGwsIGV2ZW50LmNvbnRleHQsIGV2ZW50LmNvbW1hbmQsIGV2ZW50KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhbiBpbnRlcmNlcHRvciBmb3IgYSBjb21tYW5kIGV4ZWN1dGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtldmVudHNdIGxpc3Qgb2YgY29tbWFuZHMgdG8gcmVnaXN0ZXIgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaG9va10gY29tbWFuZCBob29rLCBpLmUuIHByZUV4ZWN1dGUsIGV4ZWN1dGVkIHRvIGxpc3RlbiBvblxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV0gdGhlIHByaW9yaXR5IG9uIHdoaWNoIHRvIGhvb2sgaW50byB0aGUgZXhlY3V0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyRm4gaW50ZXJjZXB0b3IgdG8gYmUgaW52b2tlZCB3aXRoIChldmVudClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdW53cmFwIGlmIHRydWUsIHVud3JhcCB0aGUgZXZlbnQgYW5kIHBhc3MgKGNvbnRleHQsIGNvbW1hbmQsIGV2ZW50KSB0byB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciBpbnN0ZWFkXG4gKiBAcGFyYW0ge09iamVjdH0gW3RoYXRdIFBhc3MgY29udGV4dCAoYHRoaXNgKSB0byB0aGUgaGFuZGxlciBmdW5jdGlvblxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnRzLCBob29rLCBwcmlvcml0eSwgaGFuZGxlckZuLCB1bndyYXAsIHRoYXQpIHtcblxuICBpZiAoaXNGdW5jdGlvbihob29rKSB8fCBpc051bWJlcihob29rKSkge1xuICAgIHRoYXQgPSB1bndyYXA7XG4gICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgIGhhbmRsZXJGbiA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gaG9vaztcbiAgICBob29rID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0Z1bmN0aW9uKHByaW9yaXR5KSkge1xuICAgIHRoYXQgPSB1bndyYXA7XG4gICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgIGhhbmRsZXJGbiA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIGlmIChpc09iamVjdCh1bndyYXApKSB7XG4gICAgdGhhdCA9IHVud3JhcDtcbiAgICB1bndyYXAgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNGdW5jdGlvbihoYW5kbGVyRm4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGVyRm4gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWlzQXJyYXkoZXZlbnRzKSkge1xuICAgIGV2ZW50cyA9IFsgZXZlbnRzIF07XG4gIH1cblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIGNvbmNhdCBjb21tYW5kU3RhY2soLmV2ZW50KT8oLmhvb2spP1xuICAgIHZhciBmdWxsRXZlbnQgPSBbICdjb21tYW5kU3RhY2snLCBldmVudCwgaG9vayBdLmZpbHRlcihmdW5jdGlvbihlKSB7IHJldHVybiBlOyB9KS5qb2luKCcuJyk7XG5cbiAgICBldmVudEJ1cy5vbihmdWxsRXZlbnQsIHByaW9yaXR5LCB1bndyYXAgPyB1bndyYXBFdmVudChoYW5kbGVyRm4sIHRoYXQpIDogaGFuZGxlckZuLCB0aGF0KTtcbiAgfSk7XG59O1xuXG5cbnZhciBob29rcyA9IFtcbiAgJ2NhbkV4ZWN1dGUnLFxuICAncHJlRXhlY3V0ZScsXG4gICdwcmVFeGVjdXRlZCcsXG4gICdleGVjdXRlJyxcbiAgJ2V4ZWN1dGVkJyxcbiAgJ3Bvc3RFeGVjdXRlJyxcbiAgJ3Bvc3RFeGVjdXRlZCcsXG4gICdyZXZlcnQnLFxuICAncmV2ZXJ0ZWQnXG5dO1xuXG4vKlxuICogSW5zdGFsbCBob29rIHNob3J0Y3V0c1xuICpcbiAqIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgQ29tbWFuZEludGVyY2VwdG9yIyhwcmVFeGVjdXRlfC4uLnxyZXZlcnRlZCkgbWV0aG9kc1xuICogd2hpY2ggd2lsbCBpbiB0ZXJtIGZvcndhcmQgdG8gQ29tbWFuZEludGVyY2VwdG9yI29uLlxuICovXG5mb3JFYWNoKGhvb2tzLCBmdW5jdGlvbihob29rKSB7XG5cbiAgLyoqXG4gICAqIHtjYW5FeGVjdXRlfHByZUV4ZWN1dGV8cHJlRXhlY3V0ZWR8ZXhlY3V0ZXxleGVjdXRlZHxwb3N0RXhlY3V0ZXxwb3N0RXhlY3V0ZWR8cmV2ZXJ0fHJldmVydGVkfVxuICAgKlxuICAgKiBBIG5hbWVkIGhvb2sgZm9yIHBsdWdnaW5nIGludG8gdGhlIGNvbW1hbmQgZXhlY3V0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtldmVudHNdIGxpc3Qgb2YgY29tbWFuZHMgdG8gcmVnaXN0ZXIgb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV0gdGhlIHByaW9yaXR5IG9uIHdoaWNoIHRvIGhvb2sgaW50byB0aGUgZXhlY3V0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJGbiBpbnRlcmNlcHRvciB0byBiZSBpbnZva2VkIHdpdGggKGV2ZW50KVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1bndyYXA9ZmFsc2VdIGlmIHRydWUsIHVud3JhcCB0aGUgZXZlbnQgYW5kIHBhc3MgKGNvbnRleHQsIGNvbW1hbmQsIGV2ZW50KSB0byB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyIGluc3RlYWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb25cbiAgICovXG4gIENvbW1hbmRJbnRlcmNlcHRvci5wcm90b3R5cGVbaG9va10gPSBmdW5jdGlvbihldmVudHMsIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCkge1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZlbnRzKSB8fCBpc051bWJlcihldmVudHMpKSB7XG4gICAgICB0aGF0ID0gdW53cmFwO1xuICAgICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgICAgaGFuZGxlckZuID0gcHJpb3JpdHk7XG4gICAgICBwcmlvcml0eSA9IGV2ZW50cztcbiAgICAgIGV2ZW50cyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5vbihldmVudHMsIGhvb2ssIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCk7XG4gIH07XG59KTtcbiIsImltcG9ydCB7XG4gIHVuaXF1ZUJ5LFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IG9mZmVycyB1bi0gYW5kIHJlZG9hYmxlIGV4ZWN1dGlvbiBvZiBjb21tYW5kcy5cbiAqXG4gKiBUaGUgY29tbWFuZCBzdGFjayBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIG1vZGVsaW5nIGFjdGlvbnNcbiAqIGluIGEgdW4tIGFuZCByZWRvYWJsZSBtYW5uZXIuIFRvIGRvIHRoaXMgaXQgZGVsZWdhdGVzIHRoZSBhY3R1YWxcbiAqIGNvbW1hbmQgZXhlY3V0aW9uIHRvIHtAbGluayBDb21tYW5kSGFuZGxlcn1zLlxuICpcbiAqIENvbW1hbmQgaGFuZGxlcnMgcHJvdmlkZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjZXhlY3V0ZShjdHgpfSBhbmRcbiAqIHtAbGluayBDb21tYW5kSGFuZGxlciNyZXZlcnQoY3R4KX0gbWV0aG9kcyB0byB1bi0gYW5kIHJlZG8gYSBjb21tYW5kXG4gKiBpZGVudGlmaWVkIGJ5IGEgY29tbWFuZCBjb250ZXh0LlxuICpcbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIGV2ZW50c1xuICpcbiAqIEluIHRoZSBwcm9jZXNzIHRoZSBjb21tYW5kIHN0YWNrIGZpcmVzIGEgbnVtYmVyIG9mIGxpZmUtY3ljbGUgZXZlbnRzXG4gKiB0aGF0IG90aGVyIGNvbXBvbmVudHMgdG8gcGFydGljaXBhdGUgaW4gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqICAgICogcHJlRXhlY3V0ZVxuICogICAgKiBwcmVFeGVjdXRlZFxuICogICAgKiBleGVjdXRlXG4gKiAgICAqIGV4ZWN1dGVkXG4gKiAgICAqIHBvc3RFeGVjdXRlXG4gKiAgICAqIHBvc3RFeGVjdXRlZFxuICogICAgKiByZXZlcnRcbiAqICAgICogcmV2ZXJ0ZWRcbiAqXG4gKiBBIHNwZWNpYWwgZXZlbnQgaXMgdXNlZCBmb3IgdmFsaWRhdGluZywgd2hldGhlciBhIGNvbW1hbmQgY2FuIGJlXG4gKiBwZXJmb3JtZWQgcHJpb3IgdG8gaXRzIGV4ZWN1dGlvbi5cbiAqXG4gKiAgICAqIGNhbkV4ZWN1dGVcbiAqXG4gKiBFYWNoIG9mIHRoZSBldmVudHMgaXMgZmlyZWQgYXMgYGNvbW1hbmRTdGFjay57ZXZlbnROYW1lfWAgYW5kXG4gKiBgY29tbWFuZFN0YWNrLntjb21tYW5kTmFtZX0ue2V2ZW50TmFtZX1gLCByZXNwZWN0aXZlbHkuIFRoaXMgZ2l2ZXNcbiAqIGNvbXBvbmVudHMgZmluZSBncmFpbmVkIGNvbnRyb2wgb24gd2hlcmUgdG8gaG9vayBpbnRvLlxuICpcbiAqIFRoZSBldmVudCBvYmplY3QgZmlyZWQgdHJhbnNwb3J0cyBgY29tbWFuZGAsIHRoZSBuYW1lIG9mIHRoZVxuICogY29tbWFuZCBhbmQgYGNvbnRleHRgLCB0aGUgY29tbWFuZCBjb250ZXh0LlxuICpcbiAqXG4gKiAjIyBDcmVhdGluZyBDb21tYW5kIEhhbmRsZXJzXG4gKlxuICogQ29tbWFuZCBoYW5kbGVycyBzaG91bGQgcHJvdmlkZSB0aGUge0BsaW5rIENvbW1hbmRIYW5kbGVyI2V4ZWN1dGUoY3R4KX1cbiAqIGFuZCB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjcmV2ZXJ0KGN0eCl9IG1ldGhvZHMgdG8gaW1wbGVtZW50XG4gKiByZWRvaW5nIGFuZCB1bmRvaW5nIG9mIGEgY29tbWFuZC5cbiAqXG4gKiBBIGNvbW1hbmQgaGFuZGxlciBfbXVzdF8gZW5zdXJlIHVuZG8gaXMgcGVyZm9ybWVkIHByb3Blcmx5IGluIG9yZGVyXG4gKiBub3QgdG8gYnJlYWsgdGhlIHVuZG8gY2hhaW4uIEl0IG11c3QgYWxzbyByZXR1cm4gdGhlIHNoYXBlcyB0aGF0XG4gKiBnb3QgY2hhbmdlZCBkdXJpbmcgdGhlIGBleGVjdXRlYCBhbmQgYHJldmVydGAgb3BlcmF0aW9ucy5cbiAqXG4gKiBDb21tYW5kIGhhbmRsZXJzIG1heSBleGVjdXRlIG90aGVyIG1vZGVsaW5nIG9wZXJhdGlvbnMgKGFuZCB0aHVzXG4gKiBjb21tYW5kcykgaW4gdGhlaXIgYHByZUV4ZWN1dGVgIGFuZCBgcG9zdEV4ZWN1dGVgIHBoYXNlcy4gVGhlIGNvbW1hbmRcbiAqIHN0YWNrIHdpbGwgcHJvcGVybHkgZ3JvdXAgYWxsIGNvbW1hbmRzIHRvZ2V0aGVyIGludG8gYSBsb2dpY2FsIHVuaXRcbiAqIHRoYXQgbWF5IGJlIHJlLSBhbmQgdW5kb25lIGF0b21pY2FsbHkuXG4gKlxuICogQ29tbWFuZCBoYW5kbGVycyBtdXN0IG5vdCBleGVjdXRlIG90aGVyIGNvbW1hbmRzIGZyb20gd2l0aGluIHRoZWlyXG4gKiBjb3JlIGltcGxlbWVudGF0aW9uIChgZXhlY3V0ZWAsIGByZXZlcnRgKS5cbiAqXG4gKlxuICogIyMgQ2hhbmdlIFRyYWNraW5nXG4gKlxuICogRHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIENvbW1hbmRTdGFjayBpdCB3aWxsIGtlZXAgdHJhY2sgb2YgYWxsXG4gKiBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGR1cmluZyB0aGUgY29tbWFuZCdzIGV4ZWN1dGlvbi5cbiAqXG4gKiBBdCB0aGUgZW5kIG9mIHRoZSBDb21tYW5kU3RhY2sgZXhlY3V0aW9uIGl0IHdpbGwgbm90aWZ5IGludGVyZXN0ZWRcbiAqIGNvbXBvbmVudHMgdmlhIGFuICdlbGVtZW50cy5jaGFuZ2VkJyBldmVudCB3aXRoIGFsbCB0aGUgZGlydHlcbiAqIGVsZW1lbnRzLlxuICpcbiAqIFRoZSBldmVudCBjYW4gYmUgcGlja2VkIHVwIGJ5IGNvbXBvbmVudHMgdGhhdCBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZmFjdFxuICogdGhhdCBlbGVtZW50cyBoYXZlIGJlZW4gY2hhbmdlZC4gT25lIHVzZSBjYXNlIGZvciB0aGlzIGlzIHVwZGF0aW5nXG4gKiB0aGVpciBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gYWZ0ZXIgbW92aW5nIC8gcmVzaXppbmcgb3IgZGVsZXRpb24uXG4gKlxuICogQHNlZSBDb21tYW5kSGFuZGxlclxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb21tYW5kU3RhY2soZXZlbnRCdXMsIGluamVjdG9yKSB7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGFsbCByZWdpc3RlcmVkIGNvbW1hbmQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9oYW5kbGVyTWFwID0ge307XG5cbiAgLyoqXG4gICAqIEEgc3RhY2sgY29udGFpbmluZyBhbGwgcmUvdW5kb2FibGUgYWN0aW9ucyBvbiB0aGUgZGlhZ3JhbVxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXk8T2JqZWN0Pn1cbiAgICovXG4gIHRoaXMuX3N0YWNrID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGluZGV4IG9uIHRoZSBzdGFja1xuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdGhpcy5fc3RhY2tJZHggPSAtMTtcblxuICAvKipcbiAgICogQ3VycmVudCBhY3RpdmUgY29tbWFuZFN0YWNrIGV4ZWN1dGlvblxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fY3VycmVudEV4ZWN1dGlvbiA9IHtcbiAgICBhY3Rpb25zOiBbXSxcbiAgICBkaXJ0eTogW11cbiAgfTtcblxuXG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG5cbiAgdGhpcy5fdWlkID0gMTtcblxuICBldmVudEJ1cy5vbihbXG4gICAgJ2RpYWdyYW0uZGVzdHJveScsXG4gICAgJ2RpYWdyYW0uY2xlYXInXG4gIF0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xlYXIoZmFsc2UpO1xuICB9LCB0aGlzKTtcbn1cblxuQ29tbWFuZFN0YWNrLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdpbmplY3RvcicgXTtcblxuXG4vKipcbiAqIEV4ZWN1dGUgYSBjb21tYW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmQgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIGVudmlyb25tZW50IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgaW5cbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29tbWFuZCwgY29udGV4dCkge1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciBhY3Rpb24gPSB7IGNvbW1hbmQ6IGNvbW1hbmQsIGNvbnRleHQ6IGNvbnRleHQgfTtcblxuICB0aGlzLl9wdXNoQWN0aW9uKGFjdGlvbik7XG4gIHRoaXMuX2ludGVybmFsRXhlY3V0ZShhY3Rpb24pO1xuICB0aGlzLl9wb3BBY3Rpb24oYWN0aW9uKTtcbn07XG5cblxuLyoqXG4gKiBBc2sgd2hldGhlciBhIGdpdmVuIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkLlxuICpcbiAqIEltcGxlbWVudG9ycyBtYXkgaG9vayBpbnRvIHRoZSBtZWNoYW5pc20gb24gdHdvIHdheXM6XG4gKlxuICogICAqIGluIGV2ZW50IGxpc3RlbmVyczpcbiAqXG4gKiAgICAgVXNlcnMgbWF5IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiB2aWEgYW4gZXZlbnQgbGlzdGVuZXIuXG4gKiAgICAgSXQgbXVzdCBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYGNvbW1hbmRTdGFjay4oPGNvbW1hbmQ+LiljYW5FeGVjdXRlYCBldmVudHMuXG4gKlxuICogICAqIGluIGNvbW1hbmQgaGFuZGxlcnM6XG4gKlxuICogICAgIElmIHRoZSBtZXRob2Qge0BsaW5rIENvbW1hbmRIYW5kbGVyI2NhbkV4ZWN1dGV9IGlzIGltcGxlbWVudGVkIGluIGEgaGFuZGxlclxuICogICAgIGl0IHdpbGwgYmUgY2FsbGVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgZXhlY3V0aW9uIGlzIGFsbG93ZWQuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBjb21tYW5kIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dCB0aGUgZW52aXJvbm1lbnQgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCBpblxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuY2FuRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbW1hbmQsIGNvbnRleHQpIHtcblxuICB2YXIgYWN0aW9uID0geyBjb21tYW5kOiBjb21tYW5kLCBjb250ZXh0OiBjb250ZXh0IH07XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9nZXRIYW5kbGVyKGNvbW1hbmQpO1xuXG4gIHZhciByZXN1bHQgPSB0aGlzLl9maXJlKGNvbW1hbmQsICdjYW5FeGVjdXRlJywgYWN0aW9uKTtcblxuICAvLyBoYW5kbGVyI2NhbkV4ZWN1dGUgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBubyBsaXN0ZW5lclxuICAvLyBkZWNpZGVkIG9uIGEgcmVzdWx0IGFscmVhZHlcbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIuY2FuRXhlY3V0ZSkge1xuICAgICAgcmVzdWx0ID0gaGFuZGxlci5jYW5FeGVjdXRlKGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKlxuICogQ2xlYXIgdGhlIGNvbW1hbmQgc3RhY2ssIGVyYXNpbmcgYWxsIHVuZG8gLyByZWRvIGhpc3RvcnlcbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGVtaXQpIHtcbiAgdGhpcy5fc3RhY2subGVuZ3RoID0gMDtcbiAgdGhpcy5fc3RhY2tJZHggPSAtMTtcblxuICBpZiAoZW1pdCAhPT0gZmFsc2UpIHtcbiAgICB0aGlzLl9maXJlKCdjaGFuZ2VkJyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBVbmRvIGxhc3QgY29tbWFuZChzKVxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGFjdGlvbiA9IHRoaXMuX2dldFVuZG9BY3Rpb24oKSxcbiAgICAgIG5leHQ7XG5cbiAgaWYgKGFjdGlvbikge1xuICAgIHRoaXMuX3B1c2hBY3Rpb24oYWN0aW9uKTtcblxuICAgIHdoaWxlIChhY3Rpb24pIHtcbiAgICAgIHRoaXMuX2ludGVybmFsVW5kbyhhY3Rpb24pO1xuICAgICAgbmV4dCA9IHRoaXMuX2dldFVuZG9BY3Rpb24oKTtcblxuICAgICAgaWYgKCFuZXh0IHx8IG5leHQuaWQgIT09IGFjdGlvbi5pZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYWN0aW9uID0gbmV4dDtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3BBY3Rpb24oKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlZG8gbGFzdCBjb21tYW5kKHMpXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUucmVkbyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYWN0aW9uID0gdGhpcy5fZ2V0UmVkb0FjdGlvbigpLFxuICAgICAgbmV4dDtcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgdGhpcy5fcHVzaEFjdGlvbihhY3Rpb24pO1xuXG4gICAgd2hpbGUgKGFjdGlvbikge1xuICAgICAgdGhpcy5faW50ZXJuYWxFeGVjdXRlKGFjdGlvbiwgdHJ1ZSk7XG4gICAgICBuZXh0ID0gdGhpcy5fZ2V0UmVkb0FjdGlvbigpO1xuXG4gICAgICBpZiAoIW5leHQgfHwgbmV4dC5pZCAhPT0gYWN0aW9uLmlkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24gPSBuZXh0O1xuICAgIH1cblxuICAgIHRoaXMuX3BvcEFjdGlvbigpO1xuICB9XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBoYW5kbGVyIGluc3RhbmNlIHdpdGggdGhlIGNvbW1hbmQgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICogQHBhcmFtIHtDb21tYW5kSGFuZGxlcn0gaGFuZGxlclxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29tbWFuZCwgaGFuZGxlcikge1xuICB0aGlzLl9zZXRIYW5kbGVyKGNvbW1hbmQsIGhhbmRsZXIpO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgaGFuZGxlciB0eXBlIHdpdGggdGhlIGNvbW1hbmQgc3RhY2tcbiAqIGJ5IGluc3RhbnRpYXRpbmcgaXQgYW5kIGluamVjdGluZyBpdHMgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhIGNvbnN0cnVjdG9yIGZvciBhIHtAbGluayBDb21tYW5kSGFuZGxlcn1cbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5yZWdpc3RlckhhbmRsZXIgPSBmdW5jdGlvbihjb21tYW5kLCBoYW5kbGVyQ2xzKSB7XG5cbiAgaWYgKCFjb21tYW5kIHx8ICFoYW5kbGVyQ2xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGFuZCBoYW5kbGVyQ2xzIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9pbmplY3Rvci5pbnN0YW50aWF0ZShoYW5kbGVyQ2xzKTtcbiAgdGhpcy5yZWdpc3Rlcihjb21tYW5kLCBoYW5kbGVyKTtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuY2FuVW5kbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9nZXRVbmRvQWN0aW9uKCk7XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLmNhblJlZG8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICEhdGhpcy5fZ2V0UmVkb0FjdGlvbigpO1xufTtcblxuLy8gc3RhY2sgYWNjZXNzICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2dldFJlZG9BY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrSWR4ICsgMV07XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2dldFVuZG9BY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrSWR4XTtcbn07XG5cblxuLy8gaW50ZXJuYWwgZnVuY3Rpb25hbGl0eSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2ludGVybmFsVW5kbyA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGNvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCxcbiAgICAgIGNvbnRleHQgPSBhY3Rpb24uY29udGV4dDtcblxuICB2YXIgaGFuZGxlciA9IHRoaXMuX2dldEhhbmRsZXIoY29tbWFuZCk7XG5cbiAgLy8gZ3VhcmQgYWdhaW5zdCBpbGxlZ2FsIG5lc3RlZCBjb21tYW5kIHN0YWNrIGludm9jYXRpb25zXG4gIHRoaXMuX2F0b21pY0RvKGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ3JldmVydCcsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5yZXZlcnQpIHtcbiAgICAgIHNlbGYuX21hcmtEaXJ0eShoYW5kbGVyLnJldmVydChjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgc2VsZi5fcmV2ZXJ0ZWRBY3Rpb24oYWN0aW9uKTtcblxuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ3JldmVydGVkJywgYWN0aW9uKTtcbiAgfSk7XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihjb21tYW5kLCBxdWFsaWZpZXIsIGV2ZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgIGV2ZW50ID0gcXVhbGlmaWVyO1xuICAgIHF1YWxpZmllciA9IG51bGw7XG4gIH1cblxuICB2YXIgbmFtZXMgPSBxdWFsaWZpZXIgPyBbIGNvbW1hbmQgKyAnLicgKyBxdWFsaWZpZXIsIHF1YWxpZmllciBdIDogWyBjb21tYW5kIF0sXG4gICAgICBpLCBuYW1lLCByZXN1bHQ7XG5cbiAgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudChldmVudCk7XG5cbiAgZm9yIChpID0gMDsgKG5hbWUgPSBuYW1lc1tpXSk7IGkrKykge1xuICAgIHJlc3VsdCA9IHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvbW1hbmRTdGFjay4nICsgbmFtZSwgZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2NyZWF0ZUlkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl91aWQrKztcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2F0b21pY0RvID0gZnVuY3Rpb24oZm4pIHtcblxuICB2YXIgZXhlY3V0aW9uID0gdGhpcy5fY3VycmVudEV4ZWN1dGlvbjtcblxuICBleGVjdXRpb24uYXRvbWljID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uLmF0b21pYyA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9pbnRlcm5hbEV4ZWN1dGUgPSBmdW5jdGlvbihhY3Rpb24sIHJlZG8pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBjb21tYW5kID0gYWN0aW9uLmNvbW1hbmQsXG4gICAgICBjb250ZXh0ID0gYWN0aW9uLmNvbnRleHQ7XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9nZXRIYW5kbGVyKGNvbW1hbmQpO1xuXG4gIGlmICghaGFuZGxlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gY29tbWFuZCBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIDwnICsgY29tbWFuZCArICc+Jyk7XG4gIH1cblxuICB0aGlzLl9wdXNoQWN0aW9uKGFjdGlvbik7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncHJlRXhlY3V0ZScsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5wcmVFeGVjdXRlKSB7XG4gICAgICBoYW5kbGVyLnByZUV4ZWN1dGUoY29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncHJlRXhlY3V0ZWQnLCBhY3Rpb24pO1xuICB9XG5cbiAgLy8gZ3VhcmQgYWdhaW5zdCBpbGxlZ2FsIG5lc3RlZCBjb21tYW5kIHN0YWNrIGludm9jYXRpb25zXG4gIHRoaXMuX2F0b21pY0RvKGZ1bmN0aW9uKCkge1xuXG4gICAgc2VsZi5fZmlyZShjb21tYW5kLCAnZXhlY3V0ZScsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5leGVjdXRlKSB7XG5cbiAgICAgIC8vIGFjdHVhbCBleGVjdXRlICsgbWFyayByZXR1cm4gcmVzdWx0cyBhcyBkaXJ0eVxuICAgICAgc2VsZi5fbWFya0RpcnR5KGhhbmRsZXIuZXhlY3V0ZShjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgLy8gbG9nIHRvIHN0YWNrXG4gICAgc2VsZi5fZXhlY3V0ZWRBY3Rpb24oYWN0aW9uLCByZWRvKTtcblxuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ2V4ZWN1dGVkJywgYWN0aW9uKTtcbiAgfSk7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncG9zdEV4ZWN1dGUnLCBhY3Rpb24pO1xuXG4gICAgaWYgKGhhbmRsZXIucG9zdEV4ZWN1dGUpIHtcbiAgICAgIGhhbmRsZXIucG9zdEV4ZWN1dGUoY29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncG9zdEV4ZWN1dGVkJywgYWN0aW9uKTtcbiAgfVxuXG4gIHRoaXMuX3BvcEFjdGlvbihhY3Rpb24pO1xufTtcblxuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9wdXNoQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uKSB7XG5cbiAgdmFyIGV4ZWN1dGlvbiA9IHRoaXMuX2N1cnJlbnRFeGVjdXRpb24sXG4gICAgICBhY3Rpb25zID0gZXhlY3V0aW9uLmFjdGlvbnM7XG5cbiAgdmFyIGJhc2VBY3Rpb24gPSBhY3Rpb25zWzBdO1xuXG4gIGlmIChleGVjdXRpb24uYXRvbWljKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIGludm9jYXRpb24gaW4gPGV4ZWN1dGU+IG9yIDxyZXZlcnQ+IHBoYXNlIChhY3Rpb246ICcgKyBhY3Rpb24uY29tbWFuZCArICcpJyk7XG4gIH1cblxuICBpZiAoIWFjdGlvbi5pZCkge1xuICAgIGFjdGlvbi5pZCA9IChiYXNlQWN0aW9uICYmIGJhc2VBY3Rpb24uaWQpIHx8IHRoaXMuX2NyZWF0ZUlkKCk7XG4gIH1cblxuICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fcG9wQWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciBleGVjdXRpb24gPSB0aGlzLl9jdXJyZW50RXhlY3V0aW9uLFxuICAgICAgYWN0aW9ucyA9IGV4ZWN1dGlvbi5hY3Rpb25zLFxuICAgICAgZGlydHkgPSBleGVjdXRpb24uZGlydHk7XG5cbiAgYWN0aW9ucy5wb3AoKTtcblxuICBpZiAoIWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudHMuY2hhbmdlZCcsIHsgZWxlbWVudHM6IHVuaXF1ZUJ5KCdpZCcsIGRpcnR5LnJldmVyc2UoKSkgfSk7XG5cbiAgICBkaXJ0eS5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fZmlyZSgnY2hhbmdlZCcpO1xuICB9XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX21hcmtEaXJ0eSA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBleGVjdXRpb24gPSB0aGlzLl9jdXJyZW50RXhlY3V0aW9uO1xuXG4gIGlmICghZWxlbWVudHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbGVtZW50cyA9IGlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbIGVsZW1lbnRzIF07XG5cbiAgZXhlY3V0aW9uLmRpcnR5ID0gZXhlY3V0aW9uLmRpcnR5LmNvbmNhdChlbGVtZW50cyk7XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2V4ZWN1dGVkQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uLCByZWRvKSB7XG4gIHZhciBzdGFja0lkeCA9ICsrdGhpcy5fc3RhY2tJZHg7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fc3RhY2suc3BsaWNlKHN0YWNrSWR4LCB0aGlzLl9zdGFjay5sZW5ndGgsIGFjdGlvbik7XG4gIH1cbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fcmV2ZXJ0ZWRBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgdGhpcy5fc3RhY2tJZHgtLTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fZ2V0SGFuZGxlciA9IGZ1bmN0aW9uKGNvbW1hbmQpIHtcbiAgcmV0dXJuIHRoaXMuX2hhbmRsZXJNYXBbY29tbWFuZF07XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9zZXRIYW5kbGVyID0gZnVuY3Rpb24oY29tbWFuZCwgaGFuZGxlcikge1xuICBpZiAoIWNvbW1hbmQgfHwgIWhhbmRsZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgYW5kIGhhbmRsZXIgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9oYW5kbGVyTWFwW2NvbW1hbmRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvdmVycmlkaW5nIGhhbmRsZXIgZm9yIGNvbW1hbmQgPCcgKyBjb21tYW5kICsgJz4nKTtcbiAgfVxuXG4gIHRoaXMuX2hhbmRsZXJNYXBbY29tbWFuZF0gPSBoYW5kbGVyO1xufTtcbiIsImltcG9ydCBDb21tYW5kU3RhY2sgZnJvbSAnLi9Db21tYW5kU3RhY2snO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbW1hbmRTdGFjazogWyAndHlwZScsIENvbW1hbmRTdGFjayBdXG59O1xuIiwiaW1wb3J0IHtcbiAgaXNOdW1iZXIsXG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgZXZlcnksXG4gIGRlYm91bmNlLFxuICBiaW5kLFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGdldFR5cGVcbn0gZnJvbSAnLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICB0cmFuc2Zvcm0gYXMgc3ZnVHJhbnNmb3JtXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHsgY3JlYXRlTWF0cml4IGFzIGNyZWF0ZU1hdHJpeCB9IGZyb20gJ3Rpbnktc3ZnJztcblxuXG5mdW5jdGlvbiByb3VuZChudW1iZXIsIHJlc29sdXRpb24pIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogcmVzb2x1dGlvbikgLyByZXNvbHV0aW9uO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVQeChudW1iZXIpIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG51bWJlcikgPyBudW1iZXIgKyAncHgnIDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBIVE1MIGNvbnRhaW5lciBlbGVtZW50IGZvciBhIFNWRyBlbGVtZW50IHdpdGhcbiAqIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gdGhlIGNvbnRhaW5lciBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IGFzc2lnbih7fSwgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9LCBvcHRpb25zKTtcblxuICB2YXIgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuYm9keTtcblxuICAvLyBjcmVhdGUgYSA8ZGl2PiBhcm91bmQgdGhlIHN2ZyBlbGVtZW50IHdpdGggdGhlIHJlc3BlY3RpdmUgc2l6ZVxuICAvLyB0aGlzIHdheSB3ZSBjYW4gYWx3YXlzIGdldCB0aGUgY29ycmVjdCBjb250YWluZXIgc2l6ZVxuICAvLyAodGhpcyBpcyBpbXBvc3NpYmxlIGZvciA8c3ZnPiBlbGVtZW50cyBhdCB0aGUgbW9tZW50KVxuICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBhcmVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2Rqcy1jb250YWluZXInKTtcblxuICBhc3NpZ24ocGFyZW50LnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHdpZHRoOiBlbnN1cmVQeChvcHRpb25zLndpZHRoKSxcbiAgICBoZWlnaHQ6IGVuc3VyZVB4KG9wdGlvbnMuaGVpZ2h0KVxuICB9KTtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQocGFyZW50KTtcblxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHcm91cChwYXJlbnQsIGNscywgY2hpbGRJbmRleCkge1xuICB2YXIgZ3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKGNscyk7XG5cbiAgdmFyIGluZGV4ID0gY2hpbGRJbmRleCAhPT0gdW5kZWZpbmVkID8gY2hpbGRJbmRleCA6IHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG5cbiAgLy8gbXVzdCBlbnN1cmUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vZGUgb3IgX251bGxfXG4gIC8vIGNmLiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS9pbnNlcnRCZWZvcmVcbiAgcGFyZW50Lmluc2VydEJlZm9yZShncm91cCwgcGFyZW50LmNoaWxkTm9kZXNbaW5kZXhdIHx8IG51bGwpO1xuXG4gIHJldHVybiBncm91cDtcbn1cblxudmFyIEJBU0VfTEFZRVIgPSAnYmFzZSc7XG5cblxudmFyIFJFUVVJUkVEX01PREVMX0FUVFJTID0ge1xuICBzaGFwZTogWyAneCcsICd5JywgJ3dpZHRoJywgJ2hlaWdodCcgXSxcbiAgY29ubmVjdGlvbjogWyAnd2F5cG9pbnRzJyBdXG59O1xuXG4vKipcbiAqIFRoZSBtYWluIGRyYXdpbmcgY2FudmFzLlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGVtaXRzIENhbnZhcyNjYW52YXMuaW5pdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0dyYXBoaWNzRmFjdG9yeX0gZ3JhcGhpY3NGYWN0b3J5XG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhbnZhcyhjb25maWcsIGV2ZW50QnVzLCBncmFwaGljc0ZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xuXG4gIHRoaXMuX2luaXQoY29uZmlnIHx8IHt9KTtcbn1cblxuQ2FudmFzLiRpbmplY3QgPSBbXG4gICdjb25maWcuY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2dyYXBoaWNzRmFjdG9yeScsXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG5cbkNhbnZhcy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihjb25maWcpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICAvLyBDcmVhdGVzIGEgPHN2Zz4gZWxlbWVudCB0aGF0IGlzIHdyYXBwZWQgaW50byBhIDxkaXY+LlxuICAvLyBUaGlzIHdheSB3ZSBhcmUgYWx3YXlzIGFibGUgdG8gY29ycmVjdGx5IGZpZ3VyZSBvdXQgdGhlIHNpemUgb2YgdGhlIHN2ZyBlbGVtZW50XG4gIC8vIGJ5IHF1ZXJ5aW5nIHRoZSBwYXJlbnQgbm9kZS5cbiAgLy9cbiAgLy8gKEl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgdGhlIHNpemUgb2YgYSBzdmcgZWxlbWVudCBjcm9zcyBicm93c2VyIEAgMjAxNC0wNC0wMSlcbiAgLy9cbiAgLy8gPGRpdiBjbGFzcz1cImRqcy1jb250YWluZXJcIiBzdHlsZT1cIndpZHRoOiB7ZGVzaXJlZC13aWR0aH0sIGhlaWdodDoge2Rlc2lyZWQtaGVpZ2h0fVwiPlxuICAvLyAgIDxzdmcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxuICAvLyAgICAuLi5cbiAgLy8gICA8L3N2Zz5cbiAgLy8gPC9kaXY+XG5cbiAgLy8gaHRtbCBjb250YWluZXJcbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcihjb25maWcpO1xuXG4gIHZhciBzdmcgPSB0aGlzLl9zdmcgPSBzdmdDcmVhdGUoJ3N2ZycpO1xuICBzdmdBdHRyKHN2ZywgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9KTtcblxuICBzdmdBcHBlbmQoY29udGFpbmVyLCBzdmcpO1xuXG4gIHZhciB2aWV3cG9ydCA9IHRoaXMuX3ZpZXdwb3J0ID0gY3JlYXRlR3JvdXAoc3ZnLCAndmlld3BvcnQnKTtcblxuICB0aGlzLl9sYXllcnMgPSB7fTtcblxuICAvLyBkZWJvdW5jZSBjYW52YXMudmlld2JveC5jaGFuZ2VkIGV2ZW50c1xuICAvLyBmb3Igc21vb3RoZXIgZGlhZ3JhbSBpbnRlcmFjdGlvblxuICBpZiAoY29uZmlnLmRlZmVyVXBkYXRlICE9PSBmYWxzZSkge1xuICAgIHRoaXMuX3ZpZXdib3hDaGFuZ2VkID0gZGVib3VuY2UoYmluZCh0aGlzLl92aWV3Ym94Q2hhbmdlZCwgdGhpcyksIDMwMCk7XG4gIH1cblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIGNhbnZhcyBpcyByZWFkeSB0byBiZSBkcmF3biBvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICAgKlxuICAgICAqIEBldmVudCBjYW52YXMuaW5pdFxuICAgICAqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IHN2ZyB0aGUgY3JlYXRlZCBzdmcgZWxlbWVudFxuICAgICAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gdmlld3BvcnQgdGhlIGRpcmVjdCBwYXJlbnQgb2YgZGlhZ3JhbSBlbGVtZW50cyBhbmQgc2hhcGVzXG4gICAgICovXG4gICAgZXZlbnRCdXMuZmlyZSgnY2FudmFzLmluaXQnLCB7XG4gICAgICBzdmc6IHN2ZyxcbiAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydFxuICAgIH0pO1xuXG4gIH0sIHRoaXMpO1xuXG4gIC8vIHJlc2V0IHZpZXdib3ggb24gc2hhcGUgY2hhbmdlcyB0b1xuICAvLyByZWNvbXB1dGUgdGhlIHZpZXdib3hcbiAgZXZlbnRCdXMub24oW1xuICAgICdzaGFwZS5hZGRlZCcsXG4gICAgJ2Nvbm5lY3Rpb24uYWRkZWQnLFxuICAgICdzaGFwZS5yZW1vdmVkJyxcbiAgICAnY29ubmVjdGlvbi5yZW1vdmVkJyxcbiAgICAnZWxlbWVudHMuY2hhbmdlZCdcbiAgXSwgZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXMuX2NhY2hlZFZpZXdib3g7XG4gIH0sIHRoaXMpO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCA1MDAsIHRoaXMuX2Rlc3Ryb3ksIHRoaXMpO1xuICBldmVudEJ1cy5vbignZGlhZ3JhbS5jbGVhcicsIDUwMCwgdGhpcy5fY2xlYXIsIHRoaXMpO1xufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKGVtaXQpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLmRlc3Ryb3knLCB7XG4gICAgc3ZnOiB0aGlzLl9zdmcsXG4gICAgdmlld3BvcnQ6IHRoaXMuX3ZpZXdwb3J0XG4gIH0pO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gIH1cblxuICBkZWxldGUgdGhpcy5fc3ZnO1xuICBkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICBkZWxldGUgdGhpcy5fbGF5ZXJzO1xuICBkZWxldGUgdGhpcy5fcm9vdEVsZW1lbnQ7XG4gIGRlbGV0ZSB0aGlzLl92aWV3cG9ydDtcbn07XG5cbkNhbnZhcy5wcm90b3R5cGUuX2NsZWFyID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBhbGxFbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRBbGwoKTtcblxuICAvLyByZW1vdmUgYWxsIGVsZW1lbnRzXG4gIGFsbEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHZhciB0eXBlID0gZ2V0VHlwZShlbGVtZW50KTtcblxuICAgIGlmICh0eXBlID09PSAncm9vdCcpIHtcbiAgICAgIHNlbGYuc2V0Um9vdEVsZW1lbnQobnVsbCwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuX3JlbW92ZUVsZW1lbnQoZWxlbWVudCwgdHlwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIHZpZXcgYm94XG4gIGRlbGV0ZSB0aGlzLl9jYWNoZWRWaWV3Ym94O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGxheWVyIG9uIHdoaWNoXG4gKiBhbGwgZWxlbWVudHMgYXJlIGRyYXduLlxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5DYW52YXMucHJvdG90eXBlLmdldERlZmF1bHRMYXllciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRMYXllcihCQVNFX0xBWUVSLCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGxheWVyIHRoYXQgaXMgdXNlZCB0byBkcmF3IGVsZW1lbnRzXG4gKiBvciBhbm5vdGF0aW9ucyBvbiBpdC5cbiAqXG4gKiBOb24tZXhpc3RpbmcgbGF5ZXJzIHJldHJpZXZlZCB0aHJvdWdoIHRoaXMgbWV0aG9kXG4gKiB3aWxsIGJlIGNyZWF0ZWQuIER1cmluZyBjcmVhdGlvbiwgdGhlIG9wdGlvbmFsIGluZGV4XG4gKiBtYXkgYmUgdXNlZCB0byBjcmVhdGUgbGF5ZXJzIGJlbG93IG9yIGFib3ZlIGV4aXN0aW5nIGxheWVycy5cbiAqIEEgbGF5ZXIgd2l0aCBhIGNlcnRhaW4gaW5kZXggaXMgYWx3YXlzIGNyZWF0ZWQgYWJvdmUgYWxsXG4gKiBleGlzdGluZyBsYXllcnMgd2l0aCB0aGUgc2FtZSBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKlxuICogQHJldHVybnMge1NWR0VsZW1lbnR9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0TGF5ZXIgPSBmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuXG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzcGVjaWZ5IGEgbmFtZScpO1xuICB9XG5cbiAgdmFyIGxheWVyID0gdGhpcy5fbGF5ZXJzW25hbWVdO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICBsYXllciA9IHRoaXMuX2xheWVyc1tuYW1lXSA9IHRoaXMuX2NyZWF0ZUxheWVyKG5hbWUsIGluZGV4KTtcbiAgfVxuXG4gIC8vIHRocm93IGFuIGVycm9yIGlmIGxheWVyIGNyZWF0aW9uIC8gcmV0cml2YWwgaXNcbiAgLy8gcmVxdWVzdGVkIG9uIGRpZmZlcmVudCBpbmRleFxuICBpZiAodHlwZW9mIGluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiBsYXllci5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xheWVyIDwnICsgbmFtZSArICc+IGFscmVhZHkgY3JlYXRlZCBhdCBpbmRleCA8JyArIGluZGV4ICsgJz4nKTtcbiAgfVxuXG4gIHJldHVybiBsYXllci5ncm91cDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGdpdmVuIGxheWVyIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTBdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBsYXllciBkZXNjcmlwdG9yIHdpdGggeyBpbmRleCwgZ3JvdXA6IFNWR0dyb3VwIH1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fY3JlYXRlTGF5ZXIgPSBmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuXG4gIGlmICghaW5kZXgpIHtcbiAgICBpbmRleCA9IDA7XG4gIH1cblxuICB2YXIgY2hpbGRJbmRleCA9IHJlZHVjZSh0aGlzLl9sYXllcnMsIGZ1bmN0aW9uKGNoaWxkSW5kZXgsIGxheWVyKSB7XG4gICAgaWYgKGluZGV4ID49IGxheWVyLmluZGV4KSB7XG4gICAgICBjaGlsZEluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkSW5kZXg7XG4gIH0sIDApO1xuXG4gIHJldHVybiB7XG4gICAgZ3JvdXA6IGNyZWF0ZUdyb3VwKHRoaXMuX3ZpZXdwb3J0LCAnbGF5ZXItJyArIG5hbWUsIGNoaWxkSW5kZXgpLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xuXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGh0bWwgZWxlbWVudCB0aGF0IGVuY2xvc2VzIHRoZVxuICogZHJhd2luZyBjYW52YXMuXG4gKlxuICogQHJldHVybiB7RE9NTm9kZX1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5nZXRDb250YWluZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbn07XG5cblxuLy8gbWFya2VycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNhbnZhcy5wcm90b3R5cGUuX3VwZGF0ZU1hcmtlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1hcmtlciwgYWRkKSB7XG4gIHZhciBjb250YWluZXI7XG5cbiAgaWYgKCFlbGVtZW50LmlkKSB7XG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudCk7XG4gIH1cblxuICAvLyB3ZSBuZWVkIHRvIGFjY2VzcyBhbGxcbiAgY29udGFpbmVyID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5Ll9lbGVtZW50c1tlbGVtZW50LmlkXTtcblxuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2goWyBjb250YWluZXIuZ2Z4LCBjb250YWluZXIuc2Vjb25kYXJ5R2Z4IF0sIGZ1bmN0aW9uKGdmeCkge1xuICAgIGlmIChnZngpIHtcblxuICAgICAgLy8gaW52b2tlIGVpdGhlciBhZGRDbGFzcyBvciByZW1vdmVDbGFzcyBiYXNlZCBvbiBtb2RlXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQobWFya2VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5yZW1vdmUobWFya2VyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBtYXJrZXIgaGFzIGJlZW4gdXBkYXRlZCBmb3IgYW4gZWxlbWVudFxuICAgKlxuICAgKiBAZXZlbnQgZWxlbWVudC5tYXJrZXIudXBkYXRlXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkVsZW1lbnR9IGVsZW1lbnQgdGhlIHNoYXBlXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2hhcGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IG1hcmtlclxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGFkZCB0cnVlIGlmIHRoZSBtYXJrZXIgd2FzIGFkZGVkLCBmYWxzZSBpZiBpdCBnb3QgcmVtb3ZlZFxuICAgKi9cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudC5tYXJrZXIudXBkYXRlJywgeyBlbGVtZW50OiBlbGVtZW50LCBnZng6IGNvbnRhaW5lci5nZngsIG1hcmtlcjogbWFya2VyLCBhZGQ6ICEhYWRkIH0pO1xufTtcblxuXG4vKipcbiAqIEFkZHMgYSBtYXJrZXIgdG8gYW4gZWxlbWVudCAoYmFzaWNhbGx5IGEgY3NzIGNsYXNzKS5cbiAqXG4gKiBGaXJlcyB0aGUgZWxlbWVudC5tYXJrZXIudXBkYXRlIGV2ZW50LCBtYWtpbmcgaXQgcG9zc2libGUgdG9cbiAqIGludGVncmF0ZSBleHRlbnNpb24gaW50byB0aGUgbWFya2VyIGxpZmUtY3ljbGUsIHRvby5cbiAqXG4gKiBAZXhhbXBsZVxuICogY2FudmFzLmFkZE1hcmtlcignZm9vJywgJ3NvbWUtbWFya2VyJyk7XG4gKlxuICogdmFyIGZvb0dmeCA9IGNhbnZhcy5nZXRHcmFwaGljcygnZm9vJyk7XG4gKlxuICogZm9vR2Z4OyAvLyA8ZyBjbGFzcz1cIi4uLiBzb21lLW1hcmtlclwiPiAuLi4gPC9nPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya2VyXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuYWRkTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyKSB7XG4gIHRoaXMuX3VwZGF0ZU1hcmtlcihlbGVtZW50LCBtYXJrZXIsIHRydWUpO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBhIG1hcmtlciBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogRmlyZXMgdGhlIGVsZW1lbnQubWFya2VyLnVwZGF0ZSBldmVudCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvXG4gKiBpbnRlZ3JhdGUgZXh0ZW5zaW9uIGludG8gdGhlIG1hcmtlciBsaWZlLWN5Y2xlLCB0b28uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1hcmtlclxuICovXG5DYW52YXMucHJvdG90eXBlLnJlbW92ZU1hcmtlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1hcmtlcikge1xuICB0aGlzLl91cGRhdGVNYXJrZXIoZWxlbWVudCwgbWFya2VyLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBtYXJrZXIgb24gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gbWFya2VyXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuaGFzTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyKSB7XG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGdmeCA9IHRoaXMuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG5cbiAgcmV0dXJuIHN2Z0NsYXNzZXMoZ2Z4KS5oYXMobWFya2VyKTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBhIG1hcmtlciBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEZpcmVzIHRoZSBlbGVtZW50Lm1hcmtlci51cGRhdGUgZXZlbnQsIG1ha2luZyBpdCBwb3NzaWJsZSB0b1xuICogaW50ZWdyYXRlIGV4dGVuc2lvbiBpbnRvIHRoZSBtYXJrZXIgbGlmZS1jeWNsZSwgdG9vLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ3xkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBtYXJrZXJcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS50b2dnbGVNYXJrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBtYXJrZXIpIHtcbiAgaWYgKHRoaXMuaGFzTWFya2VyKGVsZW1lbnQsIG1hcmtlcikpIHtcbiAgICB0aGlzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtYXJrZXIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYWRkTWFya2VyKGVsZW1lbnQsIG1hcmtlcik7XG4gIH1cbn07XG5cbkNhbnZhcy5wcm90b3R5cGUuZ2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yb290RWxlbWVudCkge1xuICAgIHRoaXMuc2V0Um9vdEVsZW1lbnQoeyBpZDogJ19faW1wbGljaXRyb290JywgY2hpbGRyZW46IFtdIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50O1xufTtcblxuXG5cbi8vIHJvb3QgZWxlbWVudCBoYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogU2V0cyBhIGdpdmVuIGVsZW1lbnQgYXMgdGhlIG5ldyByb290IGVsZW1lbnQgZm9yIHRoZSBjYW52YXNcbiAqIGFuZCByZXR1cm5zIHRoZSBuZXcgcm9vdCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGRqcy5tb2RlbC5Sb290fSBlbGVtZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvdmVycmlkZV0gd2hldGhlciB0byBvdmVycmlkZSB0aGUgY3VycmVudCByb290IGVsZW1lbnQsIGlmIGFueVxuICpcbiAqIEByZXR1cm4ge09iamVjdHxkanMubW9kZWwuUm9vdH0gbmV3IHJvb3QgZWxlbWVudFxuICovXG5DYW52YXMucHJvdG90eXBlLnNldFJvb3RFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgb3ZlcnJpZGUpIHtcblxuICBpZiAoZWxlbWVudCkge1xuICAgIHRoaXMuX2Vuc3VyZVZhbGlkKCdyb290JywgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudFJvb3QgPSB0aGlzLl9yb290RWxlbWVudCxcbiAgICAgIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgaWYgKGN1cnJlbnRSb290KSB7XG4gICAgaWYgKCFvdmVycmlkZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290RWxlbWVudCBhbHJlYWR5IHNldCwgbmVlZCB0byBzcGVjaWZ5IG92ZXJyaWRlJyk7XG4gICAgfVxuXG4gICAgLy8gc2ltdWxhdGUgZWxlbWVudCByZW1vdmUgZXZlbnQgc2VxdWVuY2VcbiAgICBldmVudEJ1cy5maXJlKCdyb290LnJlbW92ZScsIHsgZWxlbWVudDogY3VycmVudFJvb3QgfSk7XG4gICAgZXZlbnRCdXMuZmlyZSgncm9vdC5yZW1vdmVkJywgeyBlbGVtZW50OiBjdXJyZW50Um9vdCB9KTtcblxuICAgIGVsZW1lbnRSZWdpc3RyeS5yZW1vdmUoY3VycmVudFJvb3QpO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICB2YXIgZ2Z4ID0gdGhpcy5nZXREZWZhdWx0TGF5ZXIoKTtcblxuICAgIC8vIHJlc2VtYmxlIGVsZW1lbnQgYWRkIGV2ZW50IHNlcXVlbmNlXG4gICAgZXZlbnRCdXMuZmlyZSgncm9vdC5hZGQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG5cbiAgICBlbGVtZW50UmVnaXN0cnkuYWRkKGVsZW1lbnQsIGdmeCwgdGhpcy5fc3ZnKTtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ3Jvb3QuYWRkZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9XG5cbiAgdGhpcy5fcm9vdEVsZW1lbnQgPSBlbGVtZW50O1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG5cbi8vIGFkZCBmdW5jdGlvbmFsaXR5IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ2FudmFzLnByb3RvdHlwZS5fZW5zdXJlVmFsaWQgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50KSB7XG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHdpdGggaWQgJyArIGVsZW1lbnQuaWQgKyAnIGFscmVhZHkgZXhpc3RzJyk7XG4gIH1cblxuICB2YXIgcmVxdWlyZWRBdHRycyA9IFJFUVVJUkVEX01PREVMX0FUVFJTW3R5cGVdO1xuXG4gIHZhciB2YWxpZCA9IGV2ZXJ5KHJlcXVpcmVkQXR0cnMsIGZ1bmN0aW9uKGF0dHIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnRbYXR0cl0gIT09ICd1bmRlZmluZWQnO1xuICB9KTtcblxuICBpZiAoIXZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ211c3Qgc3VwcGx5IHsgJyArIHJlcXVpcmVkQXR0cnMuam9pbignLCAnKSArICcgfSB3aXRoICcgKyB0eXBlKTtcbiAgfVxufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fc2V0UGFyZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuICBjb2xsZWN0aW9uQWRkKHBhcmVudC5jaGlsZHJlbiwgZWxlbWVudCwgcGFyZW50SW5kZXgpO1xuICBlbGVtZW50LnBhcmVudCA9IHBhcmVudDtcbn07XG5cbi8qKlxuICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBjYW52YXMuXG4gKlxuICogVGhpcyB3aXJlcyB0aGUgcGFyZW50IDwtPiBjaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmRcbiAqIGEgZXhwbGljaXRseSBzcGVjaWZpZWQgcGFyZW50IG9yIGFuIGltcGxpY2l0IHJvb3QgZWxlbWVudC5cbiAqXG4gKiBEdXJpbmcgYWRkIGl0IGVtaXRzIHRoZSBldmVudHNcbiAqXG4gKiAgKiA8e3R5cGV9LmFkZD4gKGVsZW1lbnQsIHBhcmVudClcbiAqICAqIDx7dHlwZX0uYWRkZWQ+IChlbGVtZW50LCBnZngpXG4gKlxuICogRXh0ZW5zaW9ucyBtYXkgaG9vayBpbnRvIHRoZXNlIGV2ZW50cyB0byBwZXJmb3JtIHRoZWlyIG1hZ2ljLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLkJhc2V9IFtwYXJlbnRdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhcmVudEluZGV4XVxuICpcbiAqIEByZXR1cm4ge09iamVjdHxkanMubW9kZWwuQmFzZX0gdGhlIGFkZGVkIGVsZW1lbnRcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fYWRkRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHBhcmVudCwgcGFyZW50SW5kZXgpIHtcblxuICBwYXJlbnQgPSBwYXJlbnQgfHwgdGhpcy5nZXRSb290RWxlbWVudCgpO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzLFxuICAgICAgZ3JhcGhpY3NGYWN0b3J5ID0gdGhpcy5fZ3JhcGhpY3NGYWN0b3J5O1xuXG4gIHRoaXMuX2Vuc3VyZVZhbGlkKHR5cGUsIGVsZW1lbnQpO1xuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcuYWRkJywgeyBlbGVtZW50OiBlbGVtZW50LCBwYXJlbnQ6IHBhcmVudCB9KTtcblxuICB0aGlzLl9zZXRQYXJlbnQoZWxlbWVudCwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG5cbiAgLy8gY3JlYXRlIGdyYXBoaWNzXG4gIHZhciBnZnggPSBncmFwaGljc0ZhY3RvcnkuY3JlYXRlKHR5cGUsIGVsZW1lbnQsIHBhcmVudEluZGV4KTtcblxuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkuYWRkKGVsZW1lbnQsIGdmeCk7XG5cbiAgLy8gdXBkYXRlIGl0cyB2aXN1YWxcbiAgZ3JhcGhpY3NGYWN0b3J5LnVwZGF0ZSh0eXBlLCBlbGVtZW50LCBnZngpO1xuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcuYWRkZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBBZGRzIGEgc2hhcGUgdG8gdGhlIGNhbnZhc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGRqcy5tb2RlbC5TaGFwZX0gc2hhcGUgdG8gYWRkIHRvIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbcGFyZW50XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBhZGRlZCBzaGFwZVxuICovXG5DYW52YXMucHJvdG90eXBlLmFkZFNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIHBhcmVudCwgcGFyZW50SW5kZXgpIHtcbiAgcmV0dXJuIHRoaXMuX2FkZEVsZW1lbnQoJ3NoYXBlJywgc2hhcGUsIHBhcmVudCwgcGFyZW50SW5kZXgpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY29ubmVjdGlvbiB0byB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb24gdG8gYWRkIHRvIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbcGFyZW50XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gdGhlIGFkZGVkIGNvbm5lY3Rpb25cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5hZGRDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuICByZXR1cm4gdGhpcy5fYWRkRWxlbWVudCgnY29ubmVjdGlvbicsIGNvbm5lY3Rpb24sIHBhcmVudCwgcGFyZW50SW5kZXgpO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIHJlbW92ZSBlbGVtZW50XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlKSB7XG5cbiAgdmFyIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGdyYXBoaWNzRmFjdG9yeSA9IHRoaXMuX2dyYXBoaWNzRmFjdG9yeSxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgZWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudC5pZCB8fCBlbGVtZW50KTtcblxuICBpZiAoIWVsZW1lbnQpIHtcblxuICAgIC8vIGVsZW1lbnQgd2FzIHJlbW92ZWQgYWxyZWFkeVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcucmVtb3ZlJywgeyBlbGVtZW50OiBlbGVtZW50IH0pO1xuXG4gIGdyYXBoaWNzRmFjdG9yeS5yZW1vdmUoZWxlbWVudCk7XG5cbiAgLy8gdW5zZXQgcGFyZW50IDwtPiBjaGlsZCByZWxhdGlvbnNoaXBcbiAgY29sbGVjdGlvblJlbW92ZShlbGVtZW50LnBhcmVudCAmJiBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiwgZWxlbWVudCk7XG4gIGVsZW1lbnQucGFyZW50ID0gbnVsbDtcblxuICBldmVudEJ1cy5maXJlKHR5cGUgKyAnLnJlbW92ZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG5cbiAgZWxlbWVudFJlZ2lzdHJ5LnJlbW92ZShlbGVtZW50KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIGEgc2hhcGUgZnJvbSB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZSBvciBzaGFwZSBpZCB0byBiZSByZW1vdmVkXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLlNoYXBlfSB0aGUgcmVtb3ZlZCBzaGFwZVxuICovXG5DYW52YXMucHJvdG90eXBlLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUpIHtcblxuICAvKipcbiAgICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgc2hhcGUgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYW52YXMuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICpcbiAgICogQGV2ZW50IHNoYXBlLnJlbW92ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudCB0aGUgc2hhcGUgZGVzY3JpcHRvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gZ2Z4IHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNoYXBlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBzaGFwZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQG1lbWJlck9mIENhbnZhc1xuICAgKlxuICAgKiBAZXZlbnQgc2hhcGUucmVtb3ZlZFxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudCB0aGUgc2hhcGUgZGVzY3JpcHRvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gZ2Z4IHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNoYXBlXG4gICAqL1xuICByZXR1cm4gdGhpcy5fcmVtb3ZlRWxlbWVudChzaGFwZSwgJ3NoYXBlJyk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb24gb3IgY29ubmVjdGlvbiBpZCB0byBiZSByZW1vdmVkXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkNvbm5lY3Rpb259IHRoZSByZW1vdmVkIGNvbm5lY3Rpb25cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5yZW1vdmVDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBjb25uZWN0aW9uIGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ2FudmFzXG4gICAqXG4gICAqIEBldmVudCBjb25uZWN0aW9uLnJlbW92ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5Db25uZWN0aW9ufSBlbGVtZW50IHRoZSBjb25uZWN0aW9uIGRlc2NyaXB0b3JcbiAgICogQHByb3BlcnR5IHtPYmplY3R9IGdmeCB0aGUgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBjb25uZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ2FudmFzXG4gICAqXG4gICAqIEBldmVudCBjb25uZWN0aW9uLnJlbW92ZWRcbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQHByb3BlcnR5IHtkanMubW9kZWwuQ29ubmVjdGlvbn0gZWxlbWVudCB0aGUgY29ubmVjdGlvbiBkZXNjcmlwdG9yXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29ubmVjdGlvblxuICAgKi9cbiAgcmV0dXJuIHRoaXMuX3JlbW92ZUVsZW1lbnQoY29ubmVjdGlvbiwgJ2Nvbm5lY3Rpb24nKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGdyYXBoaWNhbCBvYmplY3QgdW5kZXJsYXlpbmcgYSBjZXJ0YWluIGRpYWdyYW0gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50IGRlc2NyaXB0b3Igb2YgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlY29uZGFyeT1mYWxzZV0gd2hldGhlciB0byByZXR1cm4gdGhlIHNlY29uZGFyeSBjb25uZWN0ZWQgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0R3JhcGhpY3MgPSBmdW5jdGlvbihlbGVtZW50LCBzZWNvbmRhcnkpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50LCBzZWNvbmRhcnkpO1xufTtcblxuXG4vKipcbiAqIFBlcmZvcm0gYSB2aWV3Ym94IHVwZGF0ZSB2aWEgYSBnaXZlbiBjaGFuZ2UgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhbmdlRm5cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fY2hhbmdlVmlld2JveCA9IGZ1bmN0aW9uKGNoYW5nZUZuKSB7XG5cbiAgLy8gbm90aWZ5IG90aGVycyBvZiB0aGUgdXBjb21pbmcgdmlld2JveCBjaGFuZ2VcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnKTtcblxuICAvLyBwZXJmb3JtIGFjdHVhbCBjaGFuZ2VcbiAgY2hhbmdlRm4uYXBwbHkodGhpcyk7XG5cbiAgLy8gcmVzZXQgdGhlIGNhY2hlZCB2aWV3Ym94IHNvIHRoYXRcbiAgLy8gYSBuZXcgZ2V0IG9wZXJhdGlvbiBvbiB2aWV3Ym94IG9yIHpvb21cbiAgLy8gdHJpZ2dlcnMgYSB2aWV3Ym94IHJlLWNvbXB1dGF0aW9uXG4gIHRoaXMuX2NhY2hlZFZpZXdib3ggPSBudWxsO1xuXG4gIC8vIG5vdGlmeSBvdGhlcnMgb2YgdGhlIGNoYW5nZTsgdGhpcyBzdGVwXG4gIC8vIG1heSBvciBtYXkgbm90IGJlIGRlYm91bmNlZFxuICB0aGlzLl92aWV3Ym94Q2hhbmdlZCgpO1xufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fdmlld2JveENoYW5nZWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLnZpZXdib3guY2hhbmdlZCcsIHsgdmlld2JveDogdGhpcy52aWV3Ym94KCkgfSk7XG59O1xuXG5cbi8qKlxuICogR2V0cyBvciBzZXRzIHRoZSB2aWV3IGJveCBvZiB0aGUgY2FudmFzLCBpLmUuIHRoZVxuICogYXJlYSB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQuXG4gKlxuICogVGhlIGdldHRlciBtYXkgcmV0dXJuIGEgY2FjaGVkIHZpZXdib3ggKGlmIGl0IGlzIGN1cnJlbnRseVxuICogY2hhbmdpbmcpLiBUbyBmb3JjZSBhIHJlY29tcHV0YXRpb24sIHBhc3MgYGZhbHNlYCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjYW52YXMudmlld2JveCh7IHg6IDEwMCwgeTogMTAwLCB3aWR0aDogNTAwLCBoZWlnaHQ6IDUwMCB9KVxuICpcbiAqIC8vIHNldHMgdGhlIHZpc2libGUgYXJlYSBvZiB0aGUgZGlhZ3JhbSB0byAoMTAwfDEwMCkgLT4gKDYwMHwxMDApXG4gKiAvLyBhbmQgYW5kIHNjYWxlcyBpdCBhY2NvcmRpbmcgdG8gdGhlIGRpYWdyYW0gd2lkdGhcbiAqXG4gKiB2YXIgdmlld2JveCA9IGNhbnZhcy52aWV3Ym94KCk7IC8vIHBhc3MgYGZhbHNlYCB0byBmb3JjZSByZWNvbXB1dGluZyB0aGUgYm94LlxuICpcbiAqIGNvbnNvbGUubG9nKHZpZXdib3gpO1xuICogLy8ge1xuICogLy8gICBpbm5lcjogRGltZW5zaW9ucyxcbiAqIC8vICAgb3V0ZXI6IERpbWVuc2lvbnMsXG4gKiAvLyAgIHNjYWxlLFxuICogLy8gICB4LCB5LFxuICogLy8gICB3aWR0aCwgaGVpZ2h0XG4gKiAvLyB9XG4gKlxuICogLy8gaWYgdGhlIGN1cnJlbnQgZGlhZ3JhbSBpcyB6b29tZWQgYW5kIHNjcm9sbGVkLCB5b3UgbWF5IHJlc2V0IGl0IHRvIHRoZVxuICogLy8gZGVmYXVsdCB6b29tIHZpYSB0aGlzIG1ldGhvZCwgdG9vOlxuICpcbiAqIHZhciB6b29tZWRBbmRTY3JvbGxlZFZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuICpcbiAqIGNhbnZhcy52aWV3Ym94KHtcbiAqICAgeDogMCxcbiAqICAgeTogMCxcbiAqICAgd2lkdGg6IHpvb21lZEFuZFNjcm9sbGVkVmlld2JveC5vdXRlci53aWR0aCxcbiAqICAgaGVpZ2h0OiB6b29tZWRBbmRTY3JvbGxlZFZpZXdib3gub3V0ZXIuaGVpZ2h0XG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtib3hdIHRoZSBuZXcgdmlldyBib3ggdG8gc2V0XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC54IHRoZSB0b3AgbGVmdCBYIGNvb3JkaW5hdGUgb2YgdGhlIGNhbnZhcyB2aXNpYmxlIGluIHZpZXcgYm94XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC55IHRoZSB0b3AgbGVmdCBZIGNvb3JkaW5hdGUgb2YgdGhlIGNhbnZhcyB2aXNpYmxlIGluIHZpZXcgYm94XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC53aWR0aCB0aGUgdmlzaWJsZSB3aWR0aFxuICogQHBhcmFtICB7bnVtYmVyfSBib3guaGVpZ2h0XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgY3VycmVudCB2aWV3IGJveFxuICovXG5DYW52YXMucHJvdG90eXBlLnZpZXdib3ggPSBmdW5jdGlvbihib3gpIHtcblxuICBpZiAoYm94ID09PSB1bmRlZmluZWQgJiYgdGhpcy5fY2FjaGVkVmlld2JveCkge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZWRWaWV3Ym94O1xuICB9XG5cbiAgdmFyIHZpZXdwb3J0ID0gdGhpcy5fdmlld3BvcnQsXG4gICAgICBpbm5lckJveCxcbiAgICAgIG91dGVyQm94ID0gdGhpcy5nZXRTaXplKCksXG4gICAgICBtYXRyaXgsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzY2FsZSxcbiAgICAgIHgsIHk7XG5cbiAgaWYgKCFib3gpIHtcblxuICAgIC8vIGNvbXB1dGUgdGhlIGlubmVyIGJveCBiYXNlZCBvbiB0aGVcbiAgICAvLyBkaWFncmFtcyBkZWZhdWx0IGxheWVyLiBUaGlzIGFsbG93cyB1cyB0byBleGNsdWRlXG4gICAgLy8gZXh0ZXJuYWwgY29tcG9uZW50cywgc3VjaCBhcyBvdmVybGF5c1xuICAgIGlubmVyQm94ID0gdGhpcy5nZXREZWZhdWx0TGF5ZXIoKS5nZXRCQm94KCk7XG5cbiAgICB0cmFuc2Zvcm0gPSBzdmdUcmFuc2Zvcm0odmlld3BvcnQpO1xuICAgIG1hdHJpeCA9IHRyYW5zZm9ybSA/IHRyYW5zZm9ybS5tYXRyaXggOiBjcmVhdGVNYXRyaXgoKTtcbiAgICBzY2FsZSA9IHJvdW5kKG1hdHJpeC5hLCAxMDAwKTtcblxuICAgIHggPSByb3VuZCgtbWF0cml4LmUgfHwgMCwgMTAwMCk7XG4gICAgeSA9IHJvdW5kKC1tYXRyaXguZiB8fCAwLCAxMDAwKTtcblxuICAgIGJveCA9IHRoaXMuX2NhY2hlZFZpZXdib3ggPSB7XG4gICAgICB4OiB4ID8geCAvIHNjYWxlIDogMCxcbiAgICAgIHk6IHkgPyB5IC8gc2NhbGUgOiAwLFxuICAgICAgd2lkdGg6IG91dGVyQm94LndpZHRoIC8gc2NhbGUsXG4gICAgICBoZWlnaHQ6IG91dGVyQm94LmhlaWdodCAvIHNjYWxlLFxuICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgaW5uZXI6IHtcbiAgICAgICAgd2lkdGg6IGlubmVyQm94LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGlubmVyQm94LmhlaWdodCxcbiAgICAgICAgeDogaW5uZXJCb3gueCxcbiAgICAgICAgeTogaW5uZXJCb3gueVxuICAgICAgfSxcbiAgICAgIG91dGVyOiBvdXRlckJveFxuICAgIH07XG5cbiAgICByZXR1cm4gYm94O1xuICB9IGVsc2Uge1xuXG4gICAgdGhpcy5fY2hhbmdlVmlld2JveChmdW5jdGlvbigpIHtcbiAgICAgIHNjYWxlID0gTWF0aC5taW4ob3V0ZXJCb3gud2lkdGggLyBib3gud2lkdGgsIG91dGVyQm94LmhlaWdodCAvIGJveC5oZWlnaHQpO1xuXG4gICAgICB2YXIgbWF0cml4ID0gdGhpcy5fc3ZnLmNyZWF0ZVNWR01hdHJpeCgpXG4gICAgICAgIC5zY2FsZShzY2FsZSlcbiAgICAgICAgLnRyYW5zbGF0ZSgtYm94LngsIC1ib3gueSk7XG5cbiAgICAgIHN2Z1RyYW5zZm9ybSh2aWV3cG9ydCwgbWF0cml4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBib3g7XG59O1xuXG5cbi8qKlxuICogR2V0cyBvciBzZXRzIHRoZSBzY3JvbGwgb2YgdGhlIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2RlbHRhXSB0aGUgbmV3IHNjcm9sbCB0byBhcHBseS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlbHRhLmR4XVxuICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YS5keV1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5zY3JvbGwgPSBmdW5jdGlvbihkZWx0YSkge1xuXG4gIHZhciBub2RlID0gdGhpcy5fdmlld3BvcnQ7XG4gIHZhciBtYXRyaXggPSBub2RlLmdldENUTSgpO1xuXG4gIGlmIChkZWx0YSkge1xuICAgIHRoaXMuX2NoYW5nZVZpZXdib3goZnVuY3Rpb24oKSB7XG4gICAgICBkZWx0YSA9IGFzc2lnbih7IGR4OiAwLCBkeTogMCB9LCBkZWx0YSB8fCB7fSk7XG5cbiAgICAgIG1hdHJpeCA9IHRoaXMuX3N2Zy5jcmVhdGVTVkdNYXRyaXgoKS50cmFuc2xhdGUoZGVsdGEuZHgsIGRlbHRhLmR5KS5tdWx0aXBseShtYXRyaXgpO1xuXG4gICAgICBzZXRDVE0obm9kZSwgbWF0cml4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7IHg6IG1hdHJpeC5lLCB5OiBtYXRyaXguZiB9O1xufTtcblxuXG4vKipcbiAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCB6b29tIG9mIHRoZSBjYW52YXMsIG9wdGlvbmFsbHkgem9vbWluZ1xuICogdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cbiAqXG4gKiBUaGUgZ2V0dGVyIG1heSByZXR1cm4gYSBjYWNoZWQgem9vbSBsZXZlbC4gQ2FsbCBpdCB3aXRoIGBmYWxzZWAgYXNcbiAqIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIHRoZSBjdXJyZW50IGxldmVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW25ld1NjYWxlXSB0aGUgbmV3IHpvb20gbGV2ZWwsIGVpdGhlciBhIG51bWJlciwgaS5lLiAwLjksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYGZpdC12aWV3cG9ydGAgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGZpdCB0aGUgY3VycmVudCB2aWV3cG9ydFxuICogQHBhcmFtIHtzdHJpbmd8UG9pbnR9IFtjZW50ZXJdIHRoZSByZWZlcmVuY2UgcG9pbnQgeyB4OiAuLiwgeTogLi59IHRvIHpvb20gdG8sICdhdXRvJyB0byB6b29tIGludG8gbWlkIG9yIG51bGxcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjdXJyZW50IHNjYWxlXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuem9vbSA9IGZ1bmN0aW9uKG5ld1NjYWxlLCBjZW50ZXIpIHtcblxuICBpZiAoIW5ld1NjYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld2JveChuZXdTY2FsZSkuc2NhbGU7XG4gIH1cblxuICBpZiAobmV3U2NhbGUgPT09ICdmaXQtdmlld3BvcnQnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpdFZpZXdwb3J0KGNlbnRlcik7XG4gIH1cblxuICB2YXIgb3V0ZXIsXG4gICAgICBtYXRyaXg7XG5cbiAgdGhpcy5fY2hhbmdlVmlld2JveChmdW5jdGlvbigpIHtcblxuICAgIGlmICh0eXBlb2YgY2VudGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgb3V0ZXIgPSB0aGlzLnZpZXdib3goKS5vdXRlcjtcblxuICAgICAgY2VudGVyID0ge1xuICAgICAgICB4OiBvdXRlci53aWR0aCAvIDIsXG4gICAgICAgIHk6IG91dGVyLmhlaWdodCAvIDJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbWF0cml4ID0gdGhpcy5fc2V0Wm9vbShuZXdTY2FsZSwgY2VudGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJvdW5kKG1hdHJpeC5hLCAxMDAwKTtcbn07XG5cbmZ1bmN0aW9uIHNldENUTShub2RlLCBtKSB7XG4gIHZhciBtc3RyID0gJ21hdHJpeCgnICsgbS5hICsgJywnICsgbS5iICsgJywnICsgbS5jICsgJywnICsgbS5kICsgJywnICsgbS5lICsgJywnICsgbS5mICsgJyknO1xuICBub2RlLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbXN0cik7XG59XG5cbkNhbnZhcy5wcm90b3R5cGUuX2ZpdFZpZXdwb3J0ID0gZnVuY3Rpb24oY2VudGVyKSB7XG5cbiAgdmFyIHZib3ggPSB0aGlzLnZpZXdib3goKSxcbiAgICAgIG91dGVyID0gdmJveC5vdXRlcixcbiAgICAgIGlubmVyID0gdmJveC5pbm5lcixcbiAgICAgIG5ld1NjYWxlLFxuICAgICAgbmV3Vmlld2JveDtcblxuICAvLyBkaXNwbGF5IHRoZSBjb21wbGV0ZSBkaWFncmFtIHdpdGhvdXQgem9vbWluZyBpbi5cbiAgLy8gaW5zdGVhZCBvZiByZWx5aW5nIG9uIGludGVybmFsIHpvb20sIHdlIHBlcmZvcm0gYVxuICAvLyBoYXJkIHJlc2V0IG9uIHRoZSBjYW52YXMgdmlld2JveCB0byByZWFsaXplIHRoaXNcbiAgLy9cbiAgLy8gaWYgZGlhZ3JhbSBkb2VzIG5vdCBuZWVkIHRvIGJlIHpvb21lZCBpbiwgd2UgZm9jdXMgaXQgYXJvdW5kXG4gIC8vIHRoZSBkaWFncmFtIG9yaWdpbiBpbnN0ZWFkXG5cbiAgaWYgKGlubmVyLnggPj0gMCAmJlxuICAgICAgaW5uZXIueSA+PSAwICYmXG4gICAgICBpbm5lci54ICsgaW5uZXIud2lkdGggPD0gb3V0ZXIud2lkdGggJiZcbiAgICAgIGlubmVyLnkgKyBpbm5lci5oZWlnaHQgPD0gb3V0ZXIuaGVpZ2h0ICYmXG4gICAgICAhY2VudGVyKSB7XG5cbiAgICBuZXdWaWV3Ym94ID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogTWF0aC5tYXgoaW5uZXIud2lkdGggKyBpbm5lci54LCBvdXRlci53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGgubWF4KGlubmVyLmhlaWdodCArIGlubmVyLnksIG91dGVyLmhlaWdodClcbiAgICB9O1xuICB9IGVsc2Uge1xuXG4gICAgbmV3U2NhbGUgPSBNYXRoLm1pbigxLCBvdXRlci53aWR0aCAvIGlubmVyLndpZHRoLCBvdXRlci5oZWlnaHQgLyBpbm5lci5oZWlnaHQpO1xuICAgIG5ld1ZpZXdib3ggPSB7XG4gICAgICB4OiBpbm5lci54ICsgKGNlbnRlciA/IGlubmVyLndpZHRoIC8gMiAtIG91dGVyLndpZHRoIC8gbmV3U2NhbGUgLyAyIDogMCksXG4gICAgICB5OiBpbm5lci55ICsgKGNlbnRlciA/IGlubmVyLmhlaWdodCAvIDIgLSBvdXRlci5oZWlnaHQgLyBuZXdTY2FsZSAvIDIgOiAwKSxcbiAgICAgIHdpZHRoOiBvdXRlci53aWR0aCAvIG5ld1NjYWxlLFxuICAgICAgaGVpZ2h0OiBvdXRlci5oZWlnaHQgLyBuZXdTY2FsZVxuICAgIH07XG4gIH1cblxuICB0aGlzLnZpZXdib3gobmV3Vmlld2JveCk7XG5cbiAgcmV0dXJuIHRoaXMudmlld2JveChmYWxzZSkuc2NhbGU7XG59O1xuXG5cbkNhbnZhcy5wcm90b3R5cGUuX3NldFpvb20gPSBmdW5jdGlvbihzY2FsZSwgY2VudGVyKSB7XG5cbiAgdmFyIHN2ZyA9IHRoaXMuX3N2ZyxcbiAgICAgIHZpZXdwb3J0ID0gdGhpcy5fdmlld3BvcnQ7XG5cbiAgdmFyIG1hdHJpeCA9IHN2Zy5jcmVhdGVTVkdNYXRyaXgoKTtcbiAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG5cbiAgdmFyIGNlbnRlclBvaW50LFxuICAgICAgb3JpZ2luYWxQb2ludCxcbiAgICAgIGN1cnJlbnRNYXRyaXgsXG4gICAgICBzY2FsZU1hdHJpeCxcbiAgICAgIG5ld01hdHJpeDtcblxuICBjdXJyZW50TWF0cml4ID0gdmlld3BvcnQuZ2V0Q1RNKCk7XG5cbiAgdmFyIGN1cnJlbnRTY2FsZSA9IGN1cnJlbnRNYXRyaXguYTtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgY2VudGVyUG9pbnQgPSBhc3NpZ24ocG9pbnQsIGNlbnRlcik7XG5cbiAgICAvLyByZXZlcnQgYXBwbGllZCB2aWV3cG9ydCB0cmFuc2Zvcm1hdGlvbnNcbiAgICBvcmlnaW5hbFBvaW50ID0gY2VudGVyUG9pbnQubWF0cml4VHJhbnNmb3JtKGN1cnJlbnRNYXRyaXguaW52ZXJzZSgpKTtcblxuICAgIC8vIGNyZWF0ZSBzY2FsZSBtYXRyaXhcbiAgICBzY2FsZU1hdHJpeCA9IG1hdHJpeFxuICAgICAgLnRyYW5zbGF0ZShvcmlnaW5hbFBvaW50LngsIG9yaWdpbmFsUG9pbnQueSlcbiAgICAgIC5zY2FsZSgxIC8gY3VycmVudFNjYWxlICogc2NhbGUpXG4gICAgICAudHJhbnNsYXRlKC1vcmlnaW5hbFBvaW50LngsIC1vcmlnaW5hbFBvaW50LnkpO1xuXG4gICAgbmV3TWF0cml4ID0gY3VycmVudE1hdHJpeC5tdWx0aXBseShzY2FsZU1hdHJpeCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3TWF0cml4ID0gbWF0cml4LnNjYWxlKHNjYWxlKTtcbiAgfVxuXG4gIHNldENUTSh0aGlzLl92aWV3cG9ydCwgbmV3TWF0cml4KTtcblxuICByZXR1cm4gbmV3TWF0cml4O1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNhbnZhc1xuICpcbiAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsXG4gICAgaGVpZ2h0OiB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0XG4gIH07XG59O1xuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBhYnNvbHV0ZSBib3VuZGluZyBib3ggZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogVGhlIGFic29sdXRlIGJvdW5kaW5nIGJveCBtYXkgYmUgdXNlZCB0byBkaXNwbGF5IG92ZXJsYXlzIGluIHRoZVxuICogY2FsbGVycyAoYnJvd3NlcikgY29vcmRpbmF0ZSBzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIHpvb21lZCBpbi9vdXRcbiAqIGNhbnZhcyBjb29yZGluYXRlcy5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50RGVzY3JpcHRvcn0gZWxlbWVudFxuICogQHJldHVybiB7Qm91bmRzfSB0aGUgYWJzb2x1dGUgYm91bmRpbmcgYm94XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0QWJzb2x1dGVCQm94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgdmJveCA9IHRoaXMudmlld2JveCgpO1xuICB2YXIgYmJveDtcblxuICAvLyBjb25uZWN0aW9uXG4gIC8vIHVzZSBzdmcgYmJveFxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICB2YXIgZ2Z4ID0gdGhpcy5nZXRHcmFwaGljcyhlbGVtZW50KTtcblxuICAgIGJib3ggPSBnZnguZ2V0QkJveCgpO1xuICB9XG5cbiAgLy8gc2hhcGVzXG4gIC8vIHVzZSBkYXRhXG4gIGVsc2Uge1xuICAgIGJib3ggPSBlbGVtZW50O1xuICB9XG5cbiAgdmFyIHggPSBiYm94LnggKiB2Ym94LnNjYWxlIC0gdmJveC54ICogdmJveC5zY2FsZTtcbiAgdmFyIHkgPSBiYm94LnkgKiB2Ym94LnNjYWxlIC0gdmJveC55ICogdmJveC5zY2FsZTtcblxuICB2YXIgd2lkdGggPSBiYm94LndpZHRoICogdmJveC5zY2FsZTtcbiAgdmFyIGhlaWdodCA9IGJib3guaGVpZ2h0ICogdmJveC5zY2FsZTtcblxuICByZXR1cm4ge1xuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5cbi8qKlxuICogRmlyZXMgYW4gZXZlbnQgaW4gb3JkZXIgb3RoZXIgbW9kdWxlcyBjYW4gcmVhY3QgdG8gdGhlXG4gKiBjYW52YXMgcmVzaXppbmdcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5yZXNpemVkID0gZnVuY3Rpb24oKSB7XG5cbiAgLy8gZm9yY2UgcmVjb21wdXRhdGlvbiBvZiB2aWV3IGJveFxuICBkZWxldGUgdGhpcy5fY2FjaGVkVmlld2JveDtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdjYW52YXMucmVzaXplZCcpO1xufTtcbiIsImltcG9ydCB7XG4gIGNyZWF0ZVxufSBmcm9tICcuLi9tb2RlbCc7XG5cbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBBIGZhY3RvcnkgZm9yIGRpYWdyYW0tanMgc2hhcGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVsZW1lbnRGYWN0b3J5KCkge1xuICB0aGlzLl91aWQgPSAxMjtcbn1cblxuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlUm9vdCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgncm9vdCcsIGF0dHJzKTtcbn07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVMYWJlbCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnbGFiZWwnLCBhdHRycyk7XG59O1xuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlU2hhcGUgPSBmdW5jdGlvbihhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ3NoYXBlJywgYXR0cnMpO1xufTtcblxuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2Nvbm5lY3Rpb24nLCBhdHRycyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIG1vZGVsIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdHlwZSBhbmRcbiAqIGEgbnVtYmVyIG9mIHByZS1zZXQgYXR0cmlidXRlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSAge09iamVjdH0gYXR0cnNcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfSB0aGUgbmV3bHkgY3JlYXRlZCBtb2RlbCBpbnN0YW5jZVxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcblxuICBhdHRycyA9IGFzc2lnbih7fSwgYXR0cnMgfHwge30pO1xuXG4gIGlmICghYXR0cnMuaWQpIHtcbiAgICBhdHRycy5pZCA9IHR5cGUgKyAnXycgKyAodGhpcy5fdWlkKyspO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZSh0eXBlLCBhdHRycyk7XG59OyIsInZhciBFTEVNRU5UX0lEID0gJ2RhdGEtZWxlbWVudC1pZCc7XG5cbmltcG9ydCB7IGF0dHIgYXMgc3ZnQXR0ciB9IGZyb20gJ3Rpbnktc3ZnJztcblxuXG4vKipcbiAqIEBjbGFzc1xuICpcbiAqIEEgcmVnaXN0cnkgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgc2hhcGVzIGluIHRoZSBkaWFncmFtLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbGVtZW50UmVnaXN0cnkoZXZlbnRCdXMpIHtcbiAgdGhpcy5fZWxlbWVudHMgPSB7fTtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xufVxuXG5FbGVtZW50UmVnaXN0cnkuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcGFpciBvZiAoZWxlbWVudCwgZ2Z4LCAoc2Vjb25kYXJ5R2Z4KSkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW3NlY29uZGFyeUdmeF0gb3B0aW9uYWwgb3RoZXIgZWxlbWVudCB0byByZWdpc3RlciwgdG9vXG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4LCBzZWNvbmRhcnlHZngpIHtcblxuICB2YXIgaWQgPSBlbGVtZW50LmlkO1xuXG4gIHRoaXMuX3ZhbGlkYXRlSWQoaWQpO1xuXG4gIC8vIGFzc29jaWF0ZSBkb20gbm9kZSB3aXRoIGVsZW1lbnRcbiAgc3ZnQXR0cihnZngsIEVMRU1FTlRfSUQsIGlkKTtcblxuICBpZiAoc2Vjb25kYXJ5R2Z4KSB7XG4gICAgc3ZnQXR0cihzZWNvbmRhcnlHZngsIEVMRU1FTlRfSUQsIGlkKTtcbiAgfVxuXG4gIHRoaXMuX2VsZW1lbnRzW2lkXSA9IHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZngsIHNlY29uZGFyeUdmeDogc2Vjb25kYXJ5R2Z4IH07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZWxlbWVudHMgPSB0aGlzLl9lbGVtZW50cyxcbiAgICAgIGlkID0gZWxlbWVudC5pZCB8fCBlbGVtZW50LFxuICAgICAgY29udGFpbmVyID0gaWQgJiYgZWxlbWVudHNbaWRdO1xuXG4gIGlmIChjb250YWluZXIpIHtcblxuICAgIC8vIHVuc2V0IGVsZW1lbnQgaWQgb24gZ2Z4XG4gICAgc3ZnQXR0cihjb250YWluZXIuZ2Z4LCBFTEVNRU5UX0lELCAnJyk7XG5cbiAgICBpZiAoY29udGFpbmVyLnNlY29uZGFyeUdmeCkge1xuICAgICAgc3ZnQXR0cihjb250YWluZXIuc2Vjb25kYXJ5R2Z4LCBFTEVNRU5UX0lELCAnJyk7XG4gICAgfVxuXG4gICAgZGVsZXRlIGVsZW1lbnRzW2lkXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGlkIG9mIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3SWRcbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS51cGRhdGVJZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0lkKSB7XG5cbiAgdGhpcy5fdmFsaWRhdGVJZChuZXdJZCk7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQgPSB0aGlzLmdldChlbGVtZW50KTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2VsZW1lbnQudXBkYXRlSWQnLCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBuZXdJZDogbmV3SWRcbiAgfSk7XG5cbiAgdmFyIGdmeCA9IHRoaXMuZ2V0R3JhcGhpY3MoZWxlbWVudCksXG4gICAgICBzZWNvbmRhcnlHZnggPSB0aGlzLmdldEdyYXBoaWNzKGVsZW1lbnQsIHRydWUpO1xuXG4gIHRoaXMucmVtb3ZlKGVsZW1lbnQpO1xuXG4gIGVsZW1lbnQuaWQgPSBuZXdJZDtcblxuICB0aGlzLmFkZChlbGVtZW50LCBnZngsIHNlY29uZGFyeUdmeCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbW9kZWwgZWxlbWVudCBmb3IgYSBnaXZlbiBpZCBvciBncmFwaGljcy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGVsZW1lbnRSZWdpc3RyeS5nZXQoJ1NvbWVFbGVtZW50SWRfMScpO1xuICogZWxlbWVudFJlZ2lzdHJ5LmdldChnZngpO1xuICpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xTVkdFbGVtZW50fSBmaWx0ZXIgZm9yIHNlbGVjdGluZyB0aGUgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfVxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGZpbHRlcikge1xuICB2YXIgaWQ7XG5cbiAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBmaWx0ZXI7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBmaWx0ZXIgJiYgc3ZnQXR0cihmaWx0ZXIsIEVMRU1FTlRfSUQpO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2VsZW1lbnRzW2lkXTtcbiAgcmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXIuZWxlbWVudDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIGEgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fVxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKGZuKSB7XG5cbiAgdmFyIGZpbHRlcmVkID0gW107XG5cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICAgIGlmIChmbihlbGVtZW50LCBnZngpKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYWxsIHJlbmRlcmVkIG1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGU7IH0pO1xufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIGRpYWdyYW0gZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oZm4pIHtcblxuICB2YXIgbWFwID0gdGhpcy5fZWxlbWVudHM7XG5cbiAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IG1hcFtpZF0sXG4gICAgICAgIGVsZW1lbnQgPSBjb250YWluZXIuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gY29udGFpbmVyLmdmeDtcblxuICAgIHJldHVybiBmbihlbGVtZW50LCBnZngpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gZWxlbWVudCBvciBpdHMgaWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcygnU29tZUVsZW1lbnRJZF8xJyk7XG4gKiBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3Mocm9vdEVsZW1lbnQpOyAvLyA8ZyAuLi4+XG4gKlxuICogZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKHJvb3RFbGVtZW50LCB0cnVlKTsgLy8gPHN2ZyAuLi4+XG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBmaWx0ZXJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlY29uZGFyeT1mYWxzZV0gd2hldGhlciB0byByZXR1cm4gdGhlIHNlY29uZGFyeSBjb25uZWN0ZWQgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZ2V0R3JhcGhpY3MgPSBmdW5jdGlvbihmaWx0ZXIsIHNlY29uZGFyeSkge1xuICB2YXIgaWQgPSBmaWx0ZXIuaWQgfHwgZmlsdGVyO1xuXG4gIHZhciBjb250YWluZXIgPSB0aGlzLl9lbGVtZW50c1tpZF07XG4gIHJldHVybiBjb250YWluZXIgJiYgKHNlY29uZGFyeSA/IGNvbnRhaW5lci5zZWNvbmRhcnlHZnggOiBjb250YWluZXIuZ2Z4KTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBnaXZlbiBpZCBhbmQgc2lnbmFscyBhIHByb2JsZW1cbiAqIHdpdGggYW4gZXhjZXB0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBpZCBpcyBlbXB0eSBvciBhbHJlYWR5IGFzc2lnbmVkXG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuX3ZhbGlkYXRlSWQgPSBmdW5jdGlvbihpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IG11c3QgaGF2ZSBhbiBpZCcpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2VsZW1lbnRzW2lkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCB3aXRoIGlkICcgKyBpZCArICcgYWxyZWFkeSBhZGRlZCcpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbixcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGJpbmQsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBGTl9SRUYgPSAnX19mbic7XG5cbnZhciBERUZBVUxUX1BSSU9SSVRZID0gMTAwMDtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGV2ZW50IGJ1cy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGFjcm9zcyBhIGRpYWdyYW0gaW5zdGFuY2UuXG4gKiBPdGhlciBwYXJ0cyBvZiBhIGRpYWdyYW0gY2FuIHVzZSBpdCB0byBsaXN0ZW4gdG8gYW5kIGJyb2FkY2FzdCBldmVudHMuXG4gKlxuICpcbiAqICMjIFJlZ2lzdGVyaW5nIGZvciBFdmVudHNcbiAqXG4gKiBUaGUgZXZlbnQgYnVzIHByb3ZpZGVzIHRoZSB7QGxpbmsgRXZlbnRCdXMjb259IGFuZCB7QGxpbmsgRXZlbnRCdXMjb25jZX1cbiAqIG1ldGhvZHMgdG8gcmVnaXN0ZXIgZm9yIGV2ZW50cy4ge0BsaW5rIEV2ZW50QnVzI29mZn0gY2FuIGJlIHVzZWQgdG9cbiAqIHJlbW92ZSBldmVudCByZWdpc3RyYXRpb25zLiBMaXN0ZW5lcnMgcmVjZWl2ZSBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgRXZlbnR9XG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIEl0IGFsbG93cyB0aGVtIHRvIGhvb2sgaW50byB0aGUgZXZlbnQgZXhlY3V0aW9uLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50XG4gKiBldmVudEJ1cy5vbignZm9vJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqXG4gKiAgIC8vIGFjY2VzcyBldmVudCB0eXBlXG4gKiAgIGV2ZW50LnR5cGU7IC8vICdmb28nXG4gKlxuICogICAvLyBzdG9wIHByb3BhZ2F0aW9uIHRvIG90aGVyIGxpc3RlbmVyc1xuICogICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAqXG4gKiAgIC8vIHByZXZlbnQgZXZlbnQgZGVmYXVsdFxuICogICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICogfSk7XG4gKlxuICogLy8gbGlzdGVuIGZvciBldmVudCB3aXRoIGN1c3RvbSBwYXlsb2FkXG4gKiBldmVudEJ1cy5vbignYmFyJywgZnVuY3Rpb24oZXZlbnQsIHBheWxvYWQpIHtcbiAqICAgY29uc29sZS5sb2cocGF5bG9hZCk7XG4gKiB9KTtcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50IHJldHVybmluZyB2YWx1ZVxuICogZXZlbnRCdXMub24oJ2Zvb2JhcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKlxuICogICAvLyBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uICsgcHJldmVudCBkZWZhdWx0XG4gKiAgIHJldHVybiBmYWxzZTtcbiAqXG4gKiAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gKyByZXR1cm4gY3VzdG9tIHJlc3VsdFxuICogICByZXR1cm4ge1xuICogICAgIGNvbXBsZXg6ICdsaXN0ZW5pbmcgcmVzdWx0J1xuICogICB9O1xuICogfSk7XG4gKlxuICpcbiAqIC8vIGxpc3RlbiB3aXRoIGN1c3RvbSBwcmlvcml0eSAoZGVmYXVsdD0xMDAwLCBoaWdoZXIgaXMgYmV0dGVyKVxuICogZXZlbnRCdXMub24oJ3ByaW9yaXR5Zm9vJywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgY29uc29sZS5sb2coJ2ludm9rZWQgZmlyc3QhJyk7XG4gKiB9KTtcbiAqXG4gKlxuICogLy8gbGlzdGVuIGZvciBldmVudCBhbmQgcGFzcyB0aGUgY29udGV4dCAoYHRoaXNgKVxuICogZXZlbnRCdXMub24oJ2Zvb2JhcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgIHRoaXMuZm9vKCk7XG4gKiB9LCB0aGlzKTtcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyBFbWl0dGluZyBFdmVudHNcbiAqXG4gKiBFdmVudHMgY2FuIGJlIGVtaXR0ZWQgdmlhIHRoZSBldmVudCBidXMgdXNpbmcge0BsaW5rIEV2ZW50QnVzI2ZpcmV9LlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBmYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb25cbiAqIC8vIHdhcyBwcmV2ZW50ZWQgYnkgbGlzdGVuZXJzXG4gKiBpZiAoZXZlbnRCdXMuZmlyZSgnZm9vJykgPT09IGZhbHNlKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdkZWZhdWx0IGhhcyBiZWVuIHByZXZlbnRlZCEnKTtcbiAqIH07XG4gKlxuICpcbiAqIC8vIGN1c3RvbSBhcmdzICsgcmV0dXJuIHZhbHVlIGxpc3RlbmVyXG4gKiBldmVudEJ1cy5vbignc3VtJywgZnVuY3Rpb24oZXZlbnQsIGEsIGIpIHtcbiAqICAgcmV0dXJuIGEgKyBiO1xuICogfSk7XG4gKlxuICogLy8geW91IGNhbiBwYXNzIGN1c3RvbSBhcmd1bWVudHMgKyByZXRyaWV2ZSByZXN1bHQgdmFsdWVzLlxuICogdmFyIHN1bSA9IGV2ZW50QnVzLmZpcmUoJ3N1bScsIDEsIDIpO1xuICogY29uc29sZS5sb2coc3VtKTsgLy8gM1xuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEV2ZW50QnVzKCkge1xuICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcblxuICAvLyBjbGVhbnVwIG9uIGRlc3Ryb3kgb24gbG93ZXN0IHByaW9yaXR5IHRvIGFsbG93XG4gIC8vIG1lc3NhZ2UgcGFzc2luZyB1bnRpbCB0aGUgYml0dGVyIGVuZFxuICB0aGlzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCAxLCB0aGlzLl9kZXN0cm95LCB0aGlzKTtcbn1cblxuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyIGZvciBldmVudHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAqXG4gKiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdpdGggYGV2ZW50LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzYFxuICogdGhhdCBoYXZlIGJlZW4gcGFzc2VkIHRvIHtAbGluayBFdmVudEJ1cyNmaXJlfS5cbiAqXG4gKiBSZXR1cm5pbmcgZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHdpbGwgcHJldmVudCB0aGUgZXZlbnRzIGRlZmF1bHQgYWN0aW9uXG4gKiAoaWYgYW55IGlzIHNwZWNpZmllZCkuIFRvIHN0b3AgYW4gZXZlbnQgZnJvbSBiZWluZyBwcm9jZXNzZWQgZnVydGhlciBpblxuICogb3RoZXIgbGlzdGVuZXJzIGV4ZWN1dGUge0BsaW5rIEV2ZW50I3N0b3BQcm9wYWdhdGlvbn0uXG4gKlxuICogUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCBgdW5kZWZpbmVkYCBmcm9tIGEgbGlzdGVuZXIgd2lsbCBzdG9wIHRoZSBsaXN0ZW5lciBwcm9wYWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBldmVudHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHk9MTAwMF0gdGhlIHByaW9yaXR5IGluIHdoaWNoIHRoaXMgbGlzdGVuZXIgaXMgY2FsbGVkLCBsYXJnZXIgaXMgaGlnaGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50cywgcHJpb3JpdHksIGNhbGxiYWNrLCB0aGF0KSB7XG5cbiAgZXZlbnRzID0gaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogWyBldmVudHMgXTtcblxuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0aGF0ID0gY2FsbGJhY2s7XG4gICAgY2FsbGJhY2sgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICBpZiAoIWlzTnVtYmVyKHByaW9yaXR5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJpb3JpdHkgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgdmFyIGFjdHVhbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgaWYgKHRoYXQpIHtcbiAgICBhY3R1YWxDYWxsYmFjayA9IGJpbmQoY2FsbGJhY2ssIHRoYXQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHJlbWVtYmVyIGFuZCBhcmUgYWJsZSB0byByZW1vdmVcbiAgICAvLyBib3VuZCBjYWxsYmFja3MgdmlhIHtAbGluayAjb2ZmfSB1c2luZyB0aGUgb3JpZ2luYWxcbiAgICAvLyBjYWxsYmFja1xuICAgIGFjdHVhbENhbGxiYWNrW0ZOX1JFRl0gPSBjYWxsYmFja1tGTl9SRUZdIHx8IGNhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLl9hZGRMaXN0ZW5lcihlLCB7XG4gICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICBjYWxsYmFjazogYWN0dWFsQ2FsbGJhY2ssXG4gICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaXMgZXhlY3V0ZWQgb25seSBvbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCB0aGUgZXZlbnQgbmFtZSB0byByZWdpc3RlciBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHk9MTAwMF0gdGhlIHByaW9yaXR5IGluIHdoaWNoIHRoaXMgbGlzdGVuZXIgaXMgY2FsbGVkLCBsYXJnZXIgaXMgaGlnaGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24oZXZlbnQsIHByaW9yaXR5LCBjYWxsYmFjaywgdGhhdCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKGlzRnVuY3Rpb24ocHJpb3JpdHkpKSB7XG4gICAgdGhhdCA9IGNhbGxiYWNrO1xuICAgIGNhbGxiYWNrID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgaWYgKCFpc051bWJlcihwcmlvcml0eSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByaW9yaXR5IG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2suYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcblxuICAgIHNlbGYub2ZmKGV2ZW50LCB3cmFwcGVkQ2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSByZW1lbWJlciBhbmQgYXJlIGFibGUgdG8gcmVtb3ZlXG4gIC8vIGJvdW5kIGNhbGxiYWNrcyB2aWEge0BsaW5rICNvZmZ9IHVzaW5nIHRoZSBvcmlnaW5hbFxuICAvLyBjYWxsYmFja1xuICB3cmFwcGVkQ2FsbGJhY2tbRk5fUkVGXSA9IGNhbGxiYWNrO1xuXG4gIHRoaXMub24oZXZlbnQsIHByaW9yaXR5LCB3cmFwcGVkQ2FsbGJhY2spO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzIGJ5IGV2ZW50IGFuZCBjYWxsYmFjay5cbiAqXG4gKiBJZiBubyBjYWxsYmFjayBpcyBnaXZlbiwgYWxsIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCBuYW1lIGFyZSBiZWluZyByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGV2ZW50c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXVxuICovXG5FdmVudEJ1cy5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24oZXZlbnRzLCBjYWxsYmFjaykge1xuXG4gIGV2ZW50cyA9IGlzQXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IFsgZXZlbnRzIF07XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi5fcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrKTtcbiAgfSk7XG5cbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgYW4gRXZlbnRCdXMgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50LCByZWNvZ25pemVkIGJ5IHRoZSBldmVudEJ1c1xuICovXG5FdmVudEJ1cy5wcm90b3R5cGUuY3JlYXRlRXZlbnQgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBldmVudCA9IG5ldyBJbnRlcm5hbEV2ZW50KCk7XG5cbiAgZXZlbnQuaW5pdChkYXRhKTtcblxuICByZXR1cm4gZXZlbnQ7XG59O1xuXG5cbi8qKlxuICogRmlyZXMgYSBuYW1lZCBldmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGZpcmUgZXZlbnQgYnkgbmFtZVxuICogZXZlbnRzLmZpcmUoJ2ZvbycpO1xuICpcbiAqIC8vIGZpcmUgZXZlbnQgb2JqZWN0IHdpdGggbmVzdGVkIHR5cGVcbiAqIHZhciBldmVudCA9IHsgdHlwZTogJ2ZvbycgfTtcbiAqIGV2ZW50cy5maXJlKGV2ZW50KTtcbiAqXG4gKiAvLyBmaXJlIGV2ZW50IHdpdGggZXhwbGljaXQgdHlwZVxuICogdmFyIGV2ZW50ID0geyB4OiAxMCwgeTogMjAgfTtcbiAqIGV2ZW50cy5maXJlKCdlbGVtZW50Lm1vdmVkJywgZXZlbnQpO1xuICpcbiAqIC8vIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGV2ZW50XG4gKiBldmVudHMub24oJ2ZvbycsIGZ1bmN0aW9uKGV2ZW50LCBiYXIpIHtcbiAqICAgYWxlcnQoYmFyKTtcbiAqIH0pO1xuICpcbiAqIGV2ZW50cy5maXJlKHsgdHlwZTogJ2ZvbycgfSwgJ0kgYW0gYmFyIScpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gdGhlIG9wdGlvbmFsIGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZXZlbnRdIHRoZSBldmVudCBvYmplY3RcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSBldmVudHMgcmV0dXJuIHZhbHVlLCBpZiBzcGVjaWZpZWQgb3IgZmFsc2UgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGFjdGlvbiB3YXMgcHJldmVudGVkIGJ5IGxpc3RlbmVyc1xuICovXG5FdmVudEJ1cy5wcm90b3R5cGUuZmlyZSA9IGZ1bmN0aW9uKHR5cGUsIGRhdGEpIHtcbiAgdmFyIGV2ZW50LFxuICAgICAgZmlyc3RMaXN0ZW5lcixcbiAgICAgIHJldHVyblZhbHVlLFxuICAgICAgYXJncztcblxuICBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBkYXRhID0gdHlwZTtcbiAgICB0eXBlID0gZGF0YS50eXBlO1xuICB9XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBldmVudCB0eXBlIHNwZWNpZmllZCcpO1xuICB9XG5cbiAgZmlyc3RMaXN0ZW5lciA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXTtcblxuICBpZiAoIWZpcnN0TGlzdGVuZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB3ZSBtYWtlIHN1cmUgd2UgZmlyZSBpbnN0YW5jZXMgb2Ygb3VyIGhvbWUgbWFkZVxuICAvLyBldmVudHMgaGVyZS4gV2Ugd3JhcCB0aGVtIG9ubHkgb25jZSwgdGhvdWdoXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgSW50ZXJuYWxFdmVudCkge1xuXG4gICAgLy8gd2UgYXJlIGZpbmUsIHdlIGFscmVhZCBoYXZlIGFuIGV2ZW50XG4gICAgZXZlbnQgPSBkYXRhO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChkYXRhKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBwYXNzIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyXG4gIGFyZ3NbMF0gPSBldmVudDtcblxuICAvLyBvcmlnaW5hbCBldmVudCB0eXBlIChpbiBjYXNlIHdlIGRlbGVnYXRlKVxuICB2YXIgb3JpZ2luYWxUeXBlID0gZXZlbnQudHlwZTtcblxuICAvLyB1cGRhdGUgZXZlbnQgdHlwZSBiZWZvcmUgZGVsZWdhdGlvblxuICBpZiAodHlwZSAhPT0gb3JpZ2luYWxUeXBlKSB7XG4gICAgZXZlbnQudHlwZSA9IHR5cGU7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVyblZhbHVlID0gdGhpcy5faW52b2tlTGlzdGVuZXJzKGV2ZW50LCBhcmdzLCBmaXJzdExpc3RlbmVyKTtcbiAgfSBmaW5hbGx5IHtcblxuICAgIC8vIHJlc2V0IGV2ZW50IHR5cGUgYWZ0ZXIgZGVsZWdhdGlvblxuICAgIGlmICh0eXBlICE9PSBvcmlnaW5hbFR5cGUpIHtcbiAgICAgIGV2ZW50LnR5cGUgPSBvcmlnaW5hbFR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHRoZSByZXR1cm4gdmFsdWUgdG8gZmFsc2UgaWYgdGhlIGV2ZW50IGRlZmF1bHRcbiAgLy8gZ290IHByZXZlbnRlZCBhbmQgbm8gb3RoZXIgcmV0dXJuIHZhbHVlIGV4aXN0c1xuICBpZiAocmV0dXJuVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cblxuRXZlbnRCdXMucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHtcbiAgcmV0dXJuIHRoaXMuZmlyZSgnZXJyb3InLCB7IGVycm9yOiBlcnJvciB9KSA9PT0gZmFsc2U7XG59O1xuXG5cbkV2ZW50QnVzLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbn07XG5cbkV2ZW50QnVzLnByb3RvdHlwZS5faW52b2tlTGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQsIGFyZ3MsIGxpc3RlbmVyKSB7XG5cbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHdoaWxlIChsaXN0ZW5lcikge1xuXG4gICAgLy8gaGFuZGxlIHN0b3BwZWQgcHJvcGFnYXRpb25cbiAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm5WYWx1ZSA9IHRoaXMuX2ludm9rZUxpc3RlbmVyKGV2ZW50LCBhcmdzLCBsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5FdmVudEJ1cy5wcm90b3R5cGUuX2ludm9rZUxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGFyZ3MsIGxpc3RlbmVyKSB7XG5cbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG5cbiAgICAvLyByZXR1cm5pbmcgZmFsc2UgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uXG4gICAgcmV0dXJuVmFsdWUgPSBpbnZva2VGdW5jdGlvbihsaXN0ZW5lci5jYWxsYmFjaywgYXJncyk7XG5cbiAgICAvLyBzdG9wIHByb3BhZ2F0aW9uIG9uIHJldHVybiB2YWx1ZVxuICAgIGlmIChyZXR1cm5WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBkZWZhdWx0IG9uIHJldHVybiBmYWxzZVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmhhbmRsZUVycm9yKGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWQgZXJyb3IgaW4gZXZlbnQgbGlzdGVuZXInKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLypcbiAqIEFkZCBuZXcgbGlzdGVuZXIgd2l0aCBhIGNlcnRhaW4gcHJpb3JpdHkgdG8gdGhlIGxpc3RcbiAqIG9mIGxpc3RlbmVycyAoZm9yIHRoZSBnaXZlbiBldmVudCkuXG4gKlxuICogVGhlIHNlbWFudGljcyBvZiBsaXN0ZW5lciByZWdpc3RyYXRpb24gLyBsaXN0ZW5lciBleGVjdXRpb24gYXJlXG4gKiBmaXJzdCByZWdpc3RlciwgZmlyc3Qgc2VydmU6IE5ldyBsaXN0ZW5lcnMgd2lsbCBhbHdheXMgYmUgaW5zZXJ0ZWRcbiAqIGFmdGVyIGV4aXN0aW5nIGxpc3RlbmVycyB3aXRoIHRoZSBzYW1lIHByaW9yaXR5LlxuICpcbiAqIEV4YW1wbGU6IEluc2VydGluZyB0d28gbGlzdGVuZXJzIHdpdGggcHJpb3JpdHkgMTAwMCBhbmQgMTMwMFxuICpcbiAqICAgICogYmVmb3JlOiBbIDE1MDAsIDE1MDAsIDEwMDAsIDEwMDAgXVxuICogICAgKiBhZnRlcjogWyAxNTAwLCAxNTAwLCAobmV3PTEzMDApLCAxMDAwLCAxMDAwLCAobmV3PTEwMDApIF1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBsaXN0ZW5lciB7IHByaW9yaXR5LCBjYWxsYmFjayB9XG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5fYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgbmV3TGlzdGVuZXIpIHtcblxuICB2YXIgbGlzdGVuZXIgPSB0aGlzLl9nZXRMaXN0ZW5lcnMoZXZlbnQpLFxuICAgICAgcHJldmlvdXNMaXN0ZW5lcjtcblxuICAvLyBubyBwcmlvciBsaXN0ZW5lcnNcbiAgaWYgKCFsaXN0ZW5lcikge1xuICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV3TGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIG9yZGVyIGxpc3RlbmVycyBieSBwcmlvcml0eSBmcm9tXG4gIC8vIDAgKGhpZ2gpIHRvIG4gPiAwIChsb3cpXG4gIHdoaWxlIChsaXN0ZW5lcikge1xuXG4gICAgaWYgKGxpc3RlbmVyLnByaW9yaXR5IDwgbmV3TGlzdGVuZXIucHJpb3JpdHkpIHtcblxuICAgICAgbmV3TGlzdGVuZXIubmV4dCA9IGxpc3RlbmVyO1xuXG4gICAgICBpZiAocHJldmlvdXNMaXN0ZW5lcikge1xuICAgICAgICBwcmV2aW91c0xpc3RlbmVyLm5leHQgPSBuZXdMaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV3TGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlvdXNMaXN0ZW5lciA9IGxpc3RlbmVyO1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgfVxuXG4gIC8vIGFkZCBuZXcgbGlzdGVuZXIgdG8gYmFja1xuICBwcmV2aW91c0xpc3RlbmVyLm5leHQgPSBuZXdMaXN0ZW5lcjtcbn07XG5cblxuRXZlbnRCdXMucHJvdG90eXBlLl9nZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLl9saXN0ZW5lcnNbbmFtZV07XG59O1xuXG5FdmVudEJ1cy5wcm90b3R5cGUuX3NldExpc3RlbmVycyA9IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7XG4gIHRoaXMuX2xpc3RlbmVyc1tuYW1lXSA9IGxpc3RlbmVyO1xufTtcblxuRXZlbnRCdXMucHJvdG90eXBlLl9yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjaykge1xuXG4gIHZhciBsaXN0ZW5lciA9IHRoaXMuX2dldExpc3RlbmVycyhldmVudCksXG4gICAgICBuZXh0TGlzdGVuZXIsXG4gICAgICBwcmV2aW91c0xpc3RlbmVyLFxuICAgICAgbGlzdGVuZXJDYWxsYmFjaztcblxuICBpZiAoIWNhbGxiYWNrKSB7XG5cbiAgICAvLyBjbGVhciBsaXN0ZW5lcnNcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoZXZlbnQsIG51bGwpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2hpbGUgKGxpc3RlbmVyKSB7XG5cbiAgICBuZXh0TGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuXG4gICAgbGlzdGVuZXJDYWxsYmFjayA9IGxpc3RlbmVyLmNhbGxiYWNrO1xuXG4gICAgaWYgKGxpc3RlbmVyQ2FsbGJhY2sgPT09IGNhbGxiYWNrIHx8IGxpc3RlbmVyQ2FsbGJhY2tbRk5fUkVGXSA9PT0gY2FsbGJhY2spIHtcbiAgICAgIGlmIChwcmV2aW91c0xpc3RlbmVyKSB7XG4gICAgICAgIHByZXZpb3VzTGlzdGVuZXIubmV4dCA9IG5leHRMaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gbmV3IGZpcnN0IGxpc3RlbmVyXG4gICAgICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV4dExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2aW91c0xpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgbGlzdGVuZXIgPSBuZXh0TGlzdGVuZXI7XG4gIH1cbn07XG5cbi8qKlxuICogQSBldmVudCB0aGF0IGlzIGVtaXR0ZWQgdmlhIHRoZSBldmVudCBidXMuXG4gKi9cbmZ1bmN0aW9uIEludGVybmFsRXZlbnQoKSB7IH1cblxuSW50ZXJuYWxFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbn07XG5cbkludGVybmFsRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG59O1xuXG5JbnRlcm5hbEV2ZW50LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oZGF0YSkge1xuICBhc3NpZ24odGhpcywgZGF0YSB8fCB7fSk7XG59O1xuXG5cbi8qKlxuICogSW52b2tlIGZ1bmN0aW9uLiBCZSBmYXN0Li4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gYXJnc1xuICpcbiAqIEByZXR1cm4ge0FueX1cbiAqL1xuZnVuY3Rpb24gaW52b2tlRnVuY3Rpb24oZm4sIGFyZ3MpIHtcbiAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgcmVkdWNlXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2hpbGRyZW4sXG4gIGdldFZpc3VhbFxufSBmcm9tICcuLi91dGlsL0dyYXBoaWNzVXRpbCc7XG5cbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7IGNsZWFyIGFzIGRvbUNsZWFyIH0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgaXNGcmFtZUVsZW1lbnRcbn0gZnJvbSAnLi4vdXRpbC9FbGVtZW50cyc7XG5cbi8qKlxuICogQSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBncmFwaGljYWwgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcmFwaGljc0ZhY3RvcnkoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cbkdyYXBoaWNzRmFjdG9yeS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnICwgJ2VsZW1lbnRSZWdpc3RyeScgXTtcblxuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLl9nZXRDaGlsZHJlbkNvbnRhaW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgZ2Z4ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuXG4gIHZhciBjaGlsZHJlbkdmeDtcblxuICAvLyByb290IGVsZW1lbnRcbiAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgIGNoaWxkcmVuR2Z4ID0gZ2Z4O1xuICB9IGVsc2Uge1xuICAgIGNoaWxkcmVuR2Z4ID0gZ2V0Q2hpbGRyZW4oZ2Z4KTtcbiAgICBpZiAoIWNoaWxkcmVuR2Z4KSB7XG4gICAgICBjaGlsZHJlbkdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQ2xhc3NlcyhjaGlsZHJlbkdmeCkuYWRkKCdkanMtY2hpbGRyZW4nKTtcblxuICAgICAgc3ZnQXBwZW5kKGdmeC5wYXJlbnROb2RlLCBjaGlsZHJlbkdmeCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuR2Z4O1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBhbmQgcmV0dXJucyB0aGVcbiAqIGNsZWFyZWQgdmlzdWFsICh0aGUgPGcgY2xhc3M9XCJkanMtdmlzdWFsXCIgLz4gZWxlbWVudCkuXG4gKi9cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuX2NsZWFyID0gZnVuY3Rpb24oZ2Z4KSB7XG4gIHZhciB2aXN1YWwgPSBnZXRWaXN1YWwoZ2Z4KTtcblxuICBkb21DbGVhcih2aXN1YWwpO1xuXG4gIHJldHVybiB2aXN1YWw7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBnZnggY29udGFpbmVyIGZvciBzaGFwZXMgYW5kIGNvbm5lY3Rpb25zXG4gKlxuICogVGhlIGxheW91dCBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIDxnIGNsYXNzPVwiZGpzLWdyb3VwXCI+XG4gKlxuICogICA8IS0tIHRoZSBnZnggLS0+XG4gKiAgIDxnIGNsYXNzPVwiZGpzLWVsZW1lbnQgZGpzLShzaGFwZXxjb25uZWN0aW9ufGZyYW1lKVwiPlxuICogICAgIDxnIGNsYXNzPVwiZGpzLXZpc3VhbFwiPlxuICogICAgICAgPCEtLSB0aGUgcmVuZGVyZXIgZHJhd3MgaW4gaGVyZSAtLT5cbiAqICAgICA8L2c+XG4gKlxuICogICAgIDwhLS0gZXh0ZW5zaW9ucyAob3ZlcmxheXMsIGNsaWNrIGJveCwgLi4uKSBnb2VzIGhlcmVcbiAqICAgPC9nPlxuICpcbiAqICAgPCEtLSB0aGUgZ2Z4IGNoaWxkIG5vZGVzIC0tPlxuICogICA8ZyBjbGFzcz1cImRqcy1jaGlsZHJlblwiPjwvZz5cbiAqIDwvZz5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudCwgaS5lLiBzaGFwZSB8IGNvbm5lY3Rpb25cbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2NoaWxkcmVuR2Z4XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF0gcG9zaXRpb24gdG8gY3JlYXRlIGNvbnRhaW5lciBpbiBwYXJlbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRnJhbWVdIGlzIGZyYW1lIGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICovXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLl9jcmVhdGVDb250YWluZXIgPSBmdW5jdGlvbihcbiAgICB0eXBlLCBjaGlsZHJlbkdmeCwgcGFyZW50SW5kZXgsIGlzRnJhbWVcbikge1xuICB2YXIgb3V0ZXJHZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3NlcyhvdXRlckdmeCkuYWRkKCdkanMtZ3JvdXAnKTtcblxuICAvLyBpbnNlcnQgbm9kZSBhdCBwb3NpdGlvblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHByZXBlbmRUbyhvdXRlckdmeCwgY2hpbGRyZW5HZngsIGNoaWxkcmVuR2Z4LmNoaWxkTm9kZXNbcGFyZW50SW5kZXhdKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdBcHBlbmQoY2hpbGRyZW5HZngsIG91dGVyR2Z4KTtcbiAgfVxuXG4gIHZhciBnZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3NlcyhnZngpLmFkZCgnZGpzLWVsZW1lbnQnKTtcbiAgc3ZnQ2xhc3NlcyhnZngpLmFkZCgnZGpzLScgKyB0eXBlKTtcblxuICBpZiAoaXNGcmFtZSkge1xuICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQoJ2Rqcy1mcmFtZScpO1xuICB9XG5cbiAgc3ZnQXBwZW5kKG91dGVyR2Z4LCBnZngpO1xuXG4gIC8vIGNyZWF0ZSB2aXN1YWxcbiAgdmFyIHZpc3VhbCA9IHN2Z0NyZWF0ZSgnZycpO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGdmeCwgdmlzdWFsKTtcblxuICByZXR1cm4gZ2Z4O1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwYXJlbnRJbmRleCkge1xuICB2YXIgY2hpbGRyZW5HZnggPSB0aGlzLl9nZXRDaGlsZHJlbkNvbnRhaW5lcihlbGVtZW50LnBhcmVudCk7XG4gIHJldHVybiB0aGlzLl9jcmVhdGVDb250YWluZXIodHlwZSwgY2hpbGRyZW5HZngsIHBhcmVudEluZGV4LCBpc0ZyYW1lRWxlbWVudChlbGVtZW50KSk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLnVwZGF0ZUNvbnRhaW5tZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgcGFyZW50cztcblxuICBwYXJlbnRzID0gcmVkdWNlKGVsZW1lbnRzLCBmdW5jdGlvbihtYXAsIGUpIHtcblxuICAgIGlmIChlLnBhcmVudCkge1xuICAgICAgbWFwW2UucGFyZW50LmlkXSA9IGUucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcblxuICAvLyB1cGRhdGUgYWxsIHBhcmVudHMgb2YgY2hhbmdlZCBhbmQgcmVvcmdhbml6ZWQgdGhlaXIgY2hpbGRyZW5cbiAgLy8gaW4gdGhlIGNvcnJlY3Qgb3JkZXIgKGFzIGluZGljYXRlZCBpbiBvdXIgbW9kZWwpXG4gIGZvckVhY2gocGFyZW50cywgZnVuY3Rpb24ocGFyZW50KSB7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuR2Z4ID0gc2VsZi5fZ2V0Q2hpbGRyZW5Db250YWluZXIocGFyZW50KTtcblxuICAgIGZvckVhY2goY2hpbGRyZW4uc2xpY2UoKS5yZXZlcnNlKCksIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGRHZnggPSBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoY2hpbGQpO1xuXG4gICAgICBwcmVwZW5kVG8oY2hpbGRHZngucGFyZW50Tm9kZSwgY2hpbGRyZW5HZngpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24odmlzdWFsLCBlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuc2hhcGUnLCB7IGdmeDogdmlzdWFsLCBlbGVtZW50OiBlbGVtZW50IH0pO1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuZ2V0U2hhcGVQYXRoJywgZWxlbWVudCk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmRyYXdDb25uZWN0aW9uID0gZnVuY3Rpb24odmlzdWFsLCBlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuY29ubmVjdGlvbicsIHsgZ2Z4OiB2aXN1YWwsIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmdldENvbm5lY3Rpb25QYXRoID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuZ2V0Q29ubmVjdGlvblBhdGgnLCB3YXlwb2ludHMpO1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBnZngpIHtcblxuICAvLyBkbyBOT1QgdXBkYXRlIHJvb3QgZWxlbWVudFxuICBpZiAoIWVsZW1lbnQucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZpc3VhbCA9IHRoaXMuX2NsZWFyKGdmeCk7XG5cbiAgLy8gcmVkcmF3XG4gIGlmICh0eXBlID09PSAnc2hhcGUnKSB7XG4gICAgdGhpcy5kcmF3U2hhcGUodmlzdWFsLCBlbGVtZW50KTtcblxuICAgIC8vIHVwZGF0ZSBwb3NpdGlvbmluZ1xuICAgIHRyYW5zbGF0ZShnZngsIGVsZW1lbnQueCwgZWxlbWVudC55KTtcbiAgfSBlbHNlXG4gIGlmICh0eXBlID09PSAnY29ubmVjdGlvbicpIHtcbiAgICB0aGlzLmRyYXdDb25uZWN0aW9uKHZpc3VhbCwgZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGU6ICcgKyB0eXBlKTtcbiAgfVxuXG4gIGlmIChlbGVtZW50LmhpZGRlbikge1xuICAgIHN2Z0F0dHIoZ2Z4LCAnZGlzcGxheScsICdub25lJyk7XG4gIH0gZWxzZSB7XG4gICAgc3ZnQXR0cihnZngsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gIH1cbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZ2Z4ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuXG4gIC8vIHJlbW92ZVxuICBzdmdSZW1vdmUoZ2Z4LnBhcmVudE5vZGUpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gcHJlcGVuZFRvKG5ld05vZGUsIHBhcmVudE5vZGUsIHNpYmxpbmdOb2RlKSB7XG4gIHZhciBub2RlID0gc2libGluZ05vZGUgfHwgcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gIC8vIGRvIG5vdCBwcmVwZW5kIG5vZGUgdG8gaXRzZWxmIHRvIHByZXZlbnQgSUUgZnJvbSBjcmFzaGluZ1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy83NDZcbiAgaWYgKG5ld05vZGUgPT09IG5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCBub2RlKTtcbn1cbiIsImltcG9ydCBEcmF3TW9kdWxlIGZyb20gJy4uL2RyYXcnO1xuXG5pbXBvcnQgQ2FudmFzIGZyb20gJy4vQ2FudmFzJztcbmltcG9ydCBFbGVtZW50UmVnaXN0cnkgZnJvbSAnLi9FbGVtZW50UmVnaXN0cnknO1xuaW1wb3J0IEVsZW1lbnRGYWN0b3J5IGZyb20gJy4vRWxlbWVudEZhY3RvcnknO1xuaW1wb3J0IEV2ZW50QnVzIGZyb20gJy4vRXZlbnRCdXMnO1xuaW1wb3J0IEdyYXBoaWNzRmFjdG9yeSBmcm9tICcuL0dyYXBoaWNzRmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgRHJhd01vZHVsZSBdLFxuICBfX2luaXRfXzogWyAnY2FudmFzJyBdLFxuICBjYW52YXM6IFsgJ3R5cGUnLCBDYW52YXMgXSxcbiAgZWxlbWVudFJlZ2lzdHJ5OiBbICd0eXBlJywgRWxlbWVudFJlZ2lzdHJ5IF0sXG4gIGVsZW1lbnRGYWN0b3J5OiBbICd0eXBlJywgRWxlbWVudEZhY3RvcnkgXSxcbiAgZXZlbnRCdXM6IFsgJ3R5cGUnLCBFdmVudEJ1cyBdLFxuICBncmFwaGljc0ZhY3Rvcnk6IFsgJ3R5cGUnLCBHcmFwaGljc0ZhY3RvcnkgXVxufTsiLCJ2YXIgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkgPSAxMDAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIHNoYXBlIGFuZCBjb25uZWN0aW9uIHJlbmRlcmVycy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtudW1iZXJ9IFtyZW5kZXJQcmlvcml0eT0xMDAwXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCYXNlUmVuZGVyZXIoZXZlbnRCdXMsIHJlbmRlclByaW9yaXR5KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5IHx8IERFRkFVTFRfUkVOREVSX1BSSU9SSVRZO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3JlbmRlci5zaGFwZScsICdyZW5kZXIuY29ubmVjdGlvbicgXSwgcmVuZGVyUHJpb3JpdHksIGZ1bmN0aW9uKGV2dCwgY29udGV4dCkge1xuICAgIHZhciB0eXBlID0gZXZ0LnR5cGUsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIHZpc3VhbHMgPSBjb250ZXh0LmdmeDtcblxuICAgIGlmIChzZWxmLmNhblJlbmRlcihlbGVtZW50KSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdyZW5kZXIuc2hhcGUnKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmRyYXdTaGFwZSh2aXN1YWxzLCBlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxmLmRyYXdDb25uZWN0aW9uKHZpc3VhbHMsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAncmVuZGVyLmdldFNoYXBlUGF0aCcsICdyZW5kZXIuZ2V0Q29ubmVjdGlvblBhdGgnXSwgcmVuZGVyUHJpb3JpdHksIGZ1bmN0aW9uKGV2dCwgZWxlbWVudCkge1xuICAgIGlmIChzZWxmLmNhblJlbmRlcihlbGVtZW50KSkge1xuICAgICAgaWYgKGV2dC50eXBlID09PSAncmVuZGVyLmdldFNoYXBlUGF0aCcpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0U2hhcGVQYXRoKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0Q29ubmVjdGlvblBhdGgoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBTaG91bGQgY2hlY2sgd2hldGhlciAqdGhpcyogcmVuZGVyZXIgY2FuIHJlbmRlclxuICogdGhlIGVsZW1lbnQvY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzaGFwZSdzIHNuYXAgc3ZnIGVsZW1lbnQgdG8gYmUgZHJhd24gb24gdGhlIGBjYW52YXNgLlxuICpcbiAqIEBwYXJhbSB7ZGpzLkdyYXBoaWNzfSB2aXN1YWxzXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm5zIHtTbmFwLnN2Z30gW3JldHVybnMgYSBTbmFwLnN2ZyBwYXBlciBlbGVtZW50IF1cbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzaGFwZSdzIHNuYXAgc3ZnIGVsZW1lbnQgdG8gYmUgZHJhd24gb24gdGhlIGBjYW52YXNgLlxuICpcbiAqIEBwYXJhbSB7ZGpzLkdyYXBoaWNzfSB2aXN1YWxzXG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJucyB7U25hcC5zdmd9IFtyZXR1cm5zIGEgU25hcC5zdmcgcGFwZXIgZWxlbWVudCBdXG4gKi9cbkJhc2VSZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEdldHMgdGhlIFNWRyBwYXRoIG9mIGEgc2hhcGUgdGhhdCByZXByZXNlbnRzIGl0J3MgdmlzdWFsIGJvdW5kcy5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gc3ZnIHBhdGhcbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEdldHMgdGhlIFNWRyBwYXRoIG9mIGEgY29ubmVjdGlvbiB0aGF0IHJlcHJlc2VudHMgaXQncyB2aXN1YWwgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gc3ZnIHBhdGhcbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5nZXRDb25uZWN0aW9uUGF0aCA9IGZ1bmN0aW9uKCkge307XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZVJlbmRlcmVyIGZyb20gJy4vQmFzZVJlbmRlcmVyJztcblxuaW1wb3J0IHtcbiAgY29tcG9uZW50c1RvUGF0aCxcbiAgY3JlYXRlTGluZVxufSBmcm9tICcuLi91dGlsL1JlbmRlclV0aWwnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBpc0ZyYW1lRWxlbWVudFxufSBmcm9tICcuLi91dGlsL0VsZW1lbnRzJztcblxuLy8gYXBwbHkgZGVmYXVsdCByZW5kZXJlciB3aXRoIGxvd2VzdCBwb3NzaWJsZSBwcmlvcml0eVxuLy8gc28gdGhhdCBpdCBvbmx5IGtpY2tzIGluIGlmIG5vb25lIGVsc2UgY291bGQgcmVuZGVyXG52YXIgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkgPSAxO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHJlbmRlcmVyIHVzZWQgZm9yIHNoYXBlcyBhbmQgY29ubmVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7U3R5bGVzfSBzdHlsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVmYXVsdFJlbmRlcmVyKGV2ZW50QnVzLCBzdHlsZXMpIHtcblxuICAvL1xuICBCYXNlUmVuZGVyZXIuY2FsbCh0aGlzLCBldmVudEJ1cywgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkpO1xuXG4gIHRoaXMuQ09OTkVDVElPTl9TVFlMRSA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJyBdLCB7IHN0cm9rZVdpZHRoOiA1LCBzdHJva2U6ICdmdWNoc2lhJyB9KTtcbiAgdGhpcy5TSEFQRV9TVFlMRSA9IHN0eWxlcy5zdHlsZSh7IGZpbGw6ICd3aGl0ZScsIHN0cm9rZTogJ2Z1Y2hzaWEnLCBzdHJva2VXaWR0aDogMiB9KTtcbiAgdGhpcy5GUkFNRV9TVFlMRSA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJyBdLCB7IHN0cm9rZTogJ2Z1Y2hzaWEnLCBzdHJva2VEYXNoYXJyYXk6IDQsIHN0cm9rZVdpZHRoOiAyIH0pO1xufVxuXG5pbmhlcml0cyhEZWZhdWx0UmVuZGVyZXIsIEJhc2VSZW5kZXJlcik7XG5cblxuRGVmYXVsdFJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIGRyYXdTaGFwZSh2aXN1YWxzLCBlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cihyZWN0LCB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoIHx8IDAsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCB8fCAwXG4gIH0pO1xuXG4gIGlmIChpc0ZyYW1lRWxlbWVudChlbGVtZW50KSkge1xuICAgIHN2Z0F0dHIocmVjdCwgdGhpcy5GUkFNRV9TVFlMRSk7XG4gIH0gZWxzZSB7XG4gICAgc3ZnQXR0cihyZWN0LCB0aGlzLlNIQVBFX1NUWUxFKTtcbiAgfVxuXG4gIHN2Z0FwcGVuZCh2aXN1YWxzLCByZWN0KTtcblxuICByZXR1cm4gcmVjdDtcbn07XG5cbkRlZmF1bHRSZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbiBkcmF3Q29ubmVjdGlvbih2aXN1YWxzLCBjb25uZWN0aW9uKSB7XG5cbiAgdmFyIGxpbmUgPSBjcmVhdGVMaW5lKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCB0aGlzLkNPTk5FQ1RJT05fU1RZTEUpO1xuICBzdmdBcHBlbmQodmlzdWFscywgbGluZSk7XG5cbiAgcmV0dXJuIGxpbmU7XG59O1xuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmdldFNoYXBlUGF0aCA9IGZ1bmN0aW9uIGdldFNoYXBlUGF0aChzaGFwZSkge1xuXG4gIHZhciB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcblxuICB2YXIgc2hhcGVQYXRoID0gW1xuICAgIFsnTScsIHgsIHldLFxuICAgIFsnbCcsIHdpZHRoLCAwXSxcbiAgICBbJ2wnLCAwLCBoZWlnaHRdLFxuICAgIFsnbCcsIC13aWR0aCwgMF0sXG4gICAgWyd6J11cbiAgXTtcblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChzaGFwZVBhdGgpO1xufTtcblxuRGVmYXVsdFJlbmRlcmVyLnByb3RvdHlwZS5nZXRDb25uZWN0aW9uUGF0aCA9IGZ1bmN0aW9uIGdldENvbm5lY3Rpb25QYXRoKGNvbm5lY3Rpb24pIHtcbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIHZhciBpZHgsIHBvaW50LCBjb25uZWN0aW9uUGF0aCA9IFtdO1xuXG4gIGZvciAoaWR4ID0gMDsgKHBvaW50ID0gd2F5cG9pbnRzW2lkeF0pOyBpZHgrKykge1xuXG4gICAgLy8gdGFrZSBpbnZpc2libGUgZG9ja2luZyBpbnRvIGFjY291bnRcbiAgICAvLyB3aGVuIGNyZWF0aW5nIHRoZSBwYXRoXG4gICAgcG9pbnQgPSBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcblxuICAgIGNvbm5lY3Rpb25QYXRoLnB1c2goWyBpZHggPT09IDAgPyAnTScgOiAnTCcsIHBvaW50LngsIHBvaW50LnkgXSk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChjb25uZWN0aW9uUGF0aCk7XG59O1xuXG5cbkRlZmF1bHRSZW5kZXJlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnc3R5bGVzJyBdO1xuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgYXNzaWduLFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYW5hZ2VzIHNoYXBlIHN0eWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHlsZXMoKSB7XG5cbiAgdmFyIGRlZmF1bHRUcmFpdHMgPSB7XG5cbiAgICAnbm8tZmlsbCc6IHtcbiAgICAgIGZpbGw6ICdub25lJ1xuICAgIH0sXG4gICAgJ25vLWJvcmRlcic6IHtcbiAgICAgIHN0cm9rZU9wYWNpdHk6IDAuMFxuICAgIH0sXG4gICAgJ25vLWV2ZW50cyc6IHtcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICAgIH1cbiAgfTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHN0eWxlIGRlZmluaXRpb24gZnJvbSBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIHRyYWl0cyBhbmQgYW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gdHJhaXRzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYWRkaXRpb25hbEF0dHJzXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gdGhlIHN0eWxlIGRlZmludGlvblxuICAgKi9cbiAgdGhpcy5jbHMgPSBmdW5jdGlvbihjbGFzc05hbWUsIHRyYWl0cywgYWRkaXRpb25hbEF0dHJzKSB7XG4gICAgdmFyIGF0dHJzID0gdGhpcy5zdHlsZSh0cmFpdHMsIGFkZGl0aW9uYWxBdHRycyk7XG5cbiAgICByZXR1cm4gYXNzaWduKGF0dHJzLCB7ICdjbGFzcyc6IGNsYXNzTmFtZSB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGRzIGEgc3R5bGUgZGVmaW5pdGlvbiBmcm9tIGEgbGlzdCBvZiB0cmFpdHMgYW5kIGFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IHRyYWl0c1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFkZGl0aW9uYWxBdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBzdHlsZSBkZWZpbnRpb25cbiAgICovXG4gIHRoaXMuc3R5bGUgPSBmdW5jdGlvbih0cmFpdHMsIGFkZGl0aW9uYWxBdHRycykge1xuXG4gICAgaWYgKCFpc0FycmF5KHRyYWl0cykgJiYgIWFkZGl0aW9uYWxBdHRycykge1xuICAgICAgYWRkaXRpb25hbEF0dHJzID0gdHJhaXRzO1xuICAgICAgdHJhaXRzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGF0dHJzID0gcmVkdWNlKHRyYWl0cywgZnVuY3Rpb24oYXR0cnMsIHQpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oYXR0cnMsIGRlZmF1bHRUcmFpdHNbdF0gfHwge30pO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBhZGRpdGlvbmFsQXR0cnMgPyBhc3NpZ24oYXR0cnMsIGFkZGl0aW9uYWxBdHRycykgOiBhdHRycztcbiAgfTtcblxuICB0aGlzLmNvbXB1dGVTdHlsZSA9IGZ1bmN0aW9uKGN1c3RvbSwgdHJhaXRzLCBkZWZhdWx0U3R5bGVzKSB7XG4gICAgaWYgKCFpc0FycmF5KHRyYWl0cykpIHtcbiAgICAgIGRlZmF1bHRTdHlsZXMgPSB0cmFpdHM7XG4gICAgICB0cmFpdHMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZi5zdHlsZSh0cmFpdHMgfHwgW10sIGFzc2lnbih7fSwgZGVmYXVsdFN0eWxlcywgY3VzdG9tIHx8IHt9KSk7XG4gIH07XG59XG4iLCJpbXBvcnQgRGVmYXVsdFJlbmRlcmVyIGZyb20gJy4vRGVmYXVsdFJlbmRlcmVyJztcbmltcG9ydCBTdHlsZXMgZnJvbSAnLi9TdHlsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdkZWZhdWx0UmVuZGVyZXInIF0sXG4gIGRlZmF1bHRSZW5kZXJlcjogWyAndHlwZScsIERlZmF1bHRSZW5kZXJlciBdLFxuICBzdHlsZXM6IFsgJ3R5cGUnLCBTdHlsZXMgXVxufTtcbiIsImltcG9ydCB7XG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuZnVuY3Rpb24gbGFzdChhcnIpIHtcbiAgcmV0dXJuIGFyciAmJiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuXG5mdW5jdGlvbiBzb3J0VG9wT3JNaWRkbGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC55O1xufVxuXG5mdW5jdGlvbiBzb3J0TGVmdE9yQ2VudGVyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQueDtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIGFsaWdubWVudFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbnZhciBBTElHTk1FTlRfU09SVElORyA9IHtcbiAgbGVmdDogc29ydExlZnRPckNlbnRlcixcbiAgY2VudGVyOiBzb3J0TGVmdE9yQ2VudGVyLFxuICByaWdodDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoO1xuICB9LFxuICB0b3A6IHNvcnRUb3BPck1pZGRsZSxcbiAgbWlkZGxlOiBzb3J0VG9wT3JNaWRkbGUsXG4gIGJvdHRvbTogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodDtcbiAgfVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBbGlnbkVsZW1lbnRzKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbkFsaWduRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbi8qKlxuICogR2V0IHRoZSByZWxldmFudCBcImF4aXNcIiBhbmQgXCJkaW1lbnNpb25cIiByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHR5cGUgb2YgYWxpZ25tZW50XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxlZnR8cmlnaHR8Y2VudGVyfHRvcHxib3R0b218bWlkZGxlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB7IGF4aXMsIGRpbWVuc2lvbiB9XG4gKi9cbkFsaWduRWxlbWVudHMucHJvdG90eXBlLl9nZXRPcmllbnRhdGlvbkRldGFpbHMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciB2ZXJ0aWNhbCA9IFsgJ3RvcCcsICdib3R0b20nLCAnbWlkZGxlJyBdLFxuICAgICAgYXhpcyA9ICd4JyxcbiAgICAgIGRpbWVuc2lvbiA9ICd3aWR0aCc7XG5cbiAgaWYgKHZlcnRpY2FsLmluZGV4T2YodHlwZSkgIT09IC0xKSB7XG4gICAgYXhpcyA9ICd5JztcbiAgICBkaW1lbnNpb24gPSAnaGVpZ2h0JztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXhpczogYXhpcyxcbiAgICBkaW1lbnNpb246IGRpbWVuc2lvblxuICB9O1xufTtcblxuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUuX2lzVHlwZSA9IGZ1bmN0aW9uKHR5cGUsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlcy5pbmRleE9mKHR5cGUpICE9PSAtMTtcbn07XG5cbi8qKlxuICogR2V0IGEgcG9pbnQgb24gdGhlIHJlbGV2YW50IGF4aXMgd2hlcmUgZWxlbWVudHMgc2hvdWxkIGFsaWduIHRvXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxlZnR8cmlnaHR8Y2VudGVyfHRvcHxib3R0b218bWlkZGxlXG4gKiBAcGFyYW0gIHtBcnJheX0gc29ydGVkRWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFsaWduRWxlbWVudHMucHJvdG90eXBlLl9hbGlnbm1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKHR5cGUsIHNvcnRlZEVsZW1lbnRzKSB7XG4gIHZhciBvcmllbnRhdGlvbiA9IHRoaXMuX2dldE9yaWVudGF0aW9uRGV0YWlscyh0eXBlKSxcbiAgICAgIGF4aXMgPSBvcmllbnRhdGlvbi5heGlzLFxuICAgICAgZGltZW5zaW9uID0gb3JpZW50YXRpb24uZGltZW5zaW9uLFxuICAgICAgYWxpZ25tZW50ID0ge30sXG4gICAgICBjZW50ZXJzID0ge30sXG4gICAgICBoYXNTaGFyZWRDZW50ZXJzID0gZmFsc2UsXG4gICAgICBjZW50ZXJlZEVsZW1lbnRzLFxuICAgICAgZmlyc3RFbGVtZW50LFxuICAgICAgbGFzdEVsZW1lbnQ7XG5cbiAgZnVuY3Rpb24gZ2V0TWlkZGxlT3JUb3AoZmlyc3QsIGxhc3QpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZmlyc3RbYXhpc10gKyBsYXN0W2F4aXNdICsgbGFzdFtkaW1lbnNpb25dKSAvIDIpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdsZWZ0JywgJ3RvcCcgXSkpIHtcbiAgICBhbGlnbm1lbnRbdHlwZV0gPSBzb3J0ZWRFbGVtZW50c1swXVtheGlzXTtcblxuICB9IGVsc2UgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdyaWdodCcsICdib3R0b20nIF0pKSB7XG4gICAgbGFzdEVsZW1lbnQgPSBsYXN0KHNvcnRlZEVsZW1lbnRzKTtcblxuICAgIGFsaWdubWVudFt0eXBlXSA9IGxhc3RFbGVtZW50W2F4aXNdICsgbGFzdEVsZW1lbnRbZGltZW5zaW9uXTtcblxuICB9IGVsc2UgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdjZW50ZXInLCAnbWlkZGxlJyBdKSkge1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjZW50ZXIgc2hhcmVkIGJ5IG1vcmUgdGhhbiBvbmUgc2hhcGVcbiAgICAvLyBpZiBub3QsIGp1c3QgdGFrZSB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZVxuICAgIGZvckVhY2goc29ydGVkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjZW50ZXIgPSBlbGVtZW50W2F4aXNdICsgTWF0aC5yb3VuZChlbGVtZW50W2RpbWVuc2lvbl0gLyAyKTtcblxuICAgICAgaWYgKGNlbnRlcnNbY2VudGVyXSkge1xuICAgICAgICBjZW50ZXJzW2NlbnRlcl0uZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRlcnNbY2VudGVyXSA9IHtcbiAgICAgICAgICBlbGVtZW50czogWyBlbGVtZW50IF0sXG4gICAgICAgICAgY2VudGVyOiBjZW50ZXJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNlbnRlcmVkRWxlbWVudHMgPSBzb3J0QnkoY2VudGVycywgZnVuY3Rpb24oY2VudGVyKSB7XG4gICAgICBpZiAoY2VudGVyLmVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaGFzU2hhcmVkQ2VudGVycyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjZW50ZXIuZWxlbWVudHMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKGhhc1NoYXJlZENlbnRlcnMpIHtcbiAgICAgIGFsaWdubWVudFt0eXBlXSA9IGxhc3QoY2VudGVyZWRFbGVtZW50cykuY2VudGVyO1xuXG4gICAgICByZXR1cm4gYWxpZ25tZW50O1xuICAgIH1cblxuICAgIGZpcnN0RWxlbWVudCA9IHNvcnRlZEVsZW1lbnRzWzBdO1xuXG4gICAgc29ydGVkRWxlbWVudHMgPSBzb3J0Qnkoc29ydGVkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50W2F4aXNdICsgZWxlbWVudFtkaW1lbnNpb25dO1xuICAgIH0pO1xuXG4gICAgbGFzdEVsZW1lbnQgPSBsYXN0KHNvcnRlZEVsZW1lbnRzKTtcblxuICAgIGFsaWdubWVudFt0eXBlXSA9IGdldE1pZGRsZU9yVG9wKGZpcnN0RWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGFsaWdubWVudDtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGFsaWdubWVudCBvZiBhIHNlbGVjdGlvbiBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5fSBlbGVtZW50cyBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGUgbGVmdHxyaWdodHxjZW50ZXJ8dG9wfGJvdHRvbXxtaWRkbGVcbiAqL1xuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0eXBlKSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudC53YXlwb2ludHMgfHwgZWxlbWVudC5ob3N0IHx8IGVsZW1lbnQubGFiZWxUYXJnZXQpO1xuICB9KTtcblxuICB2YXIgc29ydEZuID0gQUxJR05NRU5UX1NPUlRJTkdbdHlwZV07XG5cbiAgdmFyIHNvcnRlZEVsZW1lbnRzID0gc29ydEJ5KGZpbHRlcmVkRWxlbWVudHMsIHNvcnRGbik7XG5cbiAgdmFyIGFsaWdubWVudCA9IHRoaXMuX2FsaWdubWVudFBvc2l0aW9uKHR5cGUsIHNvcnRlZEVsZW1lbnRzKTtcblxuICBtb2RlbGluZy5hbGlnbkVsZW1lbnRzKHNvcnRlZEVsZW1lbnRzLCBhbGlnbm1lbnQpO1xufTtcbiIsImltcG9ydCBBbGlnbkVsZW1lbnRzIGZyb20gJy4vQWxpZ25FbGVtZW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2FsaWduRWxlbWVudHMnIF0sXG4gIGFsaWduRWxlbWVudHM6IFsgJ3R5cGUnLCBBbGlnbkVsZW1lbnRzIF1cbn07XG4iLCJpbXBvcnQge1xuICBmbGF0dGVuLFxuICBmaWx0ZXIsXG4gIGZvckVhY2gsXG4gIGdyb3VwQnksXG4gIG1hcCxcbiAgdW5pb25CeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cbmltcG9ydCB7IGdldE5ld0F0dGFjaFNoYXBlRGVsdGEgfSBmcm9tICcuLi8uLi91dGlsL0F0dGFjaFV0aWwnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MSxcbiAgICBISUdIX1BSSU9SSVRZID0gMTQwMTtcblxudmFyIE1BUktFUl9BVFRBQ0ggPSAnYXR0YWNoLW9rJztcblxuXG4vKipcbiAqIEFkZHMgdGhlIG5vdGlvbiBvZiBhdHRhY2hlZCBlbGVtZW50cyB0byB0aGUgbW9kZWxlci5cbiAqXG4gKiBPcHRpb25hbGx5IGRlcGVuZHMgb24gYGRpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmVgIHRvIHJlbmRlclxuICogdGhlIGF0dGFjaGVkIGVsZW1lbnRzIGR1cmluZyBtb3ZlIHByZXZpZXcuXG4gKlxuICogT3B0aW9uYWxseSBkZXBlbmRzIG9uIGBkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1zdXBwb3J0YFxuICogdG8gcmVuZGVyIGF0dGFjaGVkIGxhYmVscyBkdXJpbmcgbW92ZSBwcmV2aWV3LlxuICpcbiAqIEBwYXJhbSB7ZGlkaS5JbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXR0YWNoU3VwcG9ydChpbmplY3RvciwgZXZlbnRCdXMsIGNhbnZhcywgcnVsZXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBtb3ZlUHJldmlldyA9IGluamVjdG9yLmdldCgnbW92ZVByZXZpZXcnLCBmYWxzZSk7XG5cblxuICAvLyByZW1vdmUgYWxsIHRoZSBhdHRhY2hlZCBlbGVtZW50cyBmcm9tIHRoZSBzaGFwZXMgdG8gYmUgdmFsaWRhdGVkXG4gIC8vIGFkZCBhbGwgdGhlIGF0dGFjaGVkIHNoYXBlcyB0byB0aGUgb3ZlcmFsbCBsaXN0IG9mIG1vdmVkIHNoYXBlc1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgdmFsaWRhdGVkU2hhcGVzID0gY29udGV4dC52YWxpZGF0ZWRTaGFwZXM7XG5cbiAgICBjb250ZXh0LnNoYXBlcyA9IGFkZEF0dGFjaGVkKHNoYXBlcyk7XG5cbiAgICBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyA9IHJlbW92ZUF0dGFjaGVkKHZhbGlkYXRlZFNoYXBlcyk7XG4gIH0pO1xuXG4gIC8vIGFkZCBhdHRhY2hlcnMgdG8gdGhlIHZpc3VhbCdzIGdyb3VwXG4gIG1vdmVQcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGF0dGFjaGVycyA9IGdldEF0dGFjaGVycyhzaGFwZXMpO1xuXG4gICAgZm9yRWFjaChhdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICBtb3ZlUHJldmlldy5tYWtlRHJhZ2dhYmxlKGNvbnRleHQsIGF0dGFjaGVyLCB0cnVlKTtcblxuICAgICAgZm9yRWFjaChhdHRhY2hlci5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIG1vdmVQcmV2aWV3Lm1ha2VEcmFnZ2FibGUoY29udGV4dCwgbGFiZWwsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGFkZCBhdHRhY2gtb2sgbWFya2VyIHRvIGN1cnJlbnQgaG9zdFxuICBtb3ZlUHJldmlldyAmJiBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcblxuICAgIGlmIChzaGFwZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gc2hhcGVzWzBdO1xuXG4gICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgaWYgKGhvc3QpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoaG9zdCwgTUFSS0VSX0FUVEFDSCk7XG5cbiAgICAgIGV2ZW50QnVzLm9uY2UoW1xuICAgICAgICAnc2hhcGUubW92ZS5vdXQnLFxuICAgICAgICAnc2hhcGUubW92ZS5jbGVhbnVwJ1xuICAgICAgXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG9zdCwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFkZCBhbGwgYXR0YWNoZXJzIHRvIG1vdmUgY2xvc3VyZVxuICB0aGlzLnByZUV4ZWN1dGVkKCdlbGVtZW50cy5tb3ZlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgYXR0YWNoZXJzID0gZ2V0QXR0YWNoZXJzKHNoYXBlcyk7XG5cbiAgICBmb3JFYWNoKGF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIGNsb3N1cmUuYWRkKGF0dGFjaGVyLCBjbG9zdXJlLnRvcExldmVsW2F0dGFjaGVyLmhvc3QuaWRdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gcGVyZm9ybSB0aGUgYXR0YWNoaW5nIGFmdGVyIHNoYXBlcyBhcmUgZG9uZSBtb3ZpbmdcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIG5ld0hvc3QgPSBjb250ZXh0Lm5ld0hvc3QsXG4gICAgICAgIGF0dGFjaGVycztcblxuICAgIC8vIG9ubHkgc2luZ2xlIGVsZW1lbnRzIGNhbiBiZSBhdHRhY2hlZFxuICAgIC8vIG11bHRpcGx5IGVsZW1lbnRzIGNhbiBiZSBkZXRhY2hlZFxuICAgIGlmIChuZXdIb3N0ICYmIHNoYXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobmV3SG9zdCkge1xuICAgICAgYXR0YWNoZXJzID0gc2hhcGVzO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGZpbmQgYXR0YWNoZXJzIG1vdmVkIHdpdGhvdXQgaG9zdFxuICAgICAgYXR0YWNoZXJzID0gZmlsdGVyKHNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICAgIHJldHVybiBpc0F0dGFjaGVyKHNoYXBlKSAmJiAhaW5jbHVkZXMoc2hhcGVzLCBob3N0KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvckVhY2goYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgbW9kZWxpbmcudXBkYXRlQXR0YWNobWVudChhdHRhY2hlciwgbmV3SG9zdCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGVuc3VyZSBpbnZhbGlkIGF0dGFjaG1lbnQgY29ubmVjdGlvbnMgYXJlIHJlbW92ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgc2hhcGVzID0gZS5jb250ZXh0LnNoYXBlcztcblxuICAgIGZvckVhY2goc2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuXG4gICAgICBmb3JFYWNoKHNoYXBlLmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcblxuICAgICAgICAvLyByZW1vdmUgaW52YWxpZCBvdXRnb2luZyBjb25uZWN0aW9uc1xuICAgICAgICBmb3JFYWNoKGF0dGFjaGVyLm91dGdvaW5nLnNsaWNlKCksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0Jywge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IGNvbm5lY3Rpb24udGFyZ2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyByZW1vdmUgaW52YWxpZCBpbmNvbWluZyBjb25uZWN0aW9uc1xuICAgICAgICBmb3JFYWNoKGF0dGFjaGVyLmluY29taW5nLnNsaWNlKCksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0Jywge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IGNvbm5lY3Rpb24udGFyZ2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgaG9zdCA9IGNvbnRleHQuaG9zdDtcblxuICAgIGlmIChob3N0KSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KHNoYXBlLCBob3N0KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBhdHRhY2htZW50cyBpZiB0aGUgaG9zdCBpcyByZXBsYWNlZFxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlO1xuXG4gICAgLy8gbW92ZSB0aGUgYXR0YWNoZXJzIHRvIHRoZSBuZXcgaG9zdFxuICAgIHNhdmVDbGVhcihvbGRTaGFwZS5hdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLm1vdmUnLCB7XG4gICAgICAgIHRhcmdldDogbmV3U2hhcGUsXG4gICAgICAgIHNoYXBlczogW2F0dGFjaGVyXVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhbGxvd2VkID09PSAnYXR0YWNoJykge1xuICAgICAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KGF0dGFjaGVyLCBuZXdTaGFwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb2RlbGluZy5yZW1vdmVTaGFwZShhdHRhY2hlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBtb3ZlIGF0dGFjaGVycyBpZiBuZXcgaG9zdCBoYXMgZGlmZmVyZW50IHNpemVcbiAgICBpZiAobmV3U2hhcGUuYXR0YWNoZXJzLmxlbmd0aCkge1xuXG4gICAgICBmb3JFYWNoKG5ld1NoYXBlLmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgICAgdmFyIGRlbHRhID0gZ2V0TmV3QXR0YWNoU2hhcGVEZWx0YShhdHRhY2hlciwgb2xkU2hhcGUsIG5ld1NoYXBlKTtcbiAgICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGF0dGFjaGVyLCBkZWx0YSwgYXR0YWNoZXIucGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9KTtcblxuICAvLyBtb3ZlIHNoYXBlIG9uIGhvc3QgcmVzaXplXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG9sZEJvdW5kcyA9IGNvbnRleHQub2xkQm91bmRzLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgICAgYXR0YWNoZXJzID0gc2hhcGUuYXR0YWNoZXJzLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuYXR0YWNoU3VwcG9ydCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIHZhciBkZWx0YSA9IGdldE5ld0F0dGFjaFNoYXBlRGVsdGEoYXR0YWNoZXIsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGF0dGFjaGVyLCBkZWx0YSwgYXR0YWNoZXIucGFyZW50KTtcblxuICAgICAgZm9yRWFjaChhdHRhY2hlci5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIG1vZGVsaW5nLm1vdmVTaGFwZShsYWJlbCwgZGVsdGEsIGxhYmVsLnBhcmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGF0dGFjaG1lbnRzXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBzaGFwZSA9IGV2ZW50LmNvbnRleHQuc2hhcGU7XG5cbiAgICBzYXZlQ2xlYXIoc2hhcGUuYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUoYXR0YWNoZXIpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNoYXBlLmhvc3QpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQoc2hhcGUsIG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmluaGVyaXRzKEF0dGFjaFN1cHBvcnQsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkF0dGFjaFN1cHBvcnQuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdydWxlcycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLyoqXG4gKiBSZXR1cm4gYXR0YWNoZXJzIG9mIHRoZSBnaXZlbiBzaGFwZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gc2hhcGVzXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59XG4gKi9cbmZ1bmN0aW9uIGdldEF0dGFjaGVycyhzaGFwZXMpIHtcbiAgcmV0dXJuIGZsYXR0ZW4obWFwKHNoYXBlcywgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiBzLmF0dGFjaGVycyB8fCBbXTtcbiAgfSkpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvbWJpbmVkIGxpc3Qgb2YgZWxlbWVudHMgYW5kXG4gKiBhdHRhY2hlcnMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZpbHRlcmVkXG4gKi9cbmZ1bmN0aW9uIGFkZEF0dGFjaGVkKGVsZW1lbnRzKSB7XG4gIHZhciBhdHRhY2hlcnMgPSBnZXRBdHRhY2hlcnMoZWxlbWVudHMpO1xuXG4gIHJldHVybiB1bmlvbkJ5KCdpZCcsIGVsZW1lbnRzLCBhdHRhY2hlcnMpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGZpbHRlcmVkIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBkbyBub3RcbiAqIGNvbnRhaW4gYXR0YWNoZWQgZWxlbWVudHMgd2l0aCBob3N0cyBiZWluZyBwYXJ0XG4gKiBvZiB0aGUgc2VsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZpbHRlcmVkXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF0dGFjaGVkKGVsZW1lbnRzKSB7XG5cbiAgdmFyIGlkcyA9IGdyb3VwQnkoZWxlbWVudHMsICdpZCcpO1xuXG4gIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB3aGlsZSAoZWxlbWVudCkge1xuXG4gICAgICAvLyBob3N0IGluIHNlbGVjdGlvblxuICAgICAgaWYgKGVsZW1lbnQuaG9zdCAmJiBpZHNbZWxlbWVudC5ob3N0LmlkXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQXR0YWNoZXIoc2hhcGUpIHtcbiAgcmV0dXJuICEhc2hhcGUuaG9zdDtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufSIsImltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBBdHRhY2hTdXBwb3J0IGZyb20gJy4vQXR0YWNoU3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBSdWxlc01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYXR0YWNoU3VwcG9ydCcgXSxcbiAgYXR0YWNoU3VwcG9ydDogWyAndHlwZScsIEF0dGFjaFN1cHBvcnQgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzVFJCTCxcbiAgZ2V0TWlkXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHsgREVGQVVMVF9ESVNUQU5DRSB9IGZyb20gJy4vQXV0b1BsYWNlVXRpbCc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAxMDA7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBwbGFjZXMgZWxlbWVudHMgY29ubmVjdGVkIHRvIGV4aXN0aW5nIG9uZXNcbiAqIHRvIGFuIGFwcHJvcHJpYXRlIHBvc2l0aW9uIGluIGFuIF9hdXRvbWF0ZWRfIGZhc2hpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZShldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2U7XG5cbiAgICByZXR1cm4gZ2V0TmV3U2hhcGVQb3NpdGlvbihzb3VyY2UsIHNoYXBlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBzaGFwZSB0byBzb3VyY2UgYXQgYXBwcm9wcmlhdGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzb3VyY2VcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqXG4gICAqIEByZXR1cm4ge2Rqcy5tb2RlbC5TaGFwZX0gYXBwZW5kZWQgc2hhcGVcbiAgICovXG4gIHRoaXMuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBzaGFwZSwgaGludHMpIHtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2F1dG9QbGFjZS5zdGFydCcsIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG5cbiAgICAvLyBhbGxvdyBvdGhlcnMgdG8gcHJvdmlkZSB0aGUgcG9zaXRpb25cbiAgICB2YXIgcG9zaXRpb24gPSBldmVudEJ1cy5maXJlKCdhdXRvUGxhY2UnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0pO1xuXG4gICAgdmFyIG5ld1NoYXBlID0gbW9kZWxpbmcuYXBwZW5kU2hhcGUoc291cmNlLCBzaGFwZSwgcG9zaXRpb24sIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2F1dG9QbGFjZS5lbmQnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHNoYXBlOiBuZXdTaGFwZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1NoYXBlO1xuICB9O1xuXG59XG5cbkF1dG9QbGFjZS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBGaW5kIHRoZSBuZXcgcG9zaXRpb24gZm9yIHRoZSB0YXJnZXQgZWxlbWVudCB0b1xuICogY29ubmVjdCB0byBzb3VyY2UuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudFxuICogQHBhcmFtICB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtoaW50cy5kZWZhdWx0RGlzdGFuY2VdXG4gKlxuICogQHJldHVybnMge1BvaW50fVxuICovXG5mdW5jdGlvbiBnZXROZXdTaGFwZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB2YXIgZGlzdGFuY2UgPSBoaW50cy5kZWZhdWx0RGlzdGFuY2UgfHwgREVGQVVMVF9ESVNUQU5DRTtcblxuICB2YXIgc291cmNlTWlkID0gZ2V0TWlkKHNvdXJjZSksXG4gICAgICBzb3VyY2VUcmJsID0gYXNUUkJMKHNvdXJjZSk7XG5cbiAgLy8gc2ltcGx5IHB1dCBlbGVtZW50IHJpZ2h0IG5leHQgdG8gc291cmNlXG4gIHJldHVybiB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCArIGRpc3RhbmNlICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlTWlkLnlcbiAgfTtcbn0iLCIvKipcbiAqIFNlbGVjdCBlbGVtZW50IGFmdGVyIGF1dG8gcGxhY2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBzZWxlY3Rpb24pIHtcblxuICBldmVudEJ1cy5vbignYXV0b1BsYWNlLmVuZCcsIDUwMCwgZnVuY3Rpb24oZSkge1xuICAgIHNlbGVjdGlvbi5zZWxlY3QoZS5zaGFwZSk7XG4gIH0pO1xuXG59XG5cbkF1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdzZWxlY3Rpb24nXG5dOyIsImltcG9ydCB7XG4gIGFzVFJCTCxcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZFxufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbi8vIHBhZGRpbmcgdG8gZGV0ZWN0IGVsZW1lbnQgcGxhY2VtZW50XG52YXIgUExBQ0VNRU5UX0RFVEVDVElPTl9QQUQgPSAxMDtcblxuZXhwb3J0IHZhciBERUZBVUxUX0RJU1RBTkNFID0gNTA7XG5cbnZhciBERUZBVUxUX01BWF9ESVNUQU5DRSA9IDI1MDtcblxuXG4vKipcbiAqIEdldCBmcmVlIHBvc2l0aW9uIHN0YXJ0aW5nIGZyb20gZ2l2ZW4gcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IGVsZW1lbnRcbiAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXROZXh0UG9zaXRpb25cbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2V0TmV4dFBvc2l0aW9uKSB7XG4gIHZhciBjb25uZWN0ZWRBdFBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY29ubmVjdGVkQXRQb3NpdGlvbiA9IGdldENvbm5lY3RlZEF0UG9zaXRpb24oc291cmNlLCBwb3NpdGlvbiwgZWxlbWVudCkpKSB7XG4gICAgcG9zaXRpb24gPSBnZXROZXh0UG9zaXRpb24oZWxlbWVudCwgcG9zaXRpb24sIGNvbm5lY3RlZEF0UG9zaXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybnMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG5leHQgcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5leHRQb3NpdGlvbkRpcmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtuZXh0UG9zaXRpb25EaXJlY3Rpb24ueF1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbbmV4dFBvc2l0aW9uRGlyZWN0aW9uLnldXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBwcmV2aW91c1Bvc2l0aW9uLCBjb25uZWN0ZWRBdFBvc2l0aW9uKSB7XG4gICAgdmFyIG5leHRQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHByZXZpb3VzUG9zaXRpb24ueCxcbiAgICAgIHk6IHByZXZpb3VzUG9zaXRpb24ueVxuICAgIH07XG5cbiAgICBbICd4JywgJ3knIF0uZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XG5cbiAgICAgIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb25Gb3JBeGlzID0gbmV4dFBvc2l0aW9uRGlyZWN0aW9uWyBheGlzIF07XG5cbiAgICAgIGlmICghbmV4dFBvc2l0aW9uRGlyZWN0aW9uRm9yQXhpcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSBheGlzID09PSAneCcgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICAgIHZhciBtYXJnaW4gPSBuZXh0UG9zaXRpb25EaXJlY3Rpb25Gb3JBeGlzLm1hcmdpbixcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IG5leHRQb3NpdGlvbkRpcmVjdGlvbkZvckF4aXMubWluRGlzdGFuY2U7XG5cbiAgICAgIGlmIChtYXJnaW4gPCAwKSB7XG4gICAgICAgIG5leHRQb3NpdGlvblsgYXhpcyBdID0gTWF0aC5taW4oXG4gICAgICAgICAgY29ubmVjdGVkQXRQb3NpdGlvblsgYXhpcyBdICsgbWFyZ2luIC0gZWxlbWVudFsgZGltZW5zaW9uIF0gLyAyLFxuICAgICAgICAgIHByZXZpb3VzUG9zaXRpb25bIGF4aXMgXSAtIG1pbkRpc3RhbmNlICsgbWFyZ2luXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0UG9zaXRpb25bIGF4aXMgXSA9IE1hdGgubWF4KFxuICAgICAgICAgIGNvbm5lY3RlZEF0UG9zaXRpb25bIGF4aXMgXSArIGNvbm5lY3RlZEF0UG9zaXRpb25bIGRpbWVuc2lvbiBdICsgbWFyZ2luICsgZWxlbWVudFsgZGltZW5zaW9uIF0gLyAyLFxuICAgICAgICAgIHByZXZpb3VzUG9zaXRpb25bIGF4aXMgXSArIG1pbkRpc3RhbmNlICsgbWFyZ2luXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV4dFBvc2l0aW9uO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB0YXJnZXQgYXQgZ2l2ZW4gcG9zaXRpb24sIGlmIGRlZmluZWQuXG4gKlxuICogVGhpcyB0YWtlcyBjb25uZWN0ZWQgZWxlbWVudHMgZnJvbSBob3N0IGFuZCBhdHRhY2hlcnNcbiAqIGludG8gYWNjb3VudCwgdG9vLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkQXRQb3NpdGlvbihzb3VyY2UsIHBvc2l0aW9uLCBlbGVtZW50KSB7XG5cbiAgdmFyIGJvdW5kcyA9IHtcbiAgICB4OiBwb3NpdGlvbi54IC0gKGVsZW1lbnQud2lkdGggLyAyKSxcbiAgICB5OiBwb3NpdGlvbi55IC0gKGVsZW1lbnQuaGVpZ2h0IC8gMiksXG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9O1xuXG4gIHZhciBjbG9zdXJlID0gZ2V0QXV0b1BsYWNlQ2xvc3VyZShzb3VyY2UsIGVsZW1lbnQpO1xuXG4gIHJldHVybiBmaW5kKGNsb3N1cmUsIGZ1bmN0aW9uKHRhcmdldCkge1xuXG4gICAgaWYgKHRhcmdldCA9PT0gZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHRhcmdldCwgYm91bmRzLCBQTEFDRU1FTlRfREVURUNUSU9OX1BBRCk7XG5cbiAgICByZXR1cm4gb3JpZW50YXRpb24gPT09ICdpbnRlcnNlY3QnO1xuICB9KTtcbn1cblxuLyoqXG4qIENvbXB1dGUgb3B0aW1hbCBkaXN0YW5jZSBiZXR3ZWVuIHNvdXJjZSBhbmQgdGFyZ2V0IGJhc2VkIG9uIGV4aXN0aW5nIGNvbm5lY3Rpb25zIHRvIGFuZCBmcm9tIHNvdXJjZS5cbiogQXNzdW1lcyBsZWZ0LXRvLXJpZ2h0IGFuZCB0b3AtdG8tZG93biBtb2RlbGluZy5cbipcbiogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuKiBAcGFyYW0ge251bWJlcn0gW2hpbnRzLmRlZmF1bHREaXN0YW5jZV1cbiogQHBhcmFtIHtzdHJpbmd9IFtoaW50cy5kaXJlY3Rpb25dXG4qIEBwYXJhbSB7RnVuY3Rpb259IFtoaW50cy5maWx0ZXJdXG4qIEBwYXJhbSB7RnVuY3Rpb259IFtoaW50cy5nZXRXZWlnaHRdXG4qIEBwYXJhbSB7bnVtYmVyfSBbaGludHMubWF4RGlzdGFuY2VdXG4qIEBwYXJhbSB7c3RyaW5nfSBbaGludHMucmVmZXJlbmNlXVxuKlxuKiBAcmV0dXJuIHtudW1iZXJ9XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3RlZERpc3RhbmNlKHNvdXJjZSwgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICAvLyB0YXJnZXRzID4gc291cmNlcyBieSBkZWZhdWx0XG4gIGZ1bmN0aW9uIGdldERlZmF1bHRXZWlnaHQoY29ubmVjdGlvbikge1xuICAgIHJldHVybiBjb25uZWN0aW9uLnNvdXJjZSA9PT0gc291cmNlID8gMSA6IC0xO1xuICB9XG5cbiAgdmFyIGRlZmF1bHREaXN0YW5jZSA9IGhpbnRzLmRlZmF1bHREaXN0YW5jZSB8fCBERUZBVUxUX0RJU1RBTkNFLFxuICAgICAgZGlyZWN0aW9uID0gaGludHMuZGlyZWN0aW9uIHx8ICdlJyxcbiAgICAgIGZpbHRlciA9IGhpbnRzLmZpbHRlcixcbiAgICAgIGdldFdlaWdodCA9IGhpbnRzLmdldFdlaWdodCB8fCBnZXREZWZhdWx0V2VpZ2h0LFxuICAgICAgbWF4RGlzdGFuY2UgPSBoaW50cy5tYXhEaXN0YW5jZSB8fCBERUZBVUxUX01BWF9ESVNUQU5DRSxcbiAgICAgIHJlZmVyZW5jZSA9IGhpbnRzLnJlZmVyZW5jZSB8fCAnc3RhcnQnO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgZmlsdGVyID0gbm9uZUZpbHRlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgIGlmIChyZWZlcmVuY2UgPT09ICdzdGFydCcpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChhKS50b3AgLSBhc1RSQkwoYikuYm90dG9tO1xuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYSkudG9wIC0gZ2V0TWlkKGIpLnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLnRvcCAtIGFzVFJCTChiKS50b3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgICAgaWYgKHJlZmVyZW5jZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLmxlZnQgLSBhc1RSQkwoYikucmlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChhKS5sZWZ0IC0gZ2V0TWlkKGIpLng7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLmxlZnQgLSBhc1RSQkwoYikubGVmdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3MnKSB7XG4gICAgICBpZiAocmVmZXJlbmNlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYikudG9wIC0gYXNUUkJMKGEpLmJvdHRvbTtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gZ2V0TWlkKGIpLnkgLSBhc1RSQkwoYSkuYm90dG9tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChiKS5ib3R0b20gLSBhc1RSQkwoYSkuYm90dG9tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVmZXJlbmNlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYikubGVmdCAtIGFzVFJCTChhKS5yaWdodDtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gZ2V0TWlkKGIpLnggLSBhc1RSQkwoYSkucmlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGIpLnJpZ2h0IC0gYXNUUkJMKGEpLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VzRGlzdGFuY2VzID0gc291cmNlLmluY29taW5nXG4gICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgLm1hcChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgd2VpZ2h0ID0gZ2V0V2VpZ2h0KGNvbm5lY3Rpb24pO1xuXG4gICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHQgPCAwXG4gICAgICAgID8gZ2V0RGlzdGFuY2UoY29ubmVjdGlvbi5zb3VyY2UsIHNvdXJjZSlcbiAgICAgICAgOiBnZXREaXN0YW5jZShzb3VyY2UsIGNvbm5lY3Rpb24uc291cmNlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbm5lY3Rpb24uc291cmNlLmlkLFxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gIHZhciB0YXJnZXRzRGlzdGFuY2VzID0gc291cmNlLm91dGdvaW5nXG4gICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgLm1hcChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgd2VpZ2h0ID0gZ2V0V2VpZ2h0KGNvbm5lY3Rpb24pO1xuXG4gICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHQgPiAwXG4gICAgICAgID8gZ2V0RGlzdGFuY2Uoc291cmNlLCBjb25uZWN0aW9uLnRhcmdldClcbiAgICAgICAgOiBnZXREaXN0YW5jZShjb25uZWN0aW9uLnRhcmdldCwgc291cmNlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbm5lY3Rpb24udGFyZ2V0LmlkLFxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gIHZhciBkaXN0YW5jZXMgPSBzb3VyY2VzRGlzdGFuY2VzLmNvbmNhdCh0YXJnZXRzRGlzdGFuY2VzKS5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yWyBjdXJyZW50VmFsdWUuaWQgKyAnX193ZWlnaHRfJyArIGN1cnJlbnRWYWx1ZS53ZWlnaHQgXSA9IGN1cnJlbnRWYWx1ZTtcblxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwge30pO1xuXG4gIHZhciBkaXN0YW5jZXNHcm91cGVkID0gcmVkdWNlKGRpc3RhbmNlcywgZnVuY3Rpb24oYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkge1xuICAgIHZhciBkaXN0YW5jZSA9IGN1cnJlbnRWYWx1ZS5kaXN0YW5jZSxcbiAgICAgICAgd2VpZ2h0ID0gY3VycmVudFZhbHVlLndlaWdodDtcblxuICAgIGlmIChkaXN0YW5jZSA8IDAgfHwgZGlzdGFuY2UgPiBtYXhEaXN0YW5jZSkge1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIGlmICghYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSkge1xuICAgICAgYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSA9IDA7XG4gICAgfVxuXG4gICAgYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSArPSAxICogd2VpZ2h0O1xuXG4gICAgaWYgKCFhY2N1bXVsYXRvci5kaXN0YW5jZSB8fCBhY2N1bXVsYXRvclsgYWNjdW11bGF0b3IuZGlzdGFuY2UgXSA8IGFjY3VtdWxhdG9yWyBTdHJpbmcoZGlzdGFuY2UpIF0pIHtcbiAgICAgIGFjY3VtdWxhdG9yLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIGRpc3RhbmNlc0dyb3VwZWQuZGlzdGFuY2UgfHwgZGVmYXVsdERpc3RhbmNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbm5lY3RlZCBlbGVtZW50cyBhcm91bmQgdGhlIGdpdmVuIHNvdXJjZS5cbiAqXG4gKiBUaGlzIGluY2x1ZGVzOlxuICpcbiAqICAgLSBjb25uZWN0ZWQgZWxlbWVudHNcbiAqICAgLSBob3N0IGNvbm5lY3RlZCBlbGVtZW50c1xuICogICAtIGF0dGFjaGVycyBjb25uZWN0ZWQgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59XG4gKi9cbmZ1bmN0aW9uIGdldEF1dG9QbGFjZUNsb3N1cmUoc291cmNlKSB7XG5cbiAgdmFyIGFsbENvbm5lY3RlZCA9IGdldENvbm5lY3RlZChzb3VyY2UpO1xuXG4gIGlmIChzb3VyY2UuaG9zdCkge1xuICAgIGFsbENvbm5lY3RlZCA9IGFsbENvbm5lY3RlZC5jb25jYXQoZ2V0Q29ubmVjdGVkKHNvdXJjZS5ob3N0KSk7XG4gIH1cblxuICBpZiAoc291cmNlLmF0dGFjaGVycykge1xuICAgIGFsbENvbm5lY3RlZCA9IGFsbENvbm5lY3RlZC5jb25jYXQoc291cmNlLmF0dGFjaGVycy5yZWR1Y2UoZnVuY3Rpb24oc2hhcGVzLCBhdHRhY2hlcikge1xuICAgICAgcmV0dXJuIHNoYXBlcy5jb25jYXQoZ2V0Q29ubmVjdGVkKGF0dGFjaGVyKSk7XG4gICAgfSwgW10pKTtcbiAgfVxuXG4gIHJldHVybiBhbGxDb25uZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3RlZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRUYXJnZXRzKGVsZW1lbnQpLmNvbmNhdChnZXRTb3VyY2VzKGVsZW1lbnQpKTtcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlcyhzaGFwZSkge1xuICByZXR1cm4gc2hhcGUuaW5jb21pbmcubWFwKGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gY29ubmVjdGlvbi5zb3VyY2U7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRzKHNoYXBlKSB7XG4gIHJldHVybiBzaGFwZS5vdXRnb2luZy5tYXAoZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHJldHVybiBjb25uZWN0aW9uLnRhcmdldDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vbmVGaWx0ZXIoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IEF1dG9QbGFjZSBmcm9tICcuL0F1dG9QbGFjZSc7XG5pbXBvcnQgQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9BdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2F1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yJyBdLFxuICBhdXRvUGxhY2U6IFsgJ3R5cGUnLCBBdXRvUGxhY2UgXSxcbiAgYXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBBdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvciBdXG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGdldEJCb3ggYXMgZ2V0Qm91bmRpbmdCb3ggfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBhc0JvdW5kc1xufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmxhdHRlbixcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgZ3JvdXBCeSxcbiAgaXNBcnJheSxcbiAgbWF0Y2hQYXR0ZXJuLFxuICBwaWNrLFxuICB2YWx1ZXNcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG4vKipcbiAqIEFuIGF1dG8gcmVzaXplIGNvbXBvbmVudCB0aGF0IHRha2VzIGNhcmUgb2YgZXhwYW5kaW5nIGEgcGFyZW50IGVsZW1lbnRcbiAqIGlmIGNoaWxkIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG9yIG1vdmVkIGNsb3NlIHRoZSBwYXJlbnRzIGVkZ2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvUmVzaXplKGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIG1vZGVsaW5nLCBydWxlcykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLmNyZWF0ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCB8fCBjb250ZXh0Lm5ld1BhcmVudDtcblxuICAgIGlmIChoaW50cy5hdXRvUmVzaXplID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX2V4cGFuZChbIHNoYXBlIF0sIHBhcmVudCk7XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ2VsZW1lbnRzLm1vdmUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGZsYXR0ZW4odmFsdWVzKGNvbnRleHQuY2xvc3VyZS50b3BMZXZlbCkpLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHM7XG5cbiAgICB2YXIgYXV0b1Jlc2l6ZSA9IGhpbnRzID8gaGludHMuYXV0b1Jlc2l6ZSA6IHRydWU7XG5cbiAgICBpZiAoYXV0b1Jlc2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kaW5ncyA9IGdyb3VwQnkoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5pZDtcbiAgICB9KTtcblxuICAgIGZvckVhY2goZXhwYW5kaW5ncywgZnVuY3Rpb24oZWxlbWVudHMsIHBhcmVudElkKSB7XG5cbiAgICAgIC8vIG9wdGlvbmFsbHkgZmlsdGVyIGVsZW1lbnRzIHRvIGJlIGNvbnNpZGVyZWQgd2hlbiByZXNpemluZ1xuICAgICAgaWYgKGlzQXJyYXkoYXV0b1Jlc2l6ZSkpIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBmaW5kKGF1dG9SZXNpemUsIG1hdGNoUGF0dGVybih7IGlkOiBlbGVtZW50LmlkIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX2V4cGFuZChlbGVtZW50cywgcGFyZW50SWQpO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS50b2dnbGVDb2xsYXBzZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGhpbnRzICYmIGhpbnRzLmF1dG9SZXNpemUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlLmNvbGxhcHNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX2V4cGFuZChzaGFwZS5jaGlsZHJlbiB8fCBbXSwgc2hhcGUpO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS5yZXNpemUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xuXG4gICAgaWYgKGhpbnRzICYmIGhpbnRzLmF1dG9SZXNpemUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgc2VsZi5fZXhwYW5kKFsgc2hhcGUgXSwgcGFyZW50KTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkF1dG9SZXNpemUuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdtb2RlbGluZycsXG4gICdydWxlcydcbl07XG5cbmluaGVyaXRzKEF1dG9SZXNpemUsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5ldyBib3VuZHMgb2YgdGhlIHRhcmdldCBzaGFwZSwgZ2l2ZW5cbiAqIGEgbnVtYmVyIG9mIGVsZW1lbnRzIGhhdmUgYmVlbiBtb3ZlZCBvciBhZGRlZCBpbnRvIHRoZSBwYXJlbnQuXG4gKlxuICogVGhpcyBtZXRob2QgY29uc2lkZXJzIHRoZSBjdXJyZW50IHNpemUsIHRoZSBhZGRlZCBlbGVtZW50cyBhcyB3ZWxsIGFzXG4gKiB0aGUgcHJvdmlkZWQgcGFkZGluZyBmb3IgdGhlIG5ldyBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHRhcmdldFxuICovXG5BdXRvUmVzaXplLnByb3RvdHlwZS5fZ2V0T3B0aW1hbEJvdW5kcyA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcblxuICB2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXQodGFyZ2V0KSxcbiAgICAgIHBhZGRpbmcgPSB0aGlzLmdldFBhZGRpbmcodGFyZ2V0KTtcblxuICB2YXIgZWxlbWVudHNUcmJsID0gYXNUUkJMKGdldEJvdW5kaW5nQm94KGVsZW1lbnRzKSksXG4gICAgICB0YXJnZXRUcmJsID0gYXNUUkJMKHRhcmdldCk7XG5cbiAgdmFyIG5ld1RyYmwgPSB7fTtcblxuICBpZiAoZWxlbWVudHNUcmJsLnRvcCAtIHRhcmdldFRyYmwudG9wIDwgcGFkZGluZy50b3ApIHtcbiAgICBuZXdUcmJsLnRvcCA9IGVsZW1lbnRzVHJibC50b3AgLSBvZmZzZXQudG9wO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRzVHJibC5sZWZ0IC0gdGFyZ2V0VHJibC5sZWZ0IDwgcGFkZGluZy5sZWZ0KSB7XG4gICAgbmV3VHJibC5sZWZ0ID0gZWxlbWVudHNUcmJsLmxlZnQgLSBvZmZzZXQubGVmdDtcbiAgfVxuXG4gIGlmICh0YXJnZXRUcmJsLnJpZ2h0IC0gZWxlbWVudHNUcmJsLnJpZ2h0IDwgcGFkZGluZy5yaWdodCkge1xuICAgIG5ld1RyYmwucmlnaHQgPSBlbGVtZW50c1RyYmwucmlnaHQgKyBvZmZzZXQucmlnaHQ7XG4gIH1cblxuICBpZiAodGFyZ2V0VHJibC5ib3R0b20gLSBlbGVtZW50c1RyYmwuYm90dG9tIDwgcGFkZGluZy5ib3R0b20pIHtcbiAgICBuZXdUcmJsLmJvdHRvbSA9IGVsZW1lbnRzVHJibC5ib3R0b20gKyBvZmZzZXQuYm90dG9tO1xuICB9XG5cbiAgcmV0dXJuIGFzQm91bmRzKGFzc2lnbih7fSwgdGFyZ2V0VHJibCwgbmV3VHJibCkpO1xufTtcblxuXG4vKipcbiAqIEV4cGFuZCB0aGUgdGFyZ2V0IHNoYXBlIHJlc3BlY3RpbmcgcnVsZXMsIG9mZnNldCBhbmQgcGFkZGluZ1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfHN0cmluZ30gdGFyZ2V0fHRhcmdldElkXG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbihlbGVtZW50cywgdGFyZ2V0KSB7XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgdGFyZ2V0ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldCh0YXJnZXQpO1xuICB9XG5cbiAgdmFyIGFsbG93ZWQgPSB0aGlzLl9ydWxlcy5hbGxvd2VkKCdlbGVtZW50LmF1dG9SZXNpemUnLCB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgIHRhcmdldDogdGFyZ2V0XG4gIH0pO1xuXG4gIGlmICghYWxsb3dlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgbmV3IGJvdW5kc1xuICB2YXIgbmV3Qm91bmRzID0gdGhpcy5fZ2V0T3B0aW1hbEJvdW5kcyhlbGVtZW50cywgdGFyZ2V0KTtcblxuICBpZiAoIWJvdW5kc0NoYW5nZWQobmV3Qm91bmRzLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHJlc2l6ZURpcmVjdGlvbnMgPSBnZXRSZXNpemVEaXJlY3Rpb25zKHBpY2sodGFyZ2V0LCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdKSwgbmV3Qm91bmRzKTtcblxuICAvLyByZXNpemUgdGhlIHBhcmVudCBzaGFwZVxuICB0aGlzLnJlc2l6ZSh0YXJnZXQsIG5ld0JvdW5kcywge1xuICAgIGF1dG9SZXNpemU6IHJlc2l6ZURpcmVjdGlvbnNcbiAgfSk7XG5cbiAgdmFyIHBhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG5cbiAgLy8gcmVjdXJzaXZlbHkgZXhwYW5kIHBhcmVudCBlbGVtZW50c1xuICBpZiAocGFyZW50KSB7XG4gICAgdGhpcy5fZXhwYW5kKFsgdGFyZ2V0IF0sIHBhcmVudCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBHZXQgdGhlIGFtb3VudCB0byBleHBhbmQgdGhlIGdpdmVuIHNoYXBlIGluIGVhY2ggZGlyZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge1RSQkx9XG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLmdldE9mZnNldCA9IGZ1bmN0aW9uKHNoYXBlKSB7XG4gIHJldHVybiB7IHRvcDogNjAsIGJvdHRvbTogNjAsIGxlZnQ6IDEwMCwgcmlnaHQ6IDEwMCB9O1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgYWN0aXZhdGlvbiB0aHJlc2hvbGQgZm9yIGVhY2ggc2lkZSBmb3Igd2hpY2hcbiAqIHJlc2l6ZSB0cmlnZ2Vycy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtUUkJMfVxuICovXG5BdXRvUmVzaXplLnByb3RvdHlwZS5nZXRQYWRkaW5nID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHsgdG9wOiAyLCBib3R0b206IDIsIGxlZnQ6IDE1LCByaWdodDogMTUgfTtcbn07XG5cblxuLyoqXG4gKiBQZXJmb3JtIHRoZSBhY3R1YWwgcmVzaXplIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge3N0cmluZ30gW2hpbnRzLmF1dG9SZXNpemVdXG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMsIGhpbnRzKSB7XG4gIHRoaXMuX21vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbn07XG5cblxuZnVuY3Rpb24gYm91bmRzQ2hhbmdlZChuZXdCb3VuZHMsIG9sZEJvdW5kcykge1xuICByZXR1cm4gKFxuICAgIG5ld0JvdW5kcy54ICE9PSBvbGRCb3VuZHMueCB8fFxuICAgIG5ld0JvdW5kcy55ICE9PSBvbGRCb3VuZHMueSB8fFxuICAgIG5ld0JvdW5kcy53aWR0aCAhPT0gb2xkQm91bmRzLndpZHRoIHx8XG4gICAgbmV3Qm91bmRzLmhlaWdodCAhPT0gb2xkQm91bmRzLmhlaWdodFxuICApO1xufVxuXG4vKipcbiAqIEdldCBkaXJlY3Rpb25zIG9mIHJlc2l6ZSBhcyB7bnx3fHN8ZX0gZS5nLiBcIm53XCIuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJlc2l6ZSBkaXJlY3Rpb25zIGFzIHtufHd8c3xlfS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVzaXplRGlyZWN0aW9ucyhvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICB2YXIgZGlyZWN0aW9ucyA9ICcnO1xuXG4gIG9sZEJvdW5kcyA9IGFzVFJCTChvbGRCb3VuZHMpO1xuICBuZXdCb3VuZHMgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICBpZiAob2xkQm91bmRzLnRvcCA+IG5ld0JvdW5kcy50b3ApIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ24nKTtcbiAgfVxuXG4gIGlmIChvbGRCb3VuZHMucmlnaHQgPCBuZXdCb3VuZHMucmlnaHQpIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ3cnKTtcbiAgfVxuXG4gIGlmIChvbGRCb3VuZHMuYm90dG9tIDwgbmV3Qm91bmRzLmJvdHRvbSkge1xuICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLmNvbmNhdCgncycpO1xuICB9XG5cbiAgaWYgKG9sZEJvdW5kcy5sZWZ0ID4gbmV3Qm91bmRzLmxlZnQpIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ2UnKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3Rpb25zO1xufSIsImltcG9ydCBSdWxlUHJvdmlkZXIgZnJvbSAnLi4vcnVsZXMvUnVsZVByb3ZpZGVyJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuLyoqXG4gKiBUaGlzIGlzIGEgYmFzZSBydWxlIHByb3ZpZGVyIGZvciB0aGUgZWxlbWVudC5hdXRvUmVzaXplIHJ1bGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9SZXNpemVQcm92aWRlcihldmVudEJ1cykge1xuXG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50LmF1dG9SZXNpemUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIHNlbGYuY2FuUmVzaXplKGNvbnRleHQuZWxlbWVudHMsIGNvbnRleHQudGFyZ2V0KTtcbiAgfSk7XG59XG5cbkF1dG9SZXNpemVQcm92aWRlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmluaGVyaXRzKEF1dG9SZXNpemVQcm92aWRlciwgUnVsZVByb3ZpZGVyKTtcblxuLyoqXG4gKiBOZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWIgY2xhc3NlcyB0byBhbGxvdyBhY3R1YWwgYXV0byByZXNpemVcbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5BdXRvUmVzaXplUHJvdmlkZXIucHJvdG90eXBlLmNhblJlc2l6ZSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTsiLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cblxuLyoqXG4gKiBJbml0aWF0ZXMgY2FudmFzIHNjcm9sbGluZyBpZiBjdXJyZW50IGN1cnNvciBwb2ludCBpcyBjbG9zZSB0byBhIGJvcmRlci5cbiAqIENhbmNlbGxlZCB3aGVuIGN1cnJlbnQgcG9pbnQgbW92ZXMgYmFjayBpbnNpZGUgdGhlIHNjcm9sbGluZyBib3JkZXJzXG4gKiBvciBjYW5jZWxsZWQgbWFudWFsbHkuXG4gKlxuICogRGVmYXVsdCBvcHRpb25zIDpcbiAqICAgc2Nyb2xsVGhyZXNob2xkSW46IFsgMjAsIDIwLCAyMCwgMjAgXSxcbiAqICAgc2Nyb2xsVGhyZXNob2xkT3V0OiBbIDAsIDAsIDAsIDAgXSxcbiAqICAgc2Nyb2xsUmVwZWF0VGltZW91dDogMTUsXG4gKiAgIHNjcm9sbFN0ZXA6IDEwXG4gKlxuICogVGhyZXNob2xkIG9yZGVyOlxuICogICBbIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSBdXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9TY3JvbGwoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHRoaXMuX29wdHMgPSBhc3NpZ24oe1xuICAgIHNjcm9sbFRocmVzaG9sZEluOiBbIDIwLCAyMCwgMjAsIDIwIF0sXG4gICAgc2Nyb2xsVGhyZXNob2xkT3V0OiBbIDAsIDAsIDAsIDAgXSxcbiAgICBzY3JvbGxSZXBlYXRUaW1lb3V0OiAxNSxcbiAgICBzY3JvbGxTdGVwOiAxMFxuICB9LCBjb25maWcpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignZHJhZy5tb3ZlJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBwb2ludCA9IHNlbGYuX3RvQm9yZGVyUG9pbnQoZSk7XG5cbiAgICBzZWxmLnN0YXJ0U2Nyb2xsKHBvaW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZHJhZy5jbGVhbnVwJyBdLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnN0b3BTY3JvbGwoKTtcbiAgfSk7XG59XG5cbkF1dG9TY3JvbGwuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5hdXRvU2Nyb2xsJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07XG5cblxuLyoqXG4gKiBTdGFydHMgc2Nyb2xsaW5nIGxvb3AuXG4gKiBQb2ludCBpcyBnaXZlbiBpbiBnbG9iYWwgc2NhbGUgaW4gY2FudmFzIGNvbnRhaW5lciBib3ggcGxhbmUuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBwb2ludCB7IHg6IFgsIHk6IFkgfVxuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zdGFydFNjcm9sbCA9IGZ1bmN0aW9uKHBvaW50KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcbiAgdmFyIG9wdHMgPSB0aGlzLl9vcHRzO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBjYW52YXMuZ2V0Q29udGFpbmVyKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgdmFyIGRpZmYgPSBbXG4gICAgcG9pbnQueCxcbiAgICBwb2ludC55LFxuICAgIGNsaWVudFJlY3Qud2lkdGggLSBwb2ludC54LFxuICAgIGNsaWVudFJlY3QuaGVpZ2h0IC0gcG9pbnQueVxuICBdO1xuXG4gIHRoaXMuc3RvcFNjcm9sbCgpO1xuXG4gIHZhciBkeCA9IDAsXG4gICAgICBkeSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBpZiAoYmV0d2VlbihkaWZmW2ldLCBvcHRzLnNjcm9sbFRocmVzaG9sZE91dFtpXSwgb3B0cy5zY3JvbGxUaHJlc2hvbGRJbltpXSkpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGR4ID0gb3B0cy5zY3JvbGxTdGVwO1xuICAgICAgfSBlbHNlIGlmIChpID09IDEpIHtcbiAgICAgICAgZHkgPSBvcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gMikge1xuICAgICAgICBkeCA9IC1vcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gMykge1xuICAgICAgICBkeSA9IC1vcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGR4ICE9PSAwIHx8IGR5ICE9PSAwKSB7XG4gICAgY2FudmFzLnNjcm9sbCh7IGR4OiBkeCwgZHk6IGR5IH0pO1xuXG4gICAgdGhpcy5fc2Nyb2xsaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc3RhcnRTY3JvbGwocG9pbnQpO1xuICAgIH0sIG9wdHMuc2Nyb2xsUmVwZWF0VGltZW91dCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJldHdlZW4odmFsLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA8IHZhbCAmJiB2YWwgPCBlbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG4vKipcbiAqIFN0b3BzIHNjcm9sbGluZyBsb29wLlxuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zdG9wU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gIGNsZWFyVGltZW91dCh0aGlzLl9zY3JvbGxpbmcpO1xufTtcblxuXG4vKipcbiAqIE92ZXJyaWRlcyBkZWZhdWx0cyBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB0aGlzLl9vcHRzID0gYXNzaWduKHt9LCB0aGlzLl9vcHRzLCBvcHRpb25zKTtcbn07XG5cblxuLyoqXG4gKiBDb252ZXJ0cyBldmVudCB0byBhIHBvaW50IGluIGNhbnZhcyBjb250YWluZXIgcGxhbmUgaW4gZ2xvYmFsIHNjYWxlLlxuICpcbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbkF1dG9TY3JvbGwucHJvdG90eXBlLl90b0JvcmRlclBvaW50ID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSB0aGlzLl9jYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICB2YXIgZ2xvYmFsUG9zaXRpb24gPSB0b1BvaW50KGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuXG4gIHJldHVybiB7XG4gICAgeDogZ2xvYmFsUG9zaXRpb24ueCAtIGNsaWVudFJlY3QubGVmdCxcbiAgICB5OiBnbG9iYWxQb3NpdGlvbi55IC0gY2xpZW50UmVjdC50b3BcbiAgfTtcbn07IiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcblxuaW1wb3J0IEF1dG9TY3JvbGwgZnJvbSAnLi9BdXRvU2Nyb2xsJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gIF0sXG4gIF9faW5pdF9fOiBbICdhdXRvU2Nyb2xsJyBdLFxuICBhdXRvU2Nyb2xsOiBbICd0eXBlJywgQXV0b1Njcm9sbCBdXG59OyIsImltcG9ydCB7IGZpbHRlclJlZHVuZGFudFdheXBvaW50cyB9IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxudmFyIFJFQ09OTkVDVF9TVEFSVCA9ICdyZWNvbm5lY3RTdGFydCcsXG4gICAgUkVDT05ORUNUX0VORCA9ICdyZWNvbm5lY3RFbmQnLFxuICAgIFVQREFURV9XQVlQT0lOVFMgPSAndXBkYXRlV2F5cG9pbnRzJztcblxuXG4vKipcbiAqIE1vdmUgYmVuZHBvaW50cyB0aHJvdWdoIGRyYWcgYW5kIGRyb3AgdG8gYWRkL3JlbW92ZSBiZW5kcG9pbnRzIG9yIHJlY29ubmVjdCBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCZW5kcG9pbnRNb3ZlKGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzLCBkcmFnZ2luZywgcnVsZXMsIG1vZGVsaW5nKSB7XG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG5cbiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50LCBjb25uZWN0aW9uLCBiZW5kcG9pbnRJbmRleCwgaW5zZXJ0KSB7XG4gICAgdmFyIGdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhjb25uZWN0aW9uKSxcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgdHlwZTtcblxuICAgIGlmICghaW5zZXJ0ICYmIGJlbmRwb2ludEluZGV4ID09PSAwKSB7XG4gICAgICB0eXBlID0gUkVDT05ORUNUX1NUQVJUO1xuICAgIH0gZWxzZVxuICAgIGlmICghaW5zZXJ0ICYmIGJlbmRwb2ludEluZGV4ID09PSB3YXlwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgdHlwZSA9IFJFQ09OTkVDVF9FTkQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSBVUERBVEVfV0FZUE9JTlRTO1xuICAgIH1cblxuICAgIHZhciBjb21tYW5kID0gdHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUyA/ICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycgOiAnY29ubmVjdGlvbi5yZWNvbm5lY3QnO1xuXG4gICAgdmFyIGFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlOiB0YXJnZXQsXG4gICAgICAgIHRhcmdldDogc291cmNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkcmFnZ2luZy5pbml0KGV2ZW50LCAnYmVuZHBvaW50Lm1vdmUnLCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25HZng6IGdmeCxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWQsXG4gICAgICAgICAgYmVuZHBvaW50SW5kZXg6IGJlbmRwb2ludEluZGV4LFxuICAgICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgaW5zZXJ0OiBpbnNlcnQsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcixcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICAgIC8vIGNhY2hlIGhvdmVyIHN0YXRlXG4gICAgY29udGV4dC5ob3ZlciA9IGhvdmVyO1xuXG4gICAgdmFyIGFsbG93ZWQ7XG5cbiAgICBpZiAoIWhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbW1hbmQgPSB0eXBlID09PSBVUERBVEVfV0FZUE9JTlRTID8gJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyA6ICdjb25uZWN0aW9uLnJlY29ubmVjdCc7XG5cbiAgICBhbGxvd2VkID0gY29udGV4dC5hbGxvd2VkID0gcnVsZXMuYWxsb3dlZChjb21tYW5kLCB7XG4gICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgc291cmNlOiB0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQgPyBob3ZlciA6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgY29udGV4dC5zb3VyY2UgPSB0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQgPyBob3ZlciA6IHNvdXJjZTtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0O1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgICBhbGxvd2VkID0gY29udGV4dC5hbGxvd2VkID0gcnVsZXMuYWxsb3dlZChjb21tYW5kLCB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZTogdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0LFxuICAgICAgICB0YXJnZXQ6IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgY29udGV4dC5zb3VyY2UgPSB0eXBlID09PSBSRUNPTk5FQ1RfRU5EID8gaG92ZXIgOiB0YXJnZXQ7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnYmVuZHBvaW50Lm1vdmUub3V0JywgJ2JlbmRwb2ludC5tb3ZlLmNsZWFudXAnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xuXG4gICAgY29udGV4dC5ob3ZlciA9IG51bGw7XG4gICAgY29udGV4dC5zb3VyY2UgPSBudWxsO1xuICAgIGNvbnRleHQudGFyZ2V0ID0gbnVsbDtcblxuICAgIGNvbnRleHQuYWxsb3dlZCA9IGZhbHNlO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQsXG4gICAgICAgIGJlbmRwb2ludEluZGV4ID0gY29udGV4dC5iZW5kcG9pbnRJbmRleCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgaW5zZXJ0ID0gY29udGV4dC5pbnNlcnQsXG4gICAgICAgIG5ld1dheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKCksXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZSxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgLy8gZW5zdXJlIGludGVnZXIgdmFsdWVzIChpbXBvcnRhbnQgaWYgem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgIHZhciBkb2NraW5nID0ge1xuICAgICAgeDogcm91bmQoZXZlbnQueCksXG4gICAgICB5OiByb3VuZChldmVudC55KVxuICAgIH07XG5cbiAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUykge1xuICAgICAgaWYgKGluc2VydCkge1xuXG4gICAgICAgIC8vIGluc2VydCBuZXcgYmVuZHBvaW50XG4gICAgICAgIG5ld1dheXBvaW50cy5zcGxpY2UoYmVuZHBvaW50SW5kZXgsIDAsIGRvY2tpbmcpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBzd2FwIHByZXZpb3VzIHdheXBvaW50IHdpdGggbW92ZWQgb25lXG4gICAgICAgIG5ld1dheXBvaW50c1tiZW5kcG9pbnRJbmRleF0gPSBkb2NraW5nO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXNzIGhpbnRzIGFib3V0IGFjdHVhbCBtb3ZlZCBiZW5kcG9pbnRcbiAgICAgIC8vIHVzZWZ1bCBmb3IgY29ubmVjdGlvbi9sYWJlbCBsYXlvdXRcbiAgICAgIGhpbnRzLmJlbmRwb2ludE1vdmUgPSB7XG4gICAgICAgIGluc2VydDogaW5zZXJ0LFxuICAgICAgICBiZW5kcG9pbnRJbmRleDogYmVuZHBvaW50SW5kZXhcbiAgICAgIH07XG5cbiAgICAgIG5ld1dheXBvaW50cyA9IHRoaXMuY3JvcFdheXBvaW50cyhjb25uZWN0aW9uLCBuZXdXYXlwb2ludHMpO1xuXG4gICAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKG5ld1dheXBvaW50cyksIGhpbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCkge1xuICAgICAgICBoaW50cy5kb2NraW5nID0gJ3NvdXJjZSc7XG5cbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGhpbnRzLmRvY2tpbmcgPSAndGFyZ2V0JztcblxuICAgICAgICAgIGhpbnRzLm5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gUkVDT05ORUNUX0VORCkge1xuICAgICAgICBoaW50cy5kb2NraW5nID0gJ3RhcmdldCc7XG5cbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGhpbnRzLmRvY2tpbmcgPSAnc291cmNlJztcblxuICAgICAgICAgIGhpbnRzLm5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbW9kZWxpbmcucmVjb25uZWN0KGNvbm5lY3Rpb24sIHNvdXJjZSwgdGFyZ2V0LCBkb2NraW5nLCBoaW50cyk7XG4gICAgfVxuICB9LCB0aGlzKTtcbn1cblxuQmVuZHBvaW50TW92ZS4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuQmVuZHBvaW50TW92ZS5wcm90b3R5cGUuY3JvcFdheXBvaW50cyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cykge1xuICB2YXIgY29ubmVjdGlvbkRvY2tpbmcgPSB0aGlzLl9pbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25Eb2NraW5nJywgZmFsc2UpO1xuXG4gIGlmICghY29ubmVjdGlvbkRvY2tpbmcpIHtcbiAgICByZXR1cm4gbmV3V2F5cG9pbnRzO1xuICB9XG5cbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICBuZXdXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICBjb25uZWN0aW9uLndheXBvaW50cyA9IHdheXBvaW50cztcblxuICByZXR1cm4gbmV3V2F5cG9pbnRzO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmV2ZXJzZShjb250ZXh0KSB7XG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0LFxuICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICBpZiAodHlwZSA9PT0gUkVDT05ORUNUX1NUQVJUKSB7XG4gICAgcmV0dXJuIGhvdmVyICYmIHRhcmdldCAmJiBob3ZlciA9PT0gdGFyZ2V0ICYmIHNvdXJjZSAhPT0gdGFyZ2V0O1xuICB9XG5cbiAgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9FTkQpIHtcbiAgICByZXR1cm4gaG92ZXIgJiYgc291cmNlICYmIGhvdmVyID09PSBzb3VyY2UgJiYgc291cmNlICE9PSB0YXJnZXQ7XG4gIH1cbn0iLCJpbXBvcnQge1xuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgeyBhZGRCZW5kcG9pbnQgfSBmcm9tICcuL0JlbmRwb2ludFV0aWwnO1xuXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5pbXBvcnQgeyBpc1JldmVyc2UgfSBmcm9tICcuL0JlbmRwb2ludE1vdmUnO1xuXG52YXIgUkVDT05ORUNUX1NUQVJUID0gJ3JlY29ubmVjdFN0YXJ0JyxcbiAgICBSRUNPTk5FQ1RfRU5EID0gJ3JlY29ubmVjdEVuZCcsXG4gICAgVVBEQVRFX1dBWVBPSU5UUyA9ICd1cGRhdGVXYXlwb2ludHMnO1xuXG52YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snLFxuICAgIE1BUktFUl9DT05ORUNUX0hPVkVSID0gJ2Nvbm5lY3QtaG92ZXInLFxuICAgIE1BUktFUl9DT05ORUNUX1VQREFUSU5HID0gJ2Rqcy11cGRhdGluZycsXG4gICAgTUFSS0VSX0VMRU1FTlRfSElEREVOID0gJ2Rqcy1lbGVtZW50LWhpZGRlbic7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTEwMDtcblxuLyoqXG4gKiBQcmV2aWV3IGNvbm5lY3Rpb24gd2hpbGUgbW92aW5nIGJlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludE1vdmVQcmV2aWV3KGJlbmRwb2ludE1vdmUsIGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzKSB7XG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG5cbiAgdmFyIGNvbm5lY3Rpb25QcmV2aWV3ID0gaW5qZWN0b3IuZ2V0KCdjb25uZWN0aW9uUHJldmlldycsIGZhbHNlKTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBjb250ZXh0LmJlbmRwb2ludEluZGV4LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBpbnNlcnQgPSBjb250ZXh0Lmluc2VydCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIG5ld1dheXBvaW50cyA9IHdheXBvaW50cy5zbGljZSgpO1xuXG4gICAgY29udGV4dC53YXlwb2ludHMgPSB3YXlwb2ludHM7XG5cbiAgICBpZiAoaW5zZXJ0KSB7XG5cbiAgICAgIC8vIGluc2VydCBwbGFjZWhvbGRlciBmb3IgbmV3IGJlbmRwb2ludFxuICAgICAgbmV3V2F5cG9pbnRzLnNwbGljZShiZW5kcG9pbnRJbmRleCwgMCwgeyB4OiBldmVudC54LCB5OiBldmVudC55IH0pO1xuICAgIH1cblxuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gICAgLy8gYWRkIGRyYWdnZXIgZ2Z4XG4gICAgdmFyIGRyYWdnZXJHZnggPSBjb250ZXh0LmRyYWdnZXJHZnggPSBhZGRCZW5kcG9pbnQoY2FudmFzLmdldExheWVyKCdvdmVybGF5cycpKTtcblxuICAgIHN2Z0NsYXNzZXMoZHJhZ2dlckdmeCkuYWRkKCdkanMtZHJhZ2dpbmcnKTtcblxuICAgIGNhbnZhcy5hZGRNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0VMRU1FTlRfSElEREVOKTtcbiAgICBjYW52YXMuYWRkTWFya2VyKGNvbm5lY3Rpb24sIE1BUktFUl9DT05ORUNUX1VQREFUSU5HKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihob3ZlciwgTUFSS0VSX0NPTk5FQ1RfSE9WRVIpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9OT1RfT0spO1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBNQVJLRVJfTk9UX09LKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYmVuZHBvaW50Lm1vdmUub3V0JyxcbiAgICAnYmVuZHBvaW50Lm1vdmUuY2xlYW51cCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIHRhcmdldCA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsb3dlZCA9IGNvbnRleHQuYWxsb3dlZCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBjb250ZXh0LmJlbmRwb2ludEluZGV4LFxuICAgICAgICBkcmFnZ2VyR2Z4ID0gY29udGV4dC5kcmFnZ2VyR2Z4LFxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICAgIHR5cGUgPSBjb250ZXh0LnR5cGUsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKSxcbiAgICAgICAgYmVuZHBvaW50ID0geyB4OiBldmVudC54LCB5OiBldmVudC55IH0sXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cyA9IHt9O1xuXG4gICAgaWYgKGNvbm5lY3Rpb25QcmV2aWV3KSB7XG4gICAgICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0KSB7XG4gICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0ID0gaGludHMuY29ubmVjdGlvblN0YXJ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoaGludHMuY29ubmVjdGlvbkVuZCkge1xuICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQpIHtcbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCB8fCBiZW5kcG9pbnQ7XG5cbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnNvdXJjZSA9IHRhcmdldDtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnRhcmdldCA9IGhvdmVyIHx8IHNvdXJjZTtcblxuICAgICAgICAgIG5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5jb25uZWN0aW9uU3RhcnQgPSBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25TdGFydCB8fCBiZW5kcG9pbnQ7XG5cbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnNvdXJjZSA9IGhvdmVyIHx8IHNvdXJjZTtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfRU5EKSB7XG4gICAgICAgIGlmIChpc1JldmVyc2UoY29udGV4dCkpIHtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGJlbmRwb2ludDtcblxuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuc291cmNlID0gaG92ZXIgfHwgdGFyZ2V0O1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMudGFyZ2V0ID0gc291cmNlO1xuXG4gICAgICAgICAgbmV3V2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgPSBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgfHwgYmVuZHBvaW50O1xuXG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy50YXJnZXQgPSBob3ZlciB8fCB0YXJnZXQ7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5ub0Nyb3BwaW5nID0gdHJ1ZTtcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5ub0xheW91dCA9IHRydWU7XG4gICAgICAgIG5ld1dheXBvaW50c1sgYmVuZHBvaW50SW5kZXggXSA9IGJlbmRwb2ludDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IFVQREFURV9XQVlQT0lOVFMpIHtcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gYmVuZHBvaW50TW92ZS5jcm9wV2F5cG9pbnRzKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG4gICAgICB9XG5cbiAgICAgIGRyYXdQcmV2aWV3SGludHMud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gICAgICBjb25uZWN0aW9uUHJldmlldy5kcmF3UHJldmlldyhjb250ZXh0LCBhbGxvd2VkLCBkcmF3UHJldmlld0hpbnRzKTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZHJhZ2dlckdmeCwgZXZlbnQueCwgZXZlbnQueSk7XG4gIH0sIHRoaXMpO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYmVuZHBvaW50Lm1vdmUuZW5kJyxcbiAgICAnYmVuZHBvaW50Lm1vdmUuY2FuY2VsJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgZHJhZ2dlckdmeCA9IGNvbnRleHQuZHJhZ2dlckdmeCxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29udGV4dC53YXlwb2ludHM7XG5cbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHdheXBvaW50cztcblxuICAgIC8vIHJlbW92ZSBkcmFnZ2VyIGdmeFxuICAgIHN2Z1JlbW92ZShkcmFnZ2VyR2Z4KTtcblxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcpO1xuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0VMRU1FTlRfSElEREVOKTtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgTUFSS0VSX09LKTtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIHRhcmdldCA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgIH1cblxuICAgIGlmIChjb25uZWN0aW9uUHJldmlldykge1xuICAgICAgY29ubmVjdGlvblByZXZpZXcuY2xlYW5VcChjb250ZXh0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5CZW5kcG9pbnRNb3ZlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnYmVuZHBvaW50TW92ZScsXG4gICdpbmplY3RvcicsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dOyIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IHNldFNuYXBwZWQgfSBmcm9tICcuLi9zbmFwcGluZy9TbmFwVXRpbCc7XG5cbnZhciBhYnM9IE1hdGguYWJzLFxuICAgIHJvdW5kID0gTWF0aC5yb3VuZDtcblxudmFyIFRPTEVSQU5DRSA9IDEwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludFNuYXBwaW5nKGV2ZW50QnVzKSB7XG5cbiAgZnVuY3Rpb24gc25hcFRvKHZhbHVlcywgdmFsdWUpIHtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIHZhciBpID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkgaWYgKGFicyh2YWx1ZXNbaV0gLSB2YWx1ZSkgPD0gVE9MRVJBTkNFKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlcyA9ICt2YWx1ZXM7XG4gICAgICB2YXIgcmVtID0gdmFsdWUgJSB2YWx1ZXM7XG5cbiAgICAgIGlmIChyZW0gPCBUT0xFUkFOQ0UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIC0gcmVtO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtID4gdmFsdWVzIC0gVE9MRVJBTkNFKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAtIHJlbSArIHZhbHVlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBtaWQoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LndpZHRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiByb3VuZChlbGVtZW50LndpZHRoIC8gMiArIGVsZW1lbnQueCksXG4gICAgICAgIHk6IHJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMiArIGVsZW1lbnQueSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gY29ubmVjdGlvbiBzZWdtZW50IHNuYXBwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBnZXRDb25uZWN0aW9uU2VnbWVudFNuYXBzKGNvbnRleHQpIHtcblxuICAgIHZhciBzbmFwUG9pbnRzID0gY29udGV4dC5zbmFwUG9pbnRzLFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgc2VnbWVudFN0YXJ0ID0gY29udGV4dC5zZWdtZW50U3RhcnQsXG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5zZWdtZW50U3RhcnRJbmRleCxcbiAgICAgICAgc2VnbWVudEVuZCA9IGNvbnRleHQuc2VnbWVudEVuZCxcbiAgICAgICAgc2VnbWVudEVuZEluZGV4ID0gY29udGV4dC5zZWdtZW50RW5kSW5kZXgsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXM7XG5cbiAgICBpZiAoc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVdheXBvaW50cyA9IFtcbiAgICAgIHdheXBvaW50c1tzZWdtZW50U3RhcnRJbmRleCAtIDFdLFxuICAgICAgc2VnbWVudFN0YXJ0LFxuICAgICAgc2VnbWVudEVuZCxcbiAgICAgIHdheXBvaW50c1tzZWdtZW50RW5kSW5kZXggKyAxXVxuICAgIF07XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPCAyKSB7XG4gICAgICByZWZlcmVuY2VXYXlwb2ludHMudW5zaGlmdChtaWQoY29ubmVjdGlvbi5zb3VyY2UpKTtcbiAgICB9XG5cbiAgICBpZiAoc2VnbWVudEVuZEluZGV4ID4gd2F5cG9pbnRzLmxlbmd0aCAtIDMpIHtcbiAgICAgIHJlZmVyZW5jZVdheXBvaW50cy51bnNoaWZ0KG1pZChjb25uZWN0aW9uLnRhcmdldCkpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc25hcFBvaW50cyA9IHNuYXBQb2ludHMgPSB7IGhvcml6b250YWw6IFtdICwgdmVydGljYWw6IFtdIH07XG5cbiAgICBmb3JFYWNoKHJlZmVyZW5jZVdheXBvaW50cywgZnVuY3Rpb24ocCkge1xuXG4gICAgICAvLyB3ZSBzbmFwIG9uIGV4aXN0aW5nIGJlbmRwb2ludHMgb25seSxcbiAgICAgIC8vIG5vdCBwbGFjZWhvbGRlcnMgdGhhdCBhcmUgaW5zZXJ0ZWQgZHVyaW5nIGFkZFxuICAgICAgaWYgKHApIHtcbiAgICAgICAgcCA9IHAub3JpZ2luYWwgfHwgcDtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgICAgc25hcFBvaW50cy5ob3Jpem9udGFsLnB1c2gocC55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgICBzbmFwUG9pbnRzLnZlcnRpY2FsLnB1c2gocC54KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gIH1cblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5tb3ZlJywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNuYXBQb2ludHMgPSBnZXRDb25uZWN0aW9uU2VnbWVudFNuYXBzKGNvbnRleHQpLFxuICAgICAgICB4ID0gZXZlbnQueCxcbiAgICAgICAgeSA9IGV2ZW50LnksXG4gICAgICAgIHN4LCBzeTtcblxuICAgIGlmICghc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNuYXBcbiAgICBzeCA9IHNuYXBUbyhzbmFwUG9pbnRzLnZlcnRpY2FsLCB4KTtcbiAgICBzeSA9IHNuYXBUbyhzbmFwUG9pbnRzLmhvcml6b250YWwsIHkpO1xuXG5cbiAgICAvLyBjb3JyZWN0aW9uIHgveVxuICAgIHZhciBjeCA9ICh4IC0gc3gpLFxuICAgICAgICBjeSA9ICh5IC0gc3kpO1xuXG4gICAgLy8gdXBkYXRlIGRlbHRhXG4gICAgYXNzaWduKGV2ZW50LCB7XG4gICAgICBkeDogZXZlbnQuZHggLSBjeCxcbiAgICAgIGR5OiBldmVudC5keSAtIGN5LFxuICAgICAgeDogc3gsXG4gICAgICB5OiBzeVxuICAgIH0pO1xuXG4gICAgLy8gb25seSBzZXQgc25hcHBlZCBpZiBhY3R1YWxseSBzbmFwcGVkXG4gICAgaWYgKGN4IHx8IHNuYXBQb2ludHMudmVydGljYWwuaW5kZXhPZih4KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd4Jywgc3gpO1xuICAgIH1cblxuICAgIGlmIChjeSB8fCBzbmFwUG9pbnRzLmhvcml6b250YWwuaW5kZXhPZih5KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5Jywgc3kpO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBiZW5kcG9pbnQgc25hcHBpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGdldEJlbmRwb2ludFNuYXBzKGNvbnRleHQpIHtcblxuICAgIHZhciBzbmFwUG9pbnRzID0gY29udGV4dC5zbmFwUG9pbnRzLFxuICAgICAgICB3YXlwb2ludHMgPSBjb250ZXh0LmNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBiZW5kcG9pbnRJbmRleCA9IGNvbnRleHQuYmVuZHBvaW50SW5kZXg7XG5cbiAgICBpZiAoc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVdheXBvaW50cyA9IFsgd2F5cG9pbnRzW2JlbmRwb2ludEluZGV4IC0gMV0sIHdheXBvaW50c1tiZW5kcG9pbnRJbmRleCArIDFdIF07XG5cbiAgICBjb250ZXh0LnNuYXBQb2ludHMgPSBzbmFwUG9pbnRzID0geyBob3Jpem9udGFsOiBbXSAsIHZlcnRpY2FsOiBbXSB9O1xuXG4gICAgZm9yRWFjaChyZWZlcmVuY2VXYXlwb2ludHMsIGZ1bmN0aW9uKHApIHtcblxuICAgICAgLy8gd2Ugc25hcCBvbiBleGlzdGluZyBiZW5kcG9pbnRzIG9ubHksXG4gICAgICAvLyBub3QgcGxhY2Vob2xkZXJzIHRoYXQgYXJlIGluc2VydGVkIGR1cmluZyBhZGRcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHAgPSBwLm9yaWdpbmFsIHx8IHA7XG5cbiAgICAgICAgc25hcFBvaW50cy5ob3Jpem9udGFsLnB1c2gocC55KTtcbiAgICAgICAgc25hcFBvaW50cy52ZXJ0aWNhbC5wdXNoKHAueCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc25hcFBvaW50cztcbiAgfVxuXG5cbiAgZXZlbnRCdXMub24oWyAnYmVuZHBvaW50Lm1vdmUubW92ZScsICdiZW5kcG9pbnQubW92ZS5lbmQnIF0sIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNuYXBQb2ludHMgPSBnZXRCZW5kcG9pbnRTbmFwcyhjb250ZXh0KSxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICBob3Zlck1pZCA9IGhvdmVyICYmIG1pZChob3ZlciksXG4gICAgICAgIHggPSBldmVudC54LFxuICAgICAgICB5ID0gZXZlbnQueSxcbiAgICAgICAgc3gsIHN5O1xuXG4gICAgaWYgKCFzbmFwUG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc25hcCB0byBob3ZlciBtaWRcbiAgICBzeCA9IHNuYXBUbyhob3Zlck1pZCA/IHNuYXBQb2ludHMudmVydGljYWwuY29uY2F0KFsgaG92ZXJNaWQueCBdKSA6IHNuYXBQb2ludHMudmVydGljYWwsIHgpO1xuICAgIHN5ID0gc25hcFRvKGhvdmVyTWlkID8gc25hcFBvaW50cy5ob3Jpem9udGFsLmNvbmNhdChbIGhvdmVyTWlkLnkgXSkgOiBzbmFwUG9pbnRzLmhvcml6b250YWwsIHkpO1xuXG4gICAgLy8gY29ycmVjdGlvbiB4L3lcbiAgICB2YXIgY3ggPSAoeCAtIHN4KSxcbiAgICAgICAgY3kgPSAoeSAtIHN5KTtcblxuICAgIC8vIHVwZGF0ZSBkZWx0YVxuICAgIGFzc2lnbihldmVudCwge1xuICAgICAgZHg6IGV2ZW50LmR4IC0gY3gsXG4gICAgICBkeTogZXZlbnQuZHkgLSBjeSxcbiAgICAgIHg6IGV2ZW50LnggLSBjeCxcbiAgICAgIHk6IGV2ZW50LnkgLSBjeVxuICAgIH0pO1xuXG4gICAgLy8gb25seSBzZXQgc25hcHBlZCBpZiBhY3R1YWxseSBzbmFwcGVkXG4gICAgaWYgKGN4IHx8IHNuYXBQb2ludHMudmVydGljYWwuaW5kZXhPZih4KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd4Jywgc3gpO1xuICAgIH1cblxuICAgIGlmIChjeSB8fCBzbmFwUG9pbnRzLmhvcml6b250YWwuaW5kZXhPZih5KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5Jywgc3kpO1xuICAgIH1cbiAgfSk7XG59XG5cblxuQmVuZHBvaW50U25hcHBpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZFBvaW50LFxuICBwb2ludHNBbGlnbmVkXG59IGZyb20gJy4uLy4uL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHJvdGF0ZSxcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEFwcHJveEludGVyc2VjdGlvblxufSBmcm9tICcuLi8uLi91dGlsL0xpbmVJbnRlcnNlY3Rpb24nO1xuXG5leHBvcnQgdmFyIEJFTkRQT0lOVF9DTFMgPSAnZGpzLWJlbmRwb2ludCc7XG5leHBvcnQgdmFyIFNFR01FTlRfRFJBR0dFUl9DTFMgPSAnZGpzLXNlZ21lbnQtZHJhZ2dlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbnZhc0Nvb3JkaW5hdGVzKGNhbnZhcywgZXZlbnQpIHtcblxuICB2YXIgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KSxcbiAgICAgIGNsaWVudFJlY3QgPSBjYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIG9mZnNldDtcblxuICAvLyBjYW52YXMgcmVsYXRpdmUgcG9zaXRpb25cblxuICBvZmZzZXQgPSB7XG4gICAgeDogY2xpZW50UmVjdC5sZWZ0LFxuICAgIHk6IGNsaWVudFJlY3QudG9wXG4gIH07XG5cbiAgLy8gdXBkYXRlIGFjdHVhbCBldmVudCBwYXlsb2FkIHdpdGggY2FudmFzIHJlbGF0aXZlIG1lYXN1cmVzXG5cbiAgdmFyIHZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuXG4gIHJldHVybiB7XG4gICAgeDogdmlld2JveC54ICsgKHBvc2l0aW9uLnggLSBvZmZzZXQueCkgLyB2aWV3Ym94LnNjYWxlLFxuICAgIHk6IHZpZXdib3gueSArIChwb3NpdGlvbi55IC0gb2Zmc2V0LnkpIC8gdmlld2JveC5zY2FsZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbkludGVyc2VjdGlvbihjYW52YXMsIHdheXBvaW50cywgZXZlbnQpIHtcbiAgdmFyIGxvY2FsUG9zaXRpb24gPSB0b0NhbnZhc0Nvb3JkaW5hdGVzKGNhbnZhcywgZXZlbnQpLFxuICAgICAgaW50ZXJzZWN0aW9uID0gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgbG9jYWxQb3NpdGlvbik7XG5cbiAgcmV0dXJuIGludGVyc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJlbmRwb2ludChwYXJlbnRHZngsIGNscykge1xuICB2YXIgZ3JvdXBHZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cEdmeCkuYWRkKEJFTkRQT0lOVF9DTFMpO1xuXG4gIHN2Z0FwcGVuZChwYXJlbnRHZngsIGdyb3VwR2Z4KTtcblxuICB2YXIgdmlzdWFsID0gc3ZnQ3JlYXRlKCdjaXJjbGUnKTtcbiAgc3ZnQXR0cih2aXN1YWwsIHtcbiAgICBjeDogMCxcbiAgICBjeTogMCxcbiAgICByOiA0XG4gIH0pO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGdyb3VwR2Z4LCB2aXN1YWwpO1xuXG4gIHZhciBoaXQgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICBzdmdBdHRyKGhpdCwge1xuICAgIGN4OiAwLFxuICAgIGN5OiAwLFxuICAgIHI6IDEwXG4gIH0pO1xuICBzdmdDbGFzc2VzKGhpdCkuYWRkKCdkanMtaGl0Jyk7XG5cbiAgc3ZnQXBwZW5kKGdyb3VwR2Z4LCBoaXQpO1xuXG4gIGlmIChjbHMpIHtcbiAgICBzdmdDbGFzc2VzKGdyb3VwR2Z4KS5hZGQoY2xzKTtcbiAgfVxuXG4gIHJldHVybiBncm91cEdmeDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGFyYWxsZWxEcmFnZ2VyKHBhcmVudEdmeCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBhbGlnbm1lbnQpIHtcbiAgdmFyIGRyYWdnZXJHZnggPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdBcHBlbmQocGFyZW50R2Z4LCBkcmFnZ2VyR2Z4KTtcblxuICB2YXIgd2lkdGggPSAxNCxcbiAgICAgIGhlaWdodCA9IDMsXG4gICAgICBwYWRkaW5nID0gMTEsXG4gICAgICBoaXRXaWR0aCA9IGNhbGN1bGF0ZUhpdFdpZHRoKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgYWxpZ25tZW50KSxcbiAgICAgIGhpdEhlaWdodCA9IGhlaWdodCArIHBhZGRpbmc7XG5cbiAgdmFyIHZpc3VhbCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuICBzdmdBdHRyKHZpc3VhbCwge1xuICAgIHg6IC13aWR0aCAvIDIsXG4gICAgeTogLWhlaWdodCAvIDIsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH0pO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGRyYWdnZXJHZngsIHZpc3VhbCk7XG5cbiAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuICBzdmdBdHRyKGhpdCwge1xuICAgIHg6IC1oaXRXaWR0aCAvIDIsXG4gICAgeTogLWhpdEhlaWdodCAvIDIsXG4gICAgd2lkdGg6IGhpdFdpZHRoLFxuICAgIGhlaWdodDogaGl0SGVpZ2h0XG4gIH0pO1xuICBzdmdDbGFzc2VzKGhpdCkuYWRkKCdkanMtaGl0Jyk7XG5cbiAgc3ZnQXBwZW5kKGRyYWdnZXJHZngsIGhpdCk7XG5cbiAgcm90YXRlKGRyYWdnZXJHZngsIGFsaWdubWVudCA9PT0gJ3YnID8gOTAgOiAwLCAwLCAwKTtcblxuICByZXR1cm4gZHJhZ2dlckdmeDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudERyYWdnZXIocGFyZW50R2Z4LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpIHtcblxuICB2YXIgZ3JvdXBHZnggPSBzdmdDcmVhdGUoJ2cnKSxcbiAgICAgIG1pZCA9IGdldE1pZFBvaW50KHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCksXG4gICAgICBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgZ3JvdXBHZngpO1xuXG4gIGNyZWF0ZVBhcmFsbGVsRHJhZ2dlcihncm91cEdmeCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBhbGlnbm1lbnQpO1xuXG4gIHN2Z0NsYXNzZXMoZ3JvdXBHZngpLmFkZChTRUdNRU5UX0RSQUdHRVJfQ0xTKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cEdmeCkuYWRkKGFsaWdubWVudCA9PT0gJ2gnID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJyk7XG5cbiAgdHJhbnNsYXRlKGdyb3VwR2Z4LCBtaWQueCwgbWlkLnkpO1xuXG4gIHJldHVybiBncm91cEdmeDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHJlZ2lvbiBmb3Igc2VnbWVudCBtb3ZlIHdoaWNoIGlzIDIvMyBvZiB0aGUgZnVsbCBzZWdtZW50IGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRMZW5ndGhcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbihzZWdtZW50TGVuZ3RoKSB7XG4gIHJldHVybiBNYXRoLmFicyhNYXRoLnJvdW5kKHNlZ21lbnRMZW5ndGggKiAyIC8gMykpO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVIaXRXaWR0aChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGFsaWdubWVudCkge1xuICB2YXIgc2VnbWVudExlbmd0aFhBeGlzID0gc2VnbWVudEVuZC54IC0gc2VnbWVudFN0YXJ0LngsXG4gICAgICBzZWdtZW50TGVuZ3RoWUF4aXMgPSBzZWdtZW50RW5kLnkgLSBzZWdtZW50U3RhcnQueTtcblxuICByZXR1cm4gYWxpZ25tZW50ID09PSAnaCcgP1xuICAgIGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGhYQXhpcykgOlxuICAgIGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGhZQXhpcyk7XG59XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBCRU5EUE9JTlRfQ0xTLFxuICBTRUdNRU5UX0RSQUdHRVJfQ0xTLFxuICBhZGRCZW5kcG9pbnQsXG4gIGFkZFNlZ21lbnREcmFnZ2VyLFxuICBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbixcbiAgZ2V0Q29ubmVjdGlvbkludGVyc2VjdGlvblxufSBmcm9tICcuL0JlbmRwb2ludFV0aWwnO1xuXG5pbXBvcnQge1xuICBlc2NhcGVDU1Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9Fc2NhcGVVdGlsJztcblxuaW1wb3J0IHtcbiAgcG9pbnRzQWxpZ25lZCxcbiAgZ2V0TWlkUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBhZGRzIGVkaXRhYmxlIGJlbmRwb2ludHMgdG8gY29ubmVjdGlvbnMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludHMoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgaW50ZXJhY3Rpb25FdmVudHMsXG4gICAgYmVuZHBvaW50TW92ZSwgY29ubmVjdGlvblNlZ21lbnRNb3ZlKSB7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpbnRlcnNlY3Rpb24gcG9pbnQgaXMgaW5zaWRlIG1pZGRsZSByZWdpb24gb2Ygc2VnbWVudCwgYWRqdXN0ZWQgYnlcbiAgICogb3B0aW9uYWwgdGhyZXNob2xkXG4gICAqL1xuICBmdW5jdGlvbiBpc0ludGVyc2VjdGlvbk1pZGRsZShpbnRlcnNlY3Rpb24sIHdheXBvaW50cywgdHJlc2hvbGQpIHtcbiAgICB2YXIgaWR4ID0gaW50ZXJzZWN0aW9uLmluZGV4LFxuICAgICAgICBwID0gaW50ZXJzZWN0aW9uLnBvaW50LFxuICAgICAgICBwMCwgcDEsIG1pZCwgYWxpZ25lZCwgeERlbHRhLCB5RGVsdGE7XG5cbiAgICBpZiAoaWR4IDw9IDAgfHwgaW50ZXJzZWN0aW9uLmJlbmRwb2ludCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHAwID0gd2F5cG9pbnRzW2lkeCAtIDFdO1xuICAgIHAxID0gd2F5cG9pbnRzW2lkeF07XG4gICAgbWlkID0gZ2V0TWlkUG9pbnQocDAsIHAxKSxcbiAgICBhbGlnbmVkID0gcG9pbnRzQWxpZ25lZChwMCwgcDEpO1xuICAgIHhEZWx0YSA9IE1hdGguYWJzKHAueCAtIG1pZC54KTtcbiAgICB5RGVsdGEgPSBNYXRoLmFicyhwLnkgLSBtaWQueSk7XG5cbiAgICByZXR1cm4gYWxpZ25lZCAmJiB4RGVsdGEgPD0gdHJlc2hvbGQgJiYgeURlbHRhIDw9IHRyZXNob2xkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHRocmVzaG9sZCBmcm9tIGEgY29ubmVjdGlvbidzIG1pZGRsZSB3aGljaCBmaXRzIHRoZSB0d28tdGhpcmQtcmVnaW9uXG4gICAqL1xuICBmdW5jdGlvbiBjYWxjdWxhdGVJbnRlcnNlY3Rpb25UaHJlc2hvbGQoY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICByZWxldmFudFNlZ21lbnQsIGFsaWdubWVudCwgc2VnbWVudExlbmd0aCwgdGhyZXNob2xkO1xuXG4gICAgaWYgKGludGVyc2VjdGlvbi5pbmRleCA8PSAwIHx8IGludGVyc2VjdGlvbi5iZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHNlZ21lbnQgcmVsYXRpdmUgdG8gY29ubmVjdGlvbiBpbnRlcnNlY3Rpb25cbiAgICByZWxldmFudFNlZ21lbnQgPSB7XG4gICAgICBzdGFydDogd2F5cG9pbnRzW2ludGVyc2VjdGlvbi5pbmRleCAtIDFdLFxuICAgICAgZW5kOiB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XVxuICAgIH07XG5cbiAgICBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKHJlbGV2YW50U2VnbWVudC5zdGFydCwgcmVsZXZhbnRTZWdtZW50LmVuZCk7XG5cbiAgICBpZiAoIWFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFsaWdubWVudCA9PT0gJ2gnKSB7XG4gICAgICBzZWdtZW50TGVuZ3RoID0gcmVsZXZhbnRTZWdtZW50LmVuZC54IC0gcmVsZXZhbnRTZWdtZW50LnN0YXJ0Lng7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRMZW5ndGggPSByZWxldmFudFNlZ21lbnQuZW5kLnkgLSByZWxldmFudFNlZ21lbnQuc3RhcnQueTtcbiAgICB9XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhyZXNob2xkIHJlbGF0aXZlIHRvIDIvMyBvZiBzZWdtZW50IGxlbmd0aFxuICAgIHRocmVzaG9sZCA9IGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGgpIC8gMjtcblxuICAgIHJldHVybiB0aHJlc2hvbGQ7XG4gIH1cblxuICBmdW5jdGlvbiBhY3RpdmF0ZUJlbmRwb2ludE1vdmUoZXZlbnQsIGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIGludGVyc2VjdGlvbiA9IGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb24oY2FudmFzLCB3YXlwb2ludHMsIGV2ZW50KSxcbiAgICAgICAgdGhyZXNob2xkO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJlc2hvbGQgPSBjYWxjdWxhdGVJbnRlcnNlY3Rpb25UaHJlc2hvbGQoY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uKTtcblxuICAgIGlmIChpc0ludGVyc2VjdGlvbk1pZGRsZShpbnRlcnNlY3Rpb24sIHdheXBvaW50cywgdGhyZXNob2xkKSkge1xuICAgICAgY29ubmVjdGlvblNlZ21lbnRNb3ZlLnN0YXJ0KGV2ZW50LCBjb25uZWN0aW9uLCBpbnRlcnNlY3Rpb24uaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZW5kcG9pbnRNb3ZlLnN0YXJ0KGV2ZW50LCBjb25uZWN0aW9uLCBpbnRlcnNlY3Rpb24uaW5kZXgsICFpbnRlcnNlY3Rpb24uYmVuZHBvaW50KTtcbiAgICB9XG5cbiAgICAvLyB3ZSd2ZSBoYW5kbGVkIHRoZSBldmVudFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYmluZEludGVyYWN0aW9uRXZlbnRzKG5vZGUsIGV2ZW50TmFtZSwgZWxlbWVudCkge1xuXG4gICAgZG9tRXZlbnQuYmluZChub2RlLCBldmVudE5hbWUsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpbnRlcmFjdGlvbkV2ZW50cy50cmlnZ2VyTW91c2VFdmVudChldmVudE5hbWUsIGV2ZW50LCBlbGVtZW50KTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihlbGVtZW50LCBjcmVhdGUpIHtcblxuICAgIHZhciBsYXllciA9IGNhbnZhcy5nZXRMYXllcignb3ZlcmxheXMnKSxcbiAgICAgICAgZ2Z4ID0gZG9tUXVlcnkoJy5kanMtYmVuZHBvaW50c1tkYXRhLWVsZW1lbnQtaWQ9XCInICsgZXNjYXBlQ1NTKGVsZW1lbnQuaWQpICsgJ1wiXScsIGxheWVyKTtcblxuICAgIGlmICghZ2Z4ICYmIGNyZWF0ZSkge1xuICAgICAgZ2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG4gICAgICBzdmdBdHRyKGdmeCwgeyAnZGF0YS1lbGVtZW50LWlkJzogZWxlbWVudC5pZCB9KTtcbiAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQoJ2Rqcy1iZW5kcG9pbnRzJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChsYXllciwgZ2Z4KTtcblxuICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKGdmeCwgJ21vdXNlZG93bicsIGVsZW1lbnQpO1xuICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKGdmeCwgJ2NsaWNrJywgZWxlbWVudCk7XG4gICAgICBiaW5kSW50ZXJhY3Rpb25FdmVudHMoZ2Z4LCAnZGJsY2xpY2snLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2Z4O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VnbWVudERyYWdnZXIoaWR4LCBwYXJlbnRHZngpIHtcbiAgICByZXR1cm4gZG9tUXVlcnkoXG4gICAgICAnLmRqcy1zZWdtZW50LWRyYWdnZXJbZGF0YS1zZWdtZW50LWlkeD1cIicgKyBpZHggKyAnXCJdJyxcbiAgICAgIHBhcmVudEdmeFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCZW5kcG9pbnRzKGdmeCwgY29ubmVjdGlvbikge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XG4gICAgICB2YXIgYmVuZHBvaW50ID0gYWRkQmVuZHBvaW50KGdmeCk7XG5cbiAgICAgIHN2Z0FwcGVuZChnZngsIGJlbmRwb2ludCk7XG5cbiAgICAgIHRyYW5zbGF0ZShiZW5kcG9pbnQsIHAueCwgcC55KTtcbiAgICB9KTtcblxuICAgIC8vIGFkZCBmbG9hdGluZyBiZW5kcG9pbnRcbiAgICBhZGRCZW5kcG9pbnQoZ2Z4LCAnZmxvYXRpbmcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNlZ21lbnREcmFnZ2VycyhnZngsIGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICAgIHZhciBzZWdtZW50U3RhcnQsXG4gICAgICAgIHNlZ21lbnRFbmQsXG4gICAgICAgIHNlZ21lbnREcmFnZ2VyR2Z4O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YXlwb2ludHMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgc2VnbWVudFN0YXJ0ID0gd2F5cG9pbnRzW2kgLSAxXTtcbiAgICAgIHNlZ21lbnRFbmQgPSB3YXlwb2ludHNbaV07XG5cbiAgICAgIGlmIChwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkpIHtcbiAgICAgICAgc2VnbWVudERyYWdnZXJHZnggPSBhZGRTZWdtZW50RHJhZ2dlcihnZngsIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgICAgICAgc3ZnQXR0cihzZWdtZW50RHJhZ2dlckdmeCwgeyAnZGF0YS1zZWdtZW50LWlkeCc6IGkgfSk7XG5cbiAgICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKHNlZ21lbnREcmFnZ2VyR2Z4LCAnbW91c2Vtb3ZlJywgY29ubmVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJCZW5kcG9pbnRzKGdmeCkge1xuICAgIGZvckVhY2goZG9tUXVlcnlBbGwoJy4nICsgQkVORFBPSU5UX0NMUywgZ2Z4KSwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgc3ZnUmVtb3ZlKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJTZWdtZW50RHJhZ2dlcnMoZ2Z4KSB7XG4gICAgZm9yRWFjaChkb21RdWVyeUFsbCgnLicgKyBTRUdNRU5UX0RSQUdHRVJfQ0xTLCBnZngpLCBmdW5jdGlvbihub2RlKSB7XG4gICAgICBzdmdSZW1vdmUobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRIYW5kbGVzKGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciBnZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKCFnZngpIHtcbiAgICAgIGdmeCA9IGdldEJlbmRwb2ludHNDb250YWluZXIoY29ubmVjdGlvbiwgdHJ1ZSk7XG5cbiAgICAgIGNyZWF0ZUJlbmRwb2ludHMoZ2Z4LCBjb25uZWN0aW9uKTtcbiAgICAgIGNyZWF0ZVNlZ21lbnREcmFnZ2VycyhnZngsIGNvbm5lY3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBnZng7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVIYW5kbGVzKGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciBnZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGdmeCkge1xuICAgICAgY2xlYXJTZWdtZW50RHJhZ2dlcnMoZ2Z4KTtcbiAgICAgIGNsZWFyQmVuZHBvaW50cyhnZngpO1xuICAgICAgY3JlYXRlU2VnbWVudERyYWdnZXJzKGdmeCwgY29ubmVjdGlvbik7XG4gICAgICBjcmVhdGVCZW5kcG9pbnRzKGdmeCwgY29ubmVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRmxvYXRpbmdCZW5kcG9pbnRQb3NpdGlvbihwYXJlbnRHZngsIGludGVyc2VjdGlvbikge1xuICAgIHZhciBmbG9hdGluZyA9IGRvbVF1ZXJ5KCcuZmxvYXRpbmcnLCBwYXJlbnRHZngpLFxuICAgICAgICBwb2ludCA9IGludGVyc2VjdGlvbi5wb2ludDtcblxuICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZmxvYXRpbmcsIHBvaW50LngsIHBvaW50LnkpO1xuXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTZWdtZW50RHJhZ2dlclBvc2l0aW9uKHBhcmVudEdmeCwgaW50ZXJzZWN0aW9uLCB3YXlwb2ludHMpIHtcblxuICAgIHZhciBkcmFnZ2VyR2Z4ID0gZ2V0U2VnbWVudERyYWdnZXIoaW50ZXJzZWN0aW9uLmluZGV4LCBwYXJlbnRHZngpLFxuICAgICAgICBzZWdtZW50U3RhcnQgPSB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4IC0gMV0sXG4gICAgICAgIHNlZ21lbnRFbmQgPSB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XSxcbiAgICAgICAgcG9pbnQgPSBpbnRlcnNlY3Rpb24ucG9pbnQsXG4gICAgICAgIG1pZCA9IGdldE1pZFBvaW50KHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCksXG4gICAgICAgIGFsaWdubWVudCA9IHBvaW50c0FsaWduZWQoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSxcbiAgICAgICAgZHJhZ2dlclZpc3VhbCwgcmVsYXRpdmVQb3NpdGlvbjtcblxuICAgIGlmICghZHJhZ2dlckdmeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRyYWdnZXJWaXN1YWwgPSBnZXREcmFnZ2VyVmlzdWFsKGRyYWdnZXJHZngpO1xuXG4gICAgcmVsYXRpdmVQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHBvaW50LnggLSBtaWQueCxcbiAgICAgIHk6IHBvaW50LnkgLSBtaWQueVxuICAgIH07XG5cbiAgICBpZiAoYWxpZ25tZW50ID09PSAndicpIHtcblxuICAgICAgLy8gcm90YXRlIHBvc2l0aW9uXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiByZWxhdGl2ZVBvc2l0aW9uLnksXG4gICAgICAgIHk6IHJlbGF0aXZlUG9zaXRpb24ueFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZHJhZ2dlclZpc3VhbCwgcmVsYXRpdmVQb3NpdGlvbi54LCByZWxhdGl2ZVBvc2l0aW9uLnkpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdXBkYXRlSGFuZGxlcyhldmVudC5lbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24ucmVtb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZ2Z4ID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihldmVudC5lbGVtZW50KTtcblxuICAgIGlmIChnZngpIHtcbiAgICAgIHN2Z1JlbW92ZShnZngpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubWFya2VyLnVwZGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGJlbmRwb2ludHNHZng7XG5cbiAgICBpZiAoIWVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYmVuZHBvaW50c0dmeCA9IGFkZEhhbmRsZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoZXZlbnQuYWRkKSB7XG4gICAgICBzdmdDbGFzc2VzKGJlbmRwb2ludHNHZngpLmFkZChldmVudC5tYXJrZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmdDbGFzc2VzKGJlbmRwb2ludHNHZngpLnJlbW92ZShldmVudC5tYXJrZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vtb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgd2F5cG9pbnRzID0gZWxlbWVudC53YXlwb2ludHMsXG4gICAgICAgIGJlbmRwb2ludHNHZngsXG4gICAgICAgIGludGVyc2VjdGlvbjtcblxuICAgIGlmICh3YXlwb2ludHMpIHtcbiAgICAgIGJlbmRwb2ludHNHZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGVsZW1lbnQsIHRydWUpO1xuXG4gICAgICBpbnRlcnNlY3Rpb24gPSBnZXRDb25uZWN0aW9uSW50ZXJzZWN0aW9uKGNhbnZhcywgd2F5cG9pbnRzLCBldmVudC5vcmlnaW5hbEV2ZW50KTtcblxuICAgICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVGbG9hdGluZ0JlbmRwb2ludFBvc2l0aW9uKGJlbmRwb2ludHNHZngsIGludGVyc2VjdGlvbik7XG5cbiAgICAgIGlmICghaW50ZXJzZWN0aW9uLmJlbmRwb2ludCkge1xuICAgICAgICB1cGRhdGVTZWdtZW50RHJhZ2dlclBvc2l0aW9uKGJlbmRwb2ludHNHZngsIGludGVyc2VjdGlvbiwgd2F5cG9pbnRzKTtcbiAgICAgIH1cblxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCxcbiAgICAgICAgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGl2YXRlQmVuZHBvaW50TW92ZShvcmlnaW5hbEV2ZW50LCBlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NlbGVjdGlvbi5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgbmV3U2VsZWN0aW9uID0gZXZlbnQubmV3U2VsZWN0aW9uLFxuICAgICAgICBwcmltYXJ5ID0gbmV3U2VsZWN0aW9uWzBdO1xuXG4gICAgaWYgKHByaW1hcnkgJiYgcHJpbWFyeS53YXlwb2ludHMpIHtcbiAgICAgIGFkZEhhbmRsZXMocHJpbWFyeSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICBhZGRIYW5kbGVzKGVsZW1lbnQpO1xuICAgICAgaW50ZXJhY3Rpb25FdmVudHMucmVnaXN0ZXJFdmVudChldmVudC5nZngsICdtb3VzZW1vdmUnLCAnZWxlbWVudC5tb3VzZW1vdmUnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm91dCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaW50ZXJhY3Rpb25FdmVudHMudW5yZWdpc3RlckV2ZW50KGV2ZW50LmdmeCwgJ21vdXNlbW92ZScsICdlbGVtZW50Lm1vdXNlbW92ZScpO1xuICB9KTtcblxuICAvLyB1cGRhdGUgYmVuZHBvaW50IGNvbnRhaW5lciBkYXRhIGF0dHJpYnV0ZSBvbiBlbGVtZW50IElEIGNoYW5nZVxuICBldmVudEJ1cy5vbignZWxlbWVudC51cGRhdGVJZCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgbmV3SWQgPSBjb250ZXh0Lm5ld0lkO1xuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICB2YXIgYmVuZHBvaW50Q29udGFpbmVyID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihlbGVtZW50KTtcblxuICAgICAgaWYgKGJlbmRwb2ludENvbnRhaW5lcikge1xuICAgICAgICBzdmdBdHRyKGJlbmRwb2ludENvbnRhaW5lciwgeyAnZGF0YS1lbGVtZW50LWlkJzogbmV3SWQgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBBUElcblxuICB0aGlzLmFkZEhhbmRsZXMgPSBhZGRIYW5kbGVzO1xuICB0aGlzLnVwZGF0ZUhhbmRsZXMgPSB1cGRhdGVIYW5kbGVzO1xuICB0aGlzLmdldEJlbmRwb2ludHNDb250YWluZXIgPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyO1xuICB0aGlzLmdldFNlZ21lbnREcmFnZ2VyID0gZ2V0U2VnbWVudERyYWdnZXI7XG59XG5cbkJlbmRwb2ludHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdpbnRlcmFjdGlvbkV2ZW50cycsXG4gICdiZW5kcG9pbnRNb3ZlJyxcbiAgJ2Nvbm5lY3Rpb25TZWdtZW50TW92ZSdcbl07XG5cblxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREcmFnZ2VyVmlzdWFsKGRyYWdnZXJHZngpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KCcuZGpzLXZpc3VhbCcsIGRyYWdnZXJHZngpO1xufSIsImltcG9ydCB7XG4gIHBvaW50c0FsaWduZWQsXG4gIHBvaW50c09uTGluZVxufSBmcm9tICcuLi8uLi91dGlsL0dlb21ldHJ5JztcblxuaW1wb3J0IHtcbiAgYWRkU2VnbWVudERyYWdnZXIsXG4gIGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb25cbn0gZnJvbSAnLi9CZW5kcG9pbnRVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkLFxuICBnZXRPcmllbnRhdGlvblxufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbnZhciBNQVJLRVJfQ09OTkVDVF9IT1ZFUiA9ICdjb25uZWN0LWhvdmVyJyxcbiAgICBNQVJLRVJfQ09OTkVDVF9VUERBVElORyA9ICdkanMtdXBkYXRpbmcnO1xuXG5pbXBvcnQge1xuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxuXG5mdW5jdGlvbiBheGlzQWRkKHBvaW50LCBheGlzLCBkZWx0YSkge1xuICByZXR1cm4gYXhpc1NldChwb2ludCwgYXhpcywgcG9pbnRbYXhpc10gKyBkZWx0YSk7XG59XG5cbmZ1bmN0aW9uIGF4aXNTZXQocG9pbnQsIGF4aXMsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgeDogKGF4aXMgPT09ICd4JyA/IHZhbHVlIDogcG9pbnQueCksXG4gICAgeTogKGF4aXMgPT09ICd5JyA/IHZhbHVlIDogcG9pbnQueSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXhpc0ZlbmNlZChwb3NpdGlvbiwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBheGlzKSB7XG5cbiAgdmFyIG1heFZhbHVlID0gTWF0aC5tYXgoc2VnbWVudFN0YXJ0W2F4aXNdLCBzZWdtZW50RW5kW2F4aXNdKSxcbiAgICAgIG1pblZhbHVlID0gTWF0aC5taW4oc2VnbWVudFN0YXJ0W2F4aXNdLCBzZWdtZW50RW5kW2F4aXNdKTtcblxuICB2YXIgcGFkZGluZyA9IDIwO1xuXG4gIHZhciBmZW5jZWRWYWx1ZSA9IE1hdGgubWluKE1hdGgubWF4KG1pblZhbHVlICsgcGFkZGluZywgcG9zaXRpb25bYXhpc10pLCBtYXhWYWx1ZSAtIHBhZGRpbmcpO1xuXG4gIHJldHVybiBheGlzU2V0KHNlZ21lbnRTdGFydCwgYXhpcywgZmVuY2VkVmFsdWUpO1xufVxuXG5mdW5jdGlvbiBmbGlwQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkb2NraW5nIHBvaW50IG9uIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIENvbXB1dGUgYSByZWFzb25hYmxlIGRvY2tpbmcsIGlmIG5vbiBleGlzdHMuXG4gKlxuICogQHBhcmFtICB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHJlZmVyZW5jZUVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gbW92ZUF4aXMgKHh8eSlcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZnVuY3Rpb24gZ2V0RG9ja2luZyhwb2ludCwgcmVmZXJlbmNlRWxlbWVudCwgbW92ZUF4aXMpIHtcblxuICB2YXIgcmVmZXJlbmNlTWlkLFxuICAgICAgaW52ZXJzZUF4aXM7XG5cbiAgaWYgKHBvaW50Lm9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIHBvaW50Lm9yaWdpbmFsO1xuICB9IGVsc2Uge1xuICAgIHJlZmVyZW5jZU1pZCA9IGdldE1pZChyZWZlcmVuY2VFbGVtZW50KTtcbiAgICBpbnZlcnNlQXhpcyA9IGZsaXBBeGlzKG1vdmVBeGlzKTtcblxuICAgIHJldHVybiBheGlzU2V0KHBvaW50LCBpbnZlcnNlQXhpcywgcmVmZXJlbmNlTWlkW2ludmVyc2VBeGlzXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGltcGxlbWVudHMgbW92aW5nIG9mIGJlbmRwb2ludHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29ubmVjdGlvblNlZ21lbnRNb3ZlKFxuICAgIGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzLFxuICAgIGRyYWdnaW5nLCBncmFwaGljc0ZhY3RvcnksIG1vZGVsaW5nKSB7XG5cbiAgLy8gb3B0aW9uYWwgY29ubmVjdGlvbiBkb2NraW5nIGludGVncmF0aW9uXG4gIHZhciBjb25uZWN0aW9uRG9ja2luZyA9IGluamVjdG9yLmdldCgnY29ubmVjdGlvbkRvY2tpbmcnLCBmYWxzZSk7XG5cblxuICAvLyBBUElcblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIGNvbm5lY3Rpb24sIGlkeCkge1xuXG4gICAgdmFyIGNvbnRleHQsXG4gICAgICAgIGdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhjb25uZWN0aW9uKSxcbiAgICAgICAgc2VnbWVudFN0YXJ0SW5kZXggPSBpZHggLSAxLFxuICAgICAgICBzZWdtZW50RW5kSW5kZXggPSBpZHgsXG4gICAgICAgIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBzZWdtZW50U3RhcnQgPSB3YXlwb2ludHNbc2VnbWVudFN0YXJ0SW5kZXhdLFxuICAgICAgICBzZWdtZW50RW5kID0gd2F5cG9pbnRzW3NlZ21lbnRFbmRJbmRleF0sXG4gICAgICAgIGludGVyc2VjdGlvbiA9IGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb24oY2FudmFzLCB3YXlwb2ludHMsIGV2ZW50KSxcbiAgICAgICAgZGlyZWN0aW9uLCBheGlzLCBkcmFnUG9zaXRpb247XG5cbiAgICBkaXJlY3Rpb24gPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgICAvLyBkbyBub3QgbW92ZSBkaWFnb25hbCBjb25uZWN0aW9uXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXhpcyB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gbW92ZSB0aGluZ3NcbiAgICBheGlzID0gZGlyZWN0aW9uID09PSAndicgPyAneCcgOiAneSc7XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgIHNlZ21lbnRTdGFydCA9IGdldERvY2tpbmcoc2VnbWVudFN0YXJ0LCBjb25uZWN0aW9uLnNvdXJjZSwgYXhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnRFbmRJbmRleCA9PT0gd2F5cG9pbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNlZ21lbnRFbmQgPSBnZXREb2NraW5nKHNlZ21lbnRFbmQsIGNvbm5lY3Rpb24udGFyZ2V0LCBheGlzKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XG4gICAgICBkcmFnUG9zaXRpb24gPSBpbnRlcnNlY3Rpb24ucG9pbnQ7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gc2V0IHRvIHNlZ21lbnQgY2VudGVyIGFzIGRlZmF1bHRcbiAgICAgIGRyYWdQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogKHNlZ21lbnRTdGFydC54ICsgc2VnbWVudEVuZC54KSAvIDIsXG4gICAgICAgIHk6IChzZWdtZW50U3RhcnQueSArIHNlZ21lbnRFbmQueSkgLyAyXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnRleHQgPSB7XG4gICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgc2VnbWVudFN0YXJ0SW5kZXg6IHNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgc2VnbWVudEVuZEluZGV4OiBzZWdtZW50RW5kSW5kZXgsXG4gICAgICBzZWdtZW50U3RhcnQ6IHNlZ21lbnRTdGFydCxcbiAgICAgIHNlZ21lbnRFbmQ6IHNlZ21lbnRFbmQsXG4gICAgICBheGlzOiBheGlzLFxuICAgICAgZHJhZ1Bvc2l0aW9uOiBkcmFnUG9zaXRpb25cbiAgICB9O1xuXG4gICAgZHJhZ2dpbmcuaW5pdChldmVudCwgZHJhZ1Bvc2l0aW9uLCAnY29ubmVjdGlvblNlZ21lbnQubW92ZScsIHtcbiAgICAgIGN1cnNvcjogYXhpcyA9PT0gJ3gnID8gJ3Jlc2l6ZS1ldycgOiAncmVzaXplLW5zJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkdmeDogZ2Z4LFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyb3AgY29ubmVjdGlvbiBpZiBjb25uZWN0aW9uIGNyb3BwaW5nIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxQb2ludD59IG5ld1dheXBvaW50c1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IGNyb3BwZWQgY29ubmVjdGlvbiB3YXlwb2ludHNcbiAgICovXG4gIGZ1bmN0aW9uIGNyb3BDb25uZWN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cykge1xuXG4gICAgLy8gY3JvcCBjb25uZWN0aW9uLCBpZiBkb2NraW5nIHNlcnZpY2UgaXMgcHJvdmlkZWQgb25seVxuICAgIGlmICghY29ubmVjdGlvbkRvY2tpbmcpIHtcbiAgICAgIHJldHVybiBuZXdXYXlwb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIG9sZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBjcm9wcGVkV2F5cG9pbnRzO1xuXG4gICAgLy8gdGVtcG9yYXJ5IHNldCBuZXcgd2F5cG9pbnRzXG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgICBjcm9wcGVkV2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICAgIC8vIHJlc3RvcmUgb2xkIHdheXBvaW50c1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gb2xkV2F5cG9pbnRzO1xuXG4gICAgcmV0dXJuIGNyb3BwZWRXYXlwb2ludHM7XG4gIH1cblxuICAvLyBEUkFHR0lORyBJTVBMRU1FTlRBVElPTlxuXG4gIGZ1bmN0aW9uIHJlZHJhd0Nvbm5lY3Rpb24oZGF0YSkge1xuICAgIGdyYXBoaWNzRmFjdG9yeS51cGRhdGUoJ2Nvbm5lY3Rpb24nLCBkYXRhLmNvbm5lY3Rpb24sIGRhdGEuY29ubmVjdGlvbkdmeCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVEcmFnZ2VyKGNvbnRleHQsIHNlZ21lbnRPZmZzZXQsIGV2ZW50KSB7XG5cbiAgICB2YXIgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMsXG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5zZWdtZW50U3RhcnRJbmRleCArIHNlZ21lbnRPZmZzZXQsXG4gICAgICAgIHNlZ21lbnRTdGFydCA9IG5ld1dheXBvaW50c1tzZWdtZW50U3RhcnRJbmRleF0sXG4gICAgICAgIHNlZ21lbnRFbmRJbmRleCA9IGNvbnRleHQuc2VnbWVudEVuZEluZGV4ICsgc2VnbWVudE9mZnNldCxcbiAgICAgICAgc2VnbWVudEVuZCA9IG5ld1dheXBvaW50c1tzZWdtZW50RW5kSW5kZXhdLFxuICAgICAgICBheGlzID0gZmxpcEF4aXMoY29udGV4dC5heGlzKTtcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgZHJhZ2dlciBkb2VzIG5vdCBtb3ZlXG4gICAgLy8gb3V0c2lkZSB0aGUgY29ubmVjdGlvblxuICAgIHZhciBkcmFnZ2VyUG9zaXRpb24gPSBheGlzRmVuY2VkKGV2ZW50LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGF4aXMpO1xuXG4gICAgLy8gdXBkYXRlIGRyYWdnZXJcbiAgICB0cmFuc2xhdGUoY29udGV4dC5kcmFnZ2VyR2Z4LCBkcmFnZ2VyUG9zaXRpb24ueCwgZHJhZ2dlclBvc2l0aW9uLnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB3YXlwb2ludHMgZm9yIHJlZHVuZGFudCBvbmVzIChpLmUuIG9uIHRoZSBzYW1lIGF4aXMpLlxuICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCB3YXlwb2ludHMgYW5kIHRoZSBvZmZzZXQgcmVsYXRlZCB0byB0aGUgc2VnbWVudCBtb3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc2VnbWVudFN0YXJ0SW5kZXggb2YgbW92ZWQgc2VnbWVudCBzdGFydFxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHsgZmlsdGVyZWRXYXlwb2ludHMsIHNlZ21lbnRPZmZzZXQgfVxuICAgKi9cbiAgZnVuY3Rpb24gZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKHdheXBvaW50cywgc2VnbWVudFN0YXJ0SW5kZXgpIHtcblxuICAgIHZhciBzZWdtZW50T2Zmc2V0ID0gMDtcblxuICAgIHZhciBmaWx0ZXJlZFdheXBvaW50cyA9IHdheXBvaW50cy5maWx0ZXIoZnVuY3Rpb24ociwgaWR4KSB7XG4gICAgICBpZiAocG9pbnRzT25MaW5lKHdheXBvaW50c1tpZHggLSAxXSwgd2F5cG9pbnRzW2lkeCArIDFdLCByKSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBwb2ludCBhbmQgaW5jcmVtZW50IG9mZnNldFxuICAgICAgICBzZWdtZW50T2Zmc2V0ID0gaWR4IDw9IHNlZ21lbnRTdGFydEluZGV4ID8gc2VnbWVudE9mZnNldCAtIDEgOiBzZWdtZW50T2Zmc2V0O1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGRvbnQgcmVtb3ZlIHBvaW50XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB3YXlwb2ludHM6IGZpbHRlcmVkV2F5cG9pbnRzLFxuICAgICAgc2VnbWVudE9mZnNldDogc2VnbWVudE9mZnNldFxuICAgIH07XG4gIH1cblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBldmVudC5jb25uZWN0aW9uLFxuICAgICAgICBsYXllciA9IGNhbnZhcy5nZXRMYXllcignb3ZlcmxheXMnKTtcblxuICAgIGNvbnRleHQub3JpZ2luYWxXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cy5zbGljZSgpO1xuXG4gICAgLy8gYWRkIGRyYWdnZXIgZ2Z4XG4gICAgY29udGV4dC5kcmFnZ2VyR2Z4ID0gYWRkU2VnbWVudERyYWdnZXIobGF5ZXIsIGNvbnRleHQuc2VnbWVudFN0YXJ0LCBjb250ZXh0LnNlZ21lbnRFbmQpO1xuICAgIHN2Z0NsYXNzZXMoY29udGV4dC5kcmFnZ2VyR2Z4KS5hZGQoJ2Rqcy1kcmFnZ2luZycpO1xuXG4gICAgY2FudmFzLmFkZE1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfQ09OTkVDVF9VUERBVElORyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzZWdtZW50U3RhcnRJbmRleCA9IGNvbnRleHQuc2VnbWVudFN0YXJ0SW5kZXgsXG4gICAgICAgIHNlZ21lbnRFbmRJbmRleCA9IGNvbnRleHQuc2VnbWVudEVuZEluZGV4LFxuICAgICAgICBzZWdtZW50U3RhcnQgPSBjb250ZXh0LnNlZ21lbnRTdGFydCxcbiAgICAgICAgc2VnbWVudEVuZCA9IGNvbnRleHQuc2VnbWVudEVuZCxcbiAgICAgICAgYXhpcyA9IGNvbnRleHQuYXhpcztcblxuICAgIHZhciBuZXdXYXlwb2ludHMgPSBjb250ZXh0Lm9yaWdpbmFsV2F5cG9pbnRzLnNsaWNlKCksXG4gICAgICAgIG5ld1NlZ21lbnRTdGFydCA9IGF4aXNBZGQoc2VnbWVudFN0YXJ0LCBheGlzLCBldmVudFsnZCcgKyBheGlzXSksXG4gICAgICAgIG5ld1NlZ21lbnRFbmQgPSBheGlzQWRkKHNlZ21lbnRFbmQsIGF4aXMsIGV2ZW50WydkJyArIGF4aXNdKTtcblxuICAgIC8vIG9yaWdpbmFsIHdheXBvaW50IGNvdW50IGFuZCBhZGRlZCAvIHJlbW92ZWRcbiAgICAvLyBmcm9tIHN0YXJ0IHdheXBvaW50IGRlbHRhLiBXZSB1c2UgdGhlIGxhdGVyXG4gICAgLy8gdG8gcmV0cmlldmUgdGhlIHVwZGF0ZWQgc2VnbWVudFN0YXJ0SW5kZXggLyBzZWdtZW50RW5kSW5kZXhcbiAgICB2YXIgd2F5cG9pbnRDb3VudCA9IG5ld1dheXBvaW50cy5sZW5ndGgsXG4gICAgICAgIHNlZ21lbnRPZmZzZXQgPSAwO1xuXG4gICAgLy8gbW92ZSBzZWdtZW50IHN0YXJ0IC8gZW5kIGJ5IGF4aXMgZGVsdGFcbiAgICBuZXdXYXlwb2ludHNbc2VnbWVudFN0YXJ0SW5kZXhdID0gbmV3U2VnbWVudFN0YXJ0O1xuICAgIG5ld1dheXBvaW50c1tzZWdtZW50RW5kSW5kZXhdID0gbmV3U2VnbWVudEVuZDtcblxuICAgIHZhciBzb3VyY2VUb1NlZ21lbnRPcmllbnRhdGlvbixcbiAgICAgICAgdGFyZ2V0VG9TZWdtZW50T3JpZW50YXRpb247XG5cbiAgICAvLyBoYW5kbGUgZmlyc3Qgc2VnbWVudFxuICAgIGlmIChzZWdtZW50U3RhcnRJbmRleCA8IDIpIHtcbiAgICAgIHNvdXJjZVRvU2VnbWVudE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oY29ubmVjdGlvbi5zb3VyY2UsIG5ld1NlZ21lbnRTdGFydCk7XG5cbiAgICAgIC8vIGZpcnN0IGJlbmRwb2ludCwgcmVtb3ZlIGZpcnN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPT09IDEpIHtcblxuICAgICAgICBpZiAoc291cmNlVG9TZWdtZW50T3JpZW50YXRpb24gPT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzWzBdID0gbmV3U2VnbWVudFN0YXJ0O1xuICAgICAgICAgIHNlZ21lbnRPZmZzZXQtLTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkb2NraW5nIHBvaW50LCBhZGQgc2VnbWVudCBpZiBub3QgaW50ZXJzZWN0aW5nIGFueW1vcmVcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoc291cmNlVG9TZWdtZW50T3JpZW50YXRpb24gIT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzLnVuc2hpZnQoc2VnbWVudFN0YXJ0KTtcbiAgICAgICAgICBzZWdtZW50T2Zmc2V0Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbGFzdCBzZWdtZW50XG4gICAgaWYgKHNlZ21lbnRFbmRJbmRleCA+IHdheXBvaW50Q291bnQgLSAzKSB7XG4gICAgICB0YXJnZXRUb1NlZ21lbnRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKGNvbm5lY3Rpb24udGFyZ2V0LCBuZXdTZWdtZW50RW5kKTtcblxuICAgICAgLy8gbGFzdCBiZW5kcG9pbnQsIHJlbW92ZSBsYXN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBpZiAoc2VnbWVudEVuZEluZGV4ID09PSB3YXlwb2ludENvdW50IC0gMikge1xuXG4gICAgICAgIGlmICh0YXJnZXRUb1NlZ21lbnRPcmllbnRhdGlvbiA9PT0gJ2ludGVyc2VjdCcpIHtcbiAgICAgICAgICBuZXdXYXlwb2ludHMucG9wKCk7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzW25ld1dheXBvaW50cy5sZW5ndGggLSAxXSA9IG5ld1NlZ21lbnRFbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gbGFzdCBiZW5kcG9pbnQsIHJlbW92ZSBsYXN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldFRvU2VnbWVudE9yaWVudGF0aW9uICE9PSAnaW50ZXJzZWN0Jykge1xuICAgICAgICAgIG5ld1dheXBvaW50cy5wdXNoKHNlZ21lbnRFbmQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGNvbm5lY3Rpb24gd2F5cG9pbnRzXG4gICAgY29udGV4dC5uZXdXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyA9IGNyb3BDb25uZWN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG5cbiAgICAvLyB1cGRhdGUgZHJhZ2dlciBwb3NpdGlvblxuICAgIHVwZGF0ZURyYWdnZXIoY29udGV4dCwgc2VnbWVudE9mZnNldCwgZXZlbnQpO1xuXG4gICAgLy8gc2F2ZSBzZWdtZW50T2Zmc2V0IGluIGNvbnRleHRcbiAgICBjb250ZXh0Lm5ld1NlZ21lbnRTdGFydEluZGV4ID0gc2VnbWVudFN0YXJ0SW5kZXggKyBzZWdtZW50T2Zmc2V0O1xuXG4gICAgLy8gcmVkcmF3IGNvbm5lY3Rpb25cbiAgICByZWRyYXdDb25uZWN0aW9uKGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgZXZlbnQuY29udGV4dC5ob3ZlciA9IGV2ZW50LmhvdmVyO1xuICAgIGNhbnZhcy5hZGRNYXJrZXIoZXZlbnQuaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLm91dCcsXG4gICAgJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuY2xlYW51cCdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIHJlbW92ZSBjb25uZWN0IG1hcmtlclxuICAgIC8vIGlmIGl0IHdhcyBhZGRlZFxuICAgIHZhciBob3ZlciA9IGV2ZW50LmNvbnRleHQuaG92ZXI7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIGRyYWdnZXIgZ2Z4XG4gICAgaWYgKGNvbnRleHQuZHJhZ2dlckdmeCkge1xuICAgICAgc3ZnUmVtb3ZlKGNvbnRleHQuZHJhZ2dlckdmeCk7XG4gICAgfVxuXG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfQ09OTkVDVF9VUERBVElORyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5jYW5jZWwnLFxuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmVuZCdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IGNvbnRleHQub3JpZ2luYWxXYXlwb2ludHM7XG5cbiAgICByZWRyYXdDb25uZWN0aW9uKGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMsXG4gICAgICAgIG5ld1NlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5uZXdTZWdtZW50U3RhcnRJbmRleDtcblxuICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGFjdHVhbCBwaXhlbCB2YWx1ZXMgYmVuZHBvaW50XG4gICAgLy8gY29vcmRpbmF0ZXMgKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICBuZXdXYXlwb2ludHMgPSBuZXdXYXlwb2ludHMubWFwKGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9yaWdpbmFsOiBwLm9yaWdpbmFsLFxuICAgICAgICB4OiBNYXRoLnJvdW5kKHAueCksXG4gICAgICAgIHk6IE1hdGgucm91bmQocC55KVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIGFwcGx5IGZpbHRlciByZWR1bmFudCB3YXlwb2ludHNcbiAgICB2YXIgZmlsdGVyZWQgPSBmaWx0ZXJSZWR1bmRhbnRXYXlwb2ludHMobmV3V2F5cG9pbnRzLCBuZXdTZWdtZW50U3RhcnRJbmRleCk7XG5cbiAgICAvLyBnZXQgZmlsdGVyZWQgd2F5cG9pbnRzXG4gICAgdmFyIGZpbHRlcmVkV2F5cG9pbnRzID0gZmlsdGVyZWQud2F5cG9pbnRzLFxuICAgICAgICBjcm9wcGVkV2F5cG9pbnRzID0gY3JvcENvbm5lY3Rpb24oY29ubmVjdGlvbiwgZmlsdGVyZWRXYXlwb2ludHMpLFxuICAgICAgICBzZWdtZW50T2Zmc2V0ID0gZmlsdGVyZWQuc2VnbWVudE9mZnNldDtcblxuICAgIHZhciBoaW50cyA9IHtcbiAgICAgIHNlZ21lbnRNb3ZlOiB7XG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4OiBjb250ZXh0LnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBuZXdTZWdtZW50U3RhcnRJbmRleDogbmV3U2VnbWVudFN0YXJ0SW5kZXggKyBzZWdtZW50T2Zmc2V0XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1vZGVsaW5nLnVwZGF0ZVdheXBvaW50cyhjb25uZWN0aW9uLCBjcm9wcGVkV2F5cG9pbnRzLCBoaW50cyk7XG4gIH0pO1xufVxuXG5Db25uZWN0aW9uU2VnbWVudE1vdmUuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdncmFwaGljc0ZhY3RvcnknLFxuICAnbW9kZWxpbmcnXG5dO1xuIiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBCZW5kcG9pbnRzIGZyb20gJy4vQmVuZHBvaW50cyc7XG5pbXBvcnQgQmVuZHBvaW50TW92ZSBmcm9tICcuL0JlbmRwb2ludE1vdmUnO1xuaW1wb3J0IEJlbmRwb2ludE1vdmVQcmV2aWV3IGZyb20gJy4vQmVuZHBvaW50TW92ZVByZXZpZXcnO1xuaW1wb3J0IENvbm5lY3Rpb25TZWdtZW50TW92ZSBmcm9tICcuL0Nvbm5lY3Rpb25TZWdtZW50TW92ZSc7XG5pbXBvcnQgQmVuZHBvaW50U25hcHBpbmcgZnJvbSAnLi9CZW5kcG9pbnRTbmFwcGluZyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdiZW5kcG9pbnRzJywgJ2JlbmRwb2ludFNuYXBwaW5nJywgJ2JlbmRwb2ludE1vdmVQcmV2aWV3JyBdLFxuICBiZW5kcG9pbnRzOiBbICd0eXBlJywgQmVuZHBvaW50cyBdLFxuICBiZW5kcG9pbnRNb3ZlOiBbICd0eXBlJywgQmVuZHBvaW50TW92ZSBdLFxuICBiZW5kcG9pbnRNb3ZlUHJldmlldzogWyAndHlwZScsIEJlbmRwb2ludE1vdmVQcmV2aWV3IF0sXG4gIGNvbm5lY3Rpb25TZWdtZW50TW92ZTogWyAndHlwZScsIENvbm5lY3Rpb25TZWdtZW50TW92ZSBdLFxuICBiZW5kcG9pbnRTbmFwcGluZzogWyAndHlwZScsIEJlbmRwb2ludFNuYXBwaW5nIF1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRUeXBlIGFzIGdldEVsZW1lbnRUeXBlXG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG4vKipcbiAqIEFkZHMgY2hhbmdlIHN1cHBvcnQgdG8gdGhlIGRpYWdyYW0sIGluY2x1ZGluZ1xuICpcbiAqIDx1bD5cbiAqICAgPGxpPnJlZHJhd2luZyBzaGFwZXMgYW5kIGNvbm5lY3Rpb25zIG9uIGNoYW5nZTwvbGk+XG4gKiA8L3VsPlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0dyYXBoaWNzRmFjdG9yeX0gZ3JhcGhpY3NGYWN0b3J5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENoYW5nZVN1cHBvcnQoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGdyYXBoaWNzRmFjdG9yeSkge1xuXG5cbiAgLy8gcmVkcmF3IHNoYXBlcyAvIGNvbm5lY3Rpb25zIG9uIGNoYW5nZVxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgLy8gZWxlbWVudCBtaWdodCBoYXZlIGJlZW4gZGVsZXRlZCBhbmQgcmVwbGFjZWQgYnkgbmV3IGVsZW1lbnQgd2l0aCBzYW1lIElEXG4gICAgLy8gdGh1cyBjaGVjayBmb3IgcGFyZW50IG9mIGVsZW1lbnQgZXhjZXB0IGZvciByb290IGVsZW1lbnRcbiAgICBpZiAoZWxlbWVudC5wYXJlbnQgfHwgZWxlbWVudCA9PT0gY2FudmFzLmdldFJvb3RFbGVtZW50KCkpIHtcbiAgICAgIGV2ZW50LmdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBzaGFwZSArIGdmeCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWRcbiAgICBpZiAoIWV2ZW50LmdmeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50QnVzLmZpcmUoZ2V0RWxlbWVudFR5cGUoZWxlbWVudCkgKyAnLmNoYW5nZWQnLCBldmVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50cy5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50cyA9IGV2ZW50LmVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICBldmVudEJ1cy5maXJlKCdlbGVtZW50LmNoYW5nZWQnLCB7IGVsZW1lbnQ6IGUgfSk7XG4gICAgfSk7XG5cbiAgICBncmFwaGljc0ZhY3RvcnkudXBkYXRlQ29udGFpbm1lbnRzKGVsZW1lbnRzKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGdyYXBoaWNzRmFjdG9yeS51cGRhdGUoJ3NoYXBlJywgZXZlbnQuZWxlbWVudCwgZXZlbnQuZ2Z4KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZ3JhcGhpY3NGYWN0b3J5LnVwZGF0ZSgnY29ubmVjdGlvbicsIGV2ZW50LmVsZW1lbnQsIGV2ZW50LmdmeCk7XG4gIH0pO1xufVxuXG5DaGFuZ2VTdXBwb3J0LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2dyYXBoaWNzRmFjdG9yeSdcbl07IiwiaW1wb3J0IENoYW5nZVN1cHBvcnQgZnJvbSAnLi9DaGFuZ2VTdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnY2hhbmdlU3VwcG9ydCddLFxuICBjaGFuZ2VTdXBwb3J0OiBbICd0eXBlJywgQ2hhbmdlU3VwcG9ydCBdXG59OyIsIi8qKlxuICogQSBjbGlwIGJvYXJkIHN0dWJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2xpcGJvYXJkKCkge31cblxuXG5DbGlwYm9hcmQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZGF0YTtcbn07XG5cbkNsaXBib2FyZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLl9kYXRhID0gZGF0YTtcbn07XG5cbkNsaXBib2FyZC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gIGRlbGV0ZSB0aGlzLl9kYXRhO1xuXG4gIHJldHVybiBkYXRhO1xufTtcblxuQ2xpcGJvYXJkLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5fZGF0YTtcbn07IiwiaW1wb3J0IENsaXBib2FyZCBmcm9tICcuL0NsaXBib2FyZCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY2xpcGJvYXJkOiBbICd0eXBlJywgQ2xpcGJvYXJkIF1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRNaWRcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc05pbCxcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbm5lY3QoZXZlbnRCdXMsIGRyYWdnaW5nLCBtb2RlbGluZywgcnVsZXMpIHtcblxuICAvLyBydWxlc1xuXG4gIGZ1bmN0aW9uIGNhbkNvbm5lY3Qoc291cmNlLCB0YXJnZXQpIHtcbiAgICByZXR1cm4gcnVsZXMuYWxsb3dlZCgnY29ubmVjdGlvbi5jcmVhdGUnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5Db25uZWN0UmV2ZXJzZShzb3VyY2UsIHRhcmdldCkge1xuICAgIHJldHVybiBjYW5Db25uZWN0KHRhcmdldCwgc291cmNlKTtcbiAgfVxuXG5cbiAgLy8gZXZlbnQgaGFuZGxlcnNcblxuICBldmVudEJ1cy5vbignY29ubmVjdC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzdGFydCA9IGNvbnRleHQuc3RhcnQsXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXG4gICAgICAgIGNhbkV4ZWN1dGU7XG5cbiAgICAvLyBjYWNoZSBob3ZlciBzdGF0ZVxuICAgIGNvbnRleHQuaG92ZXIgPSBob3ZlcjtcblxuICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5Db25uZWN0KHN0YXJ0LCBob3Zlcik7XG5cbiAgICAvLyBpZ25vcmUgaG92ZXJcbiAgICBpZiAoaXNOaWwoY2FuRXhlY3V0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRleHQuc291cmNlID0gc3RhcnQ7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IGhvdmVyO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSA9IGNhbkNvbm5lY3RSZXZlcnNlKHN0YXJ0LCBob3Zlcik7XG5cbiAgICAvLyBpZ25vcmUgaG92ZXJcbiAgICBpZiAoaXNOaWwoY2FuRXhlY3V0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRleHQuc291cmNlID0gaG92ZXI7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IHN0YXJ0O1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY29ubmVjdC5vdXQnLCAnY29ubmVjdC5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIGNvbnRleHQuaG92ZXIgPSBudWxsO1xuICAgIGNvbnRleHQuc291cmNlID0gbnVsbDtcbiAgICBjb250ZXh0LnRhcmdldCA9IG51bGw7XG5cbiAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGNvbnRleHQuY29ubmVjdGlvblN0YXJ0LFxuICAgICAgICBjb25uZWN0aW9uRW5kID0ge1xuICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoIWNhbkV4ZWN1dGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYXR0cnMgPSBudWxsLFxuICAgICAgICBoaW50cyA9IHtcbiAgICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IGlzUmV2ZXJzZShjb250ZXh0KSA/IGNvbm5lY3Rpb25FbmQgOiBjb25uZWN0aW9uU3RhcnQsXG4gICAgICAgICAgY29ubmVjdGlvbkVuZDogaXNSZXZlcnNlKGNvbnRleHQpID8gY29ubmVjdGlvblN0YXJ0IDogY29ubmVjdGlvbkVuZFxuICAgICAgICB9O1xuXG4gICAgaWYgKGlzT2JqZWN0KGNhbkV4ZWN1dGUpKSB7XG4gICAgICBhdHRycyA9IGNhbkV4ZWN1dGU7XG4gICAgfVxuXG4gICAgbW9kZWxpbmcuY29ubmVjdChzb3VyY2UsIHRhcmdldCwgYXR0cnMsIGhpbnRzKTtcbiAgfSk7XG5cblxuICAvLyBBUElcblxuICAvKipcbiAgICogU3RhcnQgY29ubmVjdCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHN0YXJ0XG4gICAqIEBwYXJhbSB7UG9pbnR9IFtjb25uZWN0aW9uU3RhcnRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2F1dG9BY3RpdmF0ZT1mYWxzZV1cbiAgICovXG4gIHRoaXMuc3RhcnQgPSBmdW5jdGlvbihldmVudCwgc3RhcnQsIGNvbm5lY3Rpb25TdGFydCwgYXV0b0FjdGl2YXRlKSB7XG4gICAgaWYgKCFpc09iamVjdChjb25uZWN0aW9uU3RhcnQpKSB7XG4gICAgICBhdXRvQWN0aXZhdGUgPSBjb25uZWN0aW9uU3RhcnQ7XG4gICAgICBjb25uZWN0aW9uU3RhcnQgPSBnZXRNaWQoc3RhcnQpO1xuICAgIH1cblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsICdjb25uZWN0Jywge1xuICAgICAgYXV0b0FjdGl2YXRlOiBhdXRvQWN0aXZhdGUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNoYXBlOiBzdGFydCxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IGNvbm5lY3Rpb25TdGFydFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbkNvbm5lY3QuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmV2ZXJzZShjb250ZXh0KSB7XG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gIHJldHVybiBob3ZlciAmJiBzb3VyY2UgJiYgaG92ZXIgPT09IHNvdXJjZSAmJiBzb3VyY2UgIT09IHRhcmdldDtcbn0iLCJpbXBvcnQgeyBpc1JldmVyc2UgfSBmcm9tICcuL0Nvbm5lY3QnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDExMDAsXG4gICAgTE9XX1BSSU9SSVRZID0gOTAwO1xuXG52YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snO1xuXG4vKipcbiAqIFNob3dzIGNvbm5lY3Rpb24gcHJldmlldyBkdXJpbmcgY29ubmVjdC5cbiAqXG4gKiBAcGFyYW0ge2RpZGkuSW5qZWN0b3J9IGluamVjdG9yXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb25uZWN0UHJldmlldyhpbmplY3RvciwgZXZlbnRCdXMsIGNhbnZhcykge1xuICB2YXIgY29ubmVjdGlvblByZXZpZXcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25QcmV2aWV3JywgZmFsc2UpO1xuXG4gIGNvbm5lY3Rpb25QcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdjb25uZWN0Lm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY2FuQ29ubmVjdCA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0LFxuICAgICAgICBzdGFydFBvc2l0aW9uID0gY29udGV4dC5zdGFydFBvc2l0aW9uLFxuICAgICAgICBjb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCxcbiAgICAgICAgY29ubmVjdGlvbkVuZCA9IGNvbnRleHQuY29ubmVjdGlvbkVuZCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb25TdGFydCkge1xuICAgICAgY29ubmVjdGlvblN0YXJ0ID0gaXNSZXZlcnNlKGNvbnRleHQpID8ge1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55XG4gICAgICB9IDogc3RhcnRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbm5lY3Rpb25FbmQpIHtcbiAgICAgIGNvbm5lY3Rpb25FbmQgPSBpc1JldmVyc2UoY29udGV4dCkgPyBzdGFydFBvc2l0aW9uIDoge1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbm5lY3Rpb25QcmV2aWV3LmRyYXdQcmV2aWV3KGNvbnRleHQsIGNhbkNvbm5lY3QsIHtcbiAgICAgIHNvdXJjZTogc291cmNlIHx8IHN0YXJ0LFxuICAgICAgdGFyZ2V0OiB0YXJnZXQgfHwgaG92ZXIsXG4gICAgICBjb25uZWN0aW9uU3RhcnQ6IGNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQ6IGNvbm5lY3Rpb25FbmRcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuaG92ZXInLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlO1xuXG4gICAgLy8gaWdub3JlIGhvdmVyXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBjYW5FeGVjdXRlID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY29ubmVjdC5vdXQnLFxuICAgICdjb25uZWN0LmNsZWFudXAnXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGhvdmVyID0gZXZlbnQuaG92ZXI7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9PSyk7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfTk9UX09LKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbm5lY3Rpb25QcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdjb25uZWN0LmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGNvbm5lY3Rpb25QcmV2aWV3LmNsZWFuVXAoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xufVxuXG5Db25uZWN0UHJldmlldy4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJ1xuXTtcbiIsImltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5pbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuXG5pbXBvcnQgQ29ubmVjdCBmcm9tICcuL0Nvbm5lY3QnO1xuaW1wb3J0IENvbm5lY3RQcmV2aWV3IGZyb20gJy4vQ29ubmVjdFByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgU2VsZWN0aW9uTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIERyYWdnaW5nTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ2Nvbm5lY3RQcmV2aWV3J1xuICBdLFxuICBjb25uZWN0OiBbICd0eXBlJywgQ29ubmVjdCBdLFxuICBjb25uZWN0UHJldmlldzogWyAndHlwZScsIENvbm5lY3RQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZSxcbiAgY2xlYXIgYXMgc3ZnQ2xlYXJcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uLFxuICBnZXRNaWRcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5cbnZhciBNQVJLRVJfQ09OTkVDVElPTl9QUkVWSUVXID0gJ2Rqcy1jb25uZWN0aW9uLXByZXZpZXcnO1xuXG4vKipcbiAqIERyYXdzIGNvbm5lY3Rpb24gcHJldmlldy4gT3B0aW9uYWxseSwgdGhpcyBjYW4gdXNlIGxheW91dGVyIGFuZCBjb25uZWN0aW9uIGRvY2tpbmcgdG8gZHJhd1xuICogYmV0dGVyIGxvb2tpbmcgcHJldmlld3MuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtHcmFwaGljc0ZhY3Rvcnl9IGdyYXBoaWNzRmFjdG9yeVxuICogQHBhcmFtIHtFbGVtZW50RmFjdG9yeX0gZWxlbWVudEZhY3RvcnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29ubmVjdGlvblByZXZpZXcoXG4gICAgaW5qZWN0b3IsXG4gICAgY2FudmFzLFxuICAgIGdyYXBoaWNzRmFjdG9yeSxcbiAgICBlbGVtZW50RmFjdG9yeVxuKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuXG4gIC8vIG9wdGlvbmFsIGNvbXBvbmVudHNcbiAgdGhpcy5fY29ubmVjdGlvbkRvY2tpbmcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25Eb2NraW5nJywgZmFsc2UpO1xuICB0aGlzLl9sYXlvdXRlciA9IGluamVjdG9yLmdldCgnbGF5b3V0ZXInLCBmYWxzZSk7XG59XG5cbkNvbm5lY3Rpb25QcmV2aWV3LiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdjYW52YXMnLFxuICAnZ3JhcGhpY3NGYWN0b3J5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5J1xuXTtcblxuLyoqXG4gKiBEcmF3IGNvbm5lY3Rpb24gcHJldmlldy5cbiAqXG4gKiBQcm92aWRlIGF0IGxlYXN0IG9uZSBvZiA8c291cmNlLCBjb25uZWN0aW9uU3RhcnQ+IGFuZCA8dGFyZ2V0LCBjb25uZWN0aW9uRW5kPiB0byBjcmVhdGUgYSBwcmV2aWV3LlxuICogSW4gdGhlIGNsZWFuIHVwIHN0YWdlLCBjYWxsIGBjb25uZWN0aW9uUHJldmlldyNjbGVhblVwYCB3aXRoIHRoZSBjb250ZXh0IHRvIHJlbW92ZSBwcmV2aWV3LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdHxib29sZWFufSBjYW5Db25uZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBbaGludHMuc291cmNlXSBzb3VyY2UgZWxlbWVudFxuICogQHBhcmFtIHtkanMubW9kZWwuc2hhcGV9IFtoaW50cy50YXJnZXRdIHRhcmdldCBlbGVtZW50XG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvblN0YXJ0XSBjb25uZWN0aW9uIHByZXZpZXcgc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uRW5kXSBjb25uZWN0aW9uIHByZXZpZXcgZW5kXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gW2hpbnRzLndheXBvaW50c10gcHJvdmlkZWQgd2F5cG9pbnRzIGZvciBwcmV2aWV3XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5ub0xheW91dF0gdHJ1ZSBpZiBwcmV2aWV3IHNob3VsZCBub3QgYmUgbGFpZCBvdXRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpbnRzLm5vQ3JvcHBpbmddIHRydWUgaWYgcHJldmlldyBzaG91bGQgbm90IGJlIGNyb3BwZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpbnRzLm5vTm9vcF0gdHJ1ZSBpZiBzaW1wbGUgY29ubmVjdGlvbiBzaG91bGQgbm90IGJlIGRyYXduXG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5kcmF3UHJldmlldyA9IGZ1bmN0aW9uKGNvbnRleHQsIGNhbkNvbm5lY3QsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICB2YXIgY29ubmVjdGlvblByZXZpZXdHZnggPSBjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4LFxuICAgICAgZ2V0Q29ubmVjdGlvbiA9IGNvbnRleHQuZ2V0Q29ubmVjdGlvbixcbiAgICAgIHNvdXJjZSA9IGhpbnRzLnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGhpbnRzLnRhcmdldCxcbiAgICAgIHdheXBvaW50cyA9IGhpbnRzLndheXBvaW50cyxcbiAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGhpbnRzLmNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kLFxuICAgICAgbm9MYXlvdXQgPSBoaW50cy5ub0xheW91dCxcbiAgICAgIG5vQ3JvcHBpbmcgPSBoaW50cy5ub0Nyb3BwaW5nLFxuICAgICAgbm9Ob29wID0gaGludHMubm9Ob29wLFxuICAgICAgY29ubmVjdGlvbjtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKCFjb25uZWN0aW9uUHJldmlld0dmeCkge1xuICAgIGNvbm5lY3Rpb25QcmV2aWV3R2Z4ID0gY29udGV4dC5jb25uZWN0aW9uUHJldmlld0dmeCA9IHRoaXMuY3JlYXRlQ29ubmVjdGlvblByZXZpZXdHZngoKTtcbiAgfVxuXG4gIHN2Z0NsZWFyKGNvbm5lY3Rpb25QcmV2aWV3R2Z4KTtcblxuICBpZiAoIWdldENvbm5lY3Rpb24pIHtcbiAgICBnZXRDb25uZWN0aW9uID0gY29udGV4dC5nZXRDb25uZWN0aW9uID0gY2FjaGVSZXR1cm5WYWx1ZXMoZnVuY3Rpb24oY2FuQ29ubmVjdCwgc291cmNlLCB0YXJnZXQpIHtcbiAgICAgIHJldHVybiBzZWxmLmdldENvbm5lY3Rpb24oY2FuQ29ubmVjdCwgc291cmNlLCB0YXJnZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNhbkNvbm5lY3QpIHtcbiAgICBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbihjYW5Db25uZWN0LCBzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAhbm9Ob29wICYmIHRoaXMuZHJhd05vb3BQcmV2aWV3KGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBoaW50cyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSB3YXlwb2ludHMgfHwgW107XG5cbiAgLy8gb3B0aW9uYWwgbGF5b3V0XG4gIGlmICh0aGlzLl9sYXlvdXRlciAmJiAhbm9MYXlvdXQpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2xheW91dGVyLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNvbm5lY3Rpb25TdGFydDogY29ubmVjdGlvblN0YXJ0LFxuICAgICAgY29ubmVjdGlvbkVuZDogY29ubmVjdGlvbkVuZCxcbiAgICAgIHdheXBvaW50czogaGludHMud2F5cG9pbnRzIHx8IGNvbm5lY3Rpb24ud2F5cG9pbnRzXG4gICAgfSk7XG4gIH1cblxuICAvLyBmYWxsYmFjayBpZiBubyB3YXlwb2ludHMgd2VyZSBwcm92aWRlZCBub3IgY3JlYXRlZCB3aXRoIGxheW91dGVyXG4gIGlmICghY29ubmVjdGlvbi53YXlwb2ludHMgfHwgIWNvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCkge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gW1xuICAgICAgc291cmNlID8gZ2V0TWlkKHNvdXJjZSkgOiBjb25uZWN0aW9uU3RhcnQsXG4gICAgICB0YXJnZXQgPyBnZXRNaWQodGFyZ2V0KSA6IGNvbm5lY3Rpb25FbmRcbiAgICBdO1xuICB9XG5cbiAgLy8gb3B0aW9uYWwgY3JvcHBpbmdcbiAgaWYgKHRoaXMuX2Nvbm5lY3Rpb25Eb2NraW5nICYmIChzb3VyY2UgfHwgdGFyZ2V0KSAmJiAhbm9Dcm9wcGluZykge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gdGhpcy5fY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uLCBzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICB0aGlzLl9ncmFwaGljc0ZhY3RvcnkuZHJhd0Nvbm5lY3Rpb24oY29ubmVjdGlvblByZXZpZXdHZngsIGNvbm5lY3Rpb24pO1xufTtcblxuLyoqXG4gKiBEcmF3IHNpbXBsZSBjb25uZWN0aW9uIGJldHdlZW4gc291cmNlIGFuZCB0YXJnZXQgb3IgcHJvdmlkZWQgcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gY29ubmVjdGlvblByZXZpZXdHZnggY29udGFpbmVyIGZvciB0aGUgY29ubmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGhpbnRzXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gW2hpbnRzLnNvdXJjZV0gc291cmNlIGVsZW1lbnRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBbaGludHMudGFyZ2V0XSB0YXJnZXQgZWxlbWVudFxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25TdGFydF0gcmVxdWlyZWQgaWYgc291cmNlIGlzIG5vdCBwcm92aWRlZFxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25FbmRdIHJlcXVpcmVkIGlmIHRhcmdldCBpcyBub3QgcHJvdmlkZWRcbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmRyYXdOb29wUHJldmlldyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBoaW50cykge1xuICB2YXIgc291cmNlID0gaGludHMuc291cmNlLFxuICAgICAgdGFyZ2V0ID0gaGludHMudGFyZ2V0LFxuICAgICAgc3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQgfHwgZ2V0TWlkKHNvdXJjZSksXG4gICAgICBlbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kIHx8IGdldE1pZCh0YXJnZXQpO1xuXG4gIHZhciB3YXlwb2ludHMgPSB0aGlzLmNyb3BXYXlwb2ludHMoc3RhcnQsIGVuZCwgc291cmNlLCB0YXJnZXQpO1xuXG4gIHZhciBjb25uZWN0aW9uID0gdGhpcy5jcmVhdGVOb29wQ29ubmVjdGlvbih3YXlwb2ludHNbMF0sIHdheXBvaW50c1sxXSk7XG5cbiAgc3ZnQXBwZW5kKGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBjb25uZWN0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGNyb3BwZWQgd2F5cG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBlbmRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5jcm9wV2F5cG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc291cmNlLCB0YXJnZXQpIHtcbiAgdmFyIGdyYXBoaWNzRmFjdG9yeSA9IHRoaXMuX2dyYXBoaWNzRmFjdG9yeSxcbiAgICAgIHNvdXJjZVBhdGggPSBzb3VyY2UgJiYgZ3JhcGhpY3NGYWN0b3J5LmdldFNoYXBlUGF0aChzb3VyY2UpLFxuICAgICAgdGFyZ2V0UGF0aCA9IHRhcmdldCAmJiBncmFwaGljc0ZhY3RvcnkuZ2V0U2hhcGVQYXRoKHRhcmdldCksXG4gICAgICBjb25uZWN0aW9uUGF0aCA9IGdyYXBoaWNzRmFjdG9yeS5nZXRDb25uZWN0aW9uUGF0aCh7IHdheXBvaW50czogWyBzdGFydCwgZW5kIF0gfSk7XG5cbiAgc3RhcnQgPSAoc291cmNlICYmIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKHNvdXJjZVBhdGgsIGNvbm5lY3Rpb25QYXRoLCB0cnVlKSkgfHwgc3RhcnQ7XG4gIGVuZCA9ICh0YXJnZXQgJiYgZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb24odGFyZ2V0UGF0aCwgY29ubmVjdGlvblBhdGgsIGZhbHNlKSkgfHwgZW5kO1xuXG4gIHJldHVybiBbIHN0YXJ0LCBlbmQgXTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGNvbm5lY3Rpb24gcHJldmlldyBjb250YWluZXIgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2NvbnRleHQuY29ubmVjdGlvblByZXZpZXdHZnhdIHByZXZpZXcgY29udGFpbmVyXG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5jbGVhblVwID0gZnVuY3Rpb24oY29udGV4dCkge1xuICBpZiAoY29udGV4dCAmJiBjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4KSB7XG4gICAgc3ZnUmVtb3ZlKGNvbnRleHQuY29ubmVjdGlvblByZXZpZXdHZngpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBjb25uZWN0aW9uIHRoYXQgY29ubmVjdHMgc291cmNlIGFuZCB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gY2FuQ29ubmVjdFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuY29ubmVjdGlvbn1cbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmdldENvbm5lY3Rpb24gPSBmdW5jdGlvbihjYW5Db25uZWN0KSB7XG4gIHZhciBhdHRycyA9IGVuc3VyZUNvbm5lY3Rpb25BdHRycyhjYW5Db25uZWN0KTtcblxuICByZXR1cm4gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbihhdHRycyk7XG59O1xuXG5cbi8qKlxuICogQWRkIGFuZCByZXR1cm4gcHJldmlldyBncmFwaGljcy5cbiAqXG4gKiBAcmV0dXJucyB7U1ZHRWxlbWVudH1cbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb25QcmV2aWV3R2Z4ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBnZnggPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdBdHRyKGdmeCwge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICB9KTtcblxuICBzdmdDbGFzc2VzKGdmeCkuYWRkKE1BUktFUl9DT05ORUNUSU9OX1BSRVZJRVcpO1xuXG4gIHN2Z0FwcGVuZCh0aGlzLl9jYW52YXMuZ2V0RGVmYXVsdExheWVyKCksIGdmeCk7XG5cbiAgcmV0dXJuIGdmeDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gc2ltcGxlIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtQb2ludH0gc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IGVuZFxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5Db25uZWN0aW9uUHJldmlldy5wcm90b3R5cGUuY3JlYXRlTm9vcENvbm5lY3Rpb24gPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHZhciBjb25uZWN0aW9uID0gc3ZnQ3JlYXRlKCdwb2x5bGluZScpO1xuXG4gIHN2Z0F0dHIoY29ubmVjdGlvbiwge1xuICAgICdzdHJva2UnOiAnIzMzMycsXG4gICAgJ3N0cm9rZURhc2hhcnJheSc6IFsgMSBdLFxuICAgICdzdHJva2VXaWR0aCc6IDIsXG4gICAgJ3BvaW50ZXItZXZlbnRzJzogJ25vbmUnXG4gIH0pO1xuXG4gIHN2Z0F0dHIoY29ubmVjdGlvbiwgeyAncG9pbnRzJzogWyBzdGFydC54LCBzdGFydC55LCBlbmQueCwgZW5kLnkgXSB9KTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybnMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGNhY2hlZCByZXR1cm4gdmFsdWVzIHJlZmVyZW5jZWQgYnkgc3RyaW5naWZpZWQgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY2FjaGVSZXR1cm5WYWx1ZXMoZm4pIHtcbiAgdmFyIHJldHVyblZhbHVlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gY2FjaGVkIHJldHVybiB2YWx1ZSByZWZlcmVuY2VkIGJ5IHN0cmluZ2lmaWVkIGZpcnN0IGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbihmaXJzdEFyZ3VtZW50KSB7XG4gICAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KGZpcnN0QXJndW1lbnQpO1xuXG4gICAgdmFyIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWVzW2tleV07XG5cbiAgICBpZiAoIXJldHVyblZhbHVlKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlc1trZXldID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH07XG59XG5cbi8qKlxuICogRW5zdXJlIGNvbm5lY3Rpb24gYXR0cmlidXRlcyBpcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gY2FuQ29ubmVjdFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUNvbm5lY3Rpb25BdHRycyhjYW5Db25uZWN0KSB7XG4gIGlmIChpc09iamVjdChjYW5Db25uZWN0KSkge1xuICAgIHJldHVybiBjYW5Db25uZWN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwiaW1wb3J0IENvbm5lY3Rpb25QcmV2aWV3IGZyb20gJy4vQ29ubmVjdGlvblByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdjb25uZWN0aW9uUHJldmlldycgXSxcbiAgY29ubmVjdGlvblByZXZpZXc6IFsgJ3R5cGUnLCBDb25uZWN0aW9uUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBpc0Z1bmN0aW9uLFxuICBpc0FycmF5LFxuICBmb3JFYWNoLFxuICBpc0RlZmluZWRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgZG9taWZ5IGFzIGRvbWlmeVxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIGVudHJ5U2VsZWN0b3IgPSAnLmVudHJ5JztcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG5cbi8qKlxuICogQSBjb250ZXh0IHBhZCB0aGF0IGRpc3BsYXlzIGVsZW1lbnQgc3BlY2lmaWMsIGNvbnRleHR1YWwgYWN0aW9ucyBuZXh0XG4gKiB0byBhIGRpYWdyYW0gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBbY29uZmlnLnNjYWxlPXsgbWluOiAxLjAsIG1heDogMS41IH1dXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZS5taW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZS5tYXhdXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtPdmVybGF5c30gb3ZlcmxheXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29udGV4dFBhZChjb25maWcsIGV2ZW50QnVzLCBvdmVybGF5cykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX292ZXJsYXlzID0gb3ZlcmxheXM7XG5cbiAgdmFyIHNjYWxlID0gaXNEZWZpbmVkKGNvbmZpZyAmJiBjb25maWcuc2NhbGUpID8gY29uZmlnLnNjYWxlIDoge1xuICAgIG1pbjogMSxcbiAgICBtYXg6IDEuNVxuICB9O1xuXG4gIHRoaXMuX292ZXJsYXlzQ29uZmlnID0ge1xuICAgIHBvc2l0aW9uOiB7XG4gICAgICByaWdodDogLTksXG4gICAgICB0b3A6IC02XG4gICAgfSxcbiAgICBzY2FsZTogc2NhbGVcbiAgfTtcblxuICB0aGlzLl9jdXJyZW50ID0gbnVsbDtcblxuICB0aGlzLl9pbml0KCk7XG59XG5cbkNvbnRleHRQYWQuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5jb250ZXh0UGFkJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ292ZXJsYXlzJ1xuXTtcblxuXG4vKipcbiAqIFJlZ2lzdGVycyBldmVudHMgbmVlZGVkIGZvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHNcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ3NlbGVjdGlvbi5jaGFuZ2VkJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIHNlbGVjdGlvbiA9IGUubmV3U2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNlbGYub3BlbihzZWxlY3Rpb25bMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmNsb3NlKCk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudHMuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBldmVudC5lbGVtZW50cztcblxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChzZWxmLmlzT3BlbihlKSkge1xuICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgY3VycmVudCA9IHNlbGYuX2N1cnJlbnQ7XG5cbiAgICAvLyBmb3JjZSByZW9wZW4gaWYgZWxlbWVudCBmb3Igd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBvcGVuZWQgY2hhbmdlZFxuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgc2VsZi5vcGVuKGVsZW1lbnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwcm92aWRlciB3aXRoIHRoZSBjb250ZXh0IHBhZFxuICpcbiAqIEBwYXJhbSAge251bWJlcn0gW3ByaW9yaXR5PTEwMDBdXG4gKiBAcGFyYW0gIHtDb250ZXh0UGFkUHJvdmlkZXJ9IHByb3ZpZGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNvbnRleHRQYWRQcm92aWRlciA9IHtcbiAgKiAgIGdldENvbnRleHRQYWRFbnRyaWVzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICogICAgIHJldHVybiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICogICAgICAgcmV0dXJuIHtcbiAgKiAgICAgICAgIC4uLmVudHJpZXMsXG4gICogICAgICAgICAnZW50cnktMSc6IHtcbiAgKiAgICAgICAgICAgbGFiZWw6ICdNeSBFbnRyeScsXG4gICogICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKSB7IGFsZXJ0KFwiSSBoYXZlIGJlZW4gY2xpY2tlZCFcIik7IH1cbiAgKiAgICAgICAgIH1cbiAgKiAgICAgICB9O1xuICAqICAgICB9XG4gICogICB9XG4gICogfTtcbiAgKlxuICogY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKDgwMCwgY29udGV4dFBhZFByb3ZpZGVyKTtcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKHByaW9yaXR5LCBwcm92aWRlcikge1xuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgcHJvdmlkZXIgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbignY29udGV4dFBhZC5nZXRQcm92aWRlcnMnLCBwcmlvcml0eSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbnRleHQgcGFkIGVudHJpZXMgZm9yIGEgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7ZGpzLmVsZW1lbnQuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PENvbnRleHRQYWRFbnRyeURlc2NyaXB0b3I+fSBsaXN0IG9mIGVudHJpZXNcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuZ2V0RW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHByb3ZpZGVycyA9IHRoaXMuX2dldFByb3ZpZGVycygpO1xuXG4gIHZhciBlbnRyaWVzID0ge307XG5cbiAgLy8gbG9vcCB0aHJvdWdoIGFsbCBwcm92aWRlcnMgYW5kIHRoZWlyIGVudHJpZXMuXG4gIC8vIGdyb3VwIGVudHJpZXMgYnkgaWQgc28gdGhhdCBvdmVycmlkaW5nIGFuIGVudHJ5IGlzIHBvc3NpYmxlXG4gIGZvckVhY2gocHJvdmlkZXJzLCBmdW5jdGlvbihwcm92aWRlcikge1xuICAgIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0Q29udGV4dFBhZEVudHJpZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXNPclVwZGF0ZXIoZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgICAgIGVudHJpZXNbaWRdID0gZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcblxuXG4vKipcbiAqIFRyaWdnZXIgYW4gYWN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgb3BlbmVkIGNvbnRleHQgcGFkXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHBhcmFtICB7Ym9vbGVhbn0gW2F1dG9BY3RpdmF0ZT1mYWxzZV1cbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgZXZlbnQsIGF1dG9BY3RpdmF0ZSkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY3VycmVudC5lbGVtZW50LFxuICAgICAgZW50cmllcyA9IHRoaXMuX2N1cnJlbnQuZW50cmllcyxcbiAgICAgIGVudHJ5LFxuICAgICAgaGFuZGxlcixcbiAgICAgIG9yaWdpbmFsRXZlbnQsXG4gICAgICBidXR0b24gPSBldmVudC5kZWxlZ2F0ZVRhcmdldCB8fCBldmVudC50YXJnZXQ7XG5cbiAgaWYgKCFidXR0b24pIHtcbiAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVudHJ5ID0gZW50cmllc1tkb21BdHRyKGJ1dHRvbiwgJ2RhdGEtYWN0aW9uJyldO1xuICBoYW5kbGVyID0gZW50cnkuYWN0aW9uO1xuXG4gIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuXG4gIC8vIHNpbXBsZSBhY3Rpb24gKHZpYSBjYWxsYmFjayBmdW5jdGlvbilcbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm4gaGFuZGxlcihvcmlnaW5hbEV2ZW50LCBlbGVtZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFuZGxlclthY3Rpb25dKSB7XG4gICAgICByZXR1cm4gaGFuZGxlclthY3Rpb25dKG9yaWdpbmFsRXZlbnQsIGVsZW1lbnQsIGF1dG9BY3RpdmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2lsZW5jZSBvdGhlciBhY3Rpb25zXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG5cbi8qKlxuICogT3BlbiB0aGUgY29udGV4dCBwYWQgZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtib29sZWFufSBmb3JjZSBpZiB0cnVlLCBmb3JjZSByZW9wZW5pbmcgdGhlIGNvbnRleHQgcGFkXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihlbGVtZW50LCBmb3JjZSkge1xuICBpZiAoIWZvcmNlICYmIHRoaXMuaXNPcGVuKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5jbG9zZSgpO1xuICB0aGlzLl91cGRhdGVBbmRPcGVuKGVsZW1lbnQpO1xufTtcblxuQ29udGV4dFBhZC5wcm90b3R5cGUuX2dldFByb3ZpZGVycyA9IGZ1bmN0aW9uKGlkKSB7XG5cbiAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRCdXMuY3JlYXRlRXZlbnQoe1xuICAgIHR5cGU6ICdjb250ZXh0UGFkLmdldFByb3ZpZGVycycsXG4gICAgcHJvdmlkZXJzOiBbXVxuICB9KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKGV2ZW50KTtcblxuICByZXR1cm4gZXZlbnQucHJvdmlkZXJzO1xufTtcblxuQ29udGV4dFBhZC5wcm90b3R5cGUuX3VwZGF0ZUFuZE9wZW4gPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLmdldEVudHJpZXMoZWxlbWVudCksXG4gICAgICBwYWQgPSB0aGlzLmdldFBhZChlbGVtZW50KSxcbiAgICAgIGh0bWwgPSBwYWQuaHRtbDtcblxuICBmb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgIHZhciBncm91cGluZyA9IGVudHJ5Lmdyb3VwIHx8ICdkZWZhdWx0JyxcbiAgICAgICAgY29udHJvbCA9IGRvbWlmeShlbnRyeS5odG1sIHx8ICc8ZGl2IGNsYXNzPVwiZW50cnlcIiBkcmFnZ2FibGU9XCJ0cnVlXCI+PC9kaXY+JyksXG4gICAgICAgIGNvbnRhaW5lcjtcblxuICAgIGRvbUF0dHIoY29udHJvbCwgJ2RhdGEtYWN0aW9uJywgaWQpO1xuXG4gICAgY29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWdyb3VwPScgKyBncm91cGluZyArICddJywgaHRtbCk7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImdyb3VwXCIgZGF0YS1ncm91cD1cIicgKyBncm91cGluZyArICdcIj48L2Rpdj4nKTtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG5cbiAgICBpZiAoZW50cnkuY2xhc3NOYW1lKSB7XG4gICAgICBhZGRDbGFzc2VzKGNvbnRyb2wsIGVudHJ5LmNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LnRpdGxlKSB7XG4gICAgICBkb21BdHRyKGNvbnRyb2wsICd0aXRsZScsIGVudHJ5LnRpdGxlKTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICAgIGNvbnRyb2wuYXBwZW5kQ2hpbGQoZG9taWZ5KCc8aW1nIHNyYz1cIicgKyBlbnRyeS5pbWFnZVVybCArICdcIj4nKSk7XG4gICAgfVxuICB9KTtcblxuICBkb21DbGFzc2VzKGh0bWwpLmFkZCgnb3BlbicpO1xuXG4gIHRoaXMuX2N1cnJlbnQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBwYWQ6IHBhZCxcbiAgICBlbnRyaWVzOiBlbnRyaWVzXG4gIH07XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5vcGVuJywgeyBjdXJyZW50OiB0aGlzLl9jdXJyZW50IH0pO1xufTtcblxuXG5Db250ZXh0UGFkLnByb3RvdHlwZS5nZXRQYWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQucGFkO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBvdmVybGF5cyA9IHRoaXMuX292ZXJsYXlzO1xuXG4gIHZhciBodG1sID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZGpzLWNvbnRleHQtcGFkXCI+PC9kaXY+Jyk7XG5cbiAgdmFyIG92ZXJsYXlzQ29uZmlnID0gYXNzaWduKHtcbiAgICBodG1sOiBodG1sXG4gIH0sIHRoaXMuX292ZXJsYXlzQ29uZmlnKTtcblxuICBkb21EZWxlZ2F0ZS5iaW5kKGh0bWwsIGVudHJ5U2VsZWN0b3IsICdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi50cmlnZ2VyKCdjbGljaycsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChodG1sLCBlbnRyeVNlbGVjdG9yLCAnZHJhZ3N0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50KTtcbiAgfSk7XG5cbiAgLy8gc3RvcCBwcm9wYWdhdGlvbiBvZiBtb3VzZSBldmVudHNcbiAgZG9tRXZlbnQuYmluZChodG1sLCAnbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgdGhpcy5fb3ZlcmxheUlkID0gb3ZlcmxheXMuYWRkKGVsZW1lbnQsICdjb250ZXh0LXBhZCcsIG92ZXJsYXlzQ29uZmlnKTtcblxuICB2YXIgcGFkID0gb3ZlcmxheXMuZ2V0KHRoaXMuX292ZXJsYXlJZCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5jcmVhdGUnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIHBhZDogcGFkIH0pO1xuXG4gIHJldHVybiBwYWQ7XG59O1xuXG5cbi8qKlxuICogQ2xvc2UgdGhlIGNvbnRleHQgcGFkXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX292ZXJsYXlzLnJlbW92ZSh0aGlzLl9vdmVybGF5SWQpO1xuXG4gIHRoaXMuX292ZXJsYXlJZCA9IG51bGw7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5jbG9zZScsIHsgY3VycmVudDogdGhpcy5fY3VycmVudCB9KTtcblxuICB0aGlzLl9jdXJyZW50ID0gbnVsbDtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgcGFkIGlzIG9wZW4uIElmIGVsZW1lbnQgaXMgZ2l2ZW4sIHdpbGwgY2hlY2tcbiAqIGlmIHBhZCBpcyBvcGVuZWQgd2l0aCBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISF0aGlzLl9jdXJyZW50ICYmICghZWxlbWVudCA/IHRydWUgOiB0aGlzLl9jdXJyZW50LmVsZW1lbnQgPT09IGVsZW1lbnQpO1xufTtcblxuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcykge1xuXG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3NlcyhlbGVtZW50KTtcblxuICB2YXIgYWN0dWFsQ2xhc3NOYW1lcyA9IGlzQXJyYXkoY2xhc3NOYW1lcykgPyBjbGFzc05hbWVzIDogY2xhc3NOYW1lcy5zcGxpdCgvXFxzKy9nKTtcbiAgYWN0dWFsQ2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykge1xuICAgIGNsYXNzZXMuYWRkKGNscyk7XG4gIH0pO1xufSIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IE92ZXJsYXlzTW9kdWxlIGZyb20gJy4uL292ZXJsYXlzJztcblxuaW1wb3J0IENvbnRleHRQYWQgZnJvbSAnLi9Db250ZXh0UGFkJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgT3ZlcmxheXNNb2R1bGVcbiAgXSxcbiAgY29udGV4dFBhZDogWyAndHlwZScsIENvbnRleHRQYWQgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbmQsXG4gIGZvckVhY2gsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBtYXAsXG4gIG1hdGNoUGF0dGVybixcbiAgb21pdCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0QkJveCxcbiAgZ2V0UGFyZW50c1xufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHsgZWFjaEVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUuY2FuQ29weUVsZW1lbnRzPiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gY29udGV4dC5lbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZWwuQmFzZT58Ym9vbGVhbn0gLSBSZXR1cm4gZWxlbWVudHMgdG8gYmUgY29waWVkIG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8Y29weVBhc3RlLmNvcHlFbGVtZW50PiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5kZXNjcmlwdG9yXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBjb250ZXh0LmVsZW1lbnRcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBjb250ZXh0LmVsZW1lbnRzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUuZWxlbWVudHNDb3BpZWQ+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LmVsZW1lbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC50cmVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUucGFzdGVFbGVtZW50PiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5jYWNoZSAtIEFscmVhZHkgY3JlYXRlZCBlbGVtZW50cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LmRlc2NyaXB0b3JcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gPGNvcHlQYXN0ZS5wYXN0ZUVsZW1lbnRzPiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5oaW50cyAtIEFkZCBoaW50cyBiZWZvcmUgcGFzdGluZy5cbiAqL1xuXG4vKipcbiAqIENvcHkgYW5kIHBhc3RlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7Q3JlYXRlfSBjcmVhdGVcbiAqIEBwYXJhbSB7Q2xpcGJvYXJkfSBjbGlwYm9hcmRcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7TW91c2V9IG1vdXNlXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb3B5UGFzdGUoXG4gICAgY2FudmFzLFxuICAgIGNyZWF0ZSxcbiAgICBjbGlwYm9hcmQsXG4gICAgZWxlbWVudEZhY3RvcnksXG4gICAgZXZlbnRCdXMsXG4gICAgbW9kZWxpbmcsXG4gICAgbW91c2UsXG4gICAgcnVsZXNcbikge1xuXG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fY3JlYXRlID0gY3JlYXRlO1xuICB0aGlzLl9jbGlwYm9hcmQgPSBjbGlwYm9hcmQ7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX21vdXNlID0gbW91c2U7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgLy8gZGVmYXVsdCBwcmlvcml0eSAocHJpb3JpdHkgPSAxKVxuICAgIGRlc2NyaXB0b3IucHJpb3JpdHkgPSAxO1xuXG4gICAgZGVzY3JpcHRvci5pZCA9IGVsZW1lbnQuaWQ7XG5cbiAgICB2YXIgcGFyZW50Q29waWVkID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGUgPT09IGVsZW1lbnQucGFyZW50O1xuICAgIH0pO1xuXG4gICAgLy8gZG8gTk9UIHJlZmVyZW5jZSBwYXJlbnQgaWYgcGFyZW50IHdhc24ndCBjb3BpZWRcbiAgICBpZiAocGFyZW50Q29waWVkKSB7XG4gICAgICBkZXNjcmlwdG9yLnBhcmVudCA9IGVsZW1lbnQucGFyZW50LmlkO1xuICAgIH1cblxuICAgIC8vIGF0dGFjaGVycyAocHJpb3JpdHkgPSAyKVxuICAgIGlmIChpc0F0dGFjaGVyKGVsZW1lbnQpKSB7XG4gICAgICBkZXNjcmlwdG9yLnByaW9yaXR5ID0gMjtcblxuICAgICAgZGVzY3JpcHRvci5ob3N0ID0gZWxlbWVudC5ob3N0LmlkO1xuICAgIH1cblxuICAgIC8vIGNvbm5lY3Rpb25zIChwcmlvcml0eSA9IDMpXG4gICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgZGVzY3JpcHRvci5wcmlvcml0eSA9IDM7XG5cbiAgICAgIGRlc2NyaXB0b3Iuc291cmNlID0gZWxlbWVudC5zb3VyY2UuaWQ7XG4gICAgICBkZXNjcmlwdG9yLnRhcmdldCA9IGVsZW1lbnQudGFyZ2V0LmlkO1xuXG4gICAgICBkZXNjcmlwdG9yLndheXBvaW50cyA9IGNvcHlXYXlwb2ludHMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gbGFiZWxzIChwcmlvcml0eSA9IDQpXG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIGRlc2NyaXB0b3IucHJpb3JpdHkgPSA0O1xuXG4gICAgICBkZXNjcmlwdG9yLmxhYmVsVGFyZ2V0ID0gZWxlbWVudC5sYWJlbFRhcmdldC5pZDtcbiAgICB9XG5cbiAgICBmb3JFYWNoKFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF0sIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgICBpZiAoaXNOdW1iZXIoZWxlbWVudFsgcHJvcGVydHkgXSkpIHtcbiAgICAgICAgZGVzY3JpcHRvclsgcHJvcGVydHkgXSA9IGVsZW1lbnRbIHByb3BlcnR5IF07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZXNjcmlwdG9yLmhpZGRlbiA9IGVsZW1lbnQuaGlkZGVuO1xuICAgIGRlc2NyaXB0b3IuY29sbGFwc2VkID0gZWxlbWVudC5jb2xsYXBzZWQ7XG5cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnRzJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBoaW50cyA9IGNvbnRleHQuaGludHM7XG5cbiAgICBhc3NpZ24oaGludHMsIHtcbiAgICAgIGNyZWF0ZUVsZW1lbnRzQmVoYXZpb3I6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5Db3B5UGFzdGUuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdjcmVhdGUnLFxuICAnY2xpcGJvYXJkJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ21vdXNlJyxcbiAgJ3J1bGVzJ1xuXTtcblxuXG4vKipcbiAqIENvcHkgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIGFsbG93ZWQsXG4gICAgICB0cmVlO1xuXG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzID8gWyBlbGVtZW50cyBdIDogW107XG4gIH1cblxuICBhbGxvd2VkID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29weVBhc3RlLmNhbkNvcHlFbGVtZW50cycsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgdHJlZSA9IHt9O1xuICB9IGVsc2Uge1xuICAgIHRyZWUgPSB0aGlzLmNyZWF0ZVRyZWUoaXNBcnJheShhbGxvd2VkKSA/IGFsbG93ZWQgOiBlbGVtZW50cyk7XG4gIH1cblxuICAvLyB3ZSBzZXQgYW4gZW1wdHkgdHJlZSwgc2VsZWN0aW9uIG9mIGVsZW1lbnRzXG4gIC8vIHRvIGNvcHkgd2FzIGVtcHR5LlxuICB0aGlzLl9jbGlwYm9hcmQuc2V0KHRyZWUpO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5lbGVtZW50c0NvcGllZCcsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgdHJlZTogdHJlZVxuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn07XG5cbi8qKlxuICogUGFzdGUgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHBhcmFtIHtkanMubW9kZWwuYmFzZX0gW2NvbnRleHQuZWxlbWVudF0gLSBQYXJlbnQuXG4gKiBAcGFyYW0ge1BvaW50fSBbY29udGV4dC5wb2ludF0gLSBQb3NpdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dC5oaW50c10gLSBIaW50cy5cbiAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5wYXN0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHRyZWUgPSB0aGlzLl9jbGlwYm9hcmQuZ2V0KCk7XG5cbiAgaWYgKHRoaXMuX2NsaXBib2FyZC5pc0VtcHR5KCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGludHMgPSBjb250ZXh0ICYmIGNvbnRleHQuaGludHMgfHwge307XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29weVBhc3RlLnBhc3RlRWxlbWVudHMnLCB7XG4gICAgaGludHM6IGhpbnRzXG4gIH0pO1xuXG4gIHZhciBlbGVtZW50cyA9IHRoaXMuX2NyZWF0ZUVsZW1lbnRzKHRyZWUpO1xuXG4gIC8vIHBhc3RlIGRpcmVjdGx5XG4gIGlmIChjb250ZXh0ICYmIGNvbnRleHQuZWxlbWVudCAmJiBjb250ZXh0LnBvaW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bhc3RlKGVsZW1lbnRzLCBjb250ZXh0LmVsZW1lbnQsIGNvbnRleHQucG9pbnQsIGhpbnRzKTtcbiAgfVxuXG4gIHRoaXMuX2NyZWF0ZS5zdGFydCh0aGlzLl9tb3VzZS5nZXRMYXN0TW92ZUV2ZW50KCksIGVsZW1lbnRzLCB7XG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQYXN0ZSBlbGVtZW50cyBkaXJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLmJhc2V9IHRhcmdldFxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuX3Bhc3RlID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCwgcG9zaXRpb24sIGhpbnRzKSB7XG5cbiAgLy8gbWFrZSBzdXJlIGVhY2ggZWxlbWVudCBoYXMgeCBhbmQgeVxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKCFpc051bWJlcihlbGVtZW50LngpKSB7XG4gICAgICBlbGVtZW50LnggPSAwO1xuICAgIH1cblxuICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC55KSkge1xuICAgICAgZWxlbWVudC55ID0gMDtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBiYm94ID0gZ2V0QkJveChlbGVtZW50cyk7XG5cbiAgLy8gY2VudGVyIGVsZW1lbnRzIGFyb3VuZCBjdXJzb3JcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQud2F5cG9pbnRzID0gbWFwKGVsZW1lbnQud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHdheXBvaW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMixcbiAgICAgICAgICB5OiB3YXlwb2ludC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3NpZ24oZWxlbWVudCwge1xuICAgICAgeDogZWxlbWVudC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgLSBiYm94LnkgLSBiYm94LmhlaWdodCAvIDJcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXMuX21vZGVsaW5nLmNyZWF0ZUVsZW1lbnRzKGVsZW1lbnRzLCBwb3NpdGlvbiwgdGFyZ2V0LCBhc3NpZ24oe30sIGhpbnRzKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBlbGVtZW50cyBmcm9tIHRyZWUuXG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnRzID0gZnVuY3Rpb24odHJlZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIGNhY2hlID0ge307XG5cbiAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgZm9yRWFjaCh0cmVlLCBmdW5jdGlvbihicmFuY2gsIGRlcHRoKSB7XG5cbiAgICBkZXB0aCA9IHBhcnNlSW50KGRlcHRoLCAxMCk7XG5cbiAgICAvLyBzb3J0IGJ5IHByaW9yaXR5XG4gICAgYnJhbmNoID0gc29ydEJ5KGJyYW5jaCwgJ3ByaW9yaXR5Jyk7XG5cbiAgICBmb3JFYWNoKGJyYW5jaCwgZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gICAgICAvLyByZW1vdmUgcHJpb3JpdHlcbiAgICAgIHZhciBhdHRycyA9IGFzc2lnbih7fSwgb21pdChkZXNjcmlwdG9yLCBbICdwcmlvcml0eScgXSkpO1xuXG4gICAgICBpZiAoY2FjaGVbIGRlc2NyaXB0b3IucGFyZW50IF0pIHtcbiAgICAgICAgYXR0cnMucGFyZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IucGFyZW50IF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgYXR0cnMucGFyZW50O1xuICAgICAgfVxuXG4gICAgICBldmVudEJ1cy5maXJlKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50Jywge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIGRlc2NyaXB0b3I6IGF0dHJzXG4gICAgICB9KTtcblxuICAgICAgdmFyIGVsZW1lbnQ7XG5cbiAgICAgIGlmIChpc0Nvbm5lY3Rpb24oYXR0cnMpKSB7XG4gICAgICAgIGF0dHJzLnNvdXJjZSA9IGNhY2hlWyBkZXNjcmlwdG9yLnNvdXJjZSBdO1xuICAgICAgICBhdHRycy50YXJnZXQgPSBjYWNoZVsgZGVzY3JpcHRvci50YXJnZXQgXTtcblxuICAgICAgICBlbGVtZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IuaWQgXSA9IHNlbGYuY3JlYXRlQ29ubmVjdGlvbihhdHRycyk7XG5cbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xhYmVsKGF0dHJzKSkge1xuICAgICAgICBhdHRycy5sYWJlbFRhcmdldCA9IGNhY2hlWyBhdHRycy5sYWJlbFRhcmdldCBdO1xuXG4gICAgICAgIGVsZW1lbnQgPSBjYWNoZVsgZGVzY3JpcHRvci5pZCBdID0gc2VsZi5jcmVhdGVMYWJlbChhdHRycyk7XG5cbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycy5ob3N0KSB7XG4gICAgICAgIGF0dHJzLmhvc3QgPSBjYWNoZVsgYXR0cnMuaG9zdCBdO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IuaWQgXSA9IHNlbGYuY3JlYXRlU2hhcGUoYXR0cnMpO1xuXG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn07XG5cbkNvcHlQYXN0ZS5wcm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBjb25uZWN0aW9uID0gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbihvbWl0KGF0dHJzLCBbICdpZCcgXSkpO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVMYWJlbCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBsYWJlbCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZUxhYmVsKG9taXQoYXR0cnMsIFsgJ2lkJyBdKSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufTtcblxuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBzaGFwZSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKG9taXQoYXR0cnMsIFsgJ2lkJyBdKSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuLyoqXG4gKiBDaGVjayB3ZXRoZXIgZWxlbWVudCBoYXMgcmVsYXRpb25zIHRvIG90aGVyIGVsZW1lbnRzIGUuZy4gYXR0YWNoZXJzLCBsYWJlbHMgYW5kIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Db3B5UGFzdGUucHJvdG90eXBlLmhhc1JlbGF0aW9ucyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBsYWJlbFRhcmdldCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIHRhcmdldDtcblxuICBpZiAoaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgc291cmNlID0gZmluZChlbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQuc291cmNlLmlkIH0pKTtcbiAgICB0YXJnZXQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC50YXJnZXQuaWQgfSkpO1xuXG4gICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgbGFiZWxUYXJnZXQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5sYWJlbFRhcmdldC5pZCB9KSk7XG5cbiAgICBpZiAoIWxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgZnJvbSBlbGVtZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdHJlZToge1xuICAqICAwOiBbXG4gICogICAgeyBpZDogJ1NoYXBlXzEnLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgeyBpZDogJ1NoYXBlXzInLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgeyBpZDogJ0Nvbm5lY3Rpb25fMScsIHNvdXJjZTogJ1NoYXBlXzEnLCB0YXJnZXQ6ICdTaGFwZV8yJywgcHJpb3JpdHk6IDMsIC4uLiB9LFxuICAqICAgIC4uLlxuICAqICBdLFxuICAqICAxOiBbXG4gICogICAgeyBpZDogJ1NoYXBlXzMnLCBwYXJlbnQ6ICdTaGFwZTEnLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgLi4uXG4gICogIF1cbiAgKiB9O1xuICAqXG4gICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLmJhc2U+fSBlbGVtZW50c1xuICAqXG4gICogQHJldHVybiB7T2JqZWN0fVxuICAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVUcmVlID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXMsXG4gICAgICBzZWxmID0gdGhpcztcblxuICB2YXIgdHJlZSA9IHt9LFxuICAgICAgZWxlbWVudHNEYXRhID0gW107XG5cbiAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnRzKTtcblxuICBmdW5jdGlvbiBjYW5Db3B5KGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gICAgcmV0dXJuIHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnQuY29weScsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVsZW1lbnREYXRhKGVsZW1lbnQsIGRlcHRoKSB7XG5cbiAgICAvLyAoMSkgY2hlY2sgd2V0aGVyIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZFxuICAgIHZhciBmb3VuZEVsZW1lbnREYXRhID0gZmluZChlbGVtZW50c0RhdGEsIGZ1bmN0aW9uKGVsZW1lbnRzRGF0YSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGVsZW1lbnRzRGF0YS5lbGVtZW50O1xuICAgIH0pO1xuXG4gICAgLy8gKDIpIGFkZCBlbGVtZW50IGlmIG5vdCBhbHJlYWR5IGFkZGVkXG4gICAgaWYgKCFmb3VuZEVsZW1lbnREYXRhKSB7XG4gICAgICBlbGVtZW50c0RhdGEucHVzaCh7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIGRlcHRoOiBkZXB0aFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAoMykgdXBkYXRlIGRlcHRoXG4gICAgaWYgKGZvdW5kRWxlbWVudERhdGEuZGVwdGggPCBkZXB0aCkge1xuICAgICAgZWxlbWVudHNEYXRhID0gcmVtb3ZlRWxlbWVudERhdGEoZm91bmRFbGVtZW50RGF0YSwgZWxlbWVudHNEYXRhKTtcblxuICAgICAgZWxlbWVudHNEYXRhLnB1c2goe1xuICAgICAgICBlbGVtZW50OiBmb3VuZEVsZW1lbnREYXRhLmVsZW1lbnQsXG4gICAgICAgIGRlcHRoOiBkZXB0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudERhdGEoZWxlbWVudERhdGEsIGVsZW1lbnRzRGF0YSkge1xuICAgIHZhciBpbmRleCA9IGVsZW1lbnRzRGF0YS5pbmRleE9mKGVsZW1lbnREYXRhKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGVsZW1lbnRzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c0RhdGE7XG4gIH1cblxuICAvLyAoMSkgYWRkIGVsZW1lbnRzXG4gIGVhY2hFbGVtZW50KHBhcmVudHMsIGZ1bmN0aW9uKGVsZW1lbnQsIF9pbmRleCwgZGVwdGgpIHtcblxuICAgIC8vIGRvIE5PVCBhZGQgZXh0ZXJuYWwgbGFiZWxzIGRpcmVjdGx5XG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbHdheXMgY29weSBleHRlcm5hbCBsYWJlbHNcbiAgICBmb3JFYWNoKGVsZW1lbnQubGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgYWRkRWxlbWVudERhdGEobGFiZWwsIGRlcHRoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlbGF0ZWRFbGVtZW50cyhlbGVtZW50cykge1xuICAgICAgZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoICYmIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgICAvLyBhZGQgZXh0ZXJuYWwgbGFiZWxzXG4gICAgICAgIGZvckVhY2goZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgICAgYWRkRWxlbWVudERhdGEobGFiZWwsIGRlcHRoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWRkRWxlbWVudERhdGEoZWxlbWVudCwgZGVwdGgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yRWFjaChbIGVsZW1lbnQuYXR0YWNoZXJzLCBlbGVtZW50LmluY29taW5nLCBlbGVtZW50Lm91dGdvaW5nIF0sIGFkZFJlbGF0ZWRFbGVtZW50cyk7XG5cbiAgICBhZGRFbGVtZW50RGF0YShlbGVtZW50LCBkZXB0aCk7XG5cbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgfSk7XG5cbiAgZWxlbWVudHMgPSBtYXAoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIHJldHVybiBlbGVtZW50RGF0YS5lbGVtZW50O1xuICB9KTtcblxuICAvLyAoMikgY29weSBlbGVtZW50c1xuICBlbGVtZW50c0RhdGEgPSBtYXAoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIGVsZW1lbnREYXRhLmRlc2NyaXB0b3IgPSB7fTtcblxuICAgIHNlbGYuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIHtcbiAgICAgIGRlc2NyaXB0b3I6IGVsZW1lbnREYXRhLmRlc2NyaXB0b3IsXG4gICAgICBlbGVtZW50OiBlbGVtZW50RGF0YS5lbGVtZW50LFxuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWxlbWVudERhdGE7XG4gIH0pO1xuXG4gIC8vICgzKSBzb3J0IGVsZW1lbnRzIGJ5IHByaW9yaXR5XG4gIGVsZW1lbnRzRGF0YSA9IHNvcnRCeShlbGVtZW50c0RhdGEsIGZ1bmN0aW9uKGVsZW1lbnREYXRhKSB7XG4gICAgcmV0dXJuIGVsZW1lbnREYXRhLmRlc2NyaXB0b3IucHJpb3JpdHk7XG4gIH0pO1xuXG4gIGVsZW1lbnRzID0gbWFwKGVsZW1lbnRzRGF0YSwgZnVuY3Rpb24oZWxlbWVudERhdGEpIHtcbiAgICByZXR1cm4gZWxlbWVudERhdGEuZWxlbWVudDtcbiAgfSk7XG5cbiAgLy8gKDQpIGNyZWF0ZSB0cmVlXG4gIGZvckVhY2goZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIHZhciBkZXB0aCA9IGVsZW1lbnREYXRhLmRlcHRoO1xuXG4gICAgaWYgKCFzZWxmLmhhc1JlbGF0aW9ucyhlbGVtZW50RGF0YS5lbGVtZW50LCBlbGVtZW50cykpIHtcbiAgICAgIHJlbW92ZUVsZW1lbnQoZWxlbWVudERhdGEuZWxlbWVudCwgZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjYW5Db3B5KGVsZW1lbnREYXRhLmVsZW1lbnQsIGVsZW1lbnRzKSkge1xuICAgICAgcmVtb3ZlRWxlbWVudChlbGVtZW50RGF0YS5lbGVtZW50LCBlbGVtZW50cyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRyZWVbZGVwdGhdKSB7XG4gICAgICB0cmVlW2RlcHRoXSA9IFtdO1xuICAgIH1cblxuICAgIHRyZWVbZGVwdGhdLnB1c2goZWxlbWVudERhdGEuZGVzY3JpcHRvcik7XG4gIH0pO1xuXG4gIHJldHVybiB0cmVlO1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzQXR0YWNoZXIoZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50Lmhvc3Q7XG59XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xufVxuXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29weVdheXBvaW50cyhlbGVtZW50KSB7XG4gIHJldHVybiBtYXAoZWxlbWVudC53YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XG5cbiAgICB3YXlwb2ludCA9IGNvcHlXYXlwb2ludCh3YXlwb2ludCk7XG5cbiAgICBpZiAod2F5cG9pbnQub3JpZ2luYWwpIHtcbiAgICAgIHdheXBvaW50Lm9yaWdpbmFsID0gY29weVdheXBvaW50KHdheXBvaW50Lm9yaWdpbmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2F5cG9pbnQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb3B5V2F5cG9pbnQod2F5cG9pbnQpIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgd2F5cG9pbnQpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBpbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50cztcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xufVxuIiwiaW1wb3J0IENsaXBib2FyZE1vZHVsZSBmcm9tICcuLi9jbGlwYm9hcmQnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICcuLi9jcmVhdGUnO1xuaW1wb3J0IE1vdXNlTW9kdWxlIGZyb20gJy4uL21vdXNlJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBDb3B5UGFzdGUgZnJvbSAnLi9Db3B5UGFzdGUnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDbGlwYm9hcmRNb2R1bGUsXG4gICAgQ3JlYXRlTW9kdWxlLFxuICAgIE1vdXNlTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdjb3B5UGFzdGUnIF0sXG4gIGNvcHlQYXN0ZTogWyAndHlwZScsIENvcHlQYXN0ZSBdXG59O1xuIiwidmFyIE1BUktFUl9PSyA9ICdkcm9wLW9rJyxcbiAgICBNQVJLRVJfTk9UX09LID0gJ2Ryb3Atbm90LW9rJyxcbiAgICBNQVJLRVJfQVRUQUNIID0gJ2F0dGFjaC1vaycsXG4gICAgTUFSS0VSX05FV19QQVJFTlQgPSAnbmV3LXBhcmVudCc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgbWFwXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgZ2V0QkJveCB9IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG52YXIgUFJFRklYID0gJ2NyZWF0ZSc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcblxuXG4vKipcbiAqIENyZWF0ZSBuZXcgZWxlbWVudHMgdGhyb3VnaCBkcmFnIGFuZCBkcm9wLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZShcbiAgICBjYW52YXMsXG4gICAgZHJhZ2dpbmcsXG4gICAgZXZlbnRCdXMsXG4gICAgbW9kZWxpbmcsXG4gICAgcnVsZXNcbikge1xuXG4gIC8vIHJ1bGVzIC8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQ2hlY2sgd2V0aGVyIGVsZW1lbnRzIGNhbiBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtzb3VyY2VdXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufG51bGx8T2JqZWN0fVxuICAgKi9cbiAgZnVuY3Rpb24gY2FuQ3JlYXRlKGVsZW1lbnRzLCB0YXJnZXQsIHBvc2l0aW9uLCBzb3VyY2UsIGhpbnRzKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgY2hpbGQgZWxlbWVudHMgYW5kIGV4dGVybmFsIGxhYmVsc1xuICAgIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgbGFiZWxUYXJnZXQgPSBlbGVtZW50LmxhYmVsVGFyZ2V0O1xuXG4gICAgICByZXR1cm4gIWVsZW1lbnQucGFyZW50ICYmICEoaXNMYWJlbChlbGVtZW50KSAmJiBlbGVtZW50cy5pbmRleE9mKGxhYmVsVGFyZ2V0KSAhPT0gLTEpO1xuICAgIH0pO1xuXG4gICAgdmFyIHNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICFpc0Nvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICB2YXIgYXR0YWNoID0gZmFsc2UsXG4gICAgICAgIGNvbm5lY3QgPSBmYWxzZSxcbiAgICAgICAgY3JlYXRlID0gZmFsc2U7XG5cbiAgICAvLyAoMSkgYXR0YWNoaW5nIHNpbmdsZSBzaGFwZXNcbiAgICBpZiAoaXNTaW5nbGVTaGFwZShlbGVtZW50cykpIHtcbiAgICAgIGF0dGFjaCA9IHJ1bGVzLmFsbG93ZWQoJ3NoYXBlLmF0dGFjaCcsIHtcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBzaGFwZTogc2hhcGUsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWF0dGFjaCkge1xuXG4gICAgICAvLyAoMikgY3JlYXRpbmcgZWxlbWVudHNcbiAgICAgIGlmIChpc1NpbmdsZVNoYXBlKGVsZW1lbnRzKSkge1xuICAgICAgICBjcmVhdGUgPSBydWxlcy5hbGxvd2VkKCdzaGFwZS5jcmVhdGUnLCB7XG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIHNoYXBlOiBzaGFwZSxcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWF0ZSA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmNyZWF0ZScsIHtcbiAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgdmFyIGNvbm5lY3Rpb25UYXJnZXQgPSBoaW50cy5jb25uZWN0aW9uVGFyZ2V0O1xuXG4gICAgLy8gKDMpIGFwcGVuZGluZyBzaW5nbGUgc2hhcGVzXG4gICAgaWYgKGNyZWF0ZSB8fCBhdHRhY2gpIHtcbiAgICAgIGlmIChzaGFwZSAmJiBzb3VyY2UpIHtcbiAgICAgICAgY29ubmVjdCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24uY3JlYXRlJywge1xuICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvblRhcmdldCA9PT0gc291cmNlID8gc2hhcGUgOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiBjb25uZWN0aW9uVGFyZ2V0ID09PSBzb3VyY2UgPyBzb3VyY2UgOiBzaGFwZSxcbiAgICAgICAgICBoaW50czoge1xuICAgICAgICAgICAgdGFyZ2V0UGFyZW50OiB0YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXRBdHRhY2g6IGF0dGFjaFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGF0dGFjaDogYXR0YWNoLFxuICAgICAgICBjb25uZWN0OiBjb25uZWN0XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGlnbm9yZSB3ZXRoZXIgb3Igbm90IGVsZW1lbnRzIGNhbiBiZSBjcmVhdGVkXG4gICAgaWYgKGNyZWF0ZSA9PT0gbnVsbCB8fCBhdHRhY2ggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE1hcmtlcihlbGVtZW50LCBtYXJrZXIpIHtcbiAgICBbIE1BUktFUl9BVFRBQ0gsIE1BUktFUl9PSywgTUFSS0VSX05PVF9PSywgTUFSS0VSX05FV19QQVJFTlQgXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcblxuICAgICAgaWYgKG0gPT09IG1hcmtlcikge1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIG0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV2ZW50IGhhbmRsaW5nIC8vLy8vLy8vLy9cblxuICBldmVudEJ1cy5vbihbICdjcmVhdGUubW92ZScsICdjcmVhdGUuaG92ZXInIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoIWhvdmVyKSB7XG4gICAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gbnVsbDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVuc3VyZUNvbnN0cmFpbnRzKGV2ZW50KTtcblxuICAgIHZhciBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcblxuICAgIHZhciBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlID0gaG92ZXIgJiYgY2FuQ3JlYXRlKGVsZW1lbnRzLCBob3ZlciwgcG9zaXRpb24sIHNvdXJjZSwgaGludHMpO1xuXG4gICAgaWYgKGhvdmVyICYmIGNhbkV4ZWN1dGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gaG92ZXI7XG5cbiAgICAgIGlmIChjYW5FeGVjdXRlICYmIGNhbkV4ZWN1dGUuYXR0YWNoKSB7XG4gICAgICAgIHNldE1hcmtlcihob3ZlciwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRNYXJrZXIoaG92ZXIsIGNhbkV4ZWN1dGUgPyBNQVJLRVJfTkVXX1BBUkVOVCA6IE1BUktFUl9OT1RfT0spO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY3JlYXRlLmVuZCcsICdjcmVhdGUub3V0JywgJ2NyZWF0ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBob3ZlciA9IGV2ZW50LmhvdmVyO1xuXG4gICAgaWYgKGhvdmVyKSB7XG4gICAgICBzZXRNYXJrZXIoaG92ZXIsIG51bGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgYXR0YWNoID0gY2FuRXhlY3V0ZSAmJiBjYW5FeGVjdXRlLmF0dGFjaCxcbiAgICAgICAgY29ubmVjdCA9IGNhbkV4ZWN1dGUgJiYgY2FuRXhlY3V0ZS5jb25uZWN0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gZmFsc2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGVuc3VyZUNvbnN0cmFpbnRzKGV2ZW50KTtcblxuICAgIHZhciBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcblxuICAgIGlmIChjb25uZWN0KSB7XG4gICAgICBzaGFwZSA9IG1vZGVsaW5nLmFwcGVuZFNoYXBlKHNvdXJjZSwgc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIHtcbiAgICAgICAgYXR0YWNoOiBhdHRhY2gsXG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3QgPT09IHRydWUgPyB7fSA6IGNvbm5lY3QsXG4gICAgICAgIGNvbm5lY3Rpb25UYXJnZXQ6IGhpbnRzLmNvbm5lY3Rpb25UYXJnZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50cyA9IG1vZGVsaW5nLmNyZWF0ZUVsZW1lbnRzKGVsZW1lbnRzLCBwb3NpdGlvbiwgdGFyZ2V0LCBhc3NpZ24oe30sIGhpbnRzLCB7XG4gICAgICAgIGF0dGFjaDogYXR0YWNoXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBzaGFwZVxuICAgICAgc2hhcGUgPSBmaW5kKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGVsZW1lbnRzIGFuZCBzaGFwZVxuICAgIGFzc2lnbihjb250ZXh0LCB7XG4gICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICBzaGFwZTogc2hhcGVcbiAgICB9KTtcblxuICAgIGFzc2lnbihldmVudCwge1xuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICB2YXIgY29udGV4dCA9IGRyYWdnaW5nLmNvbnRleHQoKTtcblxuICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQucHJlZml4ID09PSBQUkVGSVgpIHtcbiAgICAgIGRyYWdnaW5nLmNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNhbmNlbCBvbiA8ZWxlbWVudHMuY2hhbmdlZD4gdGhhdCBpcyBub3QgcmVzdWx0IG9mIDxkcmFnLmVuZD5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRCdXMub24oJ2VsZW1lbnRzLmNoYW5nZWQnLCBjYW5jZWwpO1xuXG4gICAgZXZlbnRCdXMub25jZShbICdjcmVhdGUuY2FuY2VsJywgJ2NyZWF0ZS5lbmQnIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKCkge1xuICAgICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50cy5jaGFuZ2VkJywgY2FuY2VsKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQVBJIC8vLy8vLy8vLy9cblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnRzLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpc0FycmF5KGVsZW1lbnRzKSkge1xuICAgICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICFpc0Nvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXBlKSB7XG5cbiAgICAgIC8vIGF0IGxlYXN0IG9uZSBzaGFwZSBpcyByZXF1aXJlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQgPSBhc3NpZ24oe1xuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgaGludHM6IHt9LFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSwgY29udGV4dCB8fCB7fSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgZWFjaCBlbGVtZW50IGhhcyB4IGFuZCB5XG4gICAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKCFpc051bWJlcihlbGVtZW50LngpKSB7XG4gICAgICAgIGVsZW1lbnQueCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC55KSkge1xuICAgICAgICBlbGVtZW50LnkgPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGJib3ggPSBnZXRCQm94KGVsZW1lbnRzKTtcblxuICAgIC8vIGNlbnRlciBlbGVtZW50cyBhcm91bmQgY3Vyc29yXG4gICAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LndheXBvaW50cyA9IG1hcChlbGVtZW50LndheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogd2F5cG9pbnQueCAtIGJib3gueCAtIGJib3gud2lkdGggLyAyLFxuICAgICAgICAgICAgeTogd2F5cG9pbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMlxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24oZWxlbWVudCwge1xuICAgICAgICB4OiBlbGVtZW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMixcbiAgICAgICAgeTogZWxlbWVudC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsIFBSRUZJWCwge1xuICAgICAgY3Vyc29yOiAnZ3JhYmJpbmcnLFxuICAgICAgYXV0b0FjdGl2YXRlOiB0cnVlLFxuICAgICAgZGF0YToge1xuICAgICAgICBzaGFwZTogc2hhcGUsXG4gICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5DcmVhdGUuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdydWxlcydcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVDb25zdHJhaW50cyhldmVudCkge1xuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICBjcmVhdGVDb25zdHJhaW50cyA9IGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHM7XG5cbiAgaWYgKCFjcmVhdGVDb25zdHJhaW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy5sZWZ0KSB7XG4gICAgZXZlbnQueCA9IE1hdGgubWF4KGV2ZW50LngsIGNyZWF0ZUNvbnN0cmFpbnRzLmxlZnQpO1xuICB9XG5cbiAgaWYgKGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0KSB7XG4gICAgZXZlbnQueCA9IE1hdGgubWluKGV2ZW50LngsIGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0KTtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy50b3ApIHtcbiAgICBldmVudC55ID0gTWF0aC5tYXgoZXZlbnQueSwgY3JlYXRlQ29uc3RyYWludHMudG9wKTtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy5ib3R0b20pIHtcbiAgICBldmVudC55ID0gTWF0aC5taW4oZXZlbnQueSwgY3JlYXRlQ29uc3RyYWludHMuYm90dG9tKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gaXNTaW5nbGVTaGFwZShlbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID09PSAxICYmICFpc0Nvbm5lY3Rpb24oZWxlbWVudHNbMF0pO1xufVxuXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cbiIsImltcG9ydCB7XHJcbiAgdHJhbnNsYXRlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcclxuXHJcbmltcG9ydCB7IGdldFZpc3VhbCB9IGZyb20gJy4uLy4uL3V0aWwvR3JhcGhpY3NVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcclxuICBhdHRyIGFzIHN2Z0F0dHIsXHJcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcclxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXHJcbn0gZnJvbSAndGlueS1zdmcnO1xyXG5cclxudmFyIExPV19QUklPUklUWSA9IDc1MDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQcmV2aWV3KFxyXG4gICAgY2FudmFzLFxyXG4gICAgZXZlbnRCdXMsXHJcbiAgICBncmFwaGljc0ZhY3RvcnksXHJcbiAgICBwcmV2aWV3U3VwcG9ydCxcclxuICAgIHN0eWxlc1xyXG4pIHtcclxuICBmdW5jdGlvbiBjcmVhdGVEcmFnR3JvdXAoZWxlbWVudHMpIHtcclxuICAgIHZhciBkcmFnR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcclxuXHJcbiAgICBzdmdBdHRyKGRyYWdHcm91cCwgc3R5bGVzLmNscygnZGpzLWRyYWctZ3JvdXAnLCBbICduby1ldmVudHMnIF0pKTtcclxuXHJcbiAgICB2YXIgY2hpbGRyZW5HZnggPSBzdmdDcmVhdGUoJ2cnKTtcclxuXHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZSBncmFwaGljc1xyXG4gICAgICB2YXIgZ2Z4O1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuaGlkZGVuKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcclxuICAgICAgICBnZnggPSBncmFwaGljc0ZhY3RvcnkuX2NyZWF0ZUNvbnRhaW5lcignY29ubmVjdGlvbicsIGNoaWxkcmVuR2Z4KTtcclxuXHJcbiAgICAgICAgZ3JhcGhpY3NGYWN0b3J5LmRyYXdDb25uZWN0aW9uKGdldFZpc3VhbChnZngpLCBlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnZnggPSBncmFwaGljc0ZhY3RvcnkuX2NyZWF0ZUNvbnRhaW5lcignc2hhcGUnLCBjaGlsZHJlbkdmeCk7XHJcblxyXG4gICAgICAgIGdyYXBoaWNzRmFjdG9yeS5kcmF3U2hhcGUoZ2V0VmlzdWFsKGdmeCksIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICB0cmFuc2xhdGUoZ2Z4LCBlbGVtZW50LngsIGVsZW1lbnQueSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBwcmV2aWV3XHJcbiAgICAgIHByZXZpZXdTdXBwb3J0LmFkZERyYWdnZXIoZWxlbWVudCwgZHJhZ0dyb3VwLCBnZngpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRyYWdHcm91cDtcclxuICB9XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcixcclxuICAgICAgICBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXHJcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXA7XHJcblxyXG4gICAgLy8gbGF6aWx5IGNyZWF0ZSBwcmV2aWV3c1xyXG4gICAgaWYgKCFkcmFnR3JvdXApIHtcclxuICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXAgPSBjcmVhdGVEcmFnR3JvdXAoZWxlbWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkZWZhdWx0TGF5ZXI7XHJcblxyXG4gICAgaWYgKGhvdmVyKSB7XHJcbiAgICAgIGlmICghZHJhZ0dyb3VwLnBhcmVudE5vZGUpIHtcclxuICAgICAgICBkZWZhdWx0TGF5ZXIgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCk7XHJcblxyXG4gICAgICAgIHN2Z0FwcGVuZChkZWZhdWx0TGF5ZXIsIGRyYWdHcm91cCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyYW5zbGF0ZShkcmFnR3JvdXAsIGV2ZW50LngsIGV2ZW50LnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3ZnUmVtb3ZlKGRyYWdHcm91cCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXA7XHJcblxyXG4gICAgaWYgKGRyYWdHcm91cCkge1xyXG4gICAgICBzdmdSZW1vdmUoZHJhZ0dyb3VwKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuQ3JlYXRlUHJldmlldy4kaW5qZWN0ID0gW1xyXG4gICdjYW52YXMnLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyYXBoaWNzRmFjdG9yeScsXHJcbiAgJ3ByZXZpZXdTdXBwb3J0JyxcclxuICAnc3R5bGVzJ1xyXG5dO1xyXG4iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuaW1wb3J0IFByZXZpZXdTdXBwb3J0TW9kdWxlIGZyb20gJy4uL3ByZXZpZXctc3VwcG9ydCc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuXG5pbXBvcnQgQ3JlYXRlIGZyb20gJy4vQ3JlYXRlJztcbmltcG9ydCBDcmVhdGVQcmV2aWV3IGZyb20gJy4vQ3JlYXRlUHJldmlldyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFByZXZpZXdTdXBwb3J0TW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogW1xuICAgICdjcmVhdGUnLFxuICAgICdjcmVhdGVQcmV2aWV3J1xuICBdLFxuICBjcmVhdGU6IFsgJ3R5cGUnLCBDcmVhdGUgXSxcbiAgY3JlYXRlUHJldmlldzogWyAndHlwZScsIENyZWF0ZVByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIHNvcnRCeSxcbiAgZm9yRWFjaCxcbiAgZmlsdGVyXG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIEFYSVNfRElNRU5TSU9OUyA9IHtcbiAgaG9yaXpvbnRhbDogWyAneCcsICd3aWR0aCcgXSxcbiAgdmVydGljYWw6IFsgJ3knLCAnaGVpZ2h0JyBdXG59O1xuXG52YXIgVEhSRVNIT0xEID0gNTtcblxuXG4vKipcbiAqIEdyb3VwcyBhbmQgZmlsdGVycyBlbGVtZW50cyBhbmQgdGhlbiB0cmlnZ2VyIGV2ZW4gZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXN0cmlidXRlRWxlbWVudHMobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcblxuICB0aGlzLl9maWx0ZXJzID0gW107XG5cbiAgLy8gcmVnaXN0ZXIgZmlsdGVyIGZvciBmaWx0ZXJpbmcgYmlnIGVsZW1lbnRzXG4gIHRoaXMucmVnaXN0ZXJGaWx0ZXIoZnVuY3Rpb24oZWxlbWVudHMsIGF4aXMsIGRpbWVuc2lvbikge1xuICAgIHZhciBlbGVtZW50c1NpemUgPSAwLFxuICAgICAgICBudW1PZlNoYXBlcyA9IDAsXG4gICAgICAgIGF2Z0RpbWVuc2lvbjtcblxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmIChlbGVtZW50LndheXBvaW50cyB8fCBlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudHNTaXplICs9IGVsZW1lbnRbZGltZW5zaW9uXTtcblxuICAgICAgbnVtT2ZTaGFwZXMgKz0gMTtcbiAgICB9KTtcblxuICAgIGF2Z0RpbWVuc2lvbiA9IE1hdGgucm91bmQoZWxlbWVudHNTaXplIC8gbnVtT2ZTaGFwZXMpO1xuXG4gICAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRbZGltZW5zaW9uXSA8IChhdmdEaW1lbnNpb24gKyA1MCk7XG4gICAgfSk7XG4gIH0pO1xuXG59XG5cbkRpc3RyaWJ1dGVFbGVtZW50cy4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgZmlsdGVyIGZ1bmN0aW9ucyB0aGF0IGFsbG93IGV4dGVybmFsIHBhcnRpZXMgdG8gZmlsdGVyXG4gKiBvdXQgY2VydGFpbiBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZmlsdGVyRm5cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5yZWdpc3RlckZpbHRlciA9IGZ1bmN0aW9uKGZpbHRlckZuKSB7XG4gIGlmICh0eXBlb2YgZmlsdGVyRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBmaWx0ZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXJGbik7XG59O1xuXG4vKipcbiAqIERpc3RyaWJ1dGVzIHRoZSBlbGVtZW50cyB3aXRoIGEgZ2l2ZW4gb3JpZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gZWxlbWVudHMgICAgW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7c3RyaW5nfSBvcmllbnRhdGlvbiBbZGVzY3JpcHRpb25dXG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcmllbnRhdGlvbikge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgZ3JvdXBzLFxuICAgICAgZGlzdHJpYnV0YWJsZUVsZW1lbnRzO1xuXG4gIGlmIChlbGVtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pO1xuXG4gIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IHRoaXMuX2ZpbHRlckVsZW1lbnRzKGVsZW1lbnRzKTtcblxuICBncm91cHMgPSB0aGlzLl9jcmVhdGVHcm91cHMoZGlzdHJpYnV0YWJsZUVsZW1lbnRzKTtcblxuICAvLyBub3RoaW5nIHRvIGRpc3RyaWJ1dGVcbiAgaWYgKGdyb3Vwcy5sZW5ndGggPD0gMikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG1vZGVsaW5nLmRpc3RyaWJ1dGVFbGVtZW50cyhncm91cHMsIHRoaXMuX2F4aXMsIHRoaXMuX2RpbWVuc2lvbik7XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG5cbi8qKlxuICogRmlsdGVycyB0aGUgZWxlbWVudHMgd2l0aCBwcm92aWRlZCBmaWx0ZXJzIGJ5IGV4dGVybmFsIHBhcnRpZXNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheVtFbGVtZW50c119IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXlbRWxlbWVudHNdfVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9maWx0ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBmaWx0ZXJzID0gdGhpcy5fZmlsdGVycyxcbiAgICAgIGF4aXMgPSB0aGlzLl9heGlzLFxuICAgICAgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uLFxuICAgICAgZGlzdHJpYnV0YWJsZUVsZW1lbnRzID0gW10uY29uY2F0KGVsZW1lbnRzKTtcblxuICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9XG5cbiAgZm9yRWFjaChmaWx0ZXJzLCBmdW5jdGlvbihmaWx0ZXJGbikge1xuICAgIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IGZpbHRlckZuKGRpc3RyaWJ1dGFibGVFbGVtZW50cywgYXhpcywgZGltZW5zaW9uKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRpc3RyaWJ1dGFibGVFbGVtZW50cztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgcmFuZ2UgKG1pbiwgbWF4KSBncm91cHMuIEFsc28gdHJpZXMgdG8gZ3JvdXAgZWxlbWVudHNcbiAqIHRvZ2V0aGVyIHRoYXQgc2hhcmUgdGhlIHNhbWUgcmFuZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIFx0dmFyIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IFtcbiAqIFx0XHR7XG4gKiBcdFx0XHRyYW5nZToge1xuICogXHRcdFx0XHRtaW46IDEwMCxcbiAqIFx0XHRcdFx0bWF4OiAyMDBcbiAqIFx0XHRcdH0sXG4gKiBcdFx0XHRlbGVtZW50czogWyB7IGlkOiAnc2hhcGUxJywgLi4gfV1cbiAqIFx0XHR9XG4gKiBcdF1cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheVtPYmplY3RzXX1cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5fY3JlYXRlR3JvdXBzID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIHJhbmdlR3JvdXBzID0gW10sXG4gICAgICBzZWxmID0gdGhpcyxcbiAgICAgIGF4aXMgPSB0aGlzLl9heGlzLFxuICAgICAgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uO1xuXG4gIGlmICghYXhpcykge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBoYXZlIGEgZGVmaW5lZCBcImF4aXNcIiBhbmQgXCJkaW1lbnNpb25cIicpO1xuICB9XG5cbiAgLy8gc29ydCBieSAnbGVmdC0+cmlnaHQnIG9yICd0b3AtPmJvdHRvbSdcbiAgdmFyIHNvcnRlZEVsZW1lbnRzID0gc29ydEJ5KGVsZW1lbnRzLCBheGlzKTtcblxuICBmb3JFYWNoKHNvcnRlZEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50LCBpZHgpIHtcbiAgICB2YXIgZWxlbWVudFJhbmdlID0gc2VsZi5fZmluZFJhbmdlKGVsZW1lbnQsIGF4aXMsIGRpbWVuc2lvbiksXG4gICAgICAgIHJhbmdlO1xuXG4gICAgdmFyIHByZXZpb3VzID0gcmFuZ2VHcm91cHNbcmFuZ2VHcm91cHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocHJldmlvdXMgJiYgc2VsZi5faGFzSW50ZXJzZWN0aW9uKHByZXZpb3VzLnJhbmdlLCBlbGVtZW50UmFuZ2UpKSB7XG4gICAgICByYW5nZUdyb3Vwc1tyYW5nZUdyb3Vwcy5sZW5ndGggLSAxXS5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IHsgcmFuZ2U6IGVsZW1lbnRSYW5nZSwgZWxlbWVudHM6IFsgZWxlbWVudCBdIH07XG5cbiAgICAgIHJhbmdlR3JvdXBzLnB1c2gocmFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJhbmdlR3JvdXBzO1xufTtcblxuXG4vKipcbiAqIE1hcHMgYSBkaXJlY3Rpb24gdG8gdGhlIGFjY29yZGluZyBheGlzIGFuZCBkaW1lbnNpb25cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGRpcmVjdGlvbiAnaG9yaXpvbnRhbCcgb3IgJ3ZlcnRpY2FsJ1xuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uKGRpcmVjdGlvbikge1xuICB2YXIgb3JpZW50YXRpb24gPSBBWElTX0RJTUVOU0lPTlNbZGlyZWN0aW9uXTtcblxuICB0aGlzLl9heGlzID0gb3JpZW50YXRpb25bMF07XG4gIHRoaXMuX2RpbWVuc2lvbiA9IG9yaWVudGF0aW9uWzFdO1xufTtcblxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgdHdvIHJhbmdlcyBpbnRlcmNlcHQgZWFjaCBvdGhlclxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gcmFuZ2VBIHttaW4sIG1heH1cbiAqIEBwYXJhbSAge09iamVjdH0gcmFuZ2VCIHttaW4sIG1heH1cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9oYXNJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihyYW5nZUEsIHJhbmdlQikge1xuICByZXR1cm4gTWF0aC5tYXgocmFuZ2VBLm1pbiwgcmFuZ2VBLm1heCkgPj0gTWF0aC5taW4ocmFuZ2VCLm1pbiwgcmFuZ2VCLm1heCkgJiZcbiAgICAgICAgIE1hdGgubWluKHJhbmdlQS5taW4sIHJhbmdlQS5tYXgpIDw9IE1hdGgubWF4KHJhbmdlQi5taW4sIHJhbmdlQi5tYXgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBmb3IgYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1t0eXBlXX0gZWxlbWVudCAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gYXhpcyAgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gZGltZW5zaW9uIFtkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUuX2ZpbmRSYW5nZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGF4aXMgPSBlbGVtZW50W3RoaXMuX2F4aXNdLFxuICAgICAgZGltZW5zaW9uID0gZWxlbWVudFt0aGlzLl9kaW1lbnNpb25dO1xuXG4gIHJldHVybiB7XG4gICAgbWluOiBheGlzICsgVEhSRVNIT0xELFxuICAgIG1heDogYXhpcyArIGRpbWVuc2lvbiAtIFRIUkVTSE9MRFxuICB9O1xufTtcbiIsImltcG9ydCBEaXN0cmlidXRlRWxlbWVudHMgZnJvbSAnLi9EaXN0cmlidXRlRWxlbWVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdkaXN0cmlidXRlRWxlbWVudHMnIF0sXG4gIGRpc3RyaWJ1dGVFbGVtZW50czogWyAndHlwZScsIERpc3RyaWJ1dGVFbGVtZW50cyBdXG59O1xuIiwiLyogZ2xvYmFsIFRvdWNoRXZlbnQgKi9cblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZ2luYWwsXG4gIHRvUG9pbnQsXG4gIHN0b3BQcm9wYWdhdGlvblxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxuaW1wb3J0IHtcbiAgc2V0IGFzIGN1cnNvclNldCxcbiAgdW5zZXQgYXMgY3Vyc29yVW5zZXRcbn0gZnJvbSAnLi4vLi4vdXRpbC9DdXJzb3InO1xuXG5pbXBvcnQge1xuICBpbnN0YWxsIGFzIGluc3RhbGxDbGlja1RyYXBcbn0gZnJvbSAnLi4vLi4vdXRpbC9DbGlja1RyYXAnO1xuXG5pbXBvcnQge1xuICBkZWx0YSBhcyBkZWx0YVBvc1xufSBmcm9tICcuLi8uLi91dGlsL1Bvc2l0aW9uVXRpbCc7XG5cbnZhciBEUkFHX0FDVElWRV9DTFMgPSAnZGpzLWRyYWctYWN0aXZlJztcblxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5mdW5jdGlvbiBpc1RvdWNoRXZlbnQoZXZlbnQpIHtcblxuICAvLyBjaGVjayBmb3IgVG91Y2hFdmVudCBiZWluZyBhdmFpbGFibGUgZmlyc3RcbiAgLy8gKGkuZS4gbm90IGF2YWlsYWJsZSBvbiBkZXNrdG9wIEZpcmVmb3gpXG4gIHJldHVybiB0eXBlb2YgVG91Y2hFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50O1xufVxuXG5mdW5jdGlvbiBnZXRMZW5ndGgocG9pbnQpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwb2ludC54LCAyKSArIE1hdGgucG93KHBvaW50LnksIDIpKTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0aGF0IGZpcmVzIGNhbnZhcyBsb2NhbGl6ZWQgZHJhZyBldmVudHMgYW5kIHJlYWxpemVzXG4gKiB0aGUgZ2VuZXJhbCBcImRyYWctYW5kLWRyb3BcIiBsb29rIGFuZCBmZWVsLlxuICpcbiAqIENhbGxpbmcge0BsaW5rIERyYWdnaW5nI2FjdGl2YXRlfSBhY3RpdmF0ZXMgZHJhZ2dpbmcgb24gYSBjYW52YXMuXG4gKlxuICogSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgICogZW1pdHMgbGlmZSBjeWNsZSBldmVudHMsIG5hbWVzcGFjZWQgd2l0aCBhIHByZWZpeCBhc3NpZ25lZFxuICogICAgIGR1cmluZyBkcmFnZ2luZyBhY3RpdmF0aW9uXG4gKiAgICogc2V0cyBhbmQgcmVzdG9yZXMgdGhlIGN1cnNvclxuICogICAqIHNldHMgYW5kIHJlc3RvcmVzIHRoZSBzZWxlY3Rpb24gaWYgZWxlbWVudHMgc3RpbGwgZXhpc3RcbiAqICAgKiBlbnN1cmVzIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBkcmFnIG9wZXJhdGlvbiBhY3RpdmUgYXQgYSB0aW1lXG4gKlxuICogRHJhZ2dpbmcgbWF5IGJlIGNhbmNlbGVkIG1hbnVhbGx5IGJ5IGNhbGxpbmcge0BsaW5rIERyYWdnaW5nI2NhbmNlbH1cbiAqIG9yIGJ5IHByZXNzaW5nIEVTQy5cbiAqXG4gKlxuICogIyMgTGlmZS1jeWNsZSBldmVudHNcbiAqXG4gKiBEcmFnZ2luZyBjYW4gYmUgaW4gdGhyZWUgZGlmZmVyZW50IHN0YXRlcywgb2ZmLCBpbml0aWFsaXplZFxuICogYW5kIGFjdGl2ZS5cbiAqXG4gKiAoMSkgb2ZmOiBubyBkcmFnZ2luZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbiAqICgyKSBpbml0aWFsaXplZDogYSBuZXcgZHJhZyBvcGVyYXRpb24gZ290IGluaXRpYWxpemVkIGJ1dCBub3QgeWV0XG4gKiAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKGkuZS4gYmVjYXVzZSBvZiBubyBpbml0aWFsIG1vdmUpXG4gKiAoMykgc3RhcnRlZDogZHJhZ2dpbmcgaXMgaW4gcHJvZ3Jlc3NcbiAqXG4gKiBFdmVudHVhbGx5IGRyYWdnaW5nIHdpbGwgYmUgb2ZmIGFnYWluIGFmdGVyIGEgZHJhZyBvcGVyYXRpb24gaGFzXG4gKiBiZWVuIGVuZGVkIG9yIGNhbmNlbGVkIHZpYSB1c2VyIGNsaWNrIG9yIEVTQyBrZXkgcHJlc3MuXG4gKlxuICogVG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgYmV0d2VlbiB0aGVzZSBzdGF0ZXMgZHJhZ2dpbmcgZW1pdHMgZ2VuZXJpY1xuICogbGlmZS1jeWNsZSBldmVudHMgd2l0aCB0aGUgYGRyYWcuYCBwcmVmaXggX2FuZF8gZXZlbnRzIG5hbWVzcGFjZWRcbiAqIHRvIGEgcHJlZml4IGNob29zZW4gYnkgYSB1c2VyIGR1cmluZyBkcmFnIGluaXRpYWxpemF0aW9uLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBlbWl0dGVkIChhcHByb3ByaWF0ZWx5IHByZWZpeGVkKSB2aWFcbiAqIHRoZSB7QGxpbmsgRXZlbnRCdXN9LlxuICpcbiAqICogYGluaXRgXG4gKiAqIGBzdGFydGBcbiAqICogYG1vdmVgXG4gKiAqIGBlbmRgXG4gKiAqIGBlbmRlZGAgKGRyYWdnaW5nIGFscmVhZHkgaW4gb2ZmIHN0YXRlKVxuICogKiBgY2FuY2VsYCAob25seSBpZiBwcmV2aW91c2x5IHN0YXJ0ZWQpXG4gKiAqIGBjYW5jZWxlZGAgKGRyYWdnaW5nIGFscmVhZHkgaW4gb2ZmIHN0YXRlLCBvbmx5IGlmIHByZXZpb3VzbHkgc3RhcnRlZClcbiAqICogYGNsZWFudXBgXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gTXlEcmFnQ29tcG9uZW50KGV2ZW50QnVzLCBkcmFnZ2luZykge1xuICpcbiAqICAgZXZlbnRCdXMub24oJ215ZHJhZy5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coJ3llcywgd2Ugc3RhcnQgZHJhZ2dpbmcnKTtcbiAqICAgfSk7XG4gKlxuICogICBldmVudEJ1cy5vbignbXlkcmFnLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdjYW52YXMgbG9jYWwgY29vcmRpbmF0ZXMnLCBldmVudC54LCBldmVudC55LCBldmVudC5keCwgZXZlbnQuZHkpO1xuICpcbiAqICAgICAvLyBsb2NhbCBkcmFnIGRhdGEgaXMgcGFzc2VkIHdpdGggdGhlIGV2ZW50XG4gKiAgICAgZXZlbnQuY29udGV4dC5mb287IC8vIFwiQkFSXCJcbiAqXG4gKiAgICAgLy8gdGhlIG9yaWdpbmFsIG1vdXNlIGV2ZW50LCB0b29cbiAqICAgICBldmVudC5vcmlnaW5hbEV2ZW50OyAvLyBNb3VzZUV2ZW50KC4uLilcbiAqICAgfSk7XG4gKlxuICogICBldmVudEJ1cy5vbignZWxlbWVudC5jbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgZHJhZ2dpbmcuaW5pdChldmVudCwgJ215ZHJhZycsIHtcbiAqICAgICAgIGN1cnNvcjogJ2dyYWJiaW5nJyxcbiAqICAgICAgIGRhdGE6IHtcbiAqICAgICAgICAgY29udGV4dDoge1xuICogICAgICAgICAgIGZvbzogXCJCQVJcIlxuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH0pO1xuICogfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmFnZ2luZyhldmVudEJ1cywgY2FudmFzLCBzZWxlY3Rpb24sIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICB0aHJlc2hvbGQ6IDUsXG4gICAgdHJhcENsaWNrOiB0cnVlXG4gIH07XG5cbiAgLy8gdGhlIGN1cnJlbnRseSBhY3RpdmUgZHJhZyBvcGVyYXRpb25cbiAgLy8gZHJhZ2dpbmcgaXMgYWN0aXZlIGFzIHNvb24gYXMgdGhpcyBjb250ZXh0IGV4aXN0cy5cbiAgLy9cbiAgLy8gaXQgaXMgdmlzdWFsbHkgX2FjdGl2ZV8gb25seSB3aGVuIGEgY29udGV4dC5hY3RpdmUgZmxhZyBpcyBzZXQgdG8gdHJ1ZS5cbiAgdmFyIGNvbnRleHQ7XG5cbiAgLyogY29udmVydCBhIGdsb2JhbCBldmVudCBpbnRvIGxvY2FsIGNvb3JkaW5hdGVzICovXG4gIGZ1bmN0aW9uIHRvTG9jYWxQb2ludChnbG9iYWxQb3NpdGlvbikge1xuXG4gICAgdmFyIHZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuXG4gICAgdmFyIGNsaWVudFJlY3QgPSBjYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiB2aWV3Ym94LnggKyAoZ2xvYmFsUG9zaXRpb24ueCAtIGNsaWVudFJlY3QubGVmdCkgLyB2aWV3Ym94LnNjYWxlLFxuICAgICAgeTogdmlld2JveC55ICsgKGdsb2JhbFBvc2l0aW9uLnkgLSBjbGllbnRSZWN0LnRvcCkgLyB2aWV3Ym94LnNjYWxlXG4gICAgfTtcbiAgfVxuXG4gIC8vIGhlbHBlcnNcblxuICBmdW5jdGlvbiBmaXJlKHR5cGUsIGRyYWdDb250ZXh0KSB7XG4gICAgZHJhZ0NvbnRleHQgPSBkcmFnQ29udGV4dCB8fCBjb250ZXh0O1xuXG4gICAgdmFyIGV2ZW50ID0gZXZlbnRCdXMuY3JlYXRlRXZlbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBkcmFnQ29udGV4dC5wYXlsb2FkLFxuICAgICAgICBkcmFnQ29udGV4dC5kYXRhLFxuICAgICAgICB7IGlzVG91Y2g6IGRyYWdDb250ZXh0LmlzVG91Y2ggfVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBkZWZhdWx0IGludGVncmF0aW9uXG4gICAgaWYgKGV2ZW50QnVzLmZpcmUoJ2RyYWcuJyArIHR5cGUsIGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRCdXMuZmlyZShkcmFnQ29udGV4dC5wcmVmaXggKyAnLicgKyB0eXBlLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKSB7XG4gICAgdmFyIGV4aXN0aW5nU2VsZWN0aW9uID0gcHJldmlvdXNTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpO1xuICAgIH0pO1xuXG4gICAgZXhpc3RpbmdTZWxlY3Rpb24ubGVuZ3RoICYmIHNlbGVjdGlvbi5zZWxlY3QoZXhpc3RpbmdTZWxlY3Rpb24pO1xuICB9XG5cbiAgLy8gZXZlbnQgbGlzdGVuZXJzXG5cbiAgZnVuY3Rpb24gbW92ZShldmVudCwgYWN0aXZhdGUpIHtcbiAgICB2YXIgcGF5bG9hZCA9IGNvbnRleHQucGF5bG9hZCxcbiAgICAgICAgZGlzcGxhY2VtZW50ID0gY29udGV4dC5kaXNwbGFjZW1lbnQ7XG5cbiAgICB2YXIgZ2xvYmFsU3RhcnQgPSBjb250ZXh0Lmdsb2JhbFN0YXJ0LFxuICAgICAgICBnbG9iYWxDdXJyZW50ID0gdG9Qb2ludChldmVudCksXG4gICAgICAgIGdsb2JhbERlbHRhID0gZGVsdGFQb3MoZ2xvYmFsQ3VycmVudCwgZ2xvYmFsU3RhcnQpO1xuXG4gICAgdmFyIGxvY2FsU3RhcnQgPSBjb250ZXh0LmxvY2FsU3RhcnQsXG4gICAgICAgIGxvY2FsQ3VycmVudCA9IHRvTG9jYWxQb2ludChnbG9iYWxDdXJyZW50KSxcbiAgICAgICAgbG9jYWxEZWx0YSA9IGRlbHRhUG9zKGxvY2FsQ3VycmVudCwgbG9jYWxTdGFydCk7XG5cblxuICAgIC8vIGFjdGl2YXRlIGNvbnRleHQgZXhwbGljaXRseSBvciBvbmNlIHRocmVzaG9sZCBpcyByZWFjaGVkXG4gICAgaWYgKCFjb250ZXh0LmFjdGl2ZSAmJiAoYWN0aXZhdGUgfHwgZ2V0TGVuZ3RoKGdsb2JhbERlbHRhKSA+IGNvbnRleHQudGhyZXNob2xkKSkge1xuXG4gICAgICAvLyBmaXJlIHN0YXJ0IGV2ZW50IHdpdGggb3JpZ2luYWxcbiAgICAgIC8vIHN0YXJ0aW5nIGNvb3JkaW5hdGVzXG5cbiAgICAgIGFzc2lnbihwYXlsb2FkLCB7XG4gICAgICAgIHg6IHJvdW5kKGxvY2FsU3RhcnQueCArIGRpc3BsYWNlbWVudC54KSxcbiAgICAgICAgeTogcm91bmQobG9jYWxTdGFydC55ICsgZGlzcGxhY2VtZW50LnkpLFxuICAgICAgICBkeDogMCxcbiAgICAgICAgZHk6IDBcbiAgICAgIH0sIHsgb3JpZ2luYWxFdmVudDogZXZlbnQgfSk7XG5cbiAgICAgIGlmIChmYWxzZSA9PT0gZmlyZSgnc3RhcnQnKSkge1xuICAgICAgICByZXR1cm4gY2FuY2VsKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgLy8gdW5zZXQgc2VsZWN0aW9uIGFuZCByZW1lbWJlciBvbGQgc2VsZWN0aW9uXG4gICAgICAvLyB0aGUgcHJldmlvdXMgKG9sZCkgc2VsZWN0aW9uIHdpbGwgYWx3YXlzIHBhc3NlZFxuICAgICAgLy8gd2l0aCB0aGUgZXZlbnQgdmlhIHRoZSBldmVudC5wcmV2aW91c1NlbGVjdGlvbiBwcm9wZXJ0eVxuICAgICAgaWYgKCFjb250ZXh0LmtlZXBTZWxlY3Rpb24pIHtcbiAgICAgICAgcGF5bG9hZC5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5nZXQoKTtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdChudWxsKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWxsb3cgY3VzdG9tIGN1cnNvclxuICAgICAgaWYgKGNvbnRleHQuY3Vyc29yKSB7XG4gICAgICAgIGN1cnNvclNldChjb250ZXh0LmN1cnNvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIGluZGljYXRlIGRyYWdnaW5nIHZpYSBtYXJrZXIgb24gcm9vdCBlbGVtZW50XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGNhbnZhcy5nZXRSb290RWxlbWVudCgpLCBEUkFHX0FDVElWRV9DTFMpO1xuICAgIH1cblxuICAgIHN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICBpZiAoY29udGV4dC5hY3RpdmUpIHtcblxuICAgICAgLy8gdXBkYXRlIHBheWxvYWQgd2l0aCBhY3R1YWwgY29vcmRpbmF0ZXNcbiAgICAgIGFzc2lnbihwYXlsb2FkLCB7XG4gICAgICAgIHg6IHJvdW5kKGxvY2FsQ3VycmVudC54ICsgZGlzcGxhY2VtZW50LngpLFxuICAgICAgICB5OiByb3VuZChsb2NhbEN1cnJlbnQueSArIGRpc3BsYWNlbWVudC55KSxcbiAgICAgICAgZHg6IHJvdW5kKGxvY2FsRGVsdGEueCksXG4gICAgICAgIGR5OiByb3VuZChsb2NhbERlbHRhLnkpXG4gICAgICB9LCB7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xuXG4gICAgICAvLyBlbWl0IG1vdmUgZXZlbnRcbiAgICAgIGZpcmUoJ21vdmUnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0LFxuICAgICAgICByZXR1cm5WYWx1ZSA9IHRydWU7XG5cbiAgICBpZiAoY29udGV4dC5hY3RpdmUpIHtcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGNvbnRleHQucGF5bG9hZC5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy8gc3VwcHJlc3Mgb3JpZ2luYWwgZXZlbnQgKGNsaWNrLCAuLi4pXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UganVzdCBlbmRlZCBhIGRyYWcgb3BlcmF0aW9uXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBtYXkgc3RvcCByZXN0b3JpbmcgdGhlXG4gICAgICAvLyBvcmlnaW5hbCBzdGF0ZSAoc2VsZWN0aW9ucywgLi4uKSBieSBwcmV2ZW50aW5nIHRoZVxuICAgICAgLy8gZW5kIGV2ZW50cyBkZWZhdWx0IGFjdGlvblxuICAgICAgcmV0dXJuVmFsdWUgPSBmaXJlKCdlbmQnKTtcbiAgICB9XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBmaXJlKCdyZWplY3RlZCcpO1xuICAgIH1cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNsZWFudXAocmV0dXJuVmFsdWUgIT09IHRydWUpO1xuXG4gICAgLy8gbGFzdCBldmVudCB0byBiZSBmaXJlZCB3aGVuIGFsbCBkcmFnIG9wZXJhdGlvbnMgYXJlIGRvbmVcbiAgICAvLyBhdCB0aGlzIHBvaW50IGluIHRpbWUgbm8gZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgYW55bW9yZVxuICAgIGZpcmUoJ2VuZGVkJywgcHJldmlvdXNDb250ZXh0KTtcbiAgfVxuXG5cbiAgLy8gY2FuY2VsIGFjdGl2ZSBkcmFnIG9wZXJhdGlvbiBpZiB0aGUgdXNlciBwcmVzc2VzXG4gIC8vIHRoZSBFU0Mga2V5IG9uIHRoZSBrZXlib2FyZFxuXG4gIGZ1bmN0aW9uIGNoZWNrQ2FuY2VsKGV2ZW50KSB7XG5cbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IDI3KSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgIGNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gcHJldmVudCBnaG9zdCBjbGljayB0aGF0IG1pZ2h0IG9jY3VyIGFmdGVyIGEgZmluaXNoZWRcbiAgLy8gZHJhZyBhbmQgZHJvcCBzZXNzaW9uXG5cbiAgZnVuY3Rpb24gdHJhcENsaWNrQW5kRW5kKGV2ZW50KSB7XG5cbiAgICB2YXIgdW50cmFwO1xuXG4gICAgLy8gdHJhcCB0aGUgY2xpY2sgaW4gY2FzZSB3ZSBhcmUgcGFydCBvZiBhbiBhY3RpdmVcbiAgICAvLyBkcmFnIG9wZXJhdGlvbi4gVGhpcyB3aWxsIGVmZmVjdGl2ZWx5IHByZXZlbnRcbiAgICAvLyB0aGUgZ2hvc3QgY2xpY2sgdGhhdCBjYW5ub3QgYmUgY2FuY2VsZWQgb3RoZXJ3aXNlLlxuICAgIGlmIChjb250ZXh0LmFjdGl2ZSkge1xuXG4gICAgICB1bnRyYXAgPSBpbnN0YWxsQ2xpY2tUcmFwKGV2ZW50QnVzKTtcblxuICAgICAgLy8gcmVtb3ZlIHRyYXAgYWZ0ZXIgbWluaW1hbCBkZWxheVxuICAgICAgc2V0VGltZW91dCh1bnRyYXAsIDQwMCk7XG5cbiAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24gKGNsaWNrKVxuICAgICAgcHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgIH1cblxuICAgIGVuZChldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFwVG91Y2goZXZlbnQpIHtcbiAgICBtb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSB0aGUgZHJhZyBldmVudHMgaG92ZXIgKGRqcy5tb2RlbC5CYXNlKSBhbmQgaG92ZXJHZnggKFNuYXA8U1ZHRWxlbWVudD4pXG4gIC8vIHByb3BlcnRpZXMgZHVyaW5nIGhvdmVyIGFuZCBvdXQgYW5kIGZpcmUge3ByZWZpeH0uaG92ZXIgYW5kIHtwcmVmaXh9Lm91dCBwcm9wZXJ0aWVzXG4gIC8vIHJlc3BlY3RpdmVseVxuXG4gIGZ1bmN0aW9uIGhvdmVyKGV2ZW50KSB7XG4gICAgdmFyIHBheWxvYWQgPSBjb250ZXh0LnBheWxvYWQ7XG5cbiAgICBwYXlsb2FkLmhvdmVyR2Z4ID0gZXZlbnQuZ2Z4O1xuICAgIHBheWxvYWQuaG92ZXIgPSBldmVudC5lbGVtZW50O1xuXG4gICAgZmlyZSgnaG92ZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG91dChldmVudCkge1xuICAgIGZpcmUoJ291dCcpO1xuXG4gICAgdmFyIHBheWxvYWQgPSBjb250ZXh0LnBheWxvYWQ7XG5cbiAgICBwYXlsb2FkLmhvdmVyR2Z4ID0gbnVsbDtcbiAgICBwYXlsb2FkLmhvdmVyID0gbnVsbDtcbiAgfVxuXG5cbiAgLy8gbGlmZS1jeWNsZSBtZXRob2RzXG5cbiAgZnVuY3Rpb24gY2FuY2VsKHJlc3RvcmUpIHtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0O1xuXG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhc0FjdGl2ZSA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgaWYgKHdhc0FjdGl2ZSkge1xuICAgICAgZmlyZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY2xlYW51cChyZXN0b3JlKTtcblxuICAgIGlmICh3YXNBY3RpdmUpIHtcblxuICAgICAgLy8gbGFzdCBldmVudCB0byBiZSBmaXJlZCB3aGVuIGFsbCBkcmFnIG9wZXJhdGlvbnMgYXJlIGRvbmVcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQgaW4gdGltZSBubyBkcmFnIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBhbnltb3JlXG4gICAgICBmaXJlKCdjYW5jZWxlZCcsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cChyZXN0b3JlKSB7XG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCxcbiAgICAgICAgZW5kRHJhZztcblxuICAgIGZpcmUoJ2NsZWFudXAnKTtcblxuICAgIC8vIHJlc2V0IGN1cnNvclxuICAgIGN1cnNvclVuc2V0KCk7XG5cbiAgICBpZiAoY29udGV4dC50cmFwQ2xpY2spIHtcbiAgICAgIGVuZERyYWcgPSB0cmFwQ2xpY2tBbmRFbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERyYWcgPSBlbmQ7XG4gICAgfVxuXG4gICAgLy8gcmVzZXQgZG9tIGxpc3RlbmVyc1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNlbW92ZScsIG1vdmUpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnZHJhZ3N0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2Vkb3duJywgZW5kRHJhZywgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2V1cCcsIGVuZERyYWcsIHRydWUpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAna2V5dXAnLCBjaGVja0NhbmNlbCk7XG5cbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICd0b3VjaHN0YXJ0JywgdHJhcFRvdWNoLCB0cnVlKTtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIGNhbmNlbCwgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2htb3ZlJywgbW92ZSwgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2hlbmQnLCBlbmQsIHRydWUpO1xuXG4gICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50LmhvdmVyJywgaG92ZXIpO1xuICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5vdXQnLCBvdXQpO1xuXG4gICAgLy8gcmVtb3ZlIGRyYWcgbWFya2VyIG9uIHJvb3QgZWxlbWVudFxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY2FudmFzLmdldFJvb3RFbGVtZW50KCksIERSQUdfQUNUSVZFX0NMUyk7XG5cbiAgICAvLyByZXN0b3JlIHNlbGVjdGlvbiwgdW5sZXNzIGl0IGhhcyBjaGFuZ2VkXG4gICAgdmFyIHByZXZpb3VzU2VsZWN0aW9uID0gY29udGV4dC5wYXlsb2FkLnByZXZpb3VzU2VsZWN0aW9uO1xuXG4gICAgaWYgKHJlc3RvcmUgIT09IGZhbHNlICYmIHByZXZpb3VzU2VsZWN0aW9uICYmICFzZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKSB7XG4gICAgICByZXN0b3JlU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBkcmFnIG9wZXJhdGlvbi5cbiAgICpcbiAgICogSWYgYGxvY2FsUG9zaXRpb25gIGlzIGdpdmVuLCBkcmFnIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWRcbiAgICogcmVsYXRpdmUgdG8gaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudHxUb3VjaEV2ZW50fSBbZXZlbnRdXG4gICAqIEBwYXJhbSB7UG9pbnR9IFtsb2NhbFBvc2l0aW9uXSBhY3R1YWwgZGlhZ3JhbSBsb2NhbCBwb3NpdGlvbiB0aGlzIGRyYWcgb3BlcmF0aW9uIHNob3VsZCBzdGFydCBhdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICovXG4gIGZ1bmN0aW9uIGluaXQoZXZlbnQsIHJlbGF0aXZlVG8sIHByZWZpeCwgb3B0aW9ucykge1xuXG4gICAgLy8gb25seSBvbmUgZHJhZyBvcGVyYXRpb24gbWF5IGJlIGFjdGl2ZSwgYXQgYSB0aW1lXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGNhbmNlbChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWxhdGl2ZVRvID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IHByZWZpeDtcbiAgICAgIHByZWZpeCA9IHJlbGF0aXZlVG87XG4gICAgICByZWxhdGl2ZVRvID0gbnVsbDtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICB2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YSB8fCB7fSxcbiAgICAgICAgb3JpZ2luYWxFdmVudCxcbiAgICAgICAgZ2xvYmFsU3RhcnQsXG4gICAgICAgIGxvY2FsU3RhcnQsXG4gICAgICAgIGVuZERyYWcsXG4gICAgICAgIGlzVG91Y2g7XG5cbiAgICBpZiAob3B0aW9ucy50cmFwQ2xpY2spIHtcbiAgICAgIGVuZERyYWcgPSB0cmFwQ2xpY2tBbmRFbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERyYWcgPSBlbmQ7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBvcmlnaW5hbEV2ZW50ID0gZ2V0T3JpZ2luYWwoZXZlbnQpIHx8IGV2ZW50O1xuICAgICAgZ2xvYmFsU3RhcnQgPSB0b1BvaW50KGV2ZW50KTtcblxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KTtcblxuICAgICAgLy8gcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgZHJhZ2dpbmcgYmVoYXZpb3JcbiAgICAgIGlmIChvcmlnaW5hbEV2ZW50LnR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0KG9yaWdpbmFsRXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbEV2ZW50ID0gbnVsbDtcbiAgICAgIGdsb2JhbFN0YXJ0ID0geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuXG4gICAgbG9jYWxTdGFydCA9IHRvTG9jYWxQb2ludChnbG9iYWxTdGFydCk7XG5cbiAgICBpZiAoIXJlbGF0aXZlVG8pIHtcbiAgICAgIHJlbGF0aXZlVG8gPSBsb2NhbFN0YXJ0O1xuICAgIH1cblxuICAgIGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQob3JpZ2luYWxFdmVudCk7XG5cbiAgICBjb250ZXh0ID0gYXNzaWduKHtcbiAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgZ2xvYmFsU3RhcnQ6IGdsb2JhbFN0YXJ0LFxuICAgICAgZGlzcGxhY2VtZW50OiBkZWx0YVBvcyhyZWxhdGl2ZVRvLCBsb2NhbFN0YXJ0KSxcbiAgICAgIGxvY2FsU3RhcnQ6IGxvY2FsU3RhcnQsXG4gICAgICBpc1RvdWNoOiBpc1RvdWNoXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICAvLyBza2lwIGRvbSByZWdpc3RyYXRpb24gaWYgdHJpZ2dlclxuICAgIC8vIGlzIHNldCB0byBtYW51YWwgKGR1cmluZyB0ZXN0aW5nKVxuICAgIGlmICghb3B0aW9ucy5tYW51YWwpIHtcblxuICAgICAgLy8gYWRkIGRvbSBsaXN0ZW5lcnNcblxuICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ3RvdWNoc3RhcnQnLCB0cmFwVG91Y2gsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBjYW5jZWwsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAndG91Y2htb3ZlJywgbW92ZSwgdHJ1ZSk7XG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICd0b3VjaGVuZCcsIGVuZCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIGFzc3VtZSB3ZSB1c2UgdGhlIG1vdXNlIHRvIGludGVyYWN0IHBlciBkZWZhdWx0XG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBtb3ZlKTtcblxuICAgICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBkcmFnIGFuZCB0ZXh0IHNlbGVjdGlvbiBiZWhhdmlvclxuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnZHJhZ3N0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnc2VsZWN0c3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XG5cbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNlZG93bicsIGVuZERyYWcsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2V1cCcsIGVuZERyYWcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAna2V5dXAnLCBjaGVja0NhbmNlbCk7XG5cbiAgICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgaG92ZXIpO1xuICAgICAgZXZlbnRCdXMub24oJ2VsZW1lbnQub3V0Jywgb3V0KTtcbiAgICB9XG5cbiAgICBmaXJlKCdpbml0Jyk7XG5cbiAgICBpZiAob3B0aW9ucy5hdXRvQWN0aXZhdGUpIHtcbiAgICAgIG1vdmUoZXZlbnQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNhbmNlbCBvbiBkaWFncmFtIGRlc3RydWN0aW9uXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCBjYW5jZWwpO1xuXG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5pbml0ID0gaW5pdDtcbiAgdGhpcy5tb3ZlID0gbW92ZTtcbiAgdGhpcy5ob3ZlciA9IGhvdmVyO1xuICB0aGlzLm91dCA9IG91dDtcbiAgdGhpcy5lbmQgPSBlbmQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBjYW5jZWw7XG5cbiAgLy8gZm9yIGludHJvc3BlY3Rpb25cblxuICB0aGlzLmNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfTtcblxuICB0aGlzLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgYXNzaWduKGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgfTtcbn1cblxuRHJhZ2dpbmcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdzZWxlY3Rpb24nLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcbiIsImltcG9ydCB7XG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xuXG5cbi8qKlxuICogQnJvd3NlcnMgbWF5IHN3YWxsb3cgY2VydGFpbiBldmVudHMgKGhvdmVyLCBvdXQgLi4uKSBpZiB1c2VycyBhcmUgdG9cbiAqIGZhc3Qgd2l0aCB0aGUgbW91c2UuXG4gKlxuICogQHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc0NDg0Njgvd2h5LWNhbnQtaS1yZWxpYWJseS1jYXB0dXJlLWEtbW91c2VvdXQtZXZlbnRcbiAqXG4gKiBUaGUgZml4IGltcGxlbWVudGVkIGluIHRoaXMgY29tcG9uZW50IGVuc3VyZSB0aGF0IHdlXG4gKlxuICogMSkgaGF2ZSBhIGhvdmVyIHN0YXRlIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkcmFnLm1vdmUgZXZlbnRcbiAqIDIpIGhhdmUgYW4gb3V0IGV2ZW50IHdoZW4gZHJhZ2dpbmcgbGVhdmVzIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtEcmFnZ2luZ30gZHJhZ2dpbmdcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG92ZXJGaXgoZXZlbnRCdXMsIGRyYWdnaW5nLCBlbGVtZW50UmVnaXN0cnkpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB3ZSBhcmUgZ29kIGRhbW4gaG92ZXJpbmchXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGRyYWdnaW5nIGV2ZW50XG4gICAqL1xuICBmdW5jdGlvbiBlbnN1cmVIb3ZlcihldmVudCkge1xuXG4gICAgaWYgKGV2ZW50LmhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGdmeCA9IHNlbGYuX2ZpbmRUYXJnZXRHZngob3JpZ2luYWxFdmVudCk7XG5cbiAgICB2YXIgZWxlbWVudCA9IGdmeCAmJiBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG5cbiAgICBpZiAoZ2Z4ICYmIGVsZW1lbnQpIHtcblxuICAgICAgLy8gMSkgY2FuY2VsIGN1cnJlbnQgbW91c2Vtb3ZlXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gMikgZW1pdCBmYWtlIGhvdmVyIGZvciBuZXcgdGFyZ2V0XG4gICAgICBkcmFnZ2luZy5ob3Zlcih7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuXG4gICAgICAvLyAzKSByZS10cmlnZ2VyIG1vdmUgZXZlbnRcbiAgICAgIGRyYWdnaW5nLm1vdmUob3JpZ2luYWxFdmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIHdhaXQgZm9yIGEgc3BlY2lmaWMgc2VxdWVuY2Ugb2YgZXZlbnRzIGJlZm9yZVxuICAgKiBlbWl0dGluZyBhIGZha2UgZHJhZy5ob3ZlciBldmVudC5cbiAgICpcbiAgICogRXZlbnQgU2VxdWVuY2U6XG4gICAqXG4gICAqIGRyYWcuc3RhcnRcbiAgICogZHJhZy5tb3ZlID4+IGVuc3VyZSB3ZSBhcmUgaG92ZXJpbmdcbiAgICovXG4gIGV2ZW50QnVzLm9uKCdkcmFnLnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIGV2ZW50QnVzLm9uY2UoJ2RyYWcubW92ZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgIGVuc3VyZUhvdmVyKGV2ZW50KTtcblxuICAgIH0pO1xuXG4gIH0pO1xuXG5cbiAgLyoqXG4gICAqIFdlIG1ha2Ugc3VyZSB0aGF0IGRyYWcub3V0IGlzIGFsd2F5cyBmaXJlZCwgZXZlbiBpZiB0aGVcbiAgICogYnJvd3NlciBzd2FsbG93cyBhbiBlbGVtZW50Lm91dCBldmVudC5cbiAgICpcbiAgICogRXZlbnQgc2VxdWVuY2U6XG4gICAqXG4gICAqIGRyYWcuaG92ZXJcbiAgICogKGVsZW1lbnQub3V0ID4+IHNvbWV0aW1lcyBzd2FsbG93ZWQpXG4gICAqIGVsZW1lbnQuaG92ZXIgPj4gZW5zdXJlIHdlIGZpcmVkIGRyYWcub3V0XG4gICAqL1xuICBldmVudEJ1cy5vbignZHJhZy5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgaG92ZXIsIGhvdmVyR2Z4O1xuXG4gICAgZnVuY3Rpb24gc2V0RHJhZ0hvdmVyKGV2ZW50KSB7XG4gICAgICBob3ZlciA9IGV2ZW50LmhvdmVyO1xuICAgICAgaG92ZXJHZnggPSBldmVudC5ob3ZlckdmeDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnNldEhvdmVyKCkge1xuICAgICAgaG92ZXIgPSBudWxsO1xuICAgICAgaG92ZXJHZnggPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuc3VyZU91dCgpIHtcblxuICAgICAgaWYgKCFob3Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gaG92ZXIsXG4gICAgICAgICAgZ2Z4ID0gaG92ZXJHZng7XG5cbiAgICAgIGhvdmVyID0gbnVsbDtcbiAgICAgIGhvdmVyR2Z4ID0gbnVsbDtcblxuICAgICAgLy8gZW1pdCBzeW50aGV0aWMgb3V0IGV2ZW50XG4gICAgICBkcmFnZ2luZy5vdXQoe1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBnZng6IGdmeFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub24oJ2RyYWcuaG92ZXInLCBzZXREcmFnSG92ZXIpO1xuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm91dCcsIHVuc2V0SG92ZXIpO1xuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgSElHSF9QUklPUklUWSwgZW5zdXJlT3V0KTtcblxuICAgIGV2ZW50QnVzLm9uY2UoJ2RyYWcuY2xlYW51cCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZXZlbnRCdXMub2ZmKCdkcmFnLmhvdmVyJywgc2V0RHJhZ0hvdmVyKTtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5vdXQnLCB1bnNldEhvdmVyKTtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5ob3ZlcicsIGVuc3VyZU91dCk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgdGhpcy5fZmluZFRhcmdldEdmeCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQ7XG5cbiAgICBpZiAoIShldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KTtcblxuICAgIC8vIGRhbW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgb3VjaCFcbiAgICB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuXG4gICAgcmV0dXJuIGdldEdmeCh0YXJnZXQpO1xuICB9O1xuXG59XG5cbkhvdmVyRml4LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdkcmFnZ2luZycsXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEdmeCh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvbUNsb3Nlc3QodGFyZ2V0LCAnc3ZnLCAuZGpzLWVsZW1lbnQnLCB0cnVlKTtcbn0iLCJpbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJy4uL3NlbGVjdGlvbic7XG5cbmltcG9ydCBEcmFnZ2luZyBmcm9tICcuL0RyYWdnaW5nJztcbmltcG9ydCBIb3ZlckZpeCBmcm9tICcuL0hvdmVyRml4JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdob3ZlckZpeCdcbiAgXSxcbiAgX19kZXBlbmRzX186IFtcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgZHJhZ2dpbmc6IFsgJ3R5cGUnLCBEcmFnZ2luZyBdLFxuICBob3ZlckZpeDogWyAndHlwZScsIEhvdmVyRml4IF1cbn07IiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBOT1RfUkVHSVNURVJFRF9FUlJPUiA9ICdpcyBub3QgYSByZWdpc3RlcmVkIGFjdGlvbicsXG4gICAgSVNfUkVHSVNURVJFRF9FUlJPUiA9ICdpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnO1xuXG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIG1vZGVsaW5nIGFjdGlvbnMgYnkgZGVjb3VwbGluZ1xuICogdGhlIG9uZSB3aG8gcmVxdWVzdHMgdGhlIGFjdGlvbiB0byBiZSB0cmlnZ2VyZWQgYW5kIHRoZSB0cmlnZ2VyIGl0c2VsZi5cbiAqXG4gKiBJdCdzIHBvc3NpYmxlIHRvIGFkZCBuZXcgYWN0aW9ucyBieSByZWdpc3RlcmluZyB0aGVtIHdpdGggwrRyZWdpc3RlckFjdGlvbsK0XG4gKiBhbmQgbGlrZXdpc2UgdW5yZWdpc3RlciBleGlzdGluZyBvbmVzIHdpdGggwrR1bnJlZ2lzdGVyQWN0aW9uwrQuXG4gKlxuICpcbiAqICMjIExpZmUtQ3ljbGUgYW5kIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGUgZWRpdG9yIGFjdGlvbnMgd2lsbCB3YWl0IGZvciBkaWFncmFtIGluaXRpYWxpemF0aW9uIGJlZm9yZVxuICogcmVnaXN0ZXJpbmcgZGVmYXVsdCBhY3Rpb25zIF9hbmRfIGZpcmluZyBhbiBgZWRpdG9yQWN0aW9ucy5pbml0YCBldmVudC5cbiAqXG4gKiBJbnRlcmVzdGVkIHBhcnRpZXMgbWF5IGxpc3RlbiB0byB0aGUgYGVkaXRvckFjdGlvbnMuaW5pdGAgZXZlbnQgd2l0aFxuICogbG93IHByaW9yaXR5IHRvIGNoZWNrLCB3aGljaCBhY3Rpb25zIGdvdCByZWdpc3RlcmVkLiBPdGhlciBjb21wb25lbnRzXG4gKiBtYXkgdXNlIHRoZSBldmVudCB0byByZWdpc3RlciB0aGVpciBvd24gYWN0aW9ucyB2aWEgYHJlZ2lzdGVyQWN0aW9uYC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWRpdG9yQWN0aW9ucyhldmVudEJ1cywgaW5qZWN0b3IpIHtcblxuICAvLyBpbml0aWFsaXplIGFjdGlvbnNcbiAgdGhpcy5fYWN0aW9ucyA9IHt9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICAvLyBhbGwgZGlhZ3JhbSBtb2R1bGVzIGdvdCBsb2FkZWQ7IGNoZWNrIHdoaWNoIG9uZXNcbiAgICAvLyBhcmUgYXZhaWxhYmxlIGFuZCByZWdpc3RlciB0aGUgcmVzcGVjdGl2ZSBkZWZhdWx0IGFjdGlvbnNcbiAgICBzZWxmLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zKGluamVjdG9yKTtcblxuICAgIC8vIGFzayBpbnRlcmVzdGVkIHBhcnRpZXMgdG8gcmVnaXN0ZXIgYXZhaWxhYmxlIGVkaXRvclxuICAgIC8vIGFjdGlvbnMgb24gZGlhZ3JhbSBpbml0aWFsaXphdGlvblxuICAgIGV2ZW50QnVzLmZpcmUoJ2VkaXRvckFjdGlvbnMuaW5pdCcsIHtcbiAgICAgIGVkaXRvckFjdGlvbnM6IHNlbGZcbiAgICB9KTtcbiAgfSk7XG5cbn1cblxuRWRpdG9yQWN0aW9ucy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGRlZmF1bHQgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJEZWZhdWx0QWN0aW9ucyA9IGZ1bmN0aW9uKGluamVjdG9yKSB7XG5cbiAgLy8gKDEpIHJldHJpZXZlIG9wdGlvbmFsIGNvbXBvbmVudHMgdG8gaW50ZWdyYXRlIHdpdGhcblxuICB2YXIgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snLCBmYWxzZSk7XG4gIHZhciBtb2RlbGluZyA9IGluamVjdG9yLmdldCgnbW9kZWxpbmcnLCBmYWxzZSk7XG4gIHZhciBzZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ3NlbGVjdGlvbicsIGZhbHNlKTtcbiAgdmFyIHpvb21TY3JvbGwgPSBpbmplY3Rvci5nZXQoJ3pvb21TY3JvbGwnLCBmYWxzZSk7XG4gIHZhciBjb3B5UGFzdGUgPSBpbmplY3Rvci5nZXQoJ2NvcHlQYXN0ZScsIGZhbHNlKTtcbiAgdmFyIGNhbnZhcyA9IGluamVjdG9yLmdldCgnY2FudmFzJywgZmFsc2UpO1xuICB2YXIgcnVsZXMgPSBpbmplY3Rvci5nZXQoJ3J1bGVzJywgZmFsc2UpO1xuICB2YXIga2V5Ym9hcmRNb3ZlID0gaW5qZWN0b3IuZ2V0KCdrZXlib2FyZE1vdmUnLCBmYWxzZSk7XG4gIHZhciBrZXlib2FyZE1vdmVTZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ2tleWJvYXJkTW92ZVNlbGVjdGlvbicsIGZhbHNlKTtcblxuICAvLyAoMikgY2hlY2sgY29tcG9uZW50cyBhbmQgcmVnaXN0ZXIgYWN0aW9uc1xuXG4gIGlmIChjb21tYW5kU3RhY2spIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCd1bmRvJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb21tYW5kU3RhY2sudW5kbygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcigncmVkbycsIGZ1bmN0aW9uKCkge1xuICAgICAgY29tbWFuZFN0YWNrLnJlZG8oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb3B5UGFzdGUgJiYgc2VsZWN0aW9uKSB7XG4gICAgdGhpcy5yZWdpc3RlcignY29weScsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGNvcHlQYXN0ZS5jb3B5KHNlbGVjdGVkRWxlbWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNvcHlQYXN0ZSkge1xuICAgIHRoaXMucmVnaXN0ZXIoJ3Bhc3RlJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb3B5UGFzdGUucGFzdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh6b29tU2Nyb2xsKSB7XG4gICAgdGhpcy5yZWdpc3Rlcignc3RlcFpvb20nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICB6b29tU2Nyb2xsLnN0ZXBab29tKG9wdHMudmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNhbnZhcykge1xuICAgIHRoaXMucmVnaXN0ZXIoJ3pvb20nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICBjYW52YXMuem9vbShvcHRzLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChtb2RlbGluZyAmJiBzZWxlY3Rpb24gJiYgcnVsZXMpIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCdyZW1vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGlmICghc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmRlbGV0ZScsIHsgZWxlbWVudHM6IHNlbGVjdGVkRWxlbWVudHMgfSksXG4gICAgICAgICAgcmVtb3ZhYmxlRWxlbWVudHM7XG5cbiAgICAgIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5KGFsbG93ZWQpKSB7XG4gICAgICAgIHJlbW92YWJsZUVsZW1lbnRzID0gYWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZW1vdmFibGVFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW1vdmFibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMocmVtb3ZhYmxlRWxlbWVudHMuc2xpY2UoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoa2V5Ym9hcmRNb3ZlKSB7XG4gICAgdGhpcy5yZWdpc3RlcignbW92ZUNhbnZhcycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIGtleWJvYXJkTW92ZS5tb3ZlQ2FudmFzKG9wdHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGtleWJvYXJkTW92ZVNlbGVjdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXIoJ21vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICBrZXlib2FyZE1vdmVTZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihvcHRzLmRpcmVjdGlvbiwgb3B0cy5hY2NlbGVyYXRlZCk7XG4gICAgfSk7XG4gIH1cblxufTtcblxuXG4vKipcbiAqIFRyaWdnZXJzIGEgcmVnaXN0ZXJlZCBhY3Rpb25cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRzXG4gKlxuICogQHJldHVybiB7VW5rbm93bn0gUmV0dXJucyB3aGF0IHRoZSByZWdpc3RlcmVkIGxpc3RlbmVyIHJldHVybnNcbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgb3B0cykge1xuICBpZiAoIXRoaXMuX2FjdGlvbnNbYWN0aW9uXSkge1xuICAgIHRocm93IGVycm9yKGFjdGlvbiwgTk9UX1JFR0lTVEVSRURfRVJST1IpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2FjdGlvbnNbYWN0aW9uXShvcHRzKTtcbn07XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjb2xsZWN0aW9ucyBvZiBhY3Rpb25zLlxuICogVGhlIGtleSBvZiB0aGUgb2JqZWN0IHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogwrTCtMK0XG4gKiB2YXIgYWN0aW9ucyA9IHtcbiAqICAgc3BhY2VUb29sOiBmdW5jdGlvbigpIHtcbiAqICAgICBzcGFjZVRvb2wuYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAqICAgfSxcbiAqICAgbGFzc29Ub29sOiBmdW5jdGlvbigpIHtcbiAqICAgICBsYXNzb1Rvb2wuYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAqICAgfVxuICogXTtcbiAqXG4gKiBlZGl0b3JBY3Rpb25zLnJlZ2lzdGVyKGFjdGlvbnMpO1xuICpcbiAqIGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKCdzcGFjZVRvb2wnKTsgLy8gdHJ1ZVxuICogwrTCtMK0XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBhY3Rpb25zXG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oYWN0aW9ucywgbGlzdGVuZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVnaXN0ZXJBY3Rpb24oYWN0aW9ucywgbGlzdGVuZXIpO1xuICB9XG5cbiAgZm9yRWFjaChhY3Rpb25zLCBmdW5jdGlvbihsaXN0ZW5lciwgYWN0aW9uKSB7XG4gICAgc2VsZi5fcmVnaXN0ZXJBY3Rpb24oYWN0aW9uLCBsaXN0ZW5lcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciB0byBhbiBhY3Rpb24ga2V5XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24sIGxpc3RlbmVyKSB7XG4gIGlmICh0aGlzLmlzUmVnaXN0ZXJlZChhY3Rpb24pKSB7XG4gICAgdGhyb3cgZXJyb3IoYWN0aW9uLCBJU19SRUdJU1RFUkVEX0VSUk9SKTtcbiAgfVxuXG4gIHRoaXMuX2FjdGlvbnNbYWN0aW9uXSA9IGxpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGFuIGV4aXN0aW5nIGFjdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUudW5yZWdpc3RlciA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICBpZiAoIXRoaXMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICB0aHJvdyBlcnJvcihhY3Rpb24sIE5PVF9SRUdJU1RFUkVEX0VSUk9SKTtcbiAgfVxuXG4gIHRoaXMuX2FjdGlvbnNbYWN0aW9uXSA9IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLmdldEFjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2FjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2V0aGVyIHRoZSBnaXZlbiBhY3Rpb24gaXMgcmVnaXN0ZXJlZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5pc1JlZ2lzdGVyZWQgPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuICEhdGhpcy5fYWN0aW9uc1thY3Rpb25dO1xufTtcblxuXG5mdW5jdGlvbiBlcnJvcihhY3Rpb24sIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihhY3Rpb24gKyAnICcgKyBtZXNzYWdlKTtcbn1cbiIsImltcG9ydCBFZGl0b3JBY3Rpb25zIGZyb20gJy4vRWRpdG9yQWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2VkaXRvckFjdGlvbnMnIF0sXG4gIGVkaXRvckFjdGlvbnM6IFsgJ3R5cGUnLCBFZGl0b3JBY3Rpb25zIF1cbn07XG4iLCJ2YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0Nvbm5lY3R9IGNvbm5lY3RcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7VG9vbE1hbmFnZXJ9IHRvb2xNYW5hZ2VyXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHbG9iYWxDb25uZWN0KFxuICAgIGV2ZW50QnVzLCBkcmFnZ2luZywgY29ubmVjdCxcbiAgICBjYW52YXMsIHRvb2xNYW5hZ2VyLCBydWxlcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuXG4gIHRvb2xNYW5hZ2VyLnJlZ2lzdGVyVG9vbCgnZ2xvYmFsLWNvbm5lY3QnLCB7XG4gICAgdG9vbDogJ2dsb2JhbC1jb25uZWN0JyxcbiAgICBkcmFnZ2luZzogJ2dsb2JhbC1jb25uZWN0LmRyYWcnXG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdnbG9iYWwtY29ubmVjdC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzdGFydFRhcmdldCA9IGV2ZW50LmhvdmVyO1xuXG4gICAgdmFyIGNhblN0YXJ0Q29ubmVjdCA9IGNvbnRleHQuY2FuU3RhcnRDb25uZWN0ID0gc2VsZi5jYW5TdGFydENvbm5lY3Qoc3RhcnRUYXJnZXQpO1xuXG4gICAgLy8gc2ltcGx5IGlnbm9yZSBob3ZlclxuICAgIGlmIChjYW5TdGFydENvbm5lY3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnN0YXJ0VGFyZ2V0ID0gc3RhcnRUYXJnZXQ7XG5cbiAgICBjYW52YXMuYWRkTWFya2VyKHN0YXJ0VGFyZ2V0LCBjYW5TdGFydENvbm5lY3QgPyBNQVJLRVJfT0sgOiBNQVJLRVJfTk9UX09LKTtcbiAgfSk7XG5cblxuICBldmVudEJ1cy5vbihbICdnbG9iYWwtY29ubmVjdC5vdXQnLCAnZ2xvYmFsLWNvbm5lY3QuY2xlYW51cCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgc3RhcnRUYXJnZXQgPSBldmVudC5jb250ZXh0LnN0YXJ0VGFyZ2V0LFxuICAgICAgICBjYW5TdGFydENvbm5lY3QgPSBldmVudC5jb250ZXh0LmNhblN0YXJ0Q29ubmVjdDtcblxuICAgIGlmIChzdGFydFRhcmdldCkge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihzdGFydFRhcmdldCwgY2FuU3RhcnRDb25uZWN0ID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgfVxuICB9KTtcblxuXG4gIGV2ZW50QnVzLm9uKFsgJ2dsb2JhbC1jb25uZWN0LmVuZGVkJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc3RhcnRUYXJnZXQgPSBjb250ZXh0LnN0YXJ0VGFyZ2V0LFxuICAgICAgICBzdGFydFBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICB9O1xuXG4gICAgdmFyIGNhblN0YXJ0Q29ubmVjdCA9IHNlbGYuY2FuU3RhcnRDb25uZWN0KHN0YXJ0VGFyZ2V0KTtcblxuICAgIGlmICghY2FuU3RhcnRDb25uZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub25jZSgnZWxlbWVudC5vdXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGV2ZW50QnVzLm9uY2UoWyAnY29ubmVjdC5lbmRlZCcsICdjb25uZWN0LmNhbmNlbGVkJyBdLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnRCdXMuZmlyZSgnZ2xvYmFsLWNvbm5lY3QuZHJhZy5lbmRlZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbm5lY3Quc3RhcnQobnVsbCwgc3RhcnRUYXJnZXQsIHN0YXJ0UG9zaXRpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuR2xvYmFsQ29ubmVjdC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZHJhZ2dpbmcnLFxuICAnY29ubmVjdCcsXG4gICdjYW52YXMnLFxuICAndG9vbE1hbmFnZXInLFxuICAncnVsZXMnXG5dO1xuXG4vKipcbiAqIEluaXRpYXRlcyB0b29sIGFjdGl2aXR5LlxuICovXG5HbG9iYWxDb25uZWN0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdnbG9iYWwtY29ubmVjdCcsIHtcbiAgICB0cmFwQ2xpY2s6IGZhbHNlLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbkdsb2JhbENvbm5lY3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59O1xuXG5HbG9iYWxDb25uZWN0LnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29udGV4dCA9IHRoaXMuX2RyYWdnaW5nLmNvbnRleHQoKTtcblxuICByZXR1cm4gY29udGV4dCAmJiAvXmdsb2JhbC1jb25uZWN0Ly50ZXN0KGNvbnRleHQucHJlZml4KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgc291cmNlIHNoYXBlIGNhbiBpbml0aWF0ZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1NoYXBlfSBzdGFydFRhcmdldFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuR2xvYmFsQ29ubmVjdC5wcm90b3R5cGUuY2FuU3RhcnRDb25uZWN0ID0gZnVuY3Rpb24oc3RhcnRUYXJnZXQpIHtcbiAgcmV0dXJuIHRoaXMuX3J1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24uc3RhcnQnLCB7IHNvdXJjZTogc3RhcnRUYXJnZXQgfSk7XG59O1xuIiwiaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnLi4vY29ubmVjdCc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuXG5pbXBvcnQgR2xvYmFsQ29ubmVjdCBmcm9tICcuL0dsb2JhbENvbm5lY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29ubmVjdE1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBEcmFnZ2luZ01vZHVsZSxcbiAgICBUb29sTWFuYWdlck1vZHVsZVxuICBdLFxuICBnbG9iYWxDb25uZWN0OiBbICd0eXBlJywgR2xvYmFsQ29ubmVjdCBdXG59O1xuIiwiaW1wb3J0IHtcclxuICBzZXRTbmFwcGVkLFxyXG4gIGlzU25hcHBlZFxyXG59IGZyb20gJy4uL3NuYXBwaW5nL1NuYXBVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQ21kIH0gZnJvbSAnLi4va2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNzaWduLFxyXG4gIGlzTnVtYmVyXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTUEFDSU5HLFxyXG4gIHF1YW50aXplXHJcbn0gZnJvbSAnLi9HcmlkVXRpbCc7XHJcblxyXG52YXIgTE9XRVJfUFJJT1JJVFkgPSAxMjAwO1xyXG52YXIgTE9XX1BSSU9SSVRZID0gODAwO1xyXG5cclxuLyoqXHJcbiAqIEJhc2ljIGdyaWQgc25hcHBpbmcgdGhhdCBjb3ZlcnMgY29ubmVjdGluZywgY3JlYXRpbmcsIG1vdmluZywgcmVzaXppbmcgc2hhcGVzLCBtb3ZpbmcgYmVuZHBvaW50c1xyXG4gKiBhbmQgY29ubmVjdGlvbiBzZWdtZW50cy5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyaWRTbmFwcGluZyhlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBjb25maWcpIHtcclxuXHJcbiAgdmFyIGFjdGl2ZSA9ICFjb25maWcgfHwgY29uZmlnLmFjdGl2ZSAhPT0gZmFsc2U7XHJcblxyXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLnNldEFjdGl2ZShhY3RpdmUpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLm1vdmUnLFxyXG4gICAgJ2NyZWF0ZS5lbmQnLFxyXG4gICAgJ2JlbmRwb2ludC5tb3ZlLm1vdmUnLFxyXG4gICAgJ2JlbmRwb2ludC5tb3ZlLmVuZCcsXHJcbiAgICAnY29ubmVjdC5tb3ZlJyxcclxuICAgICdjb25uZWN0LmVuZCcsXHJcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5tb3ZlJyxcclxuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmVuZCcsXHJcbiAgICAncmVzaXplLm1vdmUnLFxyXG4gICAgJ3Jlc2l6ZS5lbmQnLFxyXG4gICAgJ3NoYXBlLm1vdmUubW92ZScsXHJcbiAgICAnc2hhcGUubW92ZS5lbmQnXHJcbiAgXSwgTE9XRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XHJcblxyXG4gICAgaWYgKCFzZWxmLmFjdGl2ZSB8fCAob3JpZ2luYWxFdmVudCAmJiBpc0NtZChvcmlnaW5hbEV2ZW50KSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0O1xyXG5cclxuICAgIGlmICghZ3JpZFNuYXBwaW5nQ29udGV4dCkge1xyXG4gICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0ID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgWyAneCcsICd5JyBdLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgICB2YXIgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgLy8gYWxsb3cgc25hcHBpbmcgd2l0aCBvZmZzZXRcclxuICAgICAgdmFyIHNuYXBPZmZzZXQgPSBnZXRTbmFwT2Zmc2V0KGV2ZW50LCBheGlzLCBlbGVtZW50UmVnaXN0cnkpO1xyXG5cclxuICAgICAgaWYgKHNuYXBPZmZzZXQpIHtcclxuICAgICAgICBvcHRpb25zLm9mZnNldCA9IHNuYXBPZmZzZXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFsbG93IHNuYXBwaW5nIHdpdGggbWluIGFuZCBtYXhcclxuICAgICAgdmFyIHNuYXBDb25zdHJhaW50cyA9IGdldFNuYXBDb25zdHJhaW50cyhldmVudCwgYXhpcyk7XHJcblxyXG4gICAgICBpZiAoc25hcENvbnN0cmFpbnRzKSB7XHJcbiAgICAgICAgYXNzaWduKG9wdGlvbnMsIHNuYXBDb25zdHJhaW50cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTbmFwcGVkKGV2ZW50LCBheGlzKSkge1xyXG4gICAgICAgIHNlbGYuc25hcEV2ZW50KGV2ZW50LCBheGlzLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTbmFwIGFuIGV2ZW50cyB4IG9yIHkgd2l0aCBvcHRpb25hbCBtaW4sIG1heCBhbmQgb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm9mZnNldF1cclxuICovXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc25hcEV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsIGF4aXMsIG9wdGlvbnMpIHtcclxuICB2YXIgc25hcHBlZFZhbHVlID0gdGhpcy5zbmFwVmFsdWUoZXZlbnRbIGF4aXMgXSwgb3B0aW9ucyk7XHJcblxyXG4gIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHNuYXBwZWRWYWx1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRXhwb3NlIGdyaWQgc3BhY2luZyBmb3IgdGhpcmQgcGFydGllcyAoaS5lLiBleHRlbnNpb25zKS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBzcGFjaW5nIG9mIGdyaWQgZG90c1xyXG4gKi9cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS5nZXRHcmlkU3BhY2luZyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBTUEFDSU5HO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNuYXAgdmFsdWUgd2l0aCBvcHRpb25hbCBtaW4sIG1heCBhbmQgb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm9mZnNldF1cclxuICovXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc25hcFZhbHVlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcclxuICB2YXIgb2Zmc2V0ID0gMDtcclxuXHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vZmZzZXQpIHtcclxuICAgIG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgdmFsdWUgKz0gb2Zmc2V0O1xyXG5cclxuICB2YWx1ZSA9IHF1YW50aXplKHZhbHVlLCBTUEFDSU5HKTtcclxuXHJcbiAgdmFyIG1pbiwgbWF4O1xyXG5cclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1pbikge1xyXG4gICAgbWluID0gb3B0aW9ucy5taW47XHJcblxyXG4gICAgaWYgKGlzTnVtYmVyKG1pbikpIHtcclxuICAgICAgbWluID0gcXVhbnRpemUobWluICsgb2Zmc2V0LCBTUEFDSU5HLCAnY2VpbCcpO1xyXG5cclxuICAgICAgdmFsdWUgPSBNYXRoLm1heCh2YWx1ZSwgbWluKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMubWF4KSB7XHJcbiAgICBtYXggPSBvcHRpb25zLm1heDtcclxuXHJcbiAgICBpZiAoaXNOdW1iZXIobWF4KSkge1xyXG4gICAgICBtYXggPSBxdWFudGl6ZShtYXggKyBvZmZzZXQsIFNQQUNJTkcsICdmbG9vcicpO1xyXG5cclxuICAgICAgdmFsdWUgPSBNYXRoLm1pbih2YWx1ZSwgbWF4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbHVlIC09IG9mZnNldDtcclxuXHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB0aGlzLmFjdGl2ZTtcclxufTtcclxuXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc2V0QWN0aXZlID0gZnVuY3Rpb24oYWN0aXZlKSB7XHJcbiAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XHJcblxyXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2dyaWRTbmFwcGluZy50b2dnbGUnLCB7IGFjdGl2ZTogYWN0aXZlIH0pO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS50b2dnbGVBY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICB0aGlzLnNldEFjdGl2ZSghdGhpcy5hY3RpdmUpO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLiRpbmplY3QgPSBbXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnY29uZmlnLmdyaWRTbmFwcGluZydcclxuXTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIEdldCBtaW5pbXVtIGFuZCBtYXhpbXVtIHNuYXAgY29uc3RyYWludHMuXHJcbiAqIENvbnN0cmFpbnRzIGFyZSBjYWNoZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnQuY29udGV4dFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnxPYmplY3R9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTbmFwQ29uc3RyYWludHMoZXZlbnQsIGF4aXMpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIGNyZWF0ZUNvbnN0cmFpbnRzID0gY29udGV4dC5jcmVhdGVDb25zdHJhaW50cyxcclxuICAgICAgcmVzaXplQ29uc3RyYWludHMgPSBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzIHx8IHt9LFxyXG4gICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0LFxyXG4gICAgICBzbmFwQ29uc3RyYWludHMgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBDb25zdHJhaW50cztcclxuXHJcbiAgLy8gY2FjaGUgc25hcCBjb25zdHJhaW50c1xyXG4gIGlmIChzbmFwQ29uc3RyYWludHMgJiYgc25hcENvbnN0cmFpbnRzWyBheGlzIF0pIHtcclxuICAgIHJldHVybiBzbmFwQ29uc3RyYWludHNbIGF4aXMgXTtcclxuICB9XHJcblxyXG4gIGlmICghc25hcENvbnN0cmFpbnRzKSB7XHJcbiAgICBzbmFwQ29uc3RyYWludHMgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBDb25zdHJhaW50cyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgaWYgKCFzbmFwQ29uc3RyYWludHNbIGF4aXMgXSkge1xyXG4gICAgc25hcENvbnN0cmFpbnRzWyBheGlzIF0gPSB7fTtcclxuICB9XHJcblxyXG4gIHZhciBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbjtcclxuXHJcbiAgLy8gY3JlYXRlXHJcbiAgaWYgKGNyZWF0ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGF4aXMpKSB7XHJcbiAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1pbiA9IGNyZWF0ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1heCA9IGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc25hcENvbnN0cmFpbnRzLnkubWluID0gY3JlYXRlQ29uc3RyYWludHMudG9wO1xyXG4gICAgICBzbmFwQ29uc3RyYWludHMueS5tYXggPSBjcmVhdGVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyByZXNpemVcclxuICB2YXIgbWluUmVzaXplQ29uc3RyYWludHMgPSByZXNpemVDb25zdHJhaW50cy5taW4sXHJcbiAgICAgIG1heFJlc2l6ZUNvbnN0cmFpbnRzID0gcmVzaXplQ29uc3RyYWludHMubWF4O1xyXG5cclxuICBpZiAobWluUmVzaXplQ29uc3RyYWludHMpIHtcclxuICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuXHJcbiAgICAgIGlmIChpc1dlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1heCA9IG1pblJlc2l6ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLngubWluID0gbWluUmVzaXplQ29uc3RyYWludHMucmlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKGlzTm9ydGgoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy55Lm1heCA9IG1pblJlc2l6ZUNvbnN0cmFpbnRzLnRvcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5taW4gPSBtaW5SZXNpemVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAobWF4UmVzaXplQ29uc3RyYWludHMpIHtcclxuICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuXHJcbiAgICAgIGlmIChpc1dlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1pbiA9IG1heFJlc2l6ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLngubWF4ID0gbWF4UmVzaXplQ29uc3RyYWludHMucmlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKGlzTm9ydGgoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy55Lm1pbiA9IG1heFJlc2l6ZUNvbnN0cmFpbnRzLnRvcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5tYXggPSBtYXhSZXNpemVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc25hcENvbnN0cmFpbnRzWyBheGlzIF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgc25hcCBvZmZzZXQuXHJcbiAqIE9mZnNldCBpcyBjYWNoZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xyXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTbmFwT2Zmc2V0KGV2ZW50LCBheGlzLCBlbGVtZW50UmVnaXN0cnkpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNoYXBlID0gZXZlbnQuc2hhcGUsXHJcbiAgICAgIGdyaWRTbmFwcGluZ0NvbnRleHQgPSBjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQsXHJcbiAgICAgIHNuYXBMb2NhdGlvbiA9IGdyaWRTbmFwcGluZ0NvbnRleHQuc25hcExvY2F0aW9uLFxyXG4gICAgICBzbmFwT2Zmc2V0ID0gZ3JpZFNuYXBwaW5nQ29udGV4dC5zbmFwT2Zmc2V0O1xyXG5cclxuICAvLyBjYWNoZSBzbmFwIG9mZnNldFxyXG4gIGlmIChzbmFwT2Zmc2V0ICYmIGlzTnVtYmVyKHNuYXBPZmZzZXRbIGF4aXMgXSkpIHtcclxuICAgIHJldHVybiBzbmFwT2Zmc2V0WyBheGlzIF07XHJcbiAgfVxyXG5cclxuICBpZiAoIXNuYXBPZmZzZXQpIHtcclxuICAgIHNuYXBPZmZzZXQgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBPZmZzZXQgPSB7fTtcclxuICB9XHJcblxyXG4gIGlmICghaXNOdW1iZXIoc25hcE9mZnNldFsgYXhpcyBdKSkge1xyXG4gICAgc25hcE9mZnNldFsgYXhpcyBdID0gMDtcclxuICB9XHJcblxyXG4gIGlmICghc2hhcGUpIHtcclxuICAgIHJldHVybiBzbmFwT2Zmc2V0WyBheGlzIF07XHJcbiAgfVxyXG5cclxuICBpZiAoIWVsZW1lbnRSZWdpc3RyeS5nZXQoc2hhcGUuaWQpKSB7XHJcblxyXG4gICAgaWYgKGlzSG9yaXpvbnRhbChheGlzKSkge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gKz0gc2hhcGVbIGF4aXMgXSArIHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSArPSBzaGFwZVsgYXhpcyBdICsgc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICghc25hcExvY2F0aW9uKSB7XHJcbiAgICByZXR1cm4gc25hcE9mZnNldFsgYXhpcyBdO1xyXG4gIH1cclxuXHJcbiAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG4gICAgaWYgKC9sZWZ0Ly50ZXN0KHNuYXBMb2NhdGlvbikpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdIC09IHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH0gZWxzZSBpZiAoL3JpZ2h0Ly50ZXN0KHNuYXBMb2NhdGlvbikpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdICs9IHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKC90b3AvLnRlc3Qoc25hcExvY2F0aW9uKSkge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gLT0gc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgIH0gZWxzZSBpZiAoL2JvdHRvbS8udGVzdChzbmFwTG9jYXRpb24pKSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSArPSBzaGFwZS5oZWlnaHQgLyAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNuYXBPZmZzZXRbIGF4aXMgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNIb3Jpem9udGFsKGF4aXMpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vcnRoKGRpcmVjdGlvbikge1xyXG4gIHJldHVybiBkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXZXN0KGRpcmVjdGlvbikge1xyXG4gIHJldHVybiBkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMTtcclxufSIsImV4cG9ydCB2YXIgU1BBQ0lORyA9IDEwO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVhbnRpemUodmFsdWUsIHF1YW50dW0sIGZuKSB7XG4gIGlmICghZm4pIHtcbiAgICBmbiA9ICdyb3VuZCc7XG4gIH1cblxuICByZXR1cm4gTWF0aFsgZm4gXSh2YWx1ZSAvIHF1YW50dW0pICogcXVhbnR1bTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICcuLi8uLi8uLi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBpc1N0cmluZ1xyXG59IGZyb20gJ21pbi1kYXNoJztcclxuXHJcblxyXG4vKipcclxuICogSW50ZWdyYXRlcyByZXNpemluZyB3aXRoIGdyaWQgc25hcHBpbmcuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICB0aGlzLl9ncmlkU25hcHBpbmcgPSBncmlkU25hcHBpbmc7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5yZXNpemUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcclxuICAgICAgICBhdXRvUmVzaXplID0gaGludHMuYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICBpZiAoIWF1dG9SZXNpemUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHM7XHJcblxyXG4gICAgaWYgKGlzU3RyaW5nKGF1dG9SZXNpemUpKSB7XHJcbiAgICAgIGNvbnRleHQubmV3Qm91bmRzID0gc2VsZi5zbmFwQ29tcGxleChuZXdCb3VuZHMsIGF1dG9SZXNpemUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dC5uZXdCb3VuZHMgPSBzZWxmLnNuYXBTaW1wbGUoc2hhcGUsIG5ld0JvdW5kcyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcblJlc2l6ZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJyxcclxuICAnbW9kZWxpbmcnXHJcbl07XHJcblxyXG5pbmhlcml0cyhSZXNpemVCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIHdpZHRoIGFuZCBoZWlnaHQgaW4gcmVsYXRpb24gdG8gY2VudGVyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gc2hhcGVcclxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm91bmRzfSBTbmFwcGVkIGJvdW5kcy5cclxuICovXHJcblJlc2l6ZUJlaGF2aW9yLnByb3RvdHlwZS5zbmFwU2ltcGxlID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcykge1xyXG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmc7XHJcblxyXG4gIG5ld0JvdW5kcy53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLndpZHRoLCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy53aWR0aFxyXG4gIH0pO1xyXG5cclxuICBuZXdCb3VuZHMuaGVpZ2h0ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMuaGVpZ2h0LCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy5oZWlnaHRcclxuICB9KTtcclxuXHJcbiAgbmV3Qm91bmRzLnggPSBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC8gMikgLSAobmV3Qm91bmRzLndpZHRoIC8gMik7XHJcbiAgbmV3Qm91bmRzLnkgPSBzaGFwZS55ICsgKHNoYXBlLmhlaWdodCAvIDIpIC0gKG5ld0JvdW5kcy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgYWNjb3JkaW5nIHRvIGdpdmVuIGRpcmVjdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcclxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbnMgLSBEaXJlY3Rpb25zIGFzIHtufHd8c3xlfS5cclxuICpcclxuICogQHJldHVybnMge0JvdW5kc30gU25hcHBlZCBib3VuZHMuXHJcbiAqL1xyXG5SZXNpemVCZWhhdmlvci5wcm90b3R5cGUuc25hcENvbXBsZXggPSBmdW5jdGlvbihuZXdCb3VuZHMsIGRpcmVjdGlvbnMpIHtcclxuICBpZiAoL3d8ZS8udGVzdChkaXJlY3Rpb25zKSkge1xyXG4gICAgbmV3Qm91bmRzID0gdGhpcy5zbmFwSG9yaXpvbnRhbGx5KG5ld0JvdW5kcywgZGlyZWN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBpZiAoL258cy8udGVzdChkaXJlY3Rpb25zKSkge1xyXG4gICAgbmV3Qm91bmRzID0gdGhpcy5zbmFwVmVydGljYWxseShuZXdCb3VuZHMsIGRpcmVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIGluIG9uZSBvciBib3RoIGRpcmVjdGlvbnMgaG9yaXpvbnRhbGx5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb25zIC0gRGlyZWN0aW9ucyBhcyB7bnx3fHN8ZX0uXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtCb3VuZHN9IFNuYXBwZWQgYm91bmRzLlxyXG4gKi9cclxuUmVzaXplQmVoYXZpb3IucHJvdG90eXBlLnNuYXBIb3Jpem9udGFsbHkgPSBmdW5jdGlvbihuZXdCb3VuZHMsIGRpcmVjdGlvbnMpIHtcclxuICB2YXIgZ3JpZFNuYXBwaW5nID0gdGhpcy5fZ3JpZFNuYXBwaW5nLFxyXG4gICAgICB3ZXN0ID0gL3cvLnRlc3QoZGlyZWN0aW9ucyksXHJcbiAgICAgIGVhc3QgPSAvZS8udGVzdChkaXJlY3Rpb25zKTtcclxuXHJcbiAgdmFyIHNuYXBwZWROZXdCb3VuZHMgPSB7fTtcclxuXHJcbiAgc25hcHBlZE5ld0JvdW5kcy53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLndpZHRoLCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy53aWR0aFxyXG4gIH0pO1xyXG5cclxuICBpZiAoZWFzdCkge1xyXG5cclxuICAgIC8vIGhhbmRsZSA8d2U+XHJcbiAgICBpZiAod2VzdCkge1xyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLnggPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy54LCB7XHJcbiAgICAgICAgbWF4OiBuZXdCb3VuZHMueFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNuYXBwZWROZXdCb3VuZHMud2lkdGggKz0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMueCAtIHNuYXBwZWROZXdCb3VuZHMueCwge1xyXG4gICAgICAgIG1pbjogbmV3Qm91bmRzLnggLSBzbmFwcGVkTmV3Qm91bmRzLnhcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFuZGxlIDxlPlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG5ld0JvdW5kcy54ID0gbmV3Qm91bmRzLnggKyBuZXdCb3VuZHMud2lkdGggLSBzbmFwcGVkTmV3Qm91bmRzLndpZHRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXNzaWduIHNuYXBwZWQgeCBhbmQgd2lkdGhcclxuICBhc3NpZ24obmV3Qm91bmRzLCBzbmFwcGVkTmV3Qm91bmRzKTtcclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIGluIG9uZSBvciBib3RoIGRpcmVjdGlvbnMgdmVydGljYWxseS5cclxuICpcclxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9ucyAtIERpcmVjdGlvbnMgYXMge258d3xzfGV9LlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm91bmRzfSBTbmFwcGVkIGJvdW5kcy5cclxuICovXHJcblJlc2l6ZUJlaGF2aW9yLnByb3RvdHlwZS5zbmFwVmVydGljYWxseSA9IGZ1bmN0aW9uKG5ld0JvdW5kcywgZGlyZWN0aW9ucykge1xyXG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmcsXHJcbiAgICAgIG5vcnRoID0gL24vLnRlc3QoZGlyZWN0aW9ucyksXHJcbiAgICAgIHNvdXRoID0gL3MvLnRlc3QoZGlyZWN0aW9ucyk7XHJcblxyXG4gIHZhciBzbmFwcGVkTmV3Qm91bmRzID0ge307XHJcblxyXG4gIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMuaGVpZ2h0LCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy5oZWlnaHRcclxuICB9KTtcclxuXHJcbiAgaWYgKG5vcnRoKSB7XHJcblxyXG4gICAgLy8gaGFuZGxlIDxucz5cclxuICAgIGlmIChzb3V0aCkge1xyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLnkgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy55LCB7XHJcbiAgICAgICAgbWF4OiBuZXdCb3VuZHMueVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0ICs9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLnkgLSBzbmFwcGVkTmV3Qm91bmRzLnksIHtcclxuICAgICAgICBtaW46IG5ld0JvdW5kcy55IC0gc25hcHBlZE5ld0JvdW5kcy55XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhhbmRsZSA8bj5cclxuICAgIGVsc2Uge1xyXG4gICAgICBuZXdCb3VuZHMueSA9IG5ld0JvdW5kcy55ICsgbmV3Qm91bmRzLmhlaWdodCAtIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXNzaWduIHNuYXBwZWQgeSBhbmQgaGVpZ2h0XHJcbiAgYXNzaWduKG5ld0JvdW5kcywgc25hcHBlZE5ld0JvdW5kcyk7XHJcblxyXG4gIHJldHVybiBuZXdCb3VuZHM7XHJcbn07IiwidmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuLyoqXHJcbiAqIEludGVncmF0ZXMgc3BhY2UgdG9vbCB3aXRoIGdyaWQgc25hcHBpbmcuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2xCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ3NwYWNlVG9vbC5tb3ZlJyxcclxuICAgICdzcGFjZVRvb2wuZW5kJ1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxpemVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYXhpcyA9IGNvbnRleHQuYXhpcztcclxuXHJcbiAgICB2YXIgc25hcHBlZDtcclxuXHJcbiAgICBpZiAoYXhpcyA9PT0gJ3gnKSB7XHJcblxyXG4gICAgICAvLyBzbmFwIGRlbHRhIHggdG8gbXVsdGlwbGUgb2YgMTBcclxuICAgICAgc25hcHBlZCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoZXZlbnQuZHgpO1xyXG5cclxuICAgICAgZXZlbnQueCA9IGV2ZW50LnggKyBzbmFwcGVkIC0gZXZlbnQuZHg7XHJcbiAgICAgIGV2ZW50LmR4ID0gc25hcHBlZDtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBzbmFwIGRlbHRhIHkgdG8gbXVsdGlwbGUgb2YgMTBcclxuICAgICAgc25hcHBlZCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoZXZlbnQuZHkpO1xyXG5cclxuICAgICAgZXZlbnQueSA9IGV2ZW50LnkgKyBzbmFwcGVkIC0gZXZlbnQuZHk7XHJcbiAgICAgIGV2ZW50LmR5ID0gc25hcHBlZDtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuU3BhY2VUb29sQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdncmlkU25hcHBpbmcnXHJcbl07IiwiaW1wb3J0IFJlc2l6ZUJlaGF2aW9yIGZyb20gJy4vUmVzaXplQmVoYXZpb3InO1xyXG5pbXBvcnQgU3BhY2VUb29sQmVoYXZpb3IgZnJvbSAnLi9TcGFjZVRvb2xCZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19pbml0X186IFtcclxuICAgICdncmlkU25hcHBpbmdSZXNpemVCZWhhdmlvcicsXHJcbiAgICAnZ3JpZFNuYXBwaW5nU3BhY2VUb29sQmVoYXZpb3InXHJcbiAgXSxcclxuICBncmlkU25hcHBpbmdSZXNpemVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nU3BhY2VUb29sQmVoYXZpb3I6IFsgJ3R5cGUnLCBTcGFjZVRvb2xCZWhhdmlvciBdXHJcbn07IiwiaW1wb3J0IEdyaWRTbmFwcGluZyBmcm9tICcuL0dyaWRTbmFwcGluZyc7XHJcblxyXG5pbXBvcnQgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgZnJvbSAnLi9iZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19kZXBlbmRzX186IFsgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgXSxcclxuICBfX2luaXRfXzogWyAnZ3JpZFNuYXBwaW5nJyBdLFxyXG4gIGdyaWRTbmFwcGluZzogWyAndHlwZScsIEdyaWRTbmFwcGluZyBdXHJcbn07IiwiaW1wb3J0IHsgaGFzUHJpbWFyeU1vZGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7IGlzS2V5IH0gZnJvbSAnLi4vLi4vZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xudmFyIEhBTkRfQ1VSU09SID0gJ2dyYWInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhhbmRUb29sKGV2ZW50QnVzLCBjYW52YXMsIGRyYWdnaW5nLCBpbmplY3RvciwgdG9vbE1hbmFnZXIpIHtcbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcblxuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBrZXlib2FyZCA9IGluamVjdG9yLmdldCgna2V5Ym9hcmQnLCBmYWxzZSk7XG5cbiAgdG9vbE1hbmFnZXIucmVnaXN0ZXJUb29sKCdoYW5kJywge1xuICAgIHRvb2w6ICdoYW5kJyxcbiAgICBkcmFnZ2luZzogJ2hhbmQubW92ZSdcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1vdmUoZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIGtleWJvYXJkICYmIGtleWJvYXJkLmFkZExpc3RlbmVyKEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoIWlzU3BhY2UoZS5rZXlFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWN0aXZhdGVNb3ZlKGV2ZW50KSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTW92ZShldmVudCk7XG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBhY3RpdmF0ZU1vdmUpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBhY3RpdmF0ZU1vdmUpO1xuXG4gICAgZnVuY3Rpb24gZGVhY3RpdmF0ZU1vdmUoZSkge1xuICAgICAgaWYgKCFpc1NwYWNlKGUua2V5RXZlbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGFjdGl2YXRlTW92ZSk7XG5cbiAgICAgIGtleWJvYXJkLnJlbW92ZUxpc3RlbmVyKGRlYWN0aXZhdGVNb3ZlLCAna2V5Ym9hcmQua2V5dXAnKTtcblxuICAgICAgZHJhZ2dpbmcuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoSElHSF9QUklPUklUWSwgZGVhY3RpdmF0ZU1vdmUsICdrZXlib2FyZC5rZXl1cCcpO1xuICB9LCAna2V5Ym9hcmQua2V5ZG93bicpO1xuXG4gIGV2ZW50QnVzLm9uKCdoYW5kLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuXG4gICAgLy8gb25seSByZWFjdGl2ZSBvbiBkaWFncmFtIGNsaWNrXG4gICAgLy8gb24gc29tZSBvY2Nhc2lvbnMsIGV2ZW50LmhvdmVyIGlzIG5vdCBzZXQgYW5kIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhbiBzdmdcbiAgICBpZiAoIWV2ZW50LmhvdmVyICYmICEodGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudEJ1cy5vbmNlKCdoYW5kLmVuZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTW92ZShldmVudC5vcmlnaW5hbEV2ZW50LCB7IHJlYWN0aXZhdGU6IHRydWUgfSk7XG4gICAgfSwgdGhpcyk7XG5cbiAgfSwgdGhpcyk7XG5cblxuICBldmVudEJ1cy5vbignaGFuZC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzY2FsZSA9IGNhbnZhcy52aWV3Ym94KCkuc2NhbGU7XG5cbiAgICBjYW52YXMuc2Nyb2xsKHtcbiAgICAgIGR4OiBldmVudC5keCAqIHNjYWxlLFxuICAgICAgZHk6IGV2ZW50LmR5ICogc2NhbGVcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2hhbmQubW92ZS5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcmVhY3RpdmF0ZSA9IGNvbnRleHQucmVhY3RpdmF0ZTtcblxuICAgIC8vIERvbid0IHJlYWN0aXZhdGUgaWYgdGhlIHVzZXIgaXMgdXNpbmcgdGhlIGtleWJvYXJkIGtleWJpbmRpbmdcbiAgICBpZiAoIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCkgJiYgcmVhY3RpdmF0ZSkge1xuXG4gICAgICBldmVudEJ1cy5vbmNlKCdoYW5kLm1vdmUuZW5kZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICB0aGlzLmFjdGl2YXRlSGFuZChldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCB0aGlzKTtcblxufVxuXG5IYW5kVG9vbC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ2luamVjdG9yJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuXG5IYW5kVG9vbC5wcm90b3R5cGUuYWN0aXZhdGVNb3ZlID0gZnVuY3Rpb24oZXZlbnQsIGF1dG9BY3RpdmF0ZSwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIGF1dG9BY3RpdmF0ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb250ZXh0ID0gYXV0b0FjdGl2YXRlO1xuICAgIGF1dG9BY3RpdmF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2hhbmQubW92ZScsIHtcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IEhBTkRfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQgfHwge31cbiAgICB9XG4gIH0pO1xufTtcblxuSGFuZFRvb2wucHJvdG90eXBlLmFjdGl2YXRlSGFuZCA9IGZ1bmN0aW9uKGV2ZW50LCBhdXRvQWN0aXZhdGUsIHJlYWN0aXZhdGUpIHtcbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2hhbmQnLCB7XG4gICAgdHJhcENsaWNrOiBmYWxzZSxcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IEhBTkRfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgcmVhY3RpdmF0ZTogcmVhY3RpdmF0ZVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5IYW5kVG9vbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICB0aGlzLl9kcmFnZ2luZy5jYW5jZWwoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFjdGl2YXRlSGFuZCgpO1xuICB9XG59O1xuXG5IYW5kVG9vbC5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzLl9kcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gL14oaGFuZHxoYW5kXFwubW92ZSkkLy50ZXN0KGNvbnRleHQucHJlZml4KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NwYWNlKGtleUV2ZW50KSB7XG4gIHJldHVybiBpc0tleSgnICcsIGtleUV2ZW50KTtcbn0iLCJpbXBvcnQgVG9vbE1hbmFnZXJNb2R1bGUgZnJvbSAnLi4vdG9vbC1tYW5hZ2VyJztcblxuaW1wb3J0IEhhbmRUb29sIGZyb20gJy4vSGFuZFRvb2wnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgVG9vbE1hbmFnZXJNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2hhbmRUb29sJyBdLFxuICBoYW5kVG9vbDogWyAndHlwZScsIEhhbmRUb29sIF1cbn07XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQgeyBpc1ByaW1hcnlCdXR0b24gfSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGluZSxcbiAgdXBkYXRlTGluZVxufSBmcm9tICcuLi8uLi91dGlsL1JlbmRlclV0aWwnO1xuXG5mdW5jdGlvbiBhbGxvd0FsbChlKSB7IHJldHVybiB0cnVlOyB9XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IHByb3ZpZGVzIGludGVyYWN0aW9uIGV2ZW50cyBmb3IgZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBJdCBlbWl0cyB0aGUgZm9sbG93aW5nIGV2ZW50czpcbiAqXG4gKiAgICogZWxlbWVudC5jbGlja1xuICogICAqIGVsZW1lbnQuY29udGV4dG1lbnVcbiAqICAgKiBlbGVtZW50LmRibGNsaWNrXG4gKiAgICogZWxlbWVudC5ob3ZlclxuICogICAqIGVsZW1lbnQubW91c2Vkb3duXG4gKiAgICogZWxlbWVudC5tb3VzZW1vdmVcbiAqICAgKiBlbGVtZW50Lm1vdXNldXBcbiAqICAgKiBlbGVtZW50Lm91dFxuICpcbiAqIEVhY2ggZXZlbnQgaXMgYSB0dXBsZSB7IGVsZW1lbnQsIGdmeCwgb3JpZ2luYWxFdmVudCB9LlxuICpcbiAqIENhbmNlbGluZyB0aGUgZXZlbnQgdmlhIEV2ZW50I3ByZXZlbnREZWZhdWx0KClcbiAqIHByZXZlbnRzIHRoZSBvcmlnaW5hbCBET00gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEludGVyYWN0aW9uRXZlbnRzKGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIHN0eWxlcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogRmlyZSBhbiBpbnRlcmFjdGlvbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgbG9jYWwgZXZlbnQgbmFtZSwgZS5nLiBlbGVtZW50LmNsaWNrLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50fSBldmVudCBuYXRpdmUgZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW2VsZW1lbnRdIHRoZSBkaWFncmFtIGVsZW1lbnQgdG8gZW1pdCB0aGUgZXZlbnQgb247XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byB0aGUgZXZlbnQgdGFyZ2V0XG4gICAqL1xuICBmdW5jdGlvbiBmaXJlKHR5cGUsIGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICBpZiAoaXNJZ25vcmVkKHR5cGUsIGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQsIGdmeCwgcmV0dXJuVmFsdWU7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0IHx8IGV2ZW50LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBnZnggPSB0YXJnZXQ7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoIWdmeCB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVyblZhbHVlID0gZXZlbnRCdXMuZmlyZSh0eXBlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgZ2Z4OiBnZngsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pO1xuXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8obmlra3UpOiBkb2N1bWVudCB0aGlzXG4gIHZhciBoYW5kbGVycyA9IHt9O1xuXG4gIGZ1bmN0aW9uIG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50TmFtZSkge1xuICAgIHJldHVybiBoYW5kbGVyc1tsb2NhbEV2ZW50TmFtZV07XG4gIH1cblxuICBmdW5jdGlvbiBpc0lnbm9yZWQobG9jYWxFdmVudE5hbWUsIGV2ZW50KSB7XG5cbiAgICB2YXIgZmlsdGVyID0gaWdub3JlZEZpbHRlcnNbbG9jYWxFdmVudE5hbWVdIHx8IGlzUHJpbWFyeUJ1dHRvbjtcblxuICAgIC8vIG9ubHkgcmVhY3Qgb24gbGVmdCBtb3VzZSBidXR0b24gaW50ZXJhY3Rpb25zXG4gICAgLy8gZXhjZXB0IGZvciBpbnRlcmFjdGlvbiBldmVudHMgdGhhdCBhcmUgZW5hYmxlZFxuICAgIC8vIGZvciBzZWN1bmRhcnkgbW91c2UgYnV0dG9uXG4gICAgcmV0dXJuICFmaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgdmFyIGJpbmRpbmdzID0ge1xuICAgIGNsaWNrOiAnZWxlbWVudC5jbGljaycsXG4gICAgY29udGV4dG1lbnU6ICdlbGVtZW50LmNvbnRleHRtZW51JyxcbiAgICBkYmxjbGljazogJ2VsZW1lbnQuZGJsY2xpY2snLFxuICAgIG1vdXNlZG93bjogJ2VsZW1lbnQubW91c2Vkb3duJyxcbiAgICBtb3VzZW1vdmU6ICdlbGVtZW50Lm1vdXNlbW92ZScsXG4gICAgbW91c2VvdmVyOiAnZWxlbWVudC5ob3ZlcicsXG4gICAgbW91c2VvdXQ6ICdlbGVtZW50Lm91dCcsXG4gICAgbW91c2V1cDogJ2VsZW1lbnQubW91c2V1cCcsXG4gIH07XG5cbiAgdmFyIGlnbm9yZWRGaWx0ZXJzID0ge1xuICAgICdlbGVtZW50LmNvbnRleHRtZW51JzogYWxsb3dBbGxcbiAgfTtcblxuXG4gIC8vIG1hbnVhbCBldmVudCB0cmlnZ2VyIC8vLy8vLy8vLy9cblxuICAvKipcbiAgICogVHJpZ2dlciBhbiBpbnRlcmFjdGlvbiBldmVudCAoYmFzZWQgb24gYSBuYXRpdmUgZG9tIGV2ZW50KVxuICAgKiBvbiB0aGUgdGFyZ2V0IHNoYXBlIG9yIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgdGhlIG5hbWUgb2YgdGhlIHRyaWdnZXJlZCBET00gZXZlbnRcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSB0YXJnZXRFbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiB0cmlnZ2VyTW91c2VFdmVudChldmVudE5hbWUsIGV2ZW50LCB0YXJnZXRFbGVtZW50KSB7XG5cbiAgICAvLyBpLmUuIGVsZW1lbnQubW91c2Vkb3duLi4uXG4gICAgdmFyIGxvY2FsRXZlbnROYW1lID0gYmluZGluZ3NbZXZlbnROYW1lXTtcblxuICAgIGlmICghbG9jYWxFdmVudE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5tYXBwZWQgRE9NIGV2ZW50IG5hbWUgPCcgKyBldmVudE5hbWUgKyAnPicpO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJlKGxvY2FsRXZlbnROYW1lLCBldmVudCwgdGFyZ2V0RWxlbWVudCk7XG4gIH1cblxuXG4gIHZhciBFTEVNRU5UX1NFTEVDVE9SID0gJ3N2ZywgLmRqcy1lbGVtZW50JztcblxuICAvLyBldmVudCBoYW5kbGluZyAvLy8vLy8vXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudChub2RlLCBldmVudCwgbG9jYWxFdmVudCwgaWdub3JlZEZpbHRlcikge1xuXG4gICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1tsb2NhbEV2ZW50XSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBmaXJlKGxvY2FsRXZlbnQsIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgaWYgKGlnbm9yZWRGaWx0ZXIpIHtcbiAgICAgIGlnbm9yZWRGaWx0ZXJzW2xvY2FsRXZlbnRdID0gaWdub3JlZEZpbHRlcjtcbiAgICB9XG5cbiAgICBoYW5kbGVyLiRkZWxlZ2F0ZSA9IGRvbURlbGVnYXRlLmJpbmQobm9kZSwgRUxFTUVOVF9TRUxFQ1RPUiwgZXZlbnQsIGhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5yZWdpc3RlckV2ZW50KG5vZGUsIGV2ZW50LCBsb2NhbEV2ZW50KSB7XG5cbiAgICB2YXIgaGFuZGxlciA9IG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50KTtcblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRvbURlbGVnYXRlLnVuYmluZChub2RlLCBldmVudCwgaGFuZGxlci4kZGVsZWdhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoc3ZnKSB7XG4gICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyRXZlbnRzKHN2Zykge1xuICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICB1bnJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY2FudmFzLmRlc3Ryb3knLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVucmVnaXN0ZXJFdmVudHMoZXZlbnQuc3ZnKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5pbml0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZWdpc3RlckV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcblxuXG4gIC8vIGhpdCBib3ggdXBkYXRpbmcgLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLmFkZGVkJywgJ2Nvbm5lY3Rpb24uYWRkZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICAvLyBVcGRhdGUgZGpzLWhpdCBvbiBjaGFuZ2UuXG4gIC8vIEEgbG93IHByaW9ydGl0eSBpcyBuZWNlc3NhcnksIGJlY2F1c2UgZGpzLWhpdCBvZiBsYWJlbHMgaGFzIHRvIGJlIHVwZGF0ZWRcbiAgLy8gYWZ0ZXIgdGhlIGxhYmVsIGJvdW5kcyBoYXZlIGJlZW4gdXBkYXRlZCBpbiB0aGUgcmVuZGVyZXIuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnc2hhcGUuY2hhbmdlZCcsXG4gICAgJ2Nvbm5lY3Rpb24uY2hhbmdlZCdcbiAgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlSGl0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi51cGRhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG5cbiAgLy8gaGl0IHN0eWxlcyAvLy8vLy8vLy8vLy9cblxuICB2YXIgU1RST0tFX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtc3Ryb2tlJyk7XG5cbiAgdmFyIENMSUNLX1NUUk9LRV9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LWNsaWNrLXN0cm9rZScpO1xuXG4gIHZhciBBTExfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1hbGwnKTtcblxuICB2YXIgSElUX1RZUEVTID0ge1xuICAgICdhbGwnOiBBTExfSElUX1NUWUxFLFxuICAgICdjbGljay1zdHJva2UnOiBDTElDS19TVFJPS0VfSElUX1NUWUxFLFxuICAgICdzdHJva2UnOiBTVFJPS0VfSElUX1NUWUxFXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlSGl0U3R5bGUoY2xhc3NOYW1lcywgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAxNVxuICAgIH0sIGF0dHJzIHx8IHt9KTtcblxuICAgIHJldHVybiBzdHlsZXMuY2xzKGNsYXNzTmFtZXMsIFsgJ25vLWZpbGwnLCAnbm8tYm9yZGVyJyBdLCBhdHRycyk7XG4gIH1cblxuXG4gIC8vIHN0eWxlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gYXBwbHlTdHlsZShoaXQsIHR5cGUpIHtcblxuICAgIHZhciBhdHRycyA9IEhJVF9UWVBFU1t0eXBlXTtcblxuICAgIGlmICghYXR0cnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBoaXQgdHlwZSA8JyArIHR5cGUgKyAnPicpO1xuICAgIH1cblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kSGl0KGdmeCwgaGl0KSB7XG4gICAgc3ZnQXBwZW5kKGdmeCwgaGl0KTtcbiAgfVxuXG5cbiAgLy8gQVBJXG5cbiAgLyoqXG4gICAqIFJlbW92ZSBoaW50cyBvbiB0aGUgZ2l2ZW4gZ3JhcGhpY3MuXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqL1xuICB0aGlzLnJlbW92ZUhpdHMgPSBmdW5jdGlvbihnZngpIHtcbiAgICB2YXIgaGl0cyA9IGRvbVF1ZXJ5QWxsKCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBmb3JFYWNoKGhpdHMsIHN2Z1JlbW92ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBkZWZhdWx0IGhpdCBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gY3JlYXRlZCBoaXRcbiAgICovXG4gIHRoaXMuY3JlYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICAgIHZhciB3YXlwb2ludHMgPSBlbGVtZW50LndheXBvaW50cyxcbiAgICAgICAgaXNGcmFtZSA9IGVsZW1lbnQuaXNGcmFtZSxcbiAgICAgICAgYm94VHlwZTtcblxuICAgIGlmICh3YXlwb2ludHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdChnZngsIHdheXBvaW50cyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgYm94VHlwZSA9IGlzRnJhbWUgPyAnc3Ryb2tlJyA6ICdhbGwnO1xuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVCb3hIaXQoZ2Z4LCBib3hUeXBlLCB7XG4gICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBoaXRzIGZvciB0aGUgZ2l2ZW4gd2F5cG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gICAqL1xuICB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdCA9IGZ1bmN0aW9uKGdmeCwgd2F5cG9pbnRzKSB7XG5cbiAgICB2YXIgaGl0ID0gY3JlYXRlTGluZSh3YXlwb2ludHMpO1xuXG4gICAgYXBwbHlTdHlsZShoaXQsICdzdHJva2UnKTtcblxuICAgIGFwcGVuZEhpdChnZngsIGhpdCk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgaGl0cyBmb3IgYSBib3guXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoaXRUeXBlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICAgKi9cbiAgdGhpcy5jcmVhdGVCb3hIaXQgPSBmdW5jdGlvbihnZngsIHR5cGUsIGF0dHJzKSB7XG5cbiAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sIGF0dHJzKTtcblxuICAgIHZhciBoaXQgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcblxuICAgIGFwcGx5U3R5bGUoaGl0LCB0eXBlKTtcblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICBhcHBlbmRIaXQoZ2Z4LCBoaXQpO1xuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIGRlZmF1bHQgaGl0IG9mIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gdXBkYXRlZCBoaXRcbiAgICovXG4gIHRoaXMudXBkYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gICAgdmFyIGhpdCA9IGRvbVF1ZXJ5KCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBpZiAoIWhpdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgdXBkYXRlTGluZShoaXQsIGVsZW1lbnQud2F5cG9pbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQXR0cihoaXQsIHtcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgdGhpcy5maXJlID0gZmlyZTtcblxuICB0aGlzLnRyaWdnZXJNb3VzZUV2ZW50ID0gdHJpZ2dlck1vdXNlRXZlbnQ7XG5cbiAgdGhpcy5tb3VzZUhhbmRsZXIgPSBtb3VzZUhhbmRsZXI7XG5cbiAgdGhpcy5yZWdpc3RlckV2ZW50ID0gcmVnaXN0ZXJFdmVudDtcbiAgdGhpcy51bnJlZ2lzdGVyRXZlbnQgPSB1bnJlZ2lzdGVyRXZlbnQ7XG59XG5cblxuSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdzdHlsZXMnXG5dO1xuXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBob3ZlcmVkIG92ZXIgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmhvdmVyXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBsZWZ0IGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5vdXRcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGNsaWNrZWQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmNsaWNrXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBkb3VibGUgY2xpY2tlZCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuZGJsY2xpY2tcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGdvbmUgZG93biBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNlZG93blxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZ29uZSB1cCBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNldXBcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgY29udGV4dCBtZW51IGFjdGlvbiBpcyB0cmlnZ2VyZWRcbiAqIHZpYSBtb3VzZSBvciB0b3VjaCBjb250cm9scy5cbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5jb250ZXh0bWVudVxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovIiwiaW1wb3J0IEludGVyYWN0aW9uRXZlbnRzIGZyb20gJy4vSW50ZXJhY3Rpb25FdmVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdpbnRlcmFjdGlvbkV2ZW50cycgXSxcbiAgaW50ZXJhY3Rpb25FdmVudHM6IFsgJ3R5cGUnLCBJbnRlcmFjdGlvbkV2ZW50cyBdXG59OyIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICBtb3ZlU3BlZWQ6IDEsXG4gIG1vdmVTcGVlZEFjY2VsZXJhdGVkOiAxMFxufTtcblxudmFyIEhJR0hFUl9QUklPUklUWSA9IDE1MDA7XG5cbnZhciBMRUZUID0gJ2xlZnQnO1xudmFyIFVQID0gJ3VwJztcbnZhciBSSUdIVCA9ICdyaWdodCc7XG52YXIgRE9XTiA9ICdkb3duJztcblxudmFyIEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIEFycm93TGVmdDogTEVGVCxcbiAgTGVmdDogTEVGVCxcbiAgQXJyb3dVcDogVVAsXG4gIFVwOiBVUCxcbiAgQXJyb3dSaWdodDogUklHSFQsXG4gIFJpZ2h0OiBSSUdIVCxcbiAgQXJyb3dEb3duOiBET1dOLFxuICBEb3duOiBET1dOXG59O1xuXG52YXIgRElSRUNUSU9OU19ERUxUQSA9IHtcbiAgbGVmdDogZnVuY3Rpb24oc3BlZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogLXNwZWVkLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0sXG4gIHVwOiBmdW5jdGlvbihzcGVlZCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogLXNwZWVkXG4gICAgfTtcbiAgfSxcbiAgcmlnaHQ6IGZ1bmN0aW9uKHNwZWVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHNwZWVkLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0sXG4gIGRvd246IGZ1bmN0aW9uKHNwZWVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiBzcGVlZFxuICAgIH07XG4gIH1cbn07XG5cblxuLyoqXG4gKiBFbmFibGVzIHRvIG1vdmUgc2VsZWN0aW9uIHdpdGgga2V5Ym9hcmQgYXJyb3dzLlxuICogVXNlIHdpdGggU2hpZnQgZm9yIG1vZGlmaWVkIHNwZWVkIChkZWZhdWx0PTEsIHdpdGggU2hpZnQ9MTApLlxuICogUHJlc3NlZCBDbWQvQ3RybCB0dXJucyB0aGUgZmVhdHVyZSBvZmYuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkPTFdXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5tb3ZlU3BlZWRBY2NlbGVyYXRlZD0xMF1cbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBLZXlib2FyZE1vdmVTZWxlY3Rpb24oXG4gICAgY29uZmlnLFxuICAgIGtleWJvYXJkLFxuICAgIG1vZGVsaW5nLFxuICAgIHJ1bGVzLFxuICAgIHNlbGVjdGlvblxuKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NvbmZpZyA9IGFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcsIGNvbmZpZyB8fCB7fSk7XG5cbiAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGtleUV2ZW50ID0gZXZlbnQua2V5RXZlbnQ7XG5cbiAgICB2YXIgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltrZXlFdmVudC5rZXldO1xuXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNDbWQoa2V5RXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjY2VsZXJhdGVkID0ga2V5Ym9hcmQuaXNTaGlmdChrZXlFdmVudCk7XG5cbiAgICBzZWxmLm1vdmVTZWxlY3Rpb24oZGlyZWN0aW9uLCBhY2NlbGVyYXRlZCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cblxuICAvKipcbiAgICogTW92ZSBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLFxuICAgKiBvcHRpb25hbGx5IHNwZWNpZnlpbmcgYWNjZWxlcmF0ZWQgbW92ZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWNjZWxlcmF0ZWQ9ZmFsc2VdXG4gICAqL1xuICB0aGlzLm1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihkaXJlY3Rpb24sIGFjY2VsZXJhdGVkKSB7XG5cbiAgICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGlvbi5nZXQoKTtcblxuICAgIGlmICghc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3BlZWQgPSB0aGlzLl9jb25maWdbXG4gICAgICBhY2NlbGVyYXRlZCA/XG4gICAgICAgICdtb3ZlU3BlZWRBY2NlbGVyYXRlZCcgOlxuICAgICAgICAnbW92ZVNwZWVkJ1xuICAgIF07XG5cbiAgICB2YXIgZGVsdGEgPSBESVJFQ1RJT05TX0RFTFRBW2RpcmVjdGlvbl0oc3BlZWQpO1xuXG4gICAgdmFyIGNhbk1vdmUgPSBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5tb3ZlJywge1xuICAgICAgc2hhcGVzOiBzZWxlY3RlZEVsZW1lbnRzXG4gICAgfSk7XG5cbiAgICBpZiAoY2FuTW92ZSkge1xuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHNlbGVjdGVkRWxlbWVudHMsIGRlbHRhKTtcbiAgICB9XG4gIH07XG5cbn1cblxuS2V5Ym9hcmRNb3ZlU2VsZWN0aW9uLiRpbmplY3QgPSBbXG4gICdjb25maWcua2V5Ym9hcmRNb3ZlU2VsZWN0aW9uJyxcbiAgJ2tleWJvYXJkJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ3NlbGVjdGlvbidcbl07IiwiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4uL2tleWJvYXJkJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcblxuaW1wb3J0IEtleWJvYXJkTW92ZVNlbGVjdGlvbiBmcm9tICcuL0tleWJvYXJkTW92ZVNlbGVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBLZXlib2FyZE1vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAna2V5Ym9hcmRNb3ZlU2VsZWN0aW9uJ1xuICBdLFxuICBrZXlib2FyZE1vdmVTZWxlY3Rpb246IFsgJ3R5cGUnLCBLZXlib2FyZE1vdmVTZWxlY3Rpb24gXVxufTtcbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgbWF0Y2hlcyBhcyBkb21NYXRjaGVzXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBoYXNNb2RpZmllcixcbiAgaXNDbWQsXG4gIGlzS2V5LFxuICBpc1NoaWZ0XG59IGZyb20gJy4vS2V5Ym9hcmRVdGlsJztcblxudmFyIEtFWURPV05fRVZFTlQgPSAna2V5Ym9hcmQua2V5ZG93bicsXG4gICAgS0VZVVBfRVZFTlQgPSAna2V5Ym9hcmQua2V5dXAnO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIGtleWJvYXJkIGFic3RyYWN0aW9uIHRoYXQgbWF5IGJlIGFjdGl2YXRlZCBhbmRcbiAqIGRlYWN0aXZhdGVkIGJ5IHVzZXJzIGF0IHdpbGwsIGNvbnN1bWluZyBrZXkgZXZlbnRzXG4gKiBhbmQgdHJpZ2dlcmluZyBkaWFncmFtIGFjdGlvbnMuXG4gKlxuICogRm9yIGtleXMgcHJlc3NlZCBkb3duLCBrZXlib2FyZCBmaXJlcyBga2V5Ym9hcmQua2V5ZG93bmAgZXZlbnQuXG4gKiBUaGUgZXZlbnQgY29udGV4dCBjb250YWlucyBvbmUgZmllbGQgd2hpY2ggaXMgYEtleWJvYXJkRXZlbnRgIGV2ZW50LlxuICpcbiAqIFRoZSBpbXBsZW1lbnRhdGlvbiBmaXJlcyB0aGUgZm9sbG93aW5nIGtleSBldmVudHMgdGhhdCBhbGxvd1xuICogb3RoZXIgY29tcG9uZW50cyB0byBob29rIGludG8ga2V5IGhhbmRsaW5nOlxuICpcbiAqICAtIGtleWJvYXJkLmJpbmRcbiAqICAtIGtleWJvYXJkLnVuYmluZFxuICogIC0ga2V5Ym9hcmQuaW5pdFxuICogIC0ga2V5Ym9hcmQuZGVzdHJveVxuICpcbiAqIEFsbCBldmVudHMgY29udGFpbiBvbmUgZmllbGQgd2hpY2ggaXMgbm9kZS5cbiAqXG4gKiBBIGRlZmF1bHQgYmluZGluZyBmb3IgdGhlIGtleWJvYXJkIG1heSBiZSBzcGVjaWZpZWQgdmlhIHRoZVxuICogYGtleWJvYXJkLmJpbmRUb2AgY29uZmlndXJhdGlvbiBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtDb25maWd9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmQoY29uZmlnLCBldmVudEJ1cykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5fY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuXG4gIHRoaXMuX2tleWRvd25IYW5kbGVyID0gdGhpcy5fa2V5ZG93bkhhbmRsZXIuYmluZCh0aGlzKTtcbiAgdGhpcy5fa2V5dXBIYW5kbGVyID0gdGhpcy5fa2V5dXBIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgLy8gcHJvcGVybHkgY2xlYW4gZG9tIHJlZ2lzdHJhdGlvbnNcbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2ZpcmUoJ2Rlc3Ryb3knKTtcblxuICAgIHNlbGYudW5iaW5kKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9maXJlKCdpbml0Jyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdhdHRhY2gnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5iaW5kVG8pIHtcbiAgICAgIHNlbGYuYmluZChjb25maWcuYmluZFRvKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkZXRhY2gnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnVuYmluZCgpO1xuICB9KTtcbn1cblxuS2V5Ym9hcmQuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5rZXlib2FyZCcsXG4gICdldmVudEJ1cydcbl07XG5cbktleWJvYXJkLnByb3RvdHlwZS5fa2V5ZG93bkhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9rZXlIYW5kbGVyKGV2ZW50LCBLRVlET1dOX0VWRU5UKTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS5fa2V5dXBIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fa2V5SGFuZGxlcihldmVudCwgS0VZVVBfRVZFTlQpO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLl9rZXlIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQsIHR5cGUpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCxcbiAgICAgIGV2ZW50QnVzUmVzdWx0O1xuXG4gIGlmIChpc0lucHV0KHRhcmdldCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBrZXlFdmVudDogZXZlbnRcbiAgfTtcblxuICBldmVudEJ1c1Jlc3VsdCA9IHRoaXMuX2V2ZW50QnVzLmZpcmUodHlwZSB8fCBLRVlET1dOX0VWRU5ULCBjb250ZXh0KTtcblxuICBpZiAoZXZlbnRCdXNSZXN1bHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKG5vZGUpIHtcblxuICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUga2V5Ym9hcmQgaXMgb25seSBib3VuZCBvbmNlIHRvIHRoZSBET01cbiAgdGhpcy51bmJpbmQoKTtcblxuICB0aGlzLl9ub2RlID0gbm9kZTtcblxuICAvLyBiaW5kIGtleSBldmVudHNcbiAgZG9tRXZlbnQuYmluZChub2RlLCAna2V5ZG93bicsIHRoaXMuX2tleWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgZG9tRXZlbnQuYmluZChub2RlLCAna2V5dXAnLCB0aGlzLl9rZXl1cEhhbmRsZXIsIHRydWUpO1xuXG4gIHRoaXMuX2ZpcmUoJ2JpbmQnKTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS5nZXRCaW5kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9ub2RlO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMuX25vZGU7XG5cbiAgaWYgKG5vZGUpIHtcbiAgICB0aGlzLl9maXJlKCd1bmJpbmQnKTtcblxuICAgIC8vIHVuYmluZCBrZXkgZXZlbnRzXG4gICAgZG9tRXZlbnQudW5iaW5kKG5vZGUsICdrZXlkb3duJywgdGhpcy5fa2V5ZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIGRvbUV2ZW50LnVuYmluZChub2RlLCAna2V5dXAnLCB0aGlzLl9rZXl1cEhhbmRsZXIsIHRydWUpO1xuICB9XG5cbiAgdGhpcy5fbm9kZSA9IG51bGw7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdrZXlib2FyZC4nICsgZXZlbnQsIHsgbm9kZTogdGhpcy5fbm9kZSB9KTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZnVuY3Rpb24gdGhhdCBpcyBub3RpZmllZCB3aXRoIGBLZXlib2FyZEV2ZW50YCB3aGVuZXZlclxuICogdGhlIGtleWJvYXJkIGlzIGJvdW5kIGFuZCB0aGUgdXNlciBwcmVzc2VzIGEga2V5LiBJZiBubyBwcmlvcml0eSBpc1xuICogcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDEwMDAgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKi9cbktleWJvYXJkLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHByaW9yaXR5LCBsaXN0ZW5lciwgdHlwZSkge1xuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0eXBlID0gbGlzdGVuZXI7XG4gICAgbGlzdGVuZXIgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbih0eXBlIHx8IEtFWURPV05fRVZFTlQsIHByaW9yaXR5LCBsaXN0ZW5lcik7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lciwgdHlwZSkge1xuICB0aGlzLl9ldmVudEJ1cy5vZmYodHlwZSB8fCBLRVlET1dOX0VWRU5ULCBsaXN0ZW5lcik7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuaGFzTW9kaWZpZXIgPSBoYXNNb2RpZmllcjtcbktleWJvYXJkLnByb3RvdHlwZS5pc0NtZCA9IGlzQ21kO1xuS2V5Ym9hcmQucHJvdG90eXBlLmlzU2hpZnQgPSBpc1NoaWZ0O1xuS2V5Ym9hcmQucHJvdG90eXBlLmlzS2V5ID0gaXNLZXk7XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy9cblxuZnVuY3Rpb24gaXNJbnB1dCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCAmJiAoZG9tTWF0Y2hlcyh0YXJnZXQsICdpbnB1dCwgdGV4dGFyZWEnKSB8fCB0YXJnZXQuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuIiwiaW1wb3J0IHtcbiAgaXNDbWQsXG4gIGlzS2V5LFxuICBpc1NoaWZ0XG59IGZyb20gJy4vS2V5Ym9hcmRVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuZXhwb3J0IHZhciBLRVlDT0RFX0MgPSA2NztcbmV4cG9ydCB2YXIgS0VZQ09ERV9WID0gODY7XG5leHBvcnQgdmFyIEtFWUNPREVfWSA9IDg5O1xuZXhwb3J0IHZhciBLRVlDT0RFX1ogPSA5MDtcblxuZXhwb3J0IHZhciBLRVlTX0NPUFkgPSBbJ2MnLCAnQycsIEtFWUNPREVfQyBdO1xuZXhwb3J0IHZhciBLRVlTX1BBU1RFID0gWyAndicsICdWJywgS0VZQ09ERV9WIF07XG5leHBvcnQgdmFyIEtFWVNfUkVETyA9IFsgJ3knLCAnWScsIEtFWUNPREVfWSBdO1xuZXhwb3J0IHZhciBLRVlTX1VORE8gPSBbICd6JywgJ1onLCBLRVlDT0RFX1ogXTtcblxuXG4vKipcbiAqIEFkZHMgZGVmYXVsdCBrZXlib2FyZCBiaW5kaW5ncy5cbiAqXG4gKiBUaGlzIGRvZXMgbm90IHB1bGwgaW4gYW55IGZlYXR1cmVzIHdpbGwgYmluZCBvbmx5IGFjdGlvbnMgdGhhdFxuICogaGF2ZSBwcmV2aW91c2x5IGJlZW4gcmVnaXN0ZXJlZCBhZ2FpbnN0IHRoZSBlZGl0b3JBY3Rpb25zIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmRCaW5kaW5ncyhldmVudEJ1cywga2V5Ym9hcmQpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2VkaXRvckFjdGlvbnMuaW5pdCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlZGl0b3JBY3Rpb25zID0gZXZlbnQuZWRpdG9yQWN0aW9ucztcblxuICAgIHNlbGYucmVnaXN0ZXJCaW5kaW5ncyhrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG4gIH0pO1xufVxuXG5LZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdrZXlib2FyZCdcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5LZXlib2FyZEJpbmRpbmdzLnByb3RvdHlwZS5yZWdpc3RlckJpbmRpbmdzID0gZnVuY3Rpb24oa2V5Ym9hcmQsIGVkaXRvckFjdGlvbnMpIHtcblxuICAvKipcbiAgICogQWRkIGtleWJvYXJkIGJpbmRpbmcgaWYgcmVzcGVjdGl2ZSBlZGl0b3IgYWN0aW9uXG4gICAqIGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGF0IGltcGxlbWVudHMgdGhlIGtleSBiaW5kaW5nXG4gICAqL1xuICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihhY3Rpb24sIGZuKSB7XG5cbiAgICBpZiAoZWRpdG9yQWN0aW9ucy5pc1JlZ2lzdGVyZWQoYWN0aW9uKSkge1xuICAgICAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoZm4pO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gdW5kb1xuICAvLyAoQ1RSTHxDTUQpICsgWlxuICBhZGRMaXN0ZW5lcigndW5kbycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNDbWQoZXZlbnQpICYmICFpc1NoaWZ0KGV2ZW50KSAmJiBpc0tleShLRVlTX1VORE8sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCd1bmRvJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVkb1xuICAvLyBDVFJMICsgWVxuICAvLyBDTUQgKyBTSElGVCArIFpcbiAgYWRkTGlzdGVuZXIoJ3JlZG8nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzQ21kKGV2ZW50KSAmJiAoaXNLZXkoS0VZU19SRURPLCBldmVudCkgfHwgKGlzS2V5KEtFWVNfVU5ETywgZXZlbnQpICYmIGlzU2hpZnQoZXZlbnQpKSkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncmVkbycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvcHlcbiAgLy8gQ1RSTC9DTUQgKyBDXG4gIGFkZExpc3RlbmVyKCdjb3B5JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0NtZChldmVudCkgJiYgaXNLZXkoS0VZU19DT1BZLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignY29weScpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHBhc3RlXG4gIC8vIENUUkwvQ01EICsgVlxuICBhZGRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzQ21kKGV2ZW50KSAmJiBpc0tleShLRVlTX1BBU1RFLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncGFzdGUnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIGluIG9uZSBzdGVwXG4gIC8vIENUUkwvQ01EICsgK1xuICBhZGRMaXN0ZW5lcignc3RlcFpvb20nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJysnLCAnQWRkJyBdLCBldmVudCkgJiYgaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3N0ZXBab29tJywgeyB2YWx1ZTogMSB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIG91dCBvbmUgc3RlcFxuICAvLyBDVFJMICsgLVxuICBhZGRMaXN0ZW5lcignc3RlcFpvb20nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJy0nLCAnU3VidHJhY3QnIF0sIGV2ZW50KSAmJiBpc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignc3RlcFpvb20nLCB7IHZhbHVlOiAtMSB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIHRvIHRoZSBkZWZhdWx0IGxldmVsXG4gIC8vIENUUkwgKyAwXG4gIGFkZExpc3RlbmVyKCd6b29tJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleSgnMCcsIGV2ZW50KSAmJiBpc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignem9vbScsIHsgdmFsdWU6IDEgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZGVsZXRlIHNlbGVjdGVkIGVsZW1lbnRcbiAgLy8gREVMXG4gIGFkZExpc3RlbmVyKCdyZW1vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJ0RlbGV0ZScsICdEZWwnIF0sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdyZW1vdmVTZWxlY3Rpb24nKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn07IiwiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgZXZlbnQgd2FzIHRyaWdnZXJlZCB3aXRoIGFueSBtb2RpZmllclxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaGFzTW9kaWZpZXIoZXZlbnQpIHtcclxuICByZXR1cm4gKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ21kKGV2ZW50KSB7XHJcblxyXG4gIC8vIGVuc3VyZSB3ZSBkb24ndCByZWFjdCB0byBBbHRHclxyXG4gIC8vIChtYXBwZWQgdG8gQ1RSTCArIEFMVClcclxuICBpZiAoZXZlbnQuYWx0S2V5KSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIGtleSBwcmVzc2VkIGlzIG9uZSBvZiBwcm92aWRlZCBrZXlzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBrZXlzXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0tleShrZXlzLCBldmVudCkge1xyXG4gIGtleXMgPSBpc0FycmF5KGtleXMpID8ga2V5cyA6IFsga2V5cyBdO1xyXG5cclxuICByZXR1cm4ga2V5cy5pbmRleE9mKGV2ZW50LmtleSkgIT09IC0xIHx8IGtleXMuaW5kZXhPZihldmVudC5rZXlDb2RlKSAhPT0gLTE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNTaGlmdChldmVudCkge1xyXG4gIHJldHVybiBldmVudC5zaGlmdEtleTtcclxufSIsImltcG9ydCBLZXlib2FyZCBmcm9tICcuL0tleWJvYXJkJztcbmltcG9ydCBLZXlib2FyZEJpbmRpbmdzIGZyb20gJy4vS2V5Ym9hcmRCaW5kaW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2tleWJvYXJkJywgJ2tleWJvYXJkQmluZGluZ3MnIF0sXG4gIGtleWJvYXJkOiBbICd0eXBlJywgS2V5Ym9hcmQgXSxcbiAga2V5Ym9hcmRCaW5kaW5nczogWyAndHlwZScsIEtleWJvYXJkQmluZGluZ3MgXVxufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAyNTAsXG4gICAgSElHSF9QUklPUklUWSA9IDE0MDA7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICBpbmRleE9mIGFzIGNvbGxlY3Rpb25JZHhcbn0gZnJvbSAnLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnLi4vLi4vY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgbWFrZXMgc3VyZSBsYWJlbHMgYXJlIHByb3Blcmx5IG1vdmVkIHdpdGhcbiAqIHRoZWlyIGxhYmVsIHRhcmdldHMuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsU3VwcG9ydChpbmplY3RvciwgZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBtb3ZlUHJldmlldyA9IGluamVjdG9yLmdldCgnbW92ZVByZXZpZXcnLCBmYWxzZSk7XG5cbiAgLy8gcmVtb3ZlIGxhYmVscyBmcm9tIHRoZSBjb2xsZWN0aW9uIHRoYXQgYXJlIGJlaW5nXG4gIC8vIG1vdmVkIHdpdGggb3RoZXIgZWxlbWVudHMgYW55d2F5XG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcztcblxuICAgIGNvbnRleHQuc2hhcGVzID0gcmVtb3ZlTGFiZWxzKHNoYXBlcyk7XG4gICAgY29udGV4dC52YWxpZGF0ZWRTaGFwZXMgPSByZW1vdmVMYWJlbHModmFsaWRhdGVkU2hhcGVzKTtcbiAgfSk7XG5cbiAgLy8gYWRkIGxhYmVscyB0byB2aXN1YWwncyBncm91cFxuICBtb3ZlUHJldmlldyAmJiBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzO1xuXG4gICAgdmFyIGxhYmVscyA9IFtdO1xuXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgZm9yRWFjaChlbGVtZW50LmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcblxuICAgICAgICBpZiAoIWxhYmVsLmhpZGRlbiAmJiBjb250ZXh0LnNoYXBlcy5pbmRleE9mKGxhYmVsKSA9PT0gLTEpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaChsYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgICAgIGxhYmVscy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZvckVhY2gobGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgbW92ZVByZXZpZXcubWFrZURyYWdnYWJsZShjb250ZXh0LCBsYWJlbCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgLy8gYWRkIGFsbCBsYWJlbHMgdG8gbW92ZSBjbG9zdXJlXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGNsb3N1cmUgPSBjb250ZXh0LmNsb3N1cmUsXG4gICAgICAgIGVuY2xvc2VkRWxlbWVudHMgPSBjbG9zdXJlLmVuY2xvc2VkRWxlbWVudHM7XG5cbiAgICB2YXIgZW5jbG9zZWRMYWJlbHMgPSBbXTtcblxuICAgIC8vIGZpbmQgbGFiZWxzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mXG4gICAgLy8gbW92ZSBjbG9zdXJlIHlldCBhbmQgYWRkIHRoZW1cbiAgICBmb3JFYWNoKGVuY2xvc2VkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGZvckVhY2goZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG5cbiAgICAgICAgaWYgKCFlbmNsb3NlZEVsZW1lbnRzW2xhYmVsLmlkXSkge1xuICAgICAgICAgIGVuY2xvc2VkTGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNsb3N1cmUuYWRkQWxsKGVuY2xvc2VkTGFiZWxzKTtcbiAgfSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoW1xuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZSdcbiAgXSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmNvbm5lY3Rpb24gfHwgY29udGV4dC5zaGFwZTtcblxuICAgIHNhdmVDbGVhcihlbGVtZW50LmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGxhYmVsLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cblxuICB0aGlzLmV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGxhYmVsVGFyZ2V0ID0gc2hhcGUubGFiZWxUYXJnZXQ7XG5cbiAgICAvLyB1bnNldCBsYWJlbFRhcmdldFxuICAgIGlmIChsYWJlbFRhcmdldCkge1xuICAgICAgY29udGV4dC5sYWJlbFRhcmdldEluZGV4ID0gY29sbGVjdGlvbklkeChsYWJlbFRhcmdldC5sYWJlbHMsIHNoYXBlKTtcbiAgICAgIGNvbnRleHQubGFiZWxUYXJnZXQgPSBsYWJlbFRhcmdldDtcblxuICAgICAgc2hhcGUubGFiZWxUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgdGhpcy5yZXZlcnQoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGxhYmVsVGFyZ2V0ID0gY29udGV4dC5sYWJlbFRhcmdldCxcbiAgICAgICAgbGFiZWxUYXJnZXRJbmRleCA9IGNvbnRleHQubGFiZWxUYXJnZXRJbmRleDtcblxuICAgIC8vIHJlc3RvcmUgbGFiZWxUYXJnZXRcbiAgICBpZiAobGFiZWxUYXJnZXQpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFiZWxUYXJnZXQubGFiZWxzLCBzaGFwZSwgbGFiZWxUYXJnZXRJbmRleCk7XG5cbiAgICAgIHNoYXBlLmxhYmVsVGFyZ2V0ID0gbGFiZWxUYXJnZXQ7XG4gICAgfVxuICB9KTtcblxufVxuXG5pbmhlcml0cyhMYWJlbFN1cHBvcnQsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkxhYmVsU3VwcG9ydC4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8qKlxuICogUmV0dXJuIGEgZmlsdGVyZWQgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGRvIG5vdFxuICogY29udGFpbiBhdHRhY2hlZCBlbGVtZW50cyB3aXRoIGhvc3RzIGJlaW5nIHBhcnRcbiAqIG9mIHRoZSBzZWxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZmlsdGVyZWRcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTGFiZWxzKGVsZW1lbnRzKSB7XG5cbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgLy8gZmlsdGVyIG91dCBsYWJlbHMgdGhhdCBhcmUgbW92ZSB0b2dldGhlclxuICAgIC8vIHdpdGggdGhlaXIgbGFiZWwgdGFyZ2V0c1xuICAgIHJldHVybiBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQubGFiZWxUYXJnZXQpID09PSAtMTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgTGFiZWxTdXBwb3J0IGZyb20gJy4vTGFiZWxTdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnbGFiZWxTdXBwb3J0J10sXG4gIGxhYmVsU3VwcG9ydDogWyAndHlwZScsIExhYmVsU3VwcG9ydCBdXG59O1xuIiwiaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBnZXRFbmNsb3NlZEVsZW1lbnRzIH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7IGhhc1NlY29uZGFyeU1vZGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbnZhciBMQVNTT19UT09MX0NVUlNPUiA9ICdjcm9zc2hhaXInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhc3NvVG9vbChcbiAgICBldmVudEJ1cywgY2FudmFzLCBkcmFnZ2luZyxcbiAgICBlbGVtZW50UmVnaXN0cnksIHNlbGVjdGlvbiwgdG9vbE1hbmFnZXIpIHtcblxuICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGxhc3NvIHZpc3VhbHMgaW1wbGVtZW50YXRpb25cblxuICAvKipcbiAgKiBBIGhlbHBlciB0aGF0IHJlYWxpemVzIHRoZSBzZWxlY3Rpb24gYm94IHZpc3VhbFxuICAqL1xuICB2YXIgdmlzdWFscyA9IHtcblxuICAgIGNyZWF0ZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIGNvbnRhaW5lciA9IGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSxcbiAgICAgICAgICBmcmFtZTtcblxuICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG4gICAgICBzdmdBdHRyKGZyYW1lLCB7XG4gICAgICAgIGNsYXNzOiAnZGpzLWxhc3NvLW92ZXJsYXknLFxuICAgICAgICB3aWR0aDogIDEsXG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMFxuICAgICAgfSk7XG5cbiAgICAgIHN2Z0FwcGVuZChjb250YWluZXIsIGZyYW1lKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlOiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgICB2YXIgZnJhbWUgPSBjb250ZXh0LmZyYW1lLFxuICAgICAgICAgIGJib3ggPSBjb250ZXh0LmJib3g7XG5cbiAgICAgIHN2Z0F0dHIoZnJhbWUsIHtcbiAgICAgICAgeDogYmJveC54LFxuICAgICAgICB5OiBiYm94LnksXG4gICAgICAgIHdpZHRoOiBiYm94LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJib3guaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICAgIGlmIChjb250ZXh0LmZyYW1lKSB7XG4gICAgICAgIHN2Z1JlbW92ZShjb250ZXh0LmZyYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdG9vbE1hbmFnZXIucmVnaXN0ZXJUb29sKCdsYXNzbycsIHtcbiAgICB0b29sOiAnbGFzc28uc2VsZWN0aW9uJyxcbiAgICBkcmFnZ2luZzogJ2xhc3NvJ1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28uc2VsZWN0aW9uLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuXG4gICAgLy8gb25seSByZWFjdGl2ZSBvbiBkaWFncmFtIGNsaWNrXG4gICAgLy8gb24gc29tZSBvY2Nhc2lvbnMsIGV2ZW50LmhvdmVyIGlzIG5vdCBzZXQgYW5kIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhbiBzdmdcbiAgICBpZiAoIWV2ZW50LmhvdmVyICYmICEodGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudEJ1cy5vbmNlKCdsYXNzby5zZWxlY3Rpb24uZW5kZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuYWN0aXZhdGVMYXNzbyhldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gbGFzc28gaW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb25cblxuICBldmVudEJ1cy5vbignbGFzc28uZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBiYm94ID0gdG9CQm94KGV2ZW50KTtcblxuICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSk7XG5cbiAgICBzZWxmLnNlbGVjdChlbGVtZW50cywgYmJveCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdsYXNzby5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmJib3ggPSB0b0JCb3goZXZlbnQpO1xuICAgIHZpc3VhbHMuY3JlYXRlKGNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28ubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmJib3ggPSB0b0JCb3goZXZlbnQpO1xuICAgIHZpc3VhbHMudXBkYXRlKGNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28uY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2aXN1YWxzLnJlbW92ZShjb250ZXh0KTtcbiAgfSk7XG5cblxuICAvLyBldmVudCBpbnRlZ3JhdGlvblxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlZG93bicsIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBpZiAoaGFzU2Vjb25kYXJ5TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTGFzc28oZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIC8vIHdlJ3ZlIGhhbmRsZWQgdGhlIGV2ZW50XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5MYXNzb1Rvb2wuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuXG5MYXNzb1Rvb2wucHJvdG90eXBlLmFjdGl2YXRlTGFzc28gPSBmdW5jdGlvbihldmVudCwgYXV0b0FjdGl2YXRlKSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2xhc3NvJywge1xuICAgIGF1dG9BY3RpdmF0ZTogYXV0b0FjdGl2YXRlLFxuICAgIGN1cnNvcjogTEFTU09fVE9PTF9DVVJTT1IsXG4gICAgZGF0YToge1xuICAgICAgY29udGV4dDoge31cbiAgICB9XG4gIH0pO1xufTtcblxuTGFzc29Ub29sLnByb3RvdHlwZS5hY3RpdmF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2xhc3NvLnNlbGVjdGlvbicsIHtcbiAgICB0cmFwQ2xpY2s6IGZhbHNlLFxuICAgIGN1cnNvcjogTEFTU09fVE9PTF9DVVJTT1IsXG4gICAgZGF0YToge1xuICAgICAgY29udGV4dDoge31cbiAgICB9XG4gIH0pO1xufTtcblxuTGFzc29Ub29sLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbihlbGVtZW50cywgYmJveCkge1xuICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IGdldEVuY2xvc2VkRWxlbWVudHMoZWxlbWVudHMsIGJib3gpO1xuXG4gIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3QodmFsdWVzKHNlbGVjdGVkRWxlbWVudHMpKTtcbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICB0aGlzLl9kcmFnZ2luZy5jYW5jZWwoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0aW9uKCk7XG4gIH1cbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzLl9kcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgcmV0dXJuIGNvbnRleHQgJiYgL15sYXNzby8udGVzdChjb250ZXh0LnByZWZpeCk7XG59O1xuXG5cblxuZnVuY3Rpb24gdG9CQm94KGV2ZW50KSB7XG5cbiAgdmFyIHN0YXJ0ID0ge1xuXG4gICAgeDogZXZlbnQueCAtIGV2ZW50LmR4LFxuICAgIHk6IGV2ZW50LnkgLSBldmVudC5keVxuICB9O1xuXG4gIHZhciBlbmQgPSB7XG4gICAgeDogZXZlbnQueCxcbiAgICB5OiBldmVudC55XG4gIH07XG5cbiAgdmFyIGJib3g7XG5cbiAgaWYgKChzdGFydC54IDw9IGVuZC54ICYmIHN0YXJ0LnkgPCBlbmQueSkgfHxcbiAgICAgIChzdGFydC54IDwgZW5kLnggJiYgc3RhcnQueSA8PSBlbmQueSkpIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBzdGFydC54LFxuICAgICAgeTogc3RhcnQueSxcbiAgICAgIHdpZHRoOiAgZW5kLnggLSBzdGFydC54LFxuICAgICAgaGVpZ2h0OiBlbmQueSAtIHN0YXJ0LnlcbiAgICB9O1xuICB9IGVsc2UgaWYgKChzdGFydC54ID49IGVuZC54ICYmIHN0YXJ0LnkgPCBlbmQueSkgfHxcbiAgICAgICAgICAgICAoc3RhcnQueCA+IGVuZC54ICYmIHN0YXJ0LnkgPD0gZW5kLnkpKSB7XG5cbiAgICBiYm94ID0ge1xuICAgICAgeDogZW5kLngsXG4gICAgICB5OiBzdGFydC55LFxuICAgICAgd2lkdGg6ICBzdGFydC54IC0gZW5kLngsXG4gICAgICBoZWlnaHQ6IGVuZC55IC0gc3RhcnQueVxuICAgIH07XG4gIH0gZWxzZSBpZiAoKHN0YXJ0LnggPD0gZW5kLnggJiYgc3RhcnQueSA+IGVuZC55KSB8fFxuICAgICAgICAgICAgIChzdGFydC54IDwgZW5kLnggJiYgc3RhcnQueSA+PSBlbmQueSkpIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBzdGFydC54LFxuICAgICAgeTogZW5kLnksXG4gICAgICB3aWR0aDogIGVuZC54IC0gc3RhcnQueCxcbiAgICAgIGhlaWdodDogc3RhcnQueSAtIGVuZC55XG4gICAgfTtcbiAgfSBlbHNlIGlmICgoc3RhcnQueCA+PSBlbmQueCAmJiBzdGFydC55ID4gZW5kLnkpIHx8XG4gICAgICAgICAgICAgKHN0YXJ0LnggPiBlbmQueCAmJiBzdGFydC55ID49IGVuZC55KSkge1xuXG4gICAgYmJveCA9IHtcbiAgICAgIHg6IGVuZC54LFxuICAgICAgeTogZW5kLnksXG4gICAgICB3aWR0aDogIHN0YXJ0LnggLSBlbmQueCxcbiAgICAgIGhlaWdodDogc3RhcnQueSAtIGVuZC55XG4gICAgfTtcbiAgfSBlbHNlIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBlbmQueCxcbiAgICAgIHk6IGVuZC55LFxuICAgICAgd2lkdGg6ICAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gYmJveDtcbn1cbiIsImltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuXG5pbXBvcnQgTGFzc29Ub29sIGZyb20gJy4vTGFzc29Ub29sJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFRvb2xNYW5hZ2VyTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdsYXNzb1Rvb2wnIF0sXG4gIGxhc3NvVG9vbDogWyAndHlwZScsIExhc3NvVG9vbCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgQmFzZVxufSBmcm9tICcuLi8uLi9tb2RlbCc7XG5cbmltcG9ydCBBbGlnbkVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9BbGlnbkVsZW1lbnRzSGFuZGxlcic7XG5pbXBvcnQgQXBwZW5kU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL0FwcGVuZFNoYXBlSGFuZGxlcic7XG5pbXBvcnQgQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IENyZWF0ZUVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IENyZWF0ZUxhYmVsSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVMYWJlbEhhbmRsZXInO1xuaW1wb3J0IENyZWF0ZVNoYXBlSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVTaGFwZUhhbmRsZXInO1xuaW1wb3J0IERlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL0RlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBEZWxldGVFbGVtZW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvRGVsZXRlRWxlbWVudHNIYW5kbGVyJztcbmltcG9ydCBEZWxldGVTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvRGVsZXRlU2hhcGVIYW5kbGVyJztcbmltcG9ydCBEaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyIGZyb20gJy4vY21kL0Rpc3RyaWJ1dGVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IExheW91dENvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL0xheW91dENvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBNb3ZlQ29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvTW92ZUNvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBNb3ZlRWxlbWVudHNIYW5kbGVyIGZyb20gJy4vY21kL01vdmVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IE1vdmVTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvTW92ZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IFJlcGxhY2VTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvUmVwbGFjZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgUmVzaXplU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL1Jlc2l6ZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgU3BhY2VUb29sSGFuZGxlciBmcm9tICcuL2NtZC9TcGFjZVRvb2xIYW5kbGVyJztcbmltcG9ydCBUb2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlciBmcm9tICcuL2NtZC9Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlcic7XG5pbXBvcnQgVXBkYXRlQXR0YWNobWVudEhhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlQXR0YWNobWVudEhhbmRsZXInO1xuaW1wb3J0IFVwZGF0ZVdheXBvaW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlV2F5cG9pbnRzSGFuZGxlcic7XG5cblxuLyoqXG4gKiBUaGUgYmFzaWMgbW9kZWxpbmcgZW50cnkgcG9pbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsaW5nKGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgY29tbWFuZFN0YWNrKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIGZ1bmN0aW9uKCkge1xuXG4gICAgLy8gcmVnaXN0ZXIgbW9kZWxpbmcgaGFuZGxlcnNcbiAgICBzZWxmLnJlZ2lzdGVySGFuZGxlcnMoY29tbWFuZFN0YWNrKTtcbiAgfSk7XG59XG5cbk1vZGVsaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdlbGVtZW50RmFjdG9yeScsICdjb21tYW5kU3RhY2snIF07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmdldEhhbmRsZXJzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgJ3NoYXBlLmFwcGVuZCc6IEFwcGVuZFNoYXBlSGFuZGxlcixcbiAgICAnc2hhcGUuY3JlYXRlJzogQ3JlYXRlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5kZWxldGUnOiBEZWxldGVTaGFwZUhhbmRsZXIsXG4gICAgJ3NoYXBlLm1vdmUnOiBNb3ZlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5yZXNpemUnOiBSZXNpemVTaGFwZUhhbmRsZXIsXG4gICAgJ3NoYXBlLnJlcGxhY2UnOiBSZXBsYWNlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS50b2dnbGVDb2xsYXBzZSc6IFRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyLFxuXG4gICAgJ3NwYWNlVG9vbCc6IFNwYWNlVG9vbEhhbmRsZXIsXG5cbiAgICAnbGFiZWwuY3JlYXRlJzogQ3JlYXRlTGFiZWxIYW5kbGVyLFxuXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJzogQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJzogRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZSc6IE1vdmVDb25uZWN0aW9uSGFuZGxlcixcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnOiBMYXlvdXRDb25uZWN0aW9uSGFuZGxlcixcblxuICAgICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cyc6IFVwZGF0ZVdheXBvaW50c0hhbmRsZXIsXG5cbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnOiBSZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlcixcblxuICAgICdlbGVtZW50cy5jcmVhdGUnOiBDcmVhdGVFbGVtZW50c0hhbmRsZXIsXG4gICAgJ2VsZW1lbnRzLm1vdmUnOiBNb3ZlRWxlbWVudHNIYW5kbGVyLFxuICAgICdlbGVtZW50cy5kZWxldGUnOiBEZWxldGVFbGVtZW50c0hhbmRsZXIsXG5cbiAgICAnZWxlbWVudHMuZGlzdHJpYnV0ZSc6IERpc3RyaWJ1dGVFbGVtZW50c0hhbmRsZXIsXG4gICAgJ2VsZW1lbnRzLmFsaWduJzogQWxpZ25FbGVtZW50c0hhbmRsZXIsXG5cbiAgICAnZWxlbWVudC51cGRhdGVBdHRhY2htZW50JzogVXBkYXRlQXR0YWNobWVudEhhbmRsZXJcbiAgfTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgaGFuZGxlcnMgd2l0aCB0aGUgY29tbWFuZCBzdGFja1xuICpcbiAqIEBwYXJhbSB7Q29tbWFuZFN0YWNrfSBjb21tYW5kU3RhY2tcbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnJlZ2lzdGVySGFuZGxlcnMgPSBmdW5jdGlvbihjb21tYW5kU3RhY2spIHtcbiAgZm9yRWFjaCh0aGlzLmdldEhhbmRsZXJzKCksIGZ1bmN0aW9uKGhhbmRsZXIsIGlkKSB7XG4gICAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcihpZCwgaGFuZGxlcik7XG4gIH0pO1xufTtcblxuXG4vLyBtb2RlbGluZyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuTW9kZWxpbmcucHJvdG90eXBlLm1vdmVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdQYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIG5ld1BhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gbmV3UGFyZW50SW5kZXg7XG4gICAgbmV3UGFyZW50SW5kZXggPSBudWxsO1xuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIGRlbHRhOiAgZGVsdGEsXG4gICAgbmV3UGFyZW50OiBuZXdQYXJlbnQsXG4gICAgbmV3UGFyZW50SW5kZXg6IG5ld1BhcmVudEluZGV4LFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS5tb3ZlJywgY29udGV4dCk7XG59O1xuXG5cbi8qKlxuICogVXBkYXRlIHRoZSBhdHRhY2htZW50IG9mIHRoZSBnaXZlbiBzaGFwZS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlLkJhc2V9IHNoYXBlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbbmV3SG9zdF1cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZUF0dGFjaG1lbnQgPSBmdW5jdGlvbihzaGFwZSwgbmV3SG9zdCkge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgbmV3SG9zdDogbmV3SG9zdFxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnLCBjb250ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBNb3ZlIGEgbnVtYmVyIG9mIHNoYXBlcyB0byBhIG5ldyB0YXJnZXQsIGVpdGhlciBzZXR0aW5nIGl0IGFzXG4gKiB0aGUgbmV3IHBhcmVudCBvciBhdHRhY2hpbmcgaXQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZS5CYXNlPn0gc2hhcGVzXG4gKiBAcGFyYW0ge1BvaW50fSBkZWx0YVxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW3RhcmdldF1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5hdHRhY2g9ZmFsc2VdXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5tb3ZlRWxlbWVudHMgPSBmdW5jdGlvbihzaGFwZXMsIGRlbHRhLCB0YXJnZXQsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICB2YXIgYXR0YWNoID0gaGludHMuYXR0YWNoO1xuXG4gIHZhciBuZXdQYXJlbnQgPSB0YXJnZXQsXG4gICAgICBuZXdIb3N0O1xuXG4gIGlmIChhdHRhY2ggPT09IHRydWUpIHtcbiAgICBuZXdIb3N0ID0gdGFyZ2V0O1xuICAgIG5ld1BhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gIH0gZWxzZVxuXG4gIGlmIChhdHRhY2ggPT09IGZhbHNlKSB7XG4gICAgbmV3SG9zdCA9IG51bGw7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZXM6IHNoYXBlcyxcbiAgICBkZWx0YTogZGVsdGEsXG4gICAgbmV3UGFyZW50OiBuZXdQYXJlbnQsXG4gICAgbmV3SG9zdDogbmV3SG9zdCxcbiAgICBoaW50czogaGludHNcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudHMubW92ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUubW92ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdQYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIG5ld1BhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gbmV3UGFyZW50SW5kZXg7XG4gICAgbmV3UGFyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIGRlbHRhOiBkZWx0YSxcbiAgICBuZXdQYXJlbnQ6IG5ld1BhcmVudCxcbiAgICBuZXdQYXJlbnRJbmRleDogbmV3UGFyZW50SW5kZXgsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ubW92ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUubGF5b3V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ubGF5b3V0JywgY29udGV4dCk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gc291cmNlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSB0YXJnZXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyZW50SW5kZXhdXG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvblxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gcGFyZW50XG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gdGhlIGNyZWF0ZWQgY29ubmVjdGlvbi5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyZW50SW5kZXgsIGNvbm5lY3Rpb24sIHBhcmVudCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gcGFyZW50O1xuICAgIHBhcmVudCA9IGNvbm5lY3Rpb247XG4gICAgY29ubmVjdGlvbiA9IHBhcmVudEluZGV4O1xuICAgIHBhcmVudEluZGV4ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29ubmVjdGlvbiA9IHRoaXMuX2NyZWF0ZSgnY29ubmVjdGlvbicsIGNvbm5lY3Rpb24pO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHBhcmVudEluZGV4OiBwYXJlbnRJbmRleCxcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIGhpbnRzOiBoaW50c1xuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LmNvbm5lY3Rpb247XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgc2hhcGUgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZXxPYmplY3R9IHNoYXBlXG4gKiBAcGFyYW0ge1BvaW50fSBwb3NpdGlvblxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8ZGpzLm1vZGVsLlJvb3R9IHRhcmdldFxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF0gcG9zaXRpb24gaW4gcGFyZW50cyBjaGlsZHJlbiBsaXN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICogQHBhcmFtIHtib29sZWFufSBbaGludHMuYXR0YWNoXSB3aGV0aGVyIHRvIGF0dGFjaCB0byB0YXJnZXQgb3IgYmVjb21lIGEgY2hpbGRcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBjcmVhdGVkIHNoYXBlXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBwb3NpdGlvbiwgdGFyZ2V0LCBwYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIGhpbnRzID0gcGFyZW50SW5kZXg7XG4gICAgcGFyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICBoaW50cyA9IGhpbnRzIHx8IHt9O1xuXG4gIHZhciBhdHRhY2ggPSBoaW50cy5hdHRhY2gsXG4gICAgICBwYXJlbnQsXG4gICAgICBob3N0O1xuXG4gIHNoYXBlID0gdGhpcy5fY3JlYXRlKCdzaGFwZScsIHNoYXBlKTtcblxuICBpZiAoYXR0YWNoKSB7XG4gICAgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDtcbiAgICBob3N0ID0gdGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIHBhcmVudCA9IHRhcmdldDtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcGFyZW50SW5kZXg6IHBhcmVudEluZGV4LFxuICAgIGhvc3Q6IGhvc3QsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuY3JlYXRlRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cywgcG9zaXRpb24sIHBhcmVudCwgcGFyZW50SW5kZXgsIGhpbnRzKSB7XG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyZW50SW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgaGludHMgPSBwYXJlbnRJbmRleDtcbiAgICBwYXJlbnRJbmRleCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBwYXJlbnRJbmRleDogcGFyZW50SW5kZXgsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LmVsZW1lbnRzO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuY3JlYXRlTGFiZWwgPSBmdW5jdGlvbihsYWJlbFRhcmdldCwgcG9zaXRpb24sIGxhYmVsLCBwYXJlbnQpIHtcblxuICBsYWJlbCA9IHRoaXMuX2NyZWF0ZSgnbGFiZWwnLCBsYWJlbCk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbGFiZWxUYXJnZXQ6IGxhYmVsVGFyZ2V0LFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBwYXJlbnQ6IHBhcmVudCB8fCBsYWJlbFRhcmdldC5wYXJlbnQsXG4gICAgc2hhcGU6IGxhYmVsXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhYmVsLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG4vKipcbiAqIEFwcGVuZCBzaGFwZSB0byBnaXZlbiBzb3VyY2UsIGRyYXdpbmcgYSBjb25uZWN0aW9uXG4gKiBiZXR3ZWVuIHNvdXJjZSBhbmQgdGhlIG5ld2x5IGNyZWF0ZWQgc2hhcGUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8T2JqZWN0fSBzaGFwZVxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5hdHRhY2hdXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5Db25uZWN0aW9ufE9iamVjdH0gW2hpbnRzLmNvbm5lY3Rpb25dXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbaGludHMuY29ubmVjdGlvblBhcmVudF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBuZXdseSBjcmVhdGVkIHNoYXBlXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5hcHBlbmRTaGFwZSA9IGZ1bmN0aW9uKHNvdXJjZSwgc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICBzaGFwZSA9IHRoaXMuX2NyZWF0ZSgnc2hhcGUnLCBzaGFwZSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBjb25uZWN0aW9uOiBoaW50cy5jb25uZWN0aW9uLFxuICAgIGNvbm5lY3Rpb25QYXJlbnQ6IGhpbnRzLmNvbm5lY3Rpb25QYXJlbnQsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLmFwcGVuZCcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVtb3ZlRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudHMuZGVsZXRlJywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5kaXN0cmlidXRlRWxlbWVudHMgPSBmdW5jdGlvbihncm91cHMsIGF4aXMsIGRpbWVuc2lvbikge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBncm91cHM6IGdyb3VwcyxcbiAgICBheGlzOiBheGlzLFxuICAgIGRpbWVuc2lvbjogZGltZW5zaW9uXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLmRpc3RyaWJ1dGUnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZW1vdmVDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBjb250ZXh0KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZXBsYWNlU2hhcGUgPSBmdW5jdGlvbihvbGRTaGFwZSwgbmV3U2hhcGUsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIG9sZFNoYXBlOiBvbGRTaGFwZSxcbiAgICBuZXdEYXRhOiBuZXdTaGFwZSxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUucmVwbGFjZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0Lm5ld1NoYXBlO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmFsaWduRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cywgYWxpZ25tZW50KSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBhbGlnbm1lbnQ6IGFsaWdubWVudFxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50cy5hbGlnbicsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlc2l6ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcywgbWluQm91bmRzLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgbmV3Qm91bmRzOiBuZXdCb3VuZHMsXG4gICAgbWluQm91bmRzOiBtaW5Cb3VuZHMsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZVNwYWNlID0gZnVuY3Rpb24obW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgZGVsdGE6IGRlbHRhLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIG1vdmluZ1NoYXBlczogbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzOiByZXNpemluZ1NoYXBlcyxcbiAgICBzdGFydDogc3RhcnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc3BhY2VUb29sJywgY29udGV4dCk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgbmV3V2F5cG9pbnRzLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIG5ld1dheXBvaW50czogbmV3V2F5cG9pbnRzLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlY29ubmVjdCA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIHNvdXJjZSwgdGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgbmV3U291cmNlOiBzb3VyY2UsXG4gICAgbmV3VGFyZ2V0OiB0YXJnZXQsXG4gICAgZG9ja2luZ09yUG9pbnRzOiBkb2NraW5nT3JQb2ludHMsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgY29udGV4dCk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVjb25uZWN0U3RhcnQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGRvY2tpbmdPclBvaW50cywgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB0aGlzLnJlY29ubmVjdChjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGNvbm5lY3Rpb24udGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGFzc2lnbihoaW50cywge1xuICAgIGRvY2tpbmc6ICdzb3VyY2UnXG4gIH0pKTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZWNvbm5lY3RFbmQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdUYXJnZXQsIGRvY2tpbmdPclBvaW50cywgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB0aGlzLnJlY29ubmVjdChjb25uZWN0aW9uLCBjb25uZWN0aW9uLnNvdXJjZSwgbmV3VGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGFzc2lnbihoaW50cywge1xuICAgIGRvY2tpbmc6ICd0YXJnZXQnXG4gIH0pKTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIGF0dHJzLCBoaW50cykge1xuICByZXR1cm4gdGhpcy5jcmVhdGVDb25uZWN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBhdHRycyB8fCB7fSwgc291cmNlLnBhcmVudCwgaGludHMpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbih0eXBlLCBhdHRycykge1xuICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBCYXNlKSB7XG4gICAgcmV0dXJuIGF0dHJzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGUodHlwZSwgYXR0cnMpO1xuICB9XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudG9nZ2xlQ29sbGFwc2UgPSBmdW5jdGlvbihzaGFwZSwgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS50b2dnbGVDb2xsYXBzZScsIGNvbnRleHQpO1xufTtcbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgYWxpZ24gZWxlbWVudHMgaW4gYSBjZXJ0YWluIHdheS5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFsaWduRWxlbWVudHMobW9kZWxpbmcsIGNhbnZhcykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkFsaWduRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJywgJ2NhbnZhcycgXTtcblxuXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgYWxpZ25tZW50ID0gY29udGV4dC5hbGlnbm1lbnQ7XG5cblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIGRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgaWYgKGFsaWdubWVudC5sZWZ0KSB7XG4gICAgICBkZWx0YS54ID0gYWxpZ25tZW50LmxlZnQgLSBlbGVtZW50Lng7XG5cbiAgICB9IGVsc2UgaWYgKGFsaWdubWVudC5yaWdodCkge1xuICAgICAgZGVsdGEueCA9IChhbGlnbm1lbnQucmlnaHQgLSBlbGVtZW50LndpZHRoKSAtIGVsZW1lbnQueDtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50LmNlbnRlcikge1xuICAgICAgZGVsdGEueCA9IChhbGlnbm1lbnQuY2VudGVyIC0gTWF0aC5yb3VuZChlbGVtZW50LndpZHRoIC8gMikpIC0gZWxlbWVudC54O1xuXG4gICAgfSBlbHNlIGlmIChhbGlnbm1lbnQudG9wKSB7XG4gICAgICBkZWx0YS55ID0gYWxpZ25tZW50LnRvcCAtIGVsZW1lbnQueTtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50LmJvdHRvbSkge1xuICAgICAgZGVsdGEueSA9IChhbGlnbm1lbnQuYm90dG9tIC0gZWxlbWVudC5oZWlnaHQpIC0gZWxlbWVudC55O1xuXG4gICAgfSBlbHNlIGlmIChhbGlnbm1lbnQubWlkZGxlKSB7XG4gICAgICBkZWx0YS55ID0gKGFsaWdubWVudC5taWRkbGUgLSBNYXRoLnJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMikpIC0gZWxlbWVudC55O1xuICAgIH1cblxuICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSwgZGVsdGEsIGVsZW1lbnQucGFyZW50KTtcbiAgfSk7XG59O1xuXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxufTtcbiIsImltcG9ydCB7IHNvbWUgfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgYXBwZW5kaW5nIG9mIHNoYXBlc1xuICogdG8gYSBzb3VyY2Ugc2hhcGUuXG4gKlxuICogQHBhcmFtIHtjYW52YXN9IENhbnZhc1xuICogQHBhcmFtIHtlbGVtZW50RmFjdG9yeX0gRWxlbWVudEZhY3RvcnlcbiAqIEBwYXJhbSB7bW9kZWxpbmd9IE1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcGVuZFNoYXBlSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5BcHBlbmRTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNoYXBlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQuc2hhcGUgdGhlIG5ldyBzaGFwZVxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcn0gY29udGV4dC5zb3VyY2UgdGhlIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQucGFyZW50IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5BcHBlbmRTaGFwZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gIGlmICghc291cmNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2UgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCB8fCBzb3VyY2UucGFyZW50LFxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gIHNoYXBlID0gY29udGV4dC5zaGFwZSA9XG4gICAgdGhpcy5fbW9kZWxpbmcuY3JlYXRlU2hhcGUoXG4gICAgICBzaGFwZSxcbiAgICAgIGNvbnRleHQucG9zaXRpb24sXG4gICAgICB0YXJnZXQsIHsgYXR0YWNoOiBoaW50cy5hdHRhY2ggfSk7XG5cbiAgY29udGV4dC5zaGFwZSA9IHNoYXBlO1xufTtcblxuQXBwZW5kU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICBpZiAoIWV4aXN0c0Nvbm5lY3Rpb24oY29udGV4dC5zb3VyY2UsIGNvbnRleHQuc2hhcGUpKSB7XG5cbiAgICAvLyBjcmVhdGUgY29ubmVjdGlvblxuICAgIGlmIChoaW50cy5jb25uZWN0aW9uVGFyZ2V0ID09PSBjb250ZXh0LnNvdXJjZSkge1xuICAgICAgdGhpcy5fbW9kZWxpbmcuY29ubmVjdChjb250ZXh0LnNoYXBlLCBjb250ZXh0LnNvdXJjZSwgY29udGV4dC5jb25uZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZWxpbmcuY29ubmVjdChjb250ZXh0LnNvdXJjZSwgY29udGV4dC5zaGFwZSwgY29udGV4dC5jb25uZWN0aW9uKTtcbiAgICB9XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gZXhpc3RzQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gc29tZShzb3VyY2Uub3V0Z29pbmcsIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gYy50YXJnZXQgPT09IHRhcmdldDtcbiAgfSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIoY2FudmFzLCBsYXlvdXRlcikge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2xheW91dGVyID0gbGF5b3V0ZXI7XG59XG5cbkNyZWF0ZUNvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdjYW52YXMnLCAnbGF5b3V0ZXInIF07XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIEFwcGVuZHMgYSBzaGFwZSB0byBhIHRhcmdldCBzaGFwZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5lbGVtZW50LkJhc2V9IGNvbnRleHQuc291cmNlIHRoZSBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge2Rqcy5lbGVtZW50LkJhc2V9IGNvbnRleHQudGFyZ2V0IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleCxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcblxuICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2UgYW5kIHRhcmdldCByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFwYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCByZXF1aXJlZCcpO1xuICB9XG5cbiAgY29ubmVjdGlvbi5zb3VyY2UgPSBzb3VyY2U7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gdGFyZ2V0O1xuXG4gIGlmICghY29ubmVjdGlvbi53YXlwb2ludHMpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2xheW91dGVyLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgaGludHMpO1xuICB9XG5cbiAgLy8gYWRkIGNvbm5lY3Rpb25cbiAgdGhpcy5fY2FudmFzLmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbiwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICB0aGlzLl9jYW52YXMucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICBjb25uZWN0aW9uLnNvdXJjZSA9IG51bGw7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gbnVsbDtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07IiwiaW1wb3J0IHtcclxuICBhc3NpZ24sXHJcbiAgZm9yRWFjaCxcclxuICBpc051bWJlcixcclxuICBtYXAsXHJcbiAgcGljayxcclxuICB2YWx1ZXNcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJCb3gsXHJcbiAgZ2V0UGFyZW50c1xyXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvRWxlbWVudHMnO1xyXG5cclxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZUVsZW1lbnRzSGFuZGxlcihtb2RlbGluZykge1xyXG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XHJcbn1cclxuXHJcbkNyZWF0ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gW1xyXG4gICdtb2RlbGluZydcclxuXTtcclxuXHJcbkNyZWF0ZUVsZW1lbnRzSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxyXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcclxuICAgICAgcGFyZW50SW5kZXggPSBjb250ZXh0LnBhcmVudEluZGV4LFxyXG4gICAgICBwb3NpdGlvbiA9IGNvbnRleHQucG9zaXRpb24sXHJcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcclxuXHJcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XHJcblxyXG4gIC8vIG1ha2Ugc3VyZSBlYWNoIGVsZW1lbnQgaGFzIHggYW5kIHlcclxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueCkpIHtcclxuICAgICAgZWxlbWVudC54ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueSkpIHtcclxuICAgICAgZWxlbWVudC55ID0gMDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGJib3ggPSBnZXRCQm94KGVsZW1lbnRzKTtcclxuXHJcbiAgLy8gY2VudGVyIGVsZW1lbnRzIGFyb3VuZCBwb3NpdGlvblxyXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcclxuICAgICAgZWxlbWVudC53YXlwb2ludHMgPSBtYXAoZWxlbWVudC53YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHg6IHJvdW5kKHdheXBvaW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMiArIHBvc2l0aW9uLngpLFxyXG4gICAgICAgICAgeTogcm91bmQod2F5cG9pbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMiArIHBvc2l0aW9uLnkpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduKGVsZW1lbnQsIHtcclxuICAgICAgeDogcm91bmQoZWxlbWVudC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIgKyBwb3NpdGlvbi54KSxcclxuICAgICAgeTogcm91bmQoZWxlbWVudC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyICsgcG9zaXRpb24ueSlcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICB2YXIgcGFyZW50cyA9IGdldFBhcmVudHMoZWxlbWVudHMpO1xyXG5cclxuICB2YXIgY2FjaGUgPSB7fTtcclxuXHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xyXG4gICAgICBjYWNoZVsgZWxlbWVudC5pZCBdID0gaXNOdW1iZXIocGFyZW50SW5kZXgpID9cclxuICAgICAgICBtb2RlbGluZy5jcmVhdGVDb25uZWN0aW9uKFxyXG4gICAgICAgICAgY2FjaGVbIGVsZW1lbnQuc291cmNlLmlkIF0sXHJcbiAgICAgICAgICBjYWNoZVsgZWxlbWVudC50YXJnZXQuaWQgXSxcclxuICAgICAgICAgIHBhcmVudEluZGV4LFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGVsZW1lbnQucGFyZW50IHx8IHBhcmVudCxcclxuICAgICAgICAgIGhpbnRzXHJcbiAgICAgICAgKSA6XHJcbiAgICAgICAgbW9kZWxpbmcuY3JlYXRlQ29ubmVjdGlvbihcclxuICAgICAgICAgIGNhY2hlWyBlbGVtZW50LnNvdXJjZS5pZCBdLFxyXG4gICAgICAgICAgY2FjaGVbIGVsZW1lbnQudGFyZ2V0LmlkIF0sXHJcbiAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgZWxlbWVudC5wYXJlbnQgfHwgcGFyZW50LFxyXG4gICAgICAgICAgaGludHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjcmVhdGVTaGFwZUhpbnRzID0gYXNzaWduKHt9LCBoaW50cyk7XHJcblxyXG4gICAgaWYgKHBhcmVudHMuaW5kZXhPZihlbGVtZW50KSA9PT0gLTEpIHtcclxuICAgICAgY3JlYXRlU2hhcGVIaW50cy5hdXRvUmVzaXplID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY2FjaGVbIGVsZW1lbnQuaWQgXSA9IGlzTnVtYmVyKHBhcmVudEluZGV4KSA/XHJcbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgcGljayhlbGVtZW50LCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdKSxcclxuICAgICAgICBlbGVtZW50LnBhcmVudCB8fCBwYXJlbnQsXHJcbiAgICAgICAgcGFyZW50SW5kZXgsXHJcbiAgICAgICAgY3JlYXRlU2hhcGVIaW50c1xyXG4gICAgICApIDpcclxuICAgICAgbW9kZWxpbmcuY3JlYXRlU2hhcGUoXHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICBwaWNrKGVsZW1lbnQsIFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF0pLFxyXG4gICAgICAgIGVsZW1lbnQucGFyZW50IHx8IHBhcmVudCxcclxuICAgICAgICBjcmVhdGVTaGFwZUhpbnRzXHJcbiAgICAgICk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnRleHQuZWxlbWVudHMgPSB2YWx1ZXMoY2FjaGUpO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xyXG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENyZWF0ZVNoYXBlSGFuZGxlciBmcm9tICcuL0NyZWF0ZVNoYXBlSGFuZGxlcic7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBhdHRhY2hlcyBhIGxhYmVsIHRvIGEgZ2l2ZW4gdGFyZ2V0IHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlTGFiZWxIYW5kbGVyKGNhbnZhcykge1xuICBDcmVhdGVTaGFwZUhhbmRsZXIuY2FsbCh0aGlzLCBjYW52YXMpO1xufVxuXG5pbmhlcml0cyhDcmVhdGVMYWJlbEhhbmRsZXIsIENyZWF0ZVNoYXBlSGFuZGxlcik7XG5cbkNyZWF0ZUxhYmVsSGFuZGxlci4kaW5qZWN0ID0gWyAnY2FudmFzJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIG9yaWdpbmFsRXhlY3V0ZSA9IENyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgbGFiZWwgdG8gYSB0YXJnZXQgc2hhcGUuXG4gKlxuICogQG1ldGhvZCBDcmVhdGVMYWJlbEhhbmRsZXIjZXhlY3V0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnREZXNjcmlwdG9yfSBjb250ZXh0LnRhcmdldCB0aGUgZWxlbWVudCB0aGUgbGFiZWwgaXMgYXR0YWNoZWQgdG9cbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQucGFyZW50IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5DcmVhdGVMYWJlbEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGxhYmVsID0gY29udGV4dC5zaGFwZTtcblxuICBlbnN1cmVWYWxpZERpbWVuc2lvbnMobGFiZWwpO1xuXG4gIGxhYmVsLmxhYmVsVGFyZ2V0ID0gY29udGV4dC5sYWJlbFRhcmdldDtcblxuICByZXR1cm4gb3JpZ2luYWxFeGVjdXRlLmNhbGwodGhpcywgY29udGV4dCk7XG59O1xuXG52YXIgb3JpZ2luYWxSZXZlcnQgPSBDcmVhdGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydDtcblxuLyoqXG4gKiBVbmRvIGFwcGVuZCBieSByZW1vdmluZyB0aGUgc2hhcGVcbiAqL1xuQ3JlYXRlTGFiZWxIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIGNvbnRleHQuc2hhcGUubGFiZWxUYXJnZXQgPSBudWxsO1xuXG4gIHJldHVybiBvcmlnaW5hbFJldmVydC5jYWxsKHRoaXMsIGNvbnRleHQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlVmFsaWREaW1lbnNpb25zKGxhYmVsKSB7XG5cbiAgLy8gbWFrZSBzdXJlIGEgbGFiZWwgaGFzIHZhbGlkIHsgd2lkdGgsIGhlaWdodCB9IGRpbWVuc2lvbnNcbiAgWyAnd2lkdGgnLCAnaGVpZ2h0JyBdLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgIGlmICh0eXBlb2YgbGFiZWxbcHJvcF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsYWJlbFtwcm9wXSA9IDA7XG4gICAgfVxuICB9KTtcbn0iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgYWRkaXRpb24gb2Ygc2hhcGVzLlxuICpcbiAqIEBwYXJhbSB7Y2FudmFzfSBDYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlU2hhcGVIYW5kbGVyKGNhbnZhcykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkNyZWF0ZVNoYXBlSGFuZGxlci4kaW5qZWN0ID0gWyAnY2FudmFzJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBBcHBlbmRzIGEgc2hhcGUgdG8gYSB0YXJnZXQgc2hhcGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5wYXJlbnQgdGhlIHBhcmVudCBvYmplY3RcbiAqIEBwYXJhbSB7UG9pbnR9IGNvbnRleHQucG9zaXRpb24gcG9zaXRpb24gb2YgdGhlIG5ldyBlbGVtZW50XG4gKi9cbkNyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgcG9zaXRpb25PckJvdW5kcyA9IGNvbnRleHQucG9zaXRpb24sXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleDtcblxuICBpZiAoIXBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIXBvc2l0aW9uT3JCb3VuZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Bvc2l0aW9uIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyAoMSkgYWRkIGF0IGV2ZW50IGNlbnRlciBwb3NpdGlvbiBfb3JfIGF0IGdpdmVuIGJvdW5kc1xuICBpZiAocG9zaXRpb25PckJvdW5kcy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzaWduKHNoYXBlLCBwb3NpdGlvbk9yQm91bmRzKTtcbiAgfSBlbHNlIHtcbiAgICBhc3NpZ24oc2hhcGUsIHtcbiAgICAgIHg6IHBvc2l0aW9uT3JCb3VuZHMueCAtIHJvdW5kKHNoYXBlLndpZHRoIC8gMiksXG4gICAgICB5OiBwb3NpdGlvbk9yQm91bmRzLnkgLSByb3VuZChzaGFwZS5oZWlnaHQgLyAyKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDIpIGFkZCB0byBjYW52YXNcbiAgdGhpcy5fY2FudmFzLmFkZFNoYXBlKHNoYXBlLCBwYXJlbnQsIHBhcmVudEluZGV4KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5cbi8qKlxuICogVW5kbyBhcHBlbmQgYnkgcmVtb3ZpbmcgdGhlIHNoYXBlXG4gKi9cbkNyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgLy8gKDMpIHJlbW92ZSBmb3JtIGNhbnZhc1xuICB0aGlzLl9jYW52YXMucmVtb3ZlU2hhcGUoc2hhcGUpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07IiwiaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIGluZGV4T2YgYXMgY29sbGVjdGlvbklkeFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBkZWxldGlvbiBvZiBDb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIoY2FudmFzLCBtb2RlbGluZykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbkRlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbkRlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgcGFyZW50ID0gY29ubmVjdGlvbi5wYXJlbnQ7XG5cbiAgY29udGV4dC5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgLy8gcmVtZW1iZXIgY29udGFpbm1lbnRcbiAgY29udGV4dC5wYXJlbnRJbmRleCA9IGNvbGxlY3Rpb25JZHgocGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uKTtcblxuICBjb250ZXh0LnNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlO1xuICBjb250ZXh0LnRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0O1xuXG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gIGNvbm5lY3Rpb24uc291cmNlID0gbnVsbDtcbiAgY29ubmVjdGlvbi50YXJnZXQgPSBudWxsO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuLyoqXG4gKiBDb21tYW5kIHJldmVydCBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgcGFyZW50SW5kZXggPSBjb250ZXh0LnBhcmVudEluZGV4O1xuXG4gIGNvbm5lY3Rpb24uc291cmNlID0gY29udGV4dC5zb3VyY2U7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgLy8gcmVzdG9yZSBjb250YWlubWVudFxuICBjb2xsZWN0aW9uQWRkKHBhcmVudC5jaGlsZHJlbiwgY29ubmVjdGlvbiwgcGFyZW50SW5kZXgpO1xuXG4gIHRoaXMuX2NhbnZhcy5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHBhcmVudCk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVFbGVtZW50c0hhbmRsZXIobW9kZWxpbmcsIGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cbkRlbGV0ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gW1xuICAnbW9kZWxpbmcnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG5EZWxldGVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIC8vIGVsZW1lbnQgbWF5IGhhdmUgYmVlbiByZW1vdmVkIHdpdGggcHJldmlvdXNcbiAgICAvLyByZW1vdmUgb3BlcmF0aW9ucyBhbHJlYWR5IChlLmcuIGluIGNhc2Ugb2YgbmVzdGluZylcbiAgICBpZiAoIWVsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59OyIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICBpbmRleE9mIGFzIGNvbGxlY3Rpb25JZHhcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgZGVsZXRpb24gb2Ygc2hhcGVzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlU2hhcGVIYW5kbGVyKGNhbnZhcywgbW9kZWxpbmcpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5EZWxldGVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ2NhbnZhcycsICdtb2RlbGluZycgXTtcblxuXG4vKipcbiAqIC0gUmVtb3ZlIGNvbm5lY3Rpb25zXG4gKiAtIFJlbW92ZSBhbGwgZGlyZWN0IGNoaWxkcmVuXG4gKi9cbkRlbGV0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gIC8vIHJlbW92ZSBjb25uZWN0aW9uc1xuICBzYXZlQ2xlYXIoc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcblxuICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25uZWN0aW9uIGlzbid0IHJlbW92ZWQgdHdpY2VcbiAgICAvLyBGb3IgZXhhbXBsZSBpZiBhIGNvbnRhaW5lciBpcyByZW1vdmVkXG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgc2F2ZUNsZWFyKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGNoaWxkIHNoYXBlcyBhbmQgY29ubmVjdGlvbnNcbiAgc2F2ZUNsZWFyKHNoYXBlLmNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgIGlmIChpc0Nvbm5lY3Rpb24oY2hpbGQpKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKGNoaWxkLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUoY2hpbGQsIHsgbmVzdGVkOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBzaGFwZSBhbmQgcmVtZW1iZXIgdGhlIHBhcmVudFxuICovXG5EZWxldGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IHNoYXBlLnBhcmVudDtcblxuICBjb250ZXh0Lm9sZFBhcmVudCA9IG9sZFBhcmVudDtcblxuICAvLyByZW1vdmUgY29udGFpbm1lbnRcbiAgY29udGV4dC5vbGRQYXJlbnRJbmRleCA9IGNvbGxlY3Rpb25JZHgob2xkUGFyZW50LmNoaWxkcmVuLCBzaGFwZSk7XG5cbiAgLy8gcmVtb3ZlIHNoYXBlXG4gIGNhbnZhcy5yZW1vdmVTaGFwZShzaGFwZSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuXG4vKipcbiAqIENvbW1hbmQgcmV2ZXJ0IGltcGxlbWVudGF0aW9uXG4gKi9cbkRlbGV0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgb2xkUGFyZW50SW5kZXggPSBjb250ZXh0Lm9sZFBhcmVudEluZGV4O1xuXG4gIC8vIHJlc3RvcmUgY29udGFpbm1lbnRcbiAgY29sbGVjdGlvbkFkZChvbGRQYXJlbnQuY2hpbGRyZW4sIHNoYXBlLCBvbGRQYXJlbnRJbmRleCk7XG5cbiAgY2FudmFzLmFkZFNoYXBlKHNoYXBlLCBvbGRQYXJlbnQpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBkaXN0cmlidXRlcyBlbGVtZW50cyBldmVubHkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpc3RyaWJ1dGVFbGVtZW50cyhtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5EaXN0cmlidXRlRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG52YXIgT0ZGX0FYSVMgPSB7XG4gIHg6ICd5JyxcbiAgeTogJ3gnXG59O1xuXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBncm91cHMgPSBjb250ZXh0Lmdyb3VwcyxcbiAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXMsXG4gICAgICBkaW1lbnNpb24gPSBjb250ZXh0LmRpbWVuc2lvbjtcblxuICBmdW5jdGlvbiB1cGRhdGVSYW5nZShncm91cCwgZWxlbWVudCkge1xuICAgIGdyb3VwLnJhbmdlLm1pbiA9IE1hdGgubWluKGVsZW1lbnRbYXhpc10sIGdyb3VwLnJhbmdlLm1pbik7XG4gICAgZ3JvdXAucmFuZ2UubWF4ID0gTWF0aC5tYXgoZWxlbWVudFtheGlzXSArIGVsZW1lbnRbZGltZW5zaW9uXSwgZ3JvdXAucmFuZ2UubWF4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl0gLyAyO1xuICB9XG5cbiAgZnVuY3Rpb24gbGFzdElkeChhcnIpIHtcbiAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZURpZmYocmFuZ2UpIHtcbiAgICByZXR1cm4gcmFuZ2UubWF4IC0gcmFuZ2UubWluO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudGVyRWxlbWVudChyZWZDZW50ZXIsIGVsZW1lbnQpIHtcbiAgICB2YXIgZGVsdGEgPSB7IHk6IDAgfTtcblxuICAgIGRlbHRhW2F4aXNdID0gcmVmQ2VudGVyIC0gY2VudGVyKGVsZW1lbnQpO1xuXG4gICAgaWYgKGRlbHRhW2F4aXNdKSB7XG5cbiAgICAgIGRlbHRhW09GRl9BWElTW2F4aXNdXSA9IDA7XG5cbiAgICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSwgZGVsdGEsIGVsZW1lbnQucGFyZW50KTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmlyc3RHcm91cCA9IGdyb3Vwc1swXSxcbiAgICAgIGxhc3RHcm91cElkeCA9IGxhc3RJZHgoZ3JvdXBzKSxcbiAgICAgIGxhc3RHcm91cCA9IGdyb3Vwc1sgbGFzdEdyb3VwSWR4IF07XG5cbiAgdmFyIG1hcmdpbixcbiAgICAgIHNwYWNlSW5CZXR3ZWVuLFxuICAgICAgZ3JvdXBzU2l6ZSA9IDA7IC8vIHRoZSBzaXplIG9mIGVhY2ggcmFuZ2VcblxuICBmb3JFYWNoKGdyb3VwcywgZnVuY3Rpb24oZ3JvdXAsIGlkeCkge1xuICAgIHZhciBzb3J0ZWRFbGVtZW50cyxcbiAgICAgICAgcmVmRWxlbSxcbiAgICAgICAgcmVmQ2VudGVyO1xuXG4gICAgaWYgKGdyb3VwLmVsZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGlmIChpZHggJiYgaWR4ICE9PSBncm91cHMubGVuZ3RoIC0gMSkge1xuICAgICAgICB1cGRhdGVSYW5nZShncm91cCwgZ3JvdXAuZWxlbWVudHNbMF0pO1xuXG4gICAgICAgIGdyb3Vwc1NpemUgKz0gcmFuZ2VEaWZmKGdyb3VwLnJhbmdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzb3J0ZWRFbGVtZW50cyA9IHNvcnRCeShncm91cC5lbGVtZW50cywgYXhpcyk7XG5cbiAgICByZWZFbGVtID0gc29ydGVkRWxlbWVudHNbMF07XG5cbiAgICBpZiAoaWR4ID09PSBsYXN0R3JvdXBJZHgpIHtcbiAgICAgIHJlZkVsZW0gPSBzb3J0ZWRFbGVtZW50c1tsYXN0SWR4KHNvcnRlZEVsZW1lbnRzKV07XG4gICAgfVxuXG4gICAgcmVmQ2VudGVyID0gY2VudGVyKHJlZkVsZW0pO1xuXG4gICAgLy8gd2FubmEgdXBkYXRlIHRoZSByYW5nZXMgYWZ0ZXIgdGhlIHNoYXBlcyBoYXZlIGJlZW4gY2VudGVyZWRcbiAgICBncm91cC5yYW5nZSA9IG51bGw7XG5cbiAgICBmb3JFYWNoKHNvcnRlZEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGNlbnRlckVsZW1lbnQocmVmQ2VudGVyLCBlbGVtZW50KTtcblxuICAgICAgaWYgKGdyb3VwLnJhbmdlID09PSBudWxsKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlID0ge1xuICAgICAgICAgIG1pbjogZWxlbWVudFtheGlzXSxcbiAgICAgICAgICBtYXg6IGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBncm91cCdzIHJhbmdlIGFmdGVyIGNlbnRlcmluZyB0aGUgcmFuZ2UgZWxlbWVudHNcbiAgICAgIHVwZGF0ZVJhbmdlKGdyb3VwLCBlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGlmIChpZHggJiYgaWR4ICE9PSBncm91cHMubGVuZ3RoIC0gMSkge1xuICAgICAgZ3JvdXBzU2l6ZSArPSByYW5nZURpZmYoZ3JvdXAucmFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgc3BhY2VJbkJldHdlZW4gPSBNYXRoLmFicyhsYXN0R3JvdXAucmFuZ2UubWluIC0gZmlyc3RHcm91cC5yYW5nZS5tYXgpO1xuXG4gIG1hcmdpbiA9IE1hdGgucm91bmQoKHNwYWNlSW5CZXR3ZWVuIC0gZ3JvdXBzU2l6ZSkgLyAoZ3JvdXBzLmxlbmd0aCAtIDEpKTtcblxuICBpZiAobWFyZ2luIDwgZ3JvdXBzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JFYWNoKGdyb3VwcywgZnVuY3Rpb24oZ3JvdXAsIGdyb3VwSWR4KSB7XG4gICAgdmFyIGRlbHRhID0ge30sXG4gICAgICAgIHByZXZHcm91cDtcblxuICAgIGlmIChncm91cCA9PT0gZmlyc3RHcm91cCB8fCBncm91cCA9PT0gbGFzdEdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldkdyb3VwID0gZ3JvdXBzW2dyb3VwSWR4IC0gMV07XG5cbiAgICBncm91cC5yYW5nZS5tYXggPSAwO1xuXG4gICAgZm9yRWFjaChncm91cC5lbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaWR4KSB7XG4gICAgICBkZWx0YVtPRkZfQVhJU1theGlzXV0gPSAwO1xuICAgICAgZGVsdGFbYXhpc10gPSAocHJldkdyb3VwLnJhbmdlLm1heCAtIGVsZW1lbnRbYXhpc10pICsgbWFyZ2luO1xuXG4gICAgICBpZiAoZ3JvdXAucmFuZ2UubWluICE9PSBlbGVtZW50W2F4aXNdKSB7XG4gICAgICAgIGRlbHRhW2F4aXNdICs9IGVsZW1lbnRbYXhpc10gLSBncm91cC5yYW5nZS5taW47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWx0YVtheGlzXSkge1xuICAgICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoWyBlbGVtZW50IF0sIGRlbHRhLCBlbGVtZW50LnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGdyb3VwLnJhbmdlLm1heCA9IE1hdGgubWF4KGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl0sIGlkeCA/IGdyb3VwLnJhbmdlLm1heCA6IDApO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbn07XG4iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgbW92aW5nIG9mIHNoYXBlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5b3V0Q29ubmVjdGlvbkhhbmRsZXIobGF5b3V0ZXIsIGNhbnZhcykge1xuICB0aGlzLl9sYXlvdXRlciA9IGxheW91dGVyO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdsYXlvdXRlcicsICdjYW52YXMnIF07XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gIHZhciBvbGRXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICBhc3NpZ24oY29udGV4dCwge1xuICAgIG9sZFdheXBvaW50czogb2xkV2F5cG9pbnRzXG4gIH0pO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gdGhpcy5fbGF5b3V0ZXIubGF5b3V0Q29ubmVjdGlvbihjb25uZWN0aW9uLCBjb250ZXh0LmhpbnRzKTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBtb3Zpbmcgb2YgY29ubmVjdGlvbnMuXG4gKlxuICogVGhlIGhhbmRsZXIgZGlmZmVycyBmcm9tIHRoZSBsYXlvdXQgY29ubmVjdGlvbiBoYW5kbGVyIGluIGEgc2Vuc2VcbiAqIHRoYXQgaXQgcHJlc2VydmVzIHRoZSBjb25uZWN0aW9uIGxheW91dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUNvbm5lY3Rpb25IYW5kbGVyKCkgeyB9XG5cblxuTW92ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gIHZhciBuZXdQYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBjb25uZWN0aW9uLnBhcmVudCxcbiAgICAgIG5ld1BhcmVudEluZGV4ID0gY29udGV4dC5uZXdQYXJlbnRJbmRleCxcbiAgICAgIG9sZFBhcmVudCA9IGNvbm5lY3Rpb24ucGFyZW50O1xuXG4gIC8vIHNhdmUgb2xkIHBhcmVudCBpbiBjb250ZXh0XG4gIGNvbnRleHQub2xkUGFyZW50ID0gb2xkUGFyZW50O1xuICBjb250ZXh0Lm9sZFBhcmVudEluZGV4ID0gY29sbGVjdGlvblJlbW92ZShvbGRQYXJlbnQuY2hpbGRyZW4sIGNvbm5lY3Rpb24pO1xuXG4gIC8vIGFkZCB0byBuZXcgcGFyZW50IGF0IHBvc2l0aW9uXG4gIGNvbGxlY3Rpb25BZGQobmV3UGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uLCBuZXdQYXJlbnRJbmRleCk7XG5cbiAgLy8gdXBkYXRlIHBhcmVudFxuICBjb25uZWN0aW9uLnBhcmVudCA9IG5ld1BhcmVudDtcblxuICAvLyB1cGRhdGUgd2F5cG9pbnQgcG9zaXRpb25zXG4gIGZvckVhY2goY29ubmVjdGlvbi53YXlwb2ludHMsIGZ1bmN0aW9uKHApIHtcbiAgICBwLnggKz0gZGVsdGEueDtcbiAgICBwLnkgKz0gZGVsdGEueTtcblxuICAgIGlmIChwLm9yaWdpbmFsKSB7XG4gICAgICBwLm9yaWdpbmFsLnggKz0gZGVsdGEueDtcbiAgICAgIHAub3JpZ2luYWwueSArPSBkZWx0YS55O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5Nb3ZlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1BhcmVudCA9IGNvbm5lY3Rpb24ucGFyZW50LFxuICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQsXG4gICAgICBvbGRQYXJlbnRJbmRleCA9IGNvbnRleHQub2xkUGFyZW50SW5kZXgsXG4gICAgICBkZWx0YSA9IGNvbnRleHQuZGVsdGE7XG5cbiAgLy8gcmVtb3ZlIGZyb20gbmV3UGFyZW50XG4gIGNvbGxlY3Rpb25SZW1vdmUobmV3UGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uKTtcblxuICAvLyByZXN0b3JlIHByZXZpb3VzIGxvY2F0aW9uIGluIG9sZCBwYXJlbnRcbiAgY29sbGVjdGlvbkFkZChvbGRQYXJlbnQuY2hpbGRyZW4sIGNvbm5lY3Rpb24sIG9sZFBhcmVudEluZGV4KTtcblxuICAvLyByZXN0b3JlIHBhcmVudFxuICBjb25uZWN0aW9uLnBhcmVudCA9IG9sZFBhcmVudDtcblxuICAvLyByZXZlcnQgdG8gb2xkIHdheXBvaW50IHBvc2l0aW9uc1xuICBmb3JFYWNoKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCBmdW5jdGlvbihwKSB7XG4gICAgcC54IC09IGRlbHRhLng7XG4gICAgcC55IC09IGRlbHRhLnk7XG5cbiAgICBpZiAocC5vcmlnaW5hbCkge1xuICAgICAgcC5vcmlnaW5hbC54IC09IGRlbHRhLng7XG4gICAgICBwLm9yaWdpbmFsLnkgLT0gZGVsdGEueTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTsiLCJpbXBvcnQgTW92ZUhlbHBlciBmcm9tICcuL2hlbHBlci9Nb3ZlSGVscGVyJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBtb3Zpbmcgb2Ygc2hhcGVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlRWxlbWVudHNIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX2hlbHBlciA9IG5ldyBNb3ZlSGVscGVyKG1vZGVsaW5nKTtcbn1cblxuTW92ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cbk1vdmVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIGNvbnRleHQuY2xvc3VyZSA9IHRoaXMuX2hlbHBlci5nZXRDbG9zdXJlKGNvbnRleHQuc2hhcGVzKTtcbn07XG5cbk1vdmVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICBwcmltYXJ5U2hhcGU7XG5cbiAgaWYgKGhpbnRzICYmIGhpbnRzLnByaW1hcnlTaGFwZSkge1xuICAgIHByaW1hcnlTaGFwZSA9IGhpbnRzLnByaW1hcnlTaGFwZTtcbiAgICBoaW50cy5vbGRQYXJlbnQgPSBwcmltYXJ5U2hhcGUucGFyZW50O1xuICB9XG5cbiAgdGhpcy5faGVscGVyLm1vdmVDbG9zdXJlKFxuICAgIGNvbnRleHQuY2xvc3VyZSxcbiAgICBjb250ZXh0LmRlbHRhLFxuICAgIGNvbnRleHQubmV3UGFyZW50LFxuICAgIGNvbnRleHQubmV3SG9zdCxcbiAgICBwcmltYXJ5U2hhcGVcbiAgKTtcbn07IiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBwaWNrXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IE1vdmVIZWxwZXIgZnJvbSAnLi9oZWxwZXIvTW92ZUhlbHBlcic7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgZ2V0TW92ZWRTb3VyY2VBbmNob3IsXG4gIGdldE1vdmVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vaGVscGVyL0FuY2hvcnNIZWxwZXInO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIG1vdmluZyBvZiBzaGFwZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVTaGFwZUhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcblxuICB0aGlzLl9oZWxwZXIgPSBuZXcgTW92ZUhlbHBlcihtb2RlbGluZyk7XG59XG5cbk1vdmVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbk1vdmVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgIG5ld1BhcmVudCA9IGNvbnRleHQubmV3UGFyZW50IHx8IHNoYXBlLnBhcmVudCxcbiAgICAgIG5ld1BhcmVudEluZGV4ID0gY29udGV4dC5uZXdQYXJlbnRJbmRleCxcbiAgICAgIG9sZFBhcmVudCA9IHNoYXBlLnBhcmVudDtcblxuICBjb250ZXh0Lm9sZEJvdW5kcyA9IHBpY2soc2hhcGUsIFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnXSk7XG5cbiAgLy8gc2F2ZSBvbGQgcGFyZW50IGluIGNvbnRleHRcbiAgY29udGV4dC5vbGRQYXJlbnQgPSBvbGRQYXJlbnQ7XG4gIGNvbnRleHQub2xkUGFyZW50SW5kZXggPSBjb2xsZWN0aW9uUmVtb3ZlKG9sZFBhcmVudC5jaGlsZHJlbiwgc2hhcGUpO1xuXG4gIC8vIGFkZCB0byBuZXcgcGFyZW50IGF0IHBvc2l0aW9uXG4gIGNvbGxlY3Rpb25BZGQobmV3UGFyZW50LmNoaWxkcmVuLCBzaGFwZSwgbmV3UGFyZW50SW5kZXgpO1xuXG4gIC8vIHVwZGF0ZSBzaGFwZSBwYXJlbnQgKyBwb3NpdGlvblxuICBhc3NpZ24oc2hhcGUsIHtcbiAgICBwYXJlbnQ6IG5ld1BhcmVudCxcbiAgICB4OiBzaGFwZS54ICsgZGVsdGEueCxcbiAgICB5OiBzaGFwZS55ICsgZGVsdGEueVxuICB9KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzO1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIGlmIChoaW50cy5sYXlvdXQgIT09IGZhbHNlKSB7XG5cbiAgICBmb3JFYWNoKHNoYXBlLmluY29taW5nLCBmdW5jdGlvbihjKSB7XG4gICAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgICAgY29ubmVjdGlvbkVuZDogZ2V0TW92ZWRUYXJnZXRBbmNob3IoYywgc2hhcGUsIGRlbHRhKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjKSB7XG4gICAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXJ0OiBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjLCBzaGFwZSwgZGVsdGEpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoaW50cy5yZWN1cnNlICE9PSBmYWxzZSkge1xuICAgIHRoaXMubW92ZUNoaWxkcmVuKGNvbnRleHQpO1xuICB9XG59O1xuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgb2xkUGFyZW50SW5kZXggPSBjb250ZXh0Lm9sZFBhcmVudEluZGV4LFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gIC8vIHJlc3RvcmUgcHJldmlvdXMgbG9jYXRpb24gaW4gb2xkIHBhcmVudFxuICBjb2xsZWN0aW9uQWRkKG9sZFBhcmVudC5jaGlsZHJlbiwgc2hhcGUsIG9sZFBhcmVudEluZGV4KTtcblxuICAvLyByZXZlcnQgdG8gb2xkIHBvc2l0aW9uIGFuZCBwYXJlbnRcbiAgYXNzaWduKHNoYXBlLCB7XG4gICAgcGFyZW50OiBvbGRQYXJlbnQsXG4gICAgeDogc2hhcGUueCAtIGRlbHRhLngsXG4gICAgeTogc2hhcGUueSAtIGRlbHRhLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuTW92ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUubW92ZUNoaWxkcmVuID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgdGhpcy5faGVscGVyLm1vdmVSZWN1cnNpdmUoc2hhcGUuY2hpbGRyZW4sIGRlbHRhLCBudWxsKTtcbn07XG5cbk1vdmVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmdldE5ld1BhcmVudCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIGNvbnRleHQubmV3UGFyZW50IHx8IGNvbnRleHQuc2hhcGUucGFyZW50O1xufTtcbiIsImltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBSZWNvbm5lY3QgY29ubmVjdGlvbiBoYW5kbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgIG5ld1RhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0LFxuICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGRvY2tpbmdPclBvaW50cyA9IGNvbnRleHQuZG9ja2luZ09yUG9pbnRzO1xuXG4gIGlmICghbmV3U291cmNlICYmICFuZXdUYXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld1NvdXJjZSBvciBuZXdUYXJnZXQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGRvY2tpbmdPclBvaW50cykpIHtcbiAgICBjb250ZXh0Lm9sZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gZG9ja2luZ09yUG9pbnRzO1xuICB9XG5cbiAgaWYgKG5ld1NvdXJjZSkge1xuICAgIGNvbnRleHQub2xkU291cmNlID0gY29ubmVjdGlvbi5zb3VyY2U7XG4gICAgY29ubmVjdGlvbi5zb3VyY2UgPSBuZXdTb3VyY2U7XG4gIH1cblxuICBpZiAobmV3VGFyZ2V0KSB7XG4gICAgY29udGV4dC5vbGRUYXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldDtcbiAgICBjb25uZWN0aW9uLnRhcmdldCA9IG5ld1RhcmdldDtcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgbmV3VGFyZ2V0ID0gY29udGV4dC5uZXdUYXJnZXQsXG4gICAgICBkb2NraW5nT3JQb2ludHMgPSBjb250ZXh0LmRvY2tpbmdPclBvaW50cyxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICB2YXIgbGF5b3V0Q29ubmVjdGlvbkhpbnRzID0ge307XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25TdGFydCkge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQ7XG4gIH1cblxuICBpZiAoaGludHMuY29ubmVjdGlvbkVuZCkge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uRW5kID0gaGludHMuY29ubmVjdGlvbkVuZDtcbiAgfVxuXG4gIGlmIChoaW50cy5sYXlvdXRDb25uZWN0aW9uID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXdTb3VyY2UgJiYgKCFuZXdUYXJnZXQgfHwgaGludHMuZG9ja2luZyA9PT0gJ3NvdXJjZScpKSB7XG4gICAgbGF5b3V0Q29ubmVjdGlvbkhpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uU3RhcnRcbiAgICAgIHx8IGdldERvY2tpbmcoaXNBcnJheShkb2NraW5nT3JQb2ludHMpID8gZG9ja2luZ09yUG9pbnRzWyAwIF0gOiBkb2NraW5nT3JQb2ludHMpO1xuICB9XG5cbiAgaWYgKG5ld1RhcmdldCAmJiAoIW5ld1NvdXJjZSB8fCBoaW50cy5kb2NraW5nID09PSAndGFyZ2V0JykpIHtcbiAgICBsYXlvdXRDb25uZWN0aW9uSGludHMuY29ubmVjdGlvbkVuZCA9IGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uRW5kXG4gICAgICB8fCBnZXREb2NraW5nKGlzQXJyYXkoZG9ja2luZ09yUG9pbnRzKSA/IGRvY2tpbmdPclBvaW50c1sgZG9ja2luZ09yUG9pbnRzLmxlbmd0aCAtIDEgXSA6IGRvY2tpbmdPclBvaW50cyk7XG4gIH1cblxuICBpZiAoaGludHMubmV3V2F5cG9pbnRzKSB7XG4gICAgbGF5b3V0Q29ubmVjdGlvbkhpbnRzLndheXBvaW50cyA9IGhpbnRzLm5ld1dheXBvaW50cztcbiAgfVxuXG4gIHRoaXMuX21vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgbGF5b3V0Q29ubmVjdGlvbkhpbnRzKTtcbn07XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBvbGRTb3VyY2UgPSBjb250ZXh0Lm9sZFNvdXJjZSxcbiAgICAgIG9sZFRhcmdldCA9IGNvbnRleHQub2xkVGFyZ2V0LFxuICAgICAgb2xkV2F5cG9pbnRzID0gY29udGV4dC5vbGRXYXlwb2ludHMsXG4gICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gIGlmIChvbGRTb3VyY2UpIHtcbiAgICBjb25uZWN0aW9uLnNvdXJjZSA9IG9sZFNvdXJjZTtcbiAgfVxuXG4gIGlmIChvbGRUYXJnZXQpIHtcbiAgICBjb25uZWN0aW9uLnRhcmdldCA9IG9sZFRhcmdldDtcbiAgfVxuXG4gIGlmIChvbGRXYXlwb2ludHMpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IG9sZFdheXBvaW50cztcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREb2NraW5nKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn0iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRSZXNpemVkU291cmNlQW5jaG9yLFxuICBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vaGVscGVyL0FuY2hvcnNIZWxwZXInO1xuXG4vKipcbiAqIFJlcGxhY2Ugc2hhcGUgYnkgYWRkaW5nIG5ldyBzaGFwZSBhbmQgcmVtb3Zpbmcgb2xkIHNoYXBlLiBJbmNvbWluZyBhbmQgb3V0Z29pbmcgY29ubmVjdGlvbnMgd2lsbFxuICogYmUga2VwdCBpZiBwb3NzaWJsZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlU2hhcGVIYW5kbGVyKG1vZGVsaW5nLCBydWxlcykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xufVxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycsICdydWxlcycgXTtcblxuXG4vKipcbiAqIEFkZCBuZXcgc2hhcGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBjb250ZXh0Lm9sZFNoYXBlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5uZXdEYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dC5uZXdEYXRhLnR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb250ZXh0Lm5ld0RhdGEueFxuICogQHBhcmFtIHtudW1iZXJ9IGNvbnRleHQubmV3RGF0YS55XG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICovXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgcnVsZXMgPSB0aGlzLl9ydWxlcztcblxuICB2YXIgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgbmV3RGF0YSA9IGNvbnRleHQubmV3RGF0YSxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgIG5ld1NoYXBlO1xuXG4gIGZ1bmN0aW9uIGNhblJlY29ubmVjdChzb3VyY2UsIHRhcmdldCwgY29ubmVjdGlvbikge1xuICAgIHJldHVybiBydWxlcy5hbGxvd2VkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIHtcbiAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuICAvLyAoMSkgYWRkIG5ldyBzaGFwZSBhdCBnaXZlbiBwb3NpdGlvblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogbmV3RGF0YS54LFxuICAgIHk6IG5ld0RhdGEueVxuICB9O1xuXG4gIHZhciBvbGRCb3VuZHMgPSB7XG4gICAgeDogb2xkU2hhcGUueCxcbiAgICB5OiBvbGRTaGFwZS55LFxuICAgIHdpZHRoOiBvbGRTaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IG9sZFNoYXBlLmhlaWdodFxuICB9O1xuXG4gIG5ld1NoYXBlID0gY29udGV4dC5uZXdTaGFwZSA9XG4gICAgY29udGV4dC5uZXdTaGFwZSB8fFxuICAgIHNlbGYuY3JlYXRlU2hhcGUobmV3RGF0YSwgcG9zaXRpb24sIG9sZFNoYXBlLnBhcmVudCwgaGludHMpO1xuXG4gIC8vICgyKSB1cGRhdGUgaG9zdFxuICBpZiAob2xkU2hhcGUuaG9zdCkge1xuICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQobmV3U2hhcGUsIG9sZFNoYXBlLmhvc3QpO1xuICB9XG5cbiAgLy8gKDMpIGFkb3B0IGFsbCBjaGlsZHJlbiBmcm9tIG9sZCBzaGFwZVxuICB2YXIgY2hpbGRyZW47XG5cbiAgaWYgKGhpbnRzLm1vdmVDaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICBjaGlsZHJlbiA9IG9sZFNoYXBlLmNoaWxkcmVuLnNsaWNlKCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoY2hpbGRyZW4sIHsgeDogMCwgeTogMCB9LCBuZXdTaGFwZSwgaGludHMpO1xuICB9XG5cbiAgLy8gKDQpIHJlY29ubmVjdCBjb25uZWN0aW9ucyB0byBuZXcgc2hhcGUgaWYgcG9zc2libGVcbiAgdmFyIGluY29taW5nID0gb2xkU2hhcGUuaW5jb21pbmcuc2xpY2UoKSxcbiAgICAgIG91dGdvaW5nID0gb2xkU2hhcGUub3V0Z29pbmcuc2xpY2UoKTtcblxuICBmb3JFYWNoKGluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICBhbGxvd2VkID0gY2FuUmVjb25uZWN0KHNvdXJjZSwgbmV3U2hhcGUsIGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgIHNlbGYucmVjb25uZWN0RW5kKFxuICAgICAgICBjb25uZWN0aW9uLCBuZXdTaGFwZSxcbiAgICAgICAgZ2V0UmVzaXplZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCBuZXdTaGFwZSwgb2xkQm91bmRzKSxcbiAgICAgICAgaGludHNcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBmb3JFYWNoKG91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBhbGxvd2VkID0gY2FuUmVjb25uZWN0KG5ld1NoYXBlLCB0YXJnZXQsIGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgIHNlbGYucmVjb25uZWN0U3RhcnQoXG4gICAgICAgIGNvbm5lY3Rpb24sIG5ld1NoYXBlLFxuICAgICAgICBnZXRSZXNpemVkU291cmNlQW5jaG9yKGNvbm5lY3Rpb24sIG5ld1NoYXBlLCBvbGRCb3VuZHMpLFxuICAgICAgICBoaW50c1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBvbGQgc2hhcGUuXG4gKi9cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlO1xuXG4gIHRoaXMuX21vZGVsaW5nLnJlbW92ZVNoYXBlKG9sZFNoYXBlKTtcbn07XG5cblxuUmVwbGFjZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHt9O1xuXG5cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHt9O1xuXG5cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIGhpbnRzKSB7XG4gIHJldHVybiB0aGlzLl9tb2RlbGluZy5jcmVhdGVTaGFwZShzaGFwZSwgcG9zaXRpb24sIHRhcmdldCwgaGludHMpO1xufTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZWNvbm5lY3RTdGFydCA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1NvdXJjZSwgZG9ja2luZ1BvaW50LCBoaW50cykge1xuICB0aGlzLl9tb2RlbGluZy5yZWNvbm5lY3RTdGFydChjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGRvY2tpbmdQb2ludCwgaGludHMpO1xufTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZWNvbm5lY3RFbmQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdUYXJnZXQsIGRvY2tpbmdQb2ludCwgaGludHMpIHtcbiAgdGhpcy5fbW9kZWxpbmcucmVjb25uZWN0RW5kKGNvbm5lY3Rpb24sIG5ld1RhcmdldCwgZG9ja2luZ1BvaW50LCBoaW50cyk7XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0UmVzaXplZFNvdXJjZUFuY2hvcixcbiAgZ2V0UmVzaXplZFRhcmdldEFuY2hvclxufSBmcm9tICcuL2hlbHBlci9BbmNob3JzSGVscGVyJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSByZXNpemluZyBvZiBzaGFwZXMuXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplU2hhcGVIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblJlc2l6ZVNoYXBlSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cbi8qKlxuICoge1xuICogICBzaGFwZTogey4uLi59XG4gKiAgIG5ld0JvdW5kczoge1xuICogICAgIHdpZHRoOiAgMjAsXG4gKiAgICAgaGVpZ2h0OiA0MCxcbiAqICAgICB4OiAgICAgICA1LFxuICogICAgIHk6ICAgICAgMTBcbiAqICAgfVxuICpcbiAqIH1cbiAqL1xuUmVzaXplU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHMsXG4gICAgICBtaW5Cb3VuZHMgPSBjb250ZXh0Lm1pbkJvdW5kcztcblxuICBpZiAobmV3Qm91bmRzLnggPT09IHVuZGVmaW5lZCB8fCBuZXdCb3VuZHMueSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBuZXdCb3VuZHMud2lkdGggPT09IHVuZGVmaW5lZCB8fCBuZXdCb3VuZHMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld0JvdW5kcyBtdXN0IGhhdmUge3gsIHksIHdpZHRoLCBoZWlnaHR9IHByb3BlcnRpZXMnKTtcbiAgfVxuXG4gIGlmIChtaW5Cb3VuZHMgJiYgKG5ld0JvdW5kcy53aWR0aCA8IG1pbkJvdW5kcy53aWR0aFxuICAgIHx8IG5ld0JvdW5kcy5oZWlnaHQgPCBtaW5Cb3VuZHMuaGVpZ2h0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignd2lkdGggYW5kIGhlaWdodCBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pbmltdW0gaGVpZ2h0IGFuZCB3aWR0aCcpO1xuICB9IGVsc2UgaWYgKCFtaW5Cb3VuZHNcbiAgICAmJiBuZXdCb3VuZHMud2lkdGggPCAxMCB8fCBuZXdCb3VuZHMuaGVpZ2h0IDwgMTApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpZHRoIGFuZCBoZWlnaHQgY2Fubm90IGJlIGxlc3MgdGhhbiAxMHB4Jyk7XG4gIH1cblxuICAvLyBzYXZlIG9sZCBiYm94IGluIGNvbnRleHRcbiAgY29udGV4dC5vbGRCb3VuZHMgPSB7XG4gICAgd2lkdGg6ICBzaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodCxcbiAgICB4OiAgICAgIHNoYXBlLngsXG4gICAgeTogICAgICBzaGFwZS55XG4gIH07XG5cbiAgLy8gdXBkYXRlIHNoYXBlXG4gIGFzc2lnbihzaGFwZSwge1xuICAgIHdpZHRoOiAgbmV3Qm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogbmV3Qm91bmRzLmhlaWdodCxcbiAgICB4OiAgICAgIG5ld0JvdW5kcy54LFxuICAgIHk6ICAgICAgbmV3Qm91bmRzLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuUmVzaXplU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZEJvdW5kcyA9IGNvbnRleHQub2xkQm91bmRzLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gIGlmIChoaW50cy5sYXlvdXQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oYykge1xuICAgIG1vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oYywge1xuICAgICAgY29ubmVjdGlvbkVuZDogZ2V0UmVzaXplZFRhcmdldEFuY2hvcihjLCBzaGFwZSwgb2xkQm91bmRzKVxuICAgIH0pO1xuICB9KTtcblxuICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjKSB7XG4gICAgbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjLCB7XG4gICAgICBjb25uZWN0aW9uU3RhcnQ6IGdldFJlc2l6ZWRTb3VyY2VBbmNob3IoYywgc2hhcGUsIG9sZEJvdW5kcylcbiAgICB9KTtcbiAgfSk7XG5cbn07XG5cblJlc2l6ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRCb3VuZHMgPSBjb250ZXh0Lm9sZEJvdW5kcztcblxuICAvLyByZXN0b3JlIHByZXZpb3VzIGJib3hcbiAgYXNzaWduKHNoYXBlLCB7XG4gICAgd2lkdGg6ICBvbGRCb3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBvbGRCb3VuZHMuaGVpZ2h0LFxuICAgIHg6ICAgICAgb2xkQm91bmRzLngsXG4gICAgeTogICAgICBvbGRCb3VuZHMueVxuICB9KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRXYXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zLFxuICByZXNpemVCb3VuZHNcbn0gZnJvbSAnLi4vLi4vc3BhY2UtdG9vbC9TcGFjZVV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNb3ZlZFNvdXJjZUFuY2hvcixcbiAgZ2V0TW92ZWRUYXJnZXRBbmNob3IsXG4gIGdldFJlc2l6ZWRTb3VyY2VBbmNob3IsXG4gIGdldFJlc2l6ZWRUYXJnZXRBbmNob3Jcbn0gZnJvbSAnLi9oZWxwZXIvQW5jaG9yc0hlbHBlcic7XG5cblxuLyoqXG4gKiBBZGQgb3IgcmVtb3ZlIHNwYWNlIGJ5IG1vdmluZyBhbmQgcmVzaXppbmcgc2hhcGVzIGFuZCB1cGRhdGluZyBjb25uZWN0aW9uIHdheXBvaW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5TcGFjZVRvb2xIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgbW92aW5nU2hhcGVzID0gY29udGV4dC5tb3ZpbmdTaGFwZXMsXG4gICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXMsXG4gICAgICBzdGFydCA9IGNvbnRleHQuc3RhcnQsXG4gICAgICBvbGRCb3VuZHMgPSB7fTtcblxuICAvLyAoMSkgbW92ZSBzaGFwZXNcbiAgdGhpcy5tb3ZlU2hhcGVzKG1vdmluZ1NoYXBlcywgZGVsdGEpO1xuXG4gIC8vICgyYSkgc2F2ZSBvbGQgYm91bmRzIG9mIHJlc2l6ZWQgc2hhcGVzXG4gIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgb2xkQm91bmRzW3NoYXBlLmlkXSA9IGdldEJvdW5kcyhzaGFwZSk7XG4gIH0pO1xuXG4gIC8vICgyYikgcmVzaXplIHNoYXBlc1xuICB0aGlzLnJlc2l6ZVNoYXBlcyhyZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbik7XG5cbiAgLy8gKDMpIHVwZGF0ZSBjb25uZWN0aW9uIHdheXBvaW50c1xuICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMoXG4gICAgZ2V0V2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucyhtb3ZpbmdTaGFwZXMsIHJlc2l6aW5nU2hhcGVzKSxcbiAgICBkZWx0YSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3RhcnQsXG4gICAgbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzLFxuICAgIG9sZEJvdW5kc1xuICApO1xufTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKCkge307XG5TcGFjZVRvb2xIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbigpIHt9O1xuXG5TcGFjZVRvb2xIYW5kbGVyLnByb3RvdHlwZS5tb3ZlU2hhcGVzID0gZnVuY3Rpb24oc2hhcGVzLCBkZWx0YSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBzZWxmLl9tb2RlbGluZy5tb3ZlU2hhcGUoZWxlbWVudCwgZGVsdGEsIG51bGwsIHtcbiAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgbGF5b3V0OiBmYWxzZSxcbiAgICAgIHJlY3Vyc2U6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUucmVzaXplU2hhcGVzID0gZnVuY3Rpb24oc2hhcGVzLCBkZWx0YSwgZGlyZWN0aW9uKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICB2YXIgbmV3Qm91bmRzID0gcmVzaXplQm91bmRzKHNoYXBlLCBkaXJlY3Rpb24sIGRlbHRhKTtcblxuICAgIHNlbGYuX21vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMsIG51bGwsIHtcbiAgICAgIGF0dGFjaFN1cHBvcnQ6IGZhbHNlLFxuICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICBsYXlvdXQ6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgY29ubmVjdGlvbnMgd2F5cG9pbnRzIGFjY29yZGluZyB0byB0aGUgcnVsZXM6XG4gKiAgIDEuIEJvdGggc291cmNlIGFuZCB0YXJnZXQgYXJlIG1vdmVkL3Jlc2l6ZWQgPT4gbW92ZSB3YXlwb2ludHMgYnkgdGhlIGRlbHRhXG4gKiAgIDIuIE9ubHkgb25lIG9mIHNvdXJjZSBhbmQgdGFyZ2V0IGlzIG1vdmVkL3Jlc2l6ZWQgPT4gcmUtbGF5b3V0IGNvbm5lY3Rpb24gd2l0aCBtb3ZlZCBzdGFydC9lbmRcbiAqL1xuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyA9IGZ1bmN0aW9uKFxuICAgIGNvbm5lY3Rpb25zLFxuICAgIGRlbHRhLFxuICAgIGRpcmVjdGlvbixcbiAgICBzdGFydCxcbiAgICBtb3ZpbmdTaGFwZXMsXG4gICAgcmVzaXppbmdTaGFwZXMsXG4gICAgb2xkQm91bmRzXG4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYWZmZWN0ZWRTaGFwZXMgPSBtb3ZpbmdTaGFwZXMuY29uY2F0KHJlc2l6aW5nU2hhcGVzKTtcblxuICBmb3JFYWNoKGNvbm5lY3Rpb25zLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29weVdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgICAgYXhpcyA9IGdldEF4aXNGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbiksXG4gICAgICAgIGxheW91dEhpbnRzID0ge1xuICAgICAgICAgIGxhYmVsQmVoYXZpb3I6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICBpZiAoaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHNvdXJjZSkgJiYgaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHRhcmdldCkpIHtcblxuICAgICAgLy8gbW92ZSB3YXlwb2ludHNcbiAgICAgIHdheXBvaW50cyA9IG1hcCh3YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XG4gICAgICAgIGlmIChzaG91bGRNb3ZlV2F5cG9pbnQod2F5cG9pbnQsIHN0YXJ0LCBkaXJlY3Rpb24pKSB7XG5cbiAgICAgICAgICAvLyBtb3ZlIHdheXBvaW50XG4gICAgICAgICAgd2F5cG9pbnRbIGF4aXMgXSA9IHdheXBvaW50WyBheGlzIF0gKyBkZWx0YVsgYXhpcyBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdheXBvaW50Lm9yaWdpbmFsICYmIHNob3VsZE1vdmVXYXlwb2ludCh3YXlwb2ludC5vcmlnaW5hbCwgc3RhcnQsIGRpcmVjdGlvbikpIHtcblxuICAgICAgICAgIC8vIG1vdmUgd2F5cG9pbnQgb3JpZ2luYWxcbiAgICAgICAgICB3YXlwb2ludC5vcmlnaW5hbFsgYXhpcyBdID0gd2F5cG9pbnQub3JpZ2luYWxbIGF4aXMgXSArIGRlbHRhWyBheGlzIF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2F5cG9pbnQ7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fbW9kZWxpbmcudXBkYXRlV2F5cG9pbnRzKGNvbm5lY3Rpb24sIHdheXBvaW50cywge1xuICAgICAgICBsYWJlbEJlaGF2aW9yOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlcyhhZmZlY3RlZFNoYXBlcywgc291cmNlKSB8fCBpbmNsdWRlcyhhZmZlY3RlZFNoYXBlcywgdGFyZ2V0KSkge1xuXG4gICAgICAvLyByZS1sYXlvdXQgY29ubmVjdGlvbiB3aXRoIG1vdmVkIHN0YXJ0L2VuZFxuICAgICAgaWYgKGluY2x1ZGVzKG1vdmluZ1NoYXBlcywgc291cmNlKSkge1xuICAgICAgICBsYXlvdXRIaW50cy5jb25uZWN0aW9uU3RhcnQgPSBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjb25uZWN0aW9uLCBzb3VyY2UsIGRlbHRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMobW92aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG4gICAgICAgIGxheW91dEhpbnRzLmNvbm5lY3Rpb25FbmQgPSBnZXRNb3ZlZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCB0YXJnZXQsIGRlbHRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMocmVzaXppbmdTaGFwZXMsIHNvdXJjZSkpIHtcbiAgICAgICAgbGF5b3V0SGludHMuY29ubmVjdGlvblN0YXJ0ID0gZ2V0UmVzaXplZFNvdXJjZUFuY2hvcihcbiAgICAgICAgICBjb25uZWN0aW9uLCBzb3VyY2UsIG9sZEJvdW5kc1tzb3VyY2UuaWRdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG4gICAgICAgIGxheW91dEhpbnRzLmNvbm5lY3Rpb25FbmQgPSBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yKFxuICAgICAgICAgIGNvbm5lY3Rpb24sIHRhcmdldCwgb2xkQm91bmRzW3RhcmdldC5pZF1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2VsZi5fbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjb25uZWN0aW9uLCBsYXlvdXRIaW50cyk7XG4gICAgfVxuICB9KTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNvcHlXYXlwb2ludCh3YXlwb2ludCkge1xuICByZXR1cm4gYXNzaWduKHt9LCB3YXlwb2ludCk7XG59XG5cbmZ1bmN0aW9uIGNvcHlXYXlwb2ludHMoY29ubmVjdGlvbikge1xuICByZXR1cm4gbWFwKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuXG4gICAgd2F5cG9pbnQgPSBjb3B5V2F5cG9pbnQod2F5cG9pbnQpO1xuXG4gICAgaWYgKHdheXBvaW50Lm9yaWdpbmFsKSB7XG4gICAgICB3YXlwb2ludC5vcmlnaW5hbCA9IGNvcHlXYXlwb2ludCh3YXlwb2ludC5vcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdheXBvaW50O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QXhpc0Zyb21EaXJlY3Rpb24oZGlyZWN0aW9uKSB7XG4gIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gIGNhc2UgJ24nOlxuICAgIHJldHVybiAneSc7XG4gIGNhc2UgJ3cnOlxuICAgIHJldHVybiAneCc7XG4gIGNhc2UgJ3MnOlxuICAgIHJldHVybiAneSc7XG4gIGNhc2UgJ2UnOlxuICAgIHJldHVybiAneCc7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkTW92ZVdheXBvaW50KHdheXBvaW50LCBzdGFydCwgZGlyZWN0aW9uKSB7XG4gIHZhciByZWxldmFudEF4aXMgPSBnZXRBeGlzRnJvbURpcmVjdGlvbihkaXJlY3Rpb24pO1xuXG4gIGlmICgvZXxzLy50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRbIHJlbGV2YW50QXhpcyBdID4gc3RhcnQ7XG4gIH0gZWxzZSBpZiAoL258dy8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgcmV0dXJuIHdheXBvaW50WyByZWxldmFudEF4aXMgXSA8IHN0YXJ0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRzKHNoYXBlKSB7XG4gIHJldHVybiB7XG4gICAgeDogc2hhcGUueCxcbiAgICB5OiBzaGFwZS55LFxuICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0LFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aFxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCB0b2dnbGVzIHRoZSBjb2xsYXBzZWQgc3RhdGUgb2YgYW4gZWxlbWVudFxuICogYW5kIHRoZSB2aXNpYmlsaXR5IG9mIGFsbCBpdHMgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cblRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBjaGlsZHJlbiA9IHNoYXBlLmNoaWxkcmVuO1xuXG4gIC8vIHJlY3Vyc2l2ZWx5IHJlbWVtYmVyIHByZXZpb3VzIHZpc2liaWxpdHkgb2YgY2hpbGRyZW5cbiAgY29udGV4dC5vbGRDaGlsZHJlblZpc2liaWxpdHkgPSBnZXRFbGVtZW50c1Zpc2liaWxpdHlSZWN1cnNpdmUoY2hpbGRyZW4pO1xuXG4gIC8vIHRvZ2dsZSBzdGF0ZVxuICBzaGFwZS5jb2xsYXBzZWQgPSAhc2hhcGUuY29sbGFwc2VkO1xuXG4gIC8vIHJlY3Vyc2l2ZWx5IGhpZGUvc2hvdyBjaGlsZHJlblxuICB2YXIgcmVzdWx0ID0gc2V0SGlkZGVuUmVjdXJzaXZlKGNoaWxkcmVuLCBzaGFwZS5jb2xsYXBzZWQpO1xuXG4gIHJldHVybiBbc2hhcGVdLmNvbmNhdChyZXN1bHQpO1xufTtcblxuXG5Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRDaGlsZHJlblZpc2liaWxpdHkgPSBjb250ZXh0Lm9sZENoaWxkcmVuVmlzaWJpbGl0eTtcblxuICB2YXIgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbjtcblxuICAvLyByZWN1cnNpdmVseSBzZXQgb2xkIHZpc2FiaWxpdHkgb2YgY2hpbGRyZW5cbiAgdmFyIHJlc3VsdCA9IHJlc3RvcmVWaXNpYmlsaXR5UmVjdXJzaXZlKGNoaWxkcmVuLCBvbGRDaGlsZHJlblZpc2liaWxpdHkpO1xuXG4gIC8vIHJldG9nZ2xlIHN0YXRlXG4gIHNoYXBlLmNvbGxhcHNlZCA9ICFzaGFwZS5jb2xsYXBzZWQ7XG5cbiAgcmV0dXJuIFtzaGFwZV0uY29uY2F0KHJlc3VsdCk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiBhIG1hcCB7IGVsZW1lbnRJZCAtPiBoaWRkZW5TdGF0ZX0uXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudHNWaXNpYmlsaXR5UmVjdXJzaXZlKGVsZW1lbnRzKSB7XG5cbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXN1bHRbZWxlbWVudC5pZF0gPSBlbGVtZW50LmhpZGRlbjtcblxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICByZXN1bHQgPSBhc3NpZ24oe30sIHJlc3VsdCwgZ2V0RWxlbWVudHNWaXNpYmlsaXR5UmVjdXJzaXZlKGVsZW1lbnQuY2hpbGRyZW4pKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gc2V0SGlkZGVuUmVjdXJzaXZlKGVsZW1lbnRzLCBuZXdIaWRkZW4pIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgZWxlbWVudC5oaWRkZW4gPSBuZXdIaWRkZW47XG5cbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoc2V0SGlkZGVuUmVjdXJzaXZlKGVsZW1lbnQuY2hpbGRyZW4sIGVsZW1lbnQuY29sbGFwc2VkIHx8IG5ld0hpZGRlbikpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVzdG9yZVZpc2liaWxpdHlSZWN1cnNpdmUoZWxlbWVudHMsIGxhc3RTdGF0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50LmhpZGRlbiA9IGxhc3RTdGF0ZVtlbGVtZW50LmlkXTtcblxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyZXN0b3JlVmlzaWJpbGl0eVJlY3Vyc2l2ZShlbGVtZW50LmNoaWxkcmVuLCBsYXN0U3RhdGUpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIGF0dGFjaGluZy9kZXRhY2hpbmcgb2Ygc2hhcGVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVBdHRhY2htZW50SGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5VcGRhdGVBdHRhY2htZW50SGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblxuVXBkYXRlQXR0YWNobWVudEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0LFxuICAgICAgb2xkSG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgLy8gKDApIGRldGFjaCBmcm9tIG9sZCBob3N0XG4gIGNvbnRleHQub2xkSG9zdCA9IG9sZEhvc3Q7XG4gIGNvbnRleHQuYXR0YWNoZXJJZHggPSByZW1vdmVBdHRhY2hlcihvbGRIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDEpIGF0dGFjaCB0byBuZXcgaG9zdFxuICBhZGRBdHRhY2hlcihuZXdIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDIpIHVwZGF0ZSBob3N0XG4gIHNoYXBlLmhvc3QgPSBuZXdIb3N0O1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cblVwZGF0ZUF0dGFjaG1lbnRIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0LFxuICAgICAgb2xkSG9zdCA9IGNvbnRleHQub2xkSG9zdCxcbiAgICAgIGF0dGFjaGVySWR4ID0gY29udGV4dC5hdHRhY2hlcklkeDtcblxuICAvLyAoMikgdXBkYXRlIGhvc3RcbiAgc2hhcGUuaG9zdCA9IG9sZEhvc3Q7XG5cbiAgLy8gKDEpIGF0dGFjaCB0byBuZXcgaG9zdFxuICByZW1vdmVBdHRhY2hlcihuZXdIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDApIGRldGFjaCBmcm9tIG9sZCBob3N0XG4gIGFkZEF0dGFjaGVyKG9sZEhvc3QsIHNoYXBlLCBhdHRhY2hlcklkeCk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuXG5mdW5jdGlvbiByZW1vdmVBdHRhY2hlcihob3N0LCBhdHRhY2hlcikge1xuXG4gIC8vIHJlbW92ZSBhdHRhY2hlciBmcm9tIGhvc3RcbiAgcmV0dXJuIGNvbGxlY3Rpb25SZW1vdmUoaG9zdCAmJiBob3N0LmF0dGFjaGVycywgYXR0YWNoZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRhY2hlcihob3N0LCBhdHRhY2hlciwgaWR4KSB7XG5cbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGF0dGFjaGVycyA9IGhvc3QuYXR0YWNoZXJzO1xuXG4gIGlmICghYXR0YWNoZXJzKSB7XG4gICAgaG9zdC5hdHRhY2hlcnMgPSBhdHRhY2hlcnMgPSBbXTtcbiAgfVxuXG4gIGNvbGxlY3Rpb25BZGQoYXR0YWNoZXJzLCBhdHRhY2hlciwgaWR4KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZVdheXBvaW50c0hhbmRsZXIoKSB7IH1cblxuVXBkYXRlV2F5cG9pbnRzSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1dheXBvaW50cyA9IGNvbnRleHQubmV3V2F5cG9pbnRzO1xuXG4gIGNvbnRleHQub2xkV2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5VcGRhdGVXYXlwb2ludHNIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBvbGRXYXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuICBjb25uZWN0aW9uLndheXBvaW50cyA9IG9sZFdheXBvaW50cztcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07IiwiaW1wb3J0IHtcbiAgZ2V0TmV3QXR0YWNoUG9pbnRcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbC9BdHRhY2hVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnLi4vLi4vLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIG1hcFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2l6ZWRTb3VyY2VBbmNob3IoY29ubmVjdGlvbiwgc2hhcGUsIG9sZEJvdW5kcykge1xuXG4gIHZhciB3YXlwb2ludHMgPSBzYWZlR2V0V2F5cG9pbnRzKGNvbm5lY3Rpb24pLFxuICAgICAgd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzID0gZ2V0V2F5cG9pbnRzSW5zaWRlQm91bmRzKHdheXBvaW50cywgc2hhcGUpLFxuICAgICAgb2xkQW5jaG9yID0gd2F5cG9pbnRzWzBdO1xuXG4gIC8vIG5ldyBhbmNob3IgaXMgdGhlIGxhc3Qgd2F5cG9pbnQgZW5jbG9zZWQgYmUgcmVzaXplZCBzb3VyY2VcbiAgaWYgKHdheXBvaW50c0luc2lkZU5ld0JvdW5kcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzWyB3YXlwb2ludHNJbnNpZGVOZXdCb3VuZHMubGVuZ3RoIC0gMSBdO1xuICB9XG5cbiAgcmV0dXJuIGdldE5ld0F0dGFjaFBvaW50KG9sZEFuY2hvci5vcmlnaW5hbCB8fCBvbGRBbmNob3IsIG9sZEJvdW5kcywgc2hhcGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yKGNvbm5lY3Rpb24sIHNoYXBlLCBvbGRCb3VuZHMpIHtcblxuICB2YXIgd2F5cG9pbnRzID0gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgIHdheXBvaW50c0luc2lkZU5ld0JvdW5kcyA9IGdldFdheXBvaW50c0luc2lkZUJvdW5kcyh3YXlwb2ludHMsIHNoYXBlKSxcbiAgICAgIG9sZEFuY2hvciA9IHdheXBvaW50c1t3YXlwb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgLy8gbmV3IGFuY2hvciBpcyB0aGUgZmlyc3Qgd2F5cG9pbnQgZW5jbG9zZWQgYmUgcmVzaXplZCB0YXJnZXRcbiAgaWYgKHdheXBvaW50c0luc2lkZU5ld0JvdW5kcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzWyAwIF07XG4gIH1cblxuICByZXR1cm4gZ2V0TmV3QXR0YWNoUG9pbnQob2xkQW5jaG9yLm9yaWdpbmFsIHx8IG9sZEFuY2hvciwgb2xkQm91bmRzLCBzaGFwZSk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vdmVkU291cmNlQW5jaG9yKGNvbm5lY3Rpb24sIHNvdXJjZSwgbW92ZURlbHRhKSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IHNhZmVHZXRXYXlwb2ludHMoY29ubmVjdGlvbiksXG4gICAgICBvbGRCb3VuZHMgPSBzdWJ0cmFjdChzb3VyY2UsIG1vdmVEZWx0YSksXG4gICAgICBvbGRBbmNob3IgPSB3YXlwb2ludHNbIDAgXTtcblxuICByZXR1cm4gZ2V0TmV3QXR0YWNoUG9pbnQob2xkQW5jaG9yLm9yaWdpbmFsIHx8IG9sZEFuY2hvciwgb2xkQm91bmRzLCBzb3VyY2UpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb3ZlZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCB0YXJnZXQsIG1vdmVEZWx0YSkge1xuXG4gIHZhciB3YXlwb2ludHMgPSBzYWZlR2V0V2F5cG9pbnRzKGNvbm5lY3Rpb24pLFxuICAgICAgb2xkQm91bmRzID0gc3VidHJhY3QodGFyZ2V0LCBtb3ZlRGVsdGEpLFxuICAgICAgb2xkQW5jaG9yID0gd2F5cG9pbnRzWyB3YXlwb2ludHMubGVuZ3RoIC0gMSBdO1xuXG4gIHJldHVybiBnZXROZXdBdHRhY2hQb2ludChvbGRBbmNob3Iub3JpZ2luYWwgfHwgb2xkQW5jaG9yLCBvbGRCb3VuZHMsIHRhcmdldCk7XG59XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHN1YnRyYWN0KGJvdW5kcywgZGVsdGEpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBib3VuZHMueCAtIGRlbHRhLngsXG4gICAgeTogYm91bmRzLnkgLSBkZWx0YS55LFxuICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0XG4gIH07XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gd2F5cG9pbnRzIG9mIGdpdmVuIGNvbm5lY3Rpb247IHRocm93IGlmIG5vbiBleGlzdHMgKHNob3VsZCBub3QgaGFwcGVuISEpLlxuICpcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn1cbiAqL1xuZnVuY3Rpb24gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGlmICghd2F5cG9pbnRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29ubmVjdGlvbiMnICsgY29ubmVjdGlvbi5pZCArICc6IG5vIHdheXBvaW50cycpO1xuICB9XG5cbiAgcmV0dXJuIHdheXBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0V2F5cG9pbnRzSW5zaWRlQm91bmRzKHdheXBvaW50cywgYm91bmRzKSB7XG4gIHZhciBvcmlnaW5hbFdheXBvaW50cyA9IG1hcCh3YXlwb2ludHMsIGdldE9yaWdpbmFsKTtcblxuICByZXR1cm4gZmlsdGVyKG9yaWdpbmFsV2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuICAgIHJldHVybiBpc0luc2lkZUJvdW5kcyh3YXlwb2ludCwgYm91bmRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHBvaW50IGlzIGluc2lkZSBib3VuZHMsIGluY2wuIGVkZ2VzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0ge0JvdW5kc30gYm91bmRzXG4gKi9cbmZ1bmN0aW9uIGlzSW5zaWRlQm91bmRzKHBvaW50LCBib3VuZHMpIHtcbiAgcmV0dXJuIGdldE9yaWVudGF0aW9uKGJvdW5kcywgcG9pbnQsIDEpID09PSAnaW50ZXJzZWN0Jztcbn1cblxuZnVuY3Rpb24gZ2V0T3JpZ2luYWwocG9pbnQpIHtcbiAgcmV0dXJuIHBvaW50Lm9yaWdpbmFsIHx8IHBvaW50O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2xvc3VyZVxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL0VsZW1lbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlQ2xvc3VyZSgpIHtcblxuICB0aGlzLmFsbFNoYXBlcyA9IHt9O1xuICB0aGlzLmFsbENvbm5lY3Rpb25zID0ge307XG5cbiAgdGhpcy5lbmNsb3NlZEVsZW1lbnRzID0ge307XG4gIHRoaXMuZW5jbG9zZWRDb25uZWN0aW9ucyA9IHt9O1xuXG4gIHRoaXMudG9wTGV2ZWwgPSB7fTtcbn1cblxuXG5Nb3ZlQ2xvc3VyZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZWxlbWVudCwgaXNUb3BMZXZlbCkge1xuICByZXR1cm4gdGhpcy5hZGRBbGwoWyBlbGVtZW50IF0sIGlzVG9wTGV2ZWwpO1xufTtcblxuXG5Nb3ZlQ2xvc3VyZS5wcm90b3R5cGUuYWRkQWxsID0gZnVuY3Rpb24oZWxlbWVudHMsIGlzVG9wTGV2ZWwpIHtcblxuICB2YXIgbmV3Q2xvc3VyZSA9IGdldENsb3N1cmUoZWxlbWVudHMsICEhaXNUb3BMZXZlbCwgdGhpcyk7XG5cbiAgYXNzaWduKHRoaXMsIG5ld0Nsb3N1cmUpO1xuXG4gIHJldHVybiB0aGlzO1xufTsiLCJpbXBvcnQge1xuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0TW92ZWRTb3VyY2VBbmNob3IsXG4gIGdldE1vdmVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vQW5jaG9yc0hlbHBlcic7XG5cbmltcG9ydCBNb3ZlQ2xvc3VyZSBmcm9tICcuL01vdmVDbG9zdXJlJztcblxuXG4vKipcbiAqIEEgaGVscGVyIHRoYXQgaXMgYWJsZSB0byBjYXJyeSBvdXQgc2VyaWFsaXplZCBtb3ZlXG4gKiBvcGVyYXRpb25zIG9uIG11bHRpcGxlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVIZWxwZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuLyoqXG4gKiBNb3ZlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMgYW5kIGFsbCBjaGlsZHJlbiBieSB0aGUgZ2l2ZW4gZGVsdGEuXG4gKlxuICogVGhpcyBtb3ZlcyBhbGwgZW5jbG9zZWQgY29ubmVjdGlvbnMsIHRvbyBhbmQgbGF5b3V0cyBhbGwgYWZmZWN0ZWRcbiAqIGV4dGVybmFsIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSAge1BvaW50fSBkZWx0YVxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IG5ld1BhcmVudCBhcHBsaWVkIHRvIHRoZSBmaXJzdCBsZXZlbCBvZiBzaGFwZXNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGxpc3Qgb2YgdG91Y2hlZCBlbGVtZW50c1xuICovXG5Nb3ZlSGVscGVyLnByb3RvdHlwZS5tb3ZlUmVjdXJzaXZlID0gZnVuY3Rpb24oZWxlbWVudHMsIGRlbHRhLCBuZXdQYXJlbnQpIHtcbiAgaWYgKCFlbGVtZW50cykge1xuICAgIHJldHVybiBbXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQ2xvc3VyZSh0aGlzLmdldENsb3N1cmUoZWxlbWVudHMpLCBkZWx0YSwgbmV3UGFyZW50KTtcbiAgfVxufTtcblxuLyoqXG4gKiBNb3ZlIHRoZSBnaXZlbiBjbG9zdXJlIG9mIGVsbWVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY2xvc3VyZVxuICogQHBhcmFtIHtQb2ludH0gZGVsdGFcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtuZXdQYXJlbnRdXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbbmV3SG9zdF1cbiAqL1xuTW92ZUhlbHBlci5wcm90b3R5cGUubW92ZUNsb3N1cmUgPSBmdW5jdGlvbihjbG9zdXJlLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdIb3N0LCBwcmltYXJ5U2hhcGUpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIGFsbFNoYXBlcyA9IGNsb3N1cmUuYWxsU2hhcGVzLFxuICAgICAgYWxsQ29ubmVjdGlvbnMgPSBjbG9zdXJlLmFsbENvbm5lY3Rpb25zLFxuICAgICAgZW5jbG9zZWRDb25uZWN0aW9ucyA9IGNsb3N1cmUuZW5jbG9zZWRDb25uZWN0aW9ucyxcbiAgICAgIHRvcExldmVsID0gY2xvc3VyZS50b3BMZXZlbCxcbiAgICAgIGtlZXBQYXJlbnQgPSBmYWxzZTtcblxuICBpZiAocHJpbWFyeVNoYXBlICYmIHByaW1hcnlTaGFwZS5wYXJlbnQgPT09IG5ld1BhcmVudCkge1xuICAgIGtlZXBQYXJlbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gbW92ZSBhbGwgc2hhcGVzXG4gIGZvckVhY2goYWxsU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuXG4gICAgLy8gbW92ZSB0aGUgZWxlbWVudCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGRlbHRhXG4gICAgbW9kZWxpbmcubW92ZVNoYXBlKHNoYXBlLCBkZWx0YSwgdG9wTGV2ZWxbc2hhcGUuaWRdICYmICFrZWVwUGFyZW50ICYmIG5ld1BhcmVudCwge1xuICAgICAgcmVjdXJzZTogZmFsc2UsXG4gICAgICBsYXlvdXQ6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIG1vdmUgYWxsIGNoaWxkIGNvbm5lY3Rpb25zIC8gbGF5b3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zXG4gIGZvckVhY2goYWxsQ29ubmVjdGlvbnMsIGZ1bmN0aW9uKGMpIHtcblxuICAgIHZhciBzb3VyY2VNb3ZlZCA9ICEhYWxsU2hhcGVzW2Muc291cmNlLmlkXSxcbiAgICAgICAgdGFyZ2V0TW92ZWQgPSAhIWFsbFNoYXBlc1tjLnRhcmdldC5pZF07XG5cbiAgICBpZiAoZW5jbG9zZWRDb25uZWN0aW9uc1tjLmlkXSAmJiBzb3VyY2VNb3ZlZCAmJiB0YXJnZXRNb3ZlZCkge1xuICAgICAgbW9kZWxpbmcubW92ZUNvbm5lY3Rpb24oYywgZGVsdGEsIHRvcExldmVsW2MuaWRdICYmICFrZWVwUGFyZW50ICYmIG5ld1BhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oYywge1xuICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IHNvdXJjZU1vdmVkICYmIGdldE1vdmVkU291cmNlQW5jaG9yKGMsIGMuc291cmNlLCBkZWx0YSksXG4gICAgICAgIGNvbm5lY3Rpb25FbmQ6IHRhcmdldE1vdmVkICYmIGdldE1vdmVkVGFyZ2V0QW5jaG9yKGMsIGMudGFyZ2V0LCBkZWx0YSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNsb3N1cmUgZm9yIHRoZSBzZWxlY3RlZCBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEByZXR1cm4ge01vdmVDbG9zdXJlfSBjbG9zdXJlXG4gKi9cbk1vdmVIZWxwZXIucHJvdG90eXBlLmdldENsb3N1cmUgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICByZXR1cm4gbmV3IE1vdmVDbG9zdXJlKCkuYWRkQWxsKGVsZW1lbnRzLCB0cnVlKTtcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW91c2UoZXZlbnRCdXMpIHtcclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHRoaXMuX2xhc3RNb3ZlRXZlbnQgPSBudWxsO1xyXG5cclxuICBmdW5jdGlvbiBzZXRMYXN0TW92ZUV2ZW50KG1vdXNlbW92ZUV2ZW50KSB7XHJcbiAgICBzZWxmLl9sYXN0TW92ZUV2ZW50ID0gbW91c2Vtb3ZlRXZlbnQ7XHJcbiAgfVxyXG5cclxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc3ZnID0gc2VsZi5fc3ZnID0gY29udGV4dC5zdmc7XHJcblxyXG4gICAgc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHNldExhc3RNb3ZlRXZlbnQpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbignY2FudmFzLmRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgIHNlbGYuX2xhc3RNb3VzZUV2ZW50ID0gbnVsbDtcclxuXHJcbiAgICBzZWxmLl9zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc2V0TGFzdE1vdmVFdmVudCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbk1vdXNlLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcclxuXHJcbk1vdXNlLnByb3RvdHlwZS5nZXRMYXN0TW92ZUV2ZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIHRoaXMuX2xhc3RNb3ZlRXZlbnQgfHwgY3JlYXRlTW92ZUV2ZW50KDAsIDApO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW92ZUV2ZW50KHgsIHkpIHtcclxuICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xyXG5cclxuICB2YXIgc2NyZWVuWCA9IHgsXHJcbiAgICAgIHNjcmVlblkgPSB5LFxyXG4gICAgICBjbGllbnRYID0geCxcclxuICAgICAgY2xpZW50WSA9IHk7XHJcblxyXG4gIGlmIChldmVudC5pbml0TW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoXHJcbiAgICAgICdtb3VzZW1vdmUnLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB3aW5kb3csXHJcbiAgICAgIDAsXHJcbiAgICAgIHNjcmVlblgsXHJcbiAgICAgIHNjcmVlblksXHJcbiAgICAgIGNsaWVudFgsXHJcbiAgICAgIGNsaWVudFksXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICAwLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV2ZW50O1xyXG59IiwiaW1wb3J0IE1vdXNlIGZyb20gJy4vTW91c2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdtb3VzZScgXSxcbiAgbW91c2U6IFsgJ3R5cGUnLCBNb3VzZSBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaWx0ZXIsXG4gIGdyb3VwQnksXG4gIGlzT2JqZWN0XG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMCxcbiAgICBNRURJVU1fUFJJT1JJVFkgPSAxMjUwLFxuICAgIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xuXG5pbXBvcnQgeyBnZXRPcmlnaW5hbCBhcyBnZXRPcmlnaW5hbEV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbmZ1bmN0aW9uIG1pZChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC54ICsgcm91bmQoZWxlbWVudC53aWR0aCAvIDIpLFxuICAgIHk6IGVsZW1lbnQueSArIHJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMilcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IG1ha2VzIHNoYXBlcyBkcmFnZ2FibGUgLyBkcm9wcGFibGUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICogQHBhcmFtIHtSdWxlc30gcnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUV2ZW50cyhcbiAgICBldmVudEJ1cywgZHJhZ2dpbmcsIG1vZGVsaW5nLFxuICAgIHNlbGVjdGlvbiwgcnVsZXMpIHtcblxuICAvLyBydWxlc1xuXG4gIGZ1bmN0aW9uIGNhbk1vdmUoc2hhcGVzLCBkZWx0YSwgcG9zaXRpb24sIHRhcmdldCkge1xuXG4gICAgcmV0dXJuIHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLm1vdmUnLCB7XG4gICAgICBzaGFwZXM6IHNoYXBlcyxcbiAgICAgIGRlbHRhOiBkZWx0YSxcbiAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIG1vdmUgZXZlbnRzXG5cbiAgLy8gYXNzaWduIGEgaGlnaCBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXIgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50XG4gIC8vIG90aGVycyBtYXkgaG9vayB1cCBsYXRlciwgZS5nLiBhdCBkZWZhdWx0IHByaW9yaXR5IGFuZCBtb2RpZnlcbiAgLy8gdGhlIG1vdmUgZW52aXJvbm1lbnQuXG4gIC8vXG4gIC8vIFRoaXMgc2V0cyB1cCB0aGUgY29udGV4dCB3aXRoXG4gIC8vXG4gIC8vICogc2hhcGU6IHRoZSBwcmltYXJ5IHNoYXBlIGJlaW5nIG1vdmVkXG4gIC8vICogc2hhcGVzOiBhIGxpc3Qgb2Ygc2hhcGVzIHRvIGJlIG1vdmVkXG4gIC8vICogdmFsaWRhdGVkU2hhcGVzOiBhIGxpc3Qgb2Ygc2hhcGVzIHRoYXQgYXJlIGJlaW5nIGNoZWNrZWRcbiAgLy8gICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIHJ1bGVzIGJlZm9yZSBhbmQgZHVyaW5nIG1vdmVcbiAgLy9cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGV2ZW50LnNoYXBlLFxuICAgICAgICBzaGFwZXMgPSBzZWxlY3Rpb24uZ2V0KCkuc2xpY2UoKTtcblxuICAgIC8vIG1vdmUgb25seSBzaW5nbGUgc2hhcGUgaWYgdGhlIGRyYWdnZWQgZWxlbWVudFxuICAgIC8vIGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgIGlmIChzaGFwZXMuaW5kZXhPZihzaGFwZSkgPT09IC0xKSB7XG4gICAgICBzaGFwZXMgPSBbIHNoYXBlIF07XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHdlIHJlbW92ZSBuZXN0ZWQgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBhbmQgYWRkIGF0dGFjaGVycyBmb3IgYSBwcm9wZXIgZHJhZ2dlclxuICAgIHNoYXBlcyA9IHJlbW92ZU5lc3RlZChzaGFwZXMpO1xuXG4gICAgLy8gYXR0YWNoIHNoYXBlcyB0byBkcmFnIGNvbnRleHRcbiAgICBhc3NpZ24oY29udGV4dCwge1xuICAgICAgc2hhcGVzOiBzaGFwZXMsXG4gICAgICB2YWxpZGF0ZWRTaGFwZXM6IHNoYXBlcyxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0pO1xuICB9KTtcblxuXG4gIC8vIGFzc2lnbiBhIGhpZ2ggcHJpb3JpdHkgdG8gdGhpcyBoYW5kbGVyIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudFxuICAvLyBvdGhlcnMgbWF5IGhvb2sgdXAgbGF0ZXIsIGUuZy4gYXQgZGVmYXVsdCBwcmlvcml0eSBhbmQgbW9kaWZ5XG4gIC8vIHRoZSBtb3ZlIGVudmlyb25tZW50XG4gIC8vXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgTUVESVVNX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyxcbiAgICAgICAgY2FuRXhlY3V0ZTtcblxuICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5Nb3ZlKHZhbGlkYXRlZFNoYXBlcyk7XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBjYW4gbW92ZSB0aGUgZWxlbWVudHNcbiAgICBpZiAoIWNhbkV4ZWN1dGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFzc2lnbiBhIGxvdyBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXJcbiAgLy8gdG8gbGV0IG90aGVycyBtb2RpZnkgdGhlIG1vdmUgZXZlbnQgYmVmb3JlIHdlIHVwZGF0ZVxuICAvLyB0aGUgY29udGV4dFxuICAvL1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyxcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcixcbiAgICAgICAgZGVsdGEgPSB7IHg6IGV2ZW50LmR4LCB5OiBldmVudC5keSB9LFxuICAgICAgICBwb3NpdGlvbiA9IHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9LFxuICAgICAgICBjYW5FeGVjdXRlO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIGVsZW1lbnRzXG4gICAgY2FuRXhlY3V0ZSA9IGNhbk1vdmUodmFsaWRhdGVkU2hhcGVzLCBkZWx0YSwgcG9zaXRpb24sIGhvdmVyKTtcblxuICAgIGNvbnRleHQuZGVsdGEgPSBkZWx0YTtcbiAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5FeGVjdXRlO1xuXG4gICAgLy8gc2ltcGx5IGlnbm9yZSBtb3ZlIG92ZXJcbiAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gbnVsbCkge1xuICAgICAgY29udGV4dC50YXJnZXQgPSBudWxsO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dC50YXJnZXQgPSBob3ZlcjtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIHZhciBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGlzQXR0YWNoID0gY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzO1xuXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBkZWx0YXNcbiAgICAvLyAoaW1wb3J0YW50IHdoZW4gem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgIGRlbHRhLnggPSByb3VuZChkZWx0YS54KTtcbiAgICBkZWx0YS55ID0gcm91bmQoZGVsdGEueSk7XG5cbiAgICBpZiAoZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSB7XG5cbiAgICAgIC8vIGRpZG4ndCBtb3ZlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHNoYXBlcywgZGVsdGEsIGNvbnRleHQudGFyZ2V0LCB7XG4gICAgICBwcmltYXJ5U2hhcGU6IGNvbnRleHQuc2hhcGUsXG4gICAgICBhdHRhY2g6IGlzQXR0YWNoXG4gICAgfSk7XG4gIH0pO1xuXG5cbiAgLy8gbW92ZSBhY3RpdmF0aW9uXG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZ2V0T3JpZ2luYWxFdmVudChldmVudCk7XG5cbiAgICBpZiAoIW9yaWdpbmFsRXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzdXBwbHkgRE9NIG1vdXNlZG93biBldmVudCcpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydChvcmlnaW5hbEV2ZW50LCBldmVudC5lbGVtZW50KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG1vdmUuXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FjdGl2YXRlXVxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChldmVudCwgZWxlbWVudCwgYWN0aXZhdGUsIGNvbnRleHQpIHtcbiAgICBpZiAoaXNPYmplY3QoYWN0aXZhdGUpKSB7XG4gICAgICBjb250ZXh0ID0gYWN0aXZhdGU7XG4gICAgICBhY3RpdmF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBtb3ZlIGNvbm5lY3Rpb25zIG9yIHRoZSByb290IGVsZW1lbnRcbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMgfHwgIWVsZW1lbnQucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVBvaW50ID0gbWlkKGVsZW1lbnQpO1xuXG4gICAgZHJhZ2dpbmcuaW5pdChldmVudCwgcmVmZXJlbmNlUG9pbnQsICdzaGFwZS5tb3ZlJywge1xuICAgICAgY3Vyc29yOiAnZ3JhYmJpbmcnLFxuICAgICAgYXV0b0FjdGl2YXRlOiBhY3RpdmF0ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hhcGU6IGVsZW1lbnQsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQgfHwge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHdlJ3ZlIGhhbmRsZWQgdGhlIGV2ZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBBUElcblxuICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG59XG5cbk1vdmVFdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdydWxlcydcbl07XG5cblxuLyoqXG4gKiBSZXR1cm4gYSBmaWx0ZXJlZCBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbiAqIHRob3NlIG5lc3RlZCBpbnRvIG90aGVycy5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBmaWx0ZXJlZFxuICovXG5mdW5jdGlvbiByZW1vdmVOZXN0ZWQoZWxlbWVudHMpIHtcblxuICB2YXIgaWRzID0gZ3JvdXBCeShlbGVtZW50cywgJ2lkJyk7XG5cbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50KSkge1xuXG4gICAgICAvLyBwYXJlbnQgaW4gc2VsZWN0aW9uXG4gICAgICBpZiAoaWRzW2VsZW1lbnQuaWRdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1xuICBmbGF0dGVuLFxuICBmb3JFYWNoLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIGdyb3VwQnksXG4gIG1hcCxcbiAgbWF0Y2hQYXR0ZXJuLFxuICBzaXplXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgc2VsZkFuZEFsbENoaWxkcmVuXG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNDk5O1xuXG52YXIgTUFSS0VSX0RSQUdHSU5HID0gJ2Rqcy1kcmFnZ2luZycsXG4gICAgTUFSS0VSX09LID0gJ2Ryb3Atb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnZHJvcC1ub3Qtb2snLFxuICAgIE1BUktFUl9ORVdfUEFSRU5UID0gJ25ldy1wYXJlbnQnLFxuICAgIE1BUktFUl9BVFRBQ0ggPSAnYXR0YWNoLW9rJztcblxuXG4vKipcbiAqIFByb3ZpZGVzIHByZXZpZXdzIGZvciBtb3Zpbmcgc2hhcGVzIHdoZW4gbW92aW5nLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1N0eWxlc30gc3R5bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVQcmV2aWV3KFxuICAgIGV2ZW50QnVzLCBjYW52YXMsIHN0eWxlcywgcHJldmlld1N1cHBvcnQpIHtcblxuICBmdW5jdGlvbiBnZXRWaXN1YWxEcmFnU2hhcGVzKHNoYXBlcykge1xuICAgIHZhciBlbGVtZW50cyA9IGdldEFsbERyYWdnZWRFbGVtZW50cyhzaGFwZXMpO1xuXG4gICAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSByZW1vdmVFZGdlcyhlbGVtZW50cyk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsbERyYWdnZWRFbGVtZW50cyhzaGFwZXMpIHtcbiAgICB2YXIgYWxsU2hhcGVzID0gc2VsZkFuZEFsbENoaWxkcmVuKHNoYXBlcywgdHJ1ZSk7XG5cbiAgICB2YXIgYWxsQ29ubmVjdGlvbnMgPSBtYXAoYWxsU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcmV0dXJuIChzaGFwZS5pbmNvbWluZyB8fCBbXSkuY29uY2F0KHNoYXBlLm91dGdvaW5nIHx8IFtdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmbGF0dGVuKGFsbFNoYXBlcy5jb25jYXQoYWxsQ29ubmVjdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGRyb3AgbWFya2VyIG9uIGFuIGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBzZXRNYXJrZXIoZWxlbWVudCwgbWFya2VyKSB7XG5cbiAgICBbIE1BUktFUl9BVFRBQ0gsIE1BUktFUl9PSywgTUFSS0VSX05PVF9PSywgTUFSS0VSX05FV19QQVJFTlQgXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcblxuICAgICAgaWYgKG0gPT09IG1hcmtlcikge1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIG0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGVsZW1lbnQgZHJhZ2dhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkTWFya2VyXG4gICAqL1xuICBmdW5jdGlvbiBtYWtlRHJhZ2dhYmxlKGNvbnRleHQsIGVsZW1lbnQsIGFkZE1hcmtlcikge1xuXG4gICAgcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcihlbGVtZW50LCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICBpZiAoYWRkTWFya2VyKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuYWxsRHJhZ2dlZEVsZW1lbnRzKSB7XG4gICAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cyA9IFsgZWxlbWVudCBdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFzc2lnbiBhIGxvdyBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXJcbiAgLy8gdG8gbGV0IG90aGVycyBtb2RpZnkgdGhlIG1vdmUgY29udGV4dCBiZWZvcmVcbiAgLy8gd2UgZHJhdyB0aGluZ3NcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBkcmFnU2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGFsbERyYWdnZWRFbGVtZW50cyA9IGNvbnRleHQuYWxsRHJhZ2dlZEVsZW1lbnRzO1xuXG4gICAgdmFyIHZpc3VhbGx5RHJhZ2dlZFNoYXBlcyA9IGdldFZpc3VhbERyYWdTaGFwZXMoZHJhZ1NoYXBlcyk7XG5cbiAgICBpZiAoIWNvbnRleHQuZHJhZ0dyb3VwKSB7XG4gICAgICB2YXIgZHJhZ0dyb3VwID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgICAgIHN2Z0F0dHIoZHJhZ0dyb3VwLCBzdHlsZXMuY2xzKCdkanMtZHJhZy1ncm91cCcsIFsgJ25vLWV2ZW50cycgXSkpO1xuXG4gICAgICB2YXIgZGVmYXVsdExheWVyID0gY2FudmFzLmdldERlZmF1bHRMYXllcigpO1xuXG4gICAgICBzdmdBcHBlbmQoZGVmYXVsdExheWVyLCBkcmFnR3JvdXApO1xuXG4gICAgICBjb250ZXh0LmRyYWdHcm91cCA9IGRyYWdHcm91cDtcbiAgICB9XG5cbiAgICAvLyBhZGQgcHJldmlld3NcbiAgICB2aXN1YWxseURyYWdnZWRTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcihzaGFwZSwgY29udGV4dC5kcmFnR3JvdXApO1xuICAgIH0pO1xuXG4gICAgLy8gY2FjaGUgYWxsIGRyYWdnZWQgZWxlbWVudHMgLyBnZnhcbiAgICAvLyBzbyB0aGF0IHdlIGNhbiBxdWlja2x5IHVuZG8gdGhlaXIgc3RhdGUgY2hhbmdlcyBsYXRlclxuICAgIGlmICghYWxsRHJhZ2dlZEVsZW1lbnRzKSB7XG4gICAgICBhbGxEcmFnZ2VkRWxlbWVudHMgPSBnZXRBbGxEcmFnZ2VkRWxlbWVudHMoZHJhZ1NoYXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsbERyYWdnZWRFbGVtZW50cyA9IGZsYXR0ZW4oW1xuICAgICAgICBhbGxEcmFnZ2VkRWxlbWVudHMsXG4gICAgICAgIGdldEFsbERyYWdnZWRFbGVtZW50cyhkcmFnU2hhcGVzKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGRyYWdnaW5nIG1hcmtlclxuICAgIGZvckVhY2goYWxsRHJhZ2dlZEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGUsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cyA9IGFsbERyYWdnZWRFbGVtZW50cztcblxuICAgIC8vIGRldGVybWluZSwgaWYgYW55IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnRzIGhhdmUgZGlmZmVyZW50IHBhcmVudHNcbiAgICBjb250ZXh0LmRpZmZlcmVudFBhcmVudHMgPSBoYXZlRGlmZmVyZW50UGFyZW50cyhkcmFnU2hhcGVzKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgcGFyZW50ID0gY29udGV4dC5zaGFwZS5wYXJlbnQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGU7XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcpIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHQuY2FuRXhlY3V0ZSAmJiB0YXJnZXQgJiYgdGFyZ2V0LmlkICE9PSBwYXJlbnQuaWQpIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgTUFSS0VSX05FV19QQVJFTlQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgY29udGV4dC5jYW5FeGVjdXRlID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNsYXRlKGRyYWdHcm91cCwgZXZlbnQuZHgsIGV2ZW50LmR5KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUubW92ZS5vdXQnLCAnc2hhcGUubW92ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBzZXRNYXJrZXIodGFyZ2V0LCBudWxsKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5jbGVhbnVwJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsRHJhZ2dlZEVsZW1lbnRzID0gY29udGV4dC5hbGxEcmFnZ2VkRWxlbWVudHMsXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwO1xuXG5cbiAgICAvLyByZW1vdmUgZHJhZ2dpbmcgbWFya2VyXG4gICAgZm9yRWFjaChhbGxEcmFnZ2VkRWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoZSwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcblxuICAgIGlmIChkcmFnR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShkcmFnR3JvdXApO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBBUEkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGVsZW1lbnQgZHJhZ2dhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkTWFya2VyXG4gICAqL1xuICB0aGlzLm1ha2VEcmFnZ2FibGUgPSBtYWtlRHJhZ2dhYmxlO1xufVxuXG5Nb3ZlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ3N0eWxlcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogcmV0dXJucyBlbGVtZW50cyBtaW51cyBhbGwgY29ubmVjdGlvbnNcbiAqIHdoZXJlIHNvdXJjZSBvciB0YXJnZXQgaXMgbm90IGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUVkZ2VzKGVsZW1lbnRzKSB7XG5cbiAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmICghaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5zb3VyY2UuaWQgfSkpICYmXG4gICAgICAgIGZpbmQoZWxlbWVudHMsIG1hdGNoUGF0dGVybih7IGlkOiBlbGVtZW50LnRhcmdldC5pZCB9KSlcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gaGF2ZURpZmZlcmVudFBhcmVudHMoZWxlbWVudHMpIHtcbiAgcmV0dXJuIHNpemUoZ3JvdXBCeShlbGVtZW50cywgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5wYXJlbnQgJiYgZS5wYXJlbnQuaWQ7IH0pKSAhPT0gMTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBpcyBhIGNvbm5lY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuaW1wb3J0IE91dGxpbmVNb2R1bGUgZnJvbSAnLi4vb3V0bGluZSc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuXG5pbXBvcnQgTW92ZSBmcm9tICcuL01vdmUnO1xuaW1wb3J0IE1vdmVQcmV2aWV3IGZyb20gJy4vTW92ZVByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlLFxuICAgIE91dGxpbmVNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnbW92ZScsXG4gICAgJ21vdmVQcmV2aWV3J1xuICBdLFxuICBtb3ZlOiBbICd0eXBlJywgTW92ZSBdLFxuICBtb3ZlUHJldmlldzogWyAndHlwZScsIE1vdmVQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG4vKipcbiAqIEFuIGFic3RyYWN0IHByb3ZpZGVyIHRoYXQgYWxsb3dzIG1vZGVsZXJzIHRvIGltcGxlbWVudCBhIGN1c3RvbVxuICogb3JkZXJpbmcgb2YgZGlhZ3JhbSBlbGVtZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIEl0IG1ha2VzIHN1cmUgdGhhdCB0aGUgb3JkZXIgaXMgYWx3YXlzIHByZXNlcnZlZCBkdXJpbmcgZWxlbWVudFxuICogY3JlYXRpb24gYW5kIG1vdmUgb3BlcmF0aW9ucy5cbiAqXG4gKiBJbiBvcmRlciB0byB1c2UgdGhpcyBiZWhhdmlvciwgaW5oZXJpdCBmcm9tIGl0IGFuZCBvdmVycmlkZVxuICogdGhlIG1ldGhvZCB7QGxpbmsgT3JkZXJpbmdQcm92aWRlciNnZXRPcmRlcmluZ30uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbiBDdXN0b21PcmRlcmluZ1Byb3ZpZGVyKGV2ZW50QnVzKSB7XG4gKiAgIE9yZGVyaW5nUHJvdmlkZXIuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG4gKlxuICogICB0aGlzLmdldE9yZGVyaW5nID0gZnVuY3Rpb24oZWxlbWVudCwgbmV3UGFyZW50KSB7XG4gKiAgICAgLy8gYWx3YXlzIGluc2VydCBlbGVtZW50cyBhdCB0aGUgZnJvbnRcbiAqICAgICAvLyB3aGVuIG1vdmluZ1xuICogICAgIHJldHVybiB7XG4gKiAgICAgICBpbmRleDogMCxcbiAqICAgICAgIHBhcmVudDogbmV3UGFyZW50XG4gKiAgICAgfTtcbiAqICAgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE9yZGVyaW5nUHJvdmlkZXIoZXZlbnRCdXMpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKFsgJ3NoYXBlLmNyZWF0ZScsICdjb25uZWN0aW9uLmNyZWF0ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudDtcblxuICAgIHZhciBvcmRlcmluZyA9IHNlbGYuZ2V0T3JkZXJpbmcoZWxlbWVudCwgcGFyZW50KTtcblxuICAgIGlmIChvcmRlcmluZykge1xuXG4gICAgICBpZiAob3JkZXJpbmcucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5wYXJlbnQgPSBvcmRlcmluZy5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQucGFyZW50SW5kZXggPSBvcmRlcmluZy5pbmRleDtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucHJlRXhlY3V0ZShbICdzaGFwZS5tb3ZlJywgJ2Nvbm5lY3Rpb24ubW92ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBlbGVtZW50LnBhcmVudDtcblxuICAgIHZhciBvcmRlcmluZyA9IHNlbGYuZ2V0T3JkZXJpbmcoZWxlbWVudCwgcGFyZW50KTtcblxuICAgIGlmIChvcmRlcmluZykge1xuXG4gICAgICBpZiAob3JkZXJpbmcucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5uZXdQYXJlbnQgPSBvcmRlcmluZy5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubmV3UGFyZW50SW5kZXggPSBvcmRlcmluZy5pbmRleDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGN1c3RvbSBvcmRlcmluZyBvZiB0aGUgZWxlbWVudCwgYm90aCBpbiB0ZXJtc1xuICogb2YgcGFyZW50IGVsZW1lbnQgYW5kIGluZGV4IGluIHRoZSBuZXcgcGFyZW50LlxuICpcbiAqIEltcGxlbWVudG9ycyBvZiB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhbiBvYmplY3Qgd2l0aFxuICogYHBhcmVudGAgX2FuZF8gYGluZGV4YCBpbiBpdC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gbmV3UGFyZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBvcmRlcmluZyBkZXNjcmlwdG9yXG4gKi9cbk9yZGVyaW5nUHJvdmlkZXIucHJvdG90eXBlLmdldE9yZGVyaW5nID0gZnVuY3Rpb24oZWxlbWVudCwgbmV3UGFyZW50KSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuaW5oZXJpdHMoT3JkZXJpbmdQcm92aWRlciwgQ29tbWFuZEludGVyY2VwdG9yKTsiLCJpbXBvcnQgeyBnZXRCQm94IH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQGNsYXNzXG4gKlxuICogQSBwbHVnaW4gdGhhdCBhZGRzIGFuIG91dGxpbmUgdG8gc2hhcGVzIGFuZCBjb25uZWN0aW9ucyB0aGF0IG1heSBiZSBhY3RpdmF0ZWQgYW5kIHN0eWxlZFxuICogdmlhIENTUyBjbGFzc2VzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge1N0eWxlc30gc3R5bGVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE91dGxpbmUoZXZlbnRCdXMsIHN0eWxlcywgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgdGhpcy5vZmZzZXQgPSA2O1xuXG4gIHZhciBPVVRMSU5FX1NUWUxFID0gc3R5bGVzLmNscygnZGpzLW91dGxpbmUnLCBbICduby1maWxsJyBdKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gY3JlYXRlT3V0bGluZShnZngsIGJvdW5kcykge1xuICAgIHZhciBvdXRsaW5lID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgICBzdmdBdHRyKG91dGxpbmUsIGFzc2lnbih7XG4gICAgICB4OiAxMCxcbiAgICAgIHk6IDEwLFxuICAgICAgd2lkdGg6IDEwMCxcbiAgICAgIGhlaWdodDogMTAwXG4gICAgfSwgT1VUTElORV9TVFlMRSkpO1xuXG4gICAgc3ZnQXBwZW5kKGdmeCwgb3V0bGluZSk7XG5cbiAgICByZXR1cm4gb3V0bGluZTtcbiAgfVxuXG4gIC8vIEEgbG93IHByaW9ydGl0eSBpcyBuZWNlc3NhcnksIGJlY2F1c2Ugb3V0bGluZXMgb2YgbGFiZWxzIGhhdmUgdG8gYmUgdXBkYXRlZFxuICAvLyBhZnRlciB0aGUgbGFiZWwgYm91bmRzIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSByZW5kZXJlci5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAnc2hhcGUuY2hhbmdlZCcgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgdmFyIG91dGxpbmUgPSBkb21RdWVyeSgnLmRqcy1vdXRsaW5lJywgZ2Z4KTtcblxuICAgIGlmICghb3V0bGluZSkge1xuICAgICAgb3V0bGluZSA9IGNyZWF0ZU91dGxpbmUoZ2Z4LCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBzZWxmLnVwZGF0ZVNoYXBlT3V0bGluZShvdXRsaW5lLCBlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY29ubmVjdGlvbi5hZGRlZCcsICdjb25uZWN0aW9uLmNoYW5nZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICB2YXIgb3V0bGluZSA9IGRvbVF1ZXJ5KCcuZGpzLW91dGxpbmUnLCBnZngpO1xuXG4gICAgaWYgKCFvdXRsaW5lKSB7XG4gICAgICBvdXRsaW5lID0gY3JlYXRlT3V0bGluZShnZngsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlQ29ubmVjdGlvbk91dGxpbmUob3V0bGluZSwgZWxlbWVudCk7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb3V0bGluZSBvZiBhIHNoYXBlIHJlc3BlY3RpbmcgdGhlIGRpbWVuc2lvbiBvZiB0aGVcbiAqIGVsZW1lbnQgYW5kIGFuIG91dGxpbmUgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG91dGxpbmVcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbk91dGxpbmUucHJvdG90eXBlLnVwZGF0ZVNoYXBlT3V0bGluZSA9IGZ1bmN0aW9uKG91dGxpbmUsIGVsZW1lbnQpIHtcblxuICBzdmdBdHRyKG91dGxpbmUsIHtcbiAgICB4OiAtdGhpcy5vZmZzZXQsXG4gICAgeTogLXRoaXMub2Zmc2V0LFxuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoICsgdGhpcy5vZmZzZXQgKiAyLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgKyB0aGlzLm9mZnNldCAqIDJcbiAgfSk7XG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvdXRsaW5lIG9mIGEgY29ubmVjdGlvbiByZXNwZWN0aW5nIHRoZSBib3VuZGluZyBib3ggb2ZcbiAqIHRoZSBjb25uZWN0aW9uIGFuZCBhbiBvdXRsaW5lIG9mZnNldC5cbiAqXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBvdXRsaW5lXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICovXG5PdXRsaW5lLnByb3RvdHlwZS51cGRhdGVDb25uZWN0aW9uT3V0bGluZSA9IGZ1bmN0aW9uKG91dGxpbmUsIGNvbm5lY3Rpb24pIHtcblxuICB2YXIgYmJveCA9IGdldEJCb3goY29ubmVjdGlvbik7XG5cbiAgc3ZnQXR0cihvdXRsaW5lLCB7XG4gICAgeDogYmJveC54IC0gdGhpcy5vZmZzZXQsXG4gICAgeTogYmJveC55IC0gdGhpcy5vZmZzZXQsXG4gICAgd2lkdGg6IGJib3gud2lkdGggKyB0aGlzLm9mZnNldCAqIDIsXG4gICAgaGVpZ2h0OiBiYm94LmhlaWdodCArIHRoaXMub2Zmc2V0ICogMlxuICB9KTtcblxufTtcblxuXG5PdXRsaW5lLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ3N0eWxlcycsICdlbGVtZW50UmVnaXN0cnknXTsiLCJpbXBvcnQgT3V0bGluZSBmcm9tICcuL091dGxpbmUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdvdXRsaW5lJyBdLFxuICBvdXRsaW5lOiBbICd0eXBlJywgT3V0bGluZSBdXG59OyIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc09iamVjdCxcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBmaW5kLFxuICBmaWx0ZXIsXG4gIG1hdGNoUGF0dGVybixcbiAgaXNEZWZpbmVkXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZSxcbiAgY2xlYXIgYXMgZG9tQ2xlYXJcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGdldEJCb3hcbn0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCBJZHMgZnJvbSAnLi4vLi4vdXRpbC9JZEdlbmVyYXRvcic7XG5cbi8vIGRvY3VtZW50IHdpZGUgdW5pcXVlIG92ZXJsYXkgaWRzXG52YXIgaWRzID0gbmV3IElkcygnb3YnKTtcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IGFsbG93cyB1c2VycyB0byBhdHRhY2ggb3ZlcmxheXMgdG8gZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBUaGUgb3ZlcmxheSBzZXJ2aWNlIHdpbGwgdGFrZSBjYXJlIG9mIG92ZXJsYXkgcG9zaXRpb25pbmcgZHVyaW5nIHVwZGF0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBhZGQgYSBwaW5rIGJhZGdlIG9uIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2hhcGVcbiAqIG92ZXJsYXlzLmFkZChzb21lU2hhcGUsIHtcbiAqICAgcG9zaXRpb246IHtcbiAqICAgICB0b3A6IC01LFxuICogICAgIGxlZnQ6IC01XG4gKiAgIH0sXG4gKiAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IGZ1Y2hzaWE7IGNvbG9yOiB3aGl0ZTtcIj4wPC9kaXY+J1xuICogfSk7XG4gKlxuICogLy8gb3IgYWRkIHZpYSBzaGFwZSBpZFxuICpcbiAqIG92ZXJsYXlzLmFkZCgnc29tZS1lbGVtZW50LWlkJywge1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHRvcDogLTUsXG4gKiAgICAgbGVmdDogLTVcbiAqICAgfVxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqIC8vIG9yIGFkZCB3aXRoIG9wdGlvbmFsIHR5cGVcbiAqXG4gKiBvdmVybGF5cy5hZGQoc29tZVNoYXBlLCAnYmFkZ2UnLCB7XG4gKiAgIHBvc2l0aW9uOiB7XG4gKiAgICAgdG9wOiAtNSxcbiAqICAgICBsZWZ0OiAtNVxuICogICB9XG4gKiAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IGZ1Y2hzaWE7IGNvbG9yOiB3aGl0ZTtcIj4wPC9kaXY+J1xuICogfSk7XG4gKlxuICpcbiAqIC8vIHJlbW92ZSBhbiBvdmVybGF5XG4gKlxuICogdmFyIGlkID0gb3ZlcmxheXMuYWRkKC4uLik7XG4gKiBvdmVybGF5cy5yZW1vdmUoaWQpO1xuICpcbiAqXG4gKiBZb3UgbWF5IGNvbmZpZ3VyZSBvdmVybGF5IGRlZmF1bHRzIGR1cmluZyB0b29sIGJ5IHByb3ZpZGluZyBhIGBjb25maWdgIG1vZHVsZVxuICogd2l0aCBgb3ZlcmxheXMuZGVmYXVsdHNgIGFzIGFuIGVudHJ5OlxuICpcbiAqIHtcbiAqICAgb3ZlcmxheXM6IHtcbiAqICAgICBkZWZhdWx0czoge1xuICogICAgICAgc2hvdzoge1xuICogICAgICAgICBtaW5ab29tOiAwLjcsXG4gKiAgICAgICAgIG1heFpvb206IDUuMFxuICogICAgICAgfSxcbiAqICAgICAgIHNjYWxlOiB7XG4gKiAgICAgICAgIG1pbjogMVxuICogICAgICAgfVxuICogICAgIH1cbiAqIH1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBPdmVybGF5cyhjb25maWcsIGV2ZW50QnVzLCBjYW52YXMsIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIHRoaXMuX2lkcyA9IGlkcztcblxuICB0aGlzLl9vdmVybGF5RGVmYXVsdHMgPSBhc3NpZ24oe1xuXG4gICAgLy8gbm8gc2hvdyBjb25zdHJhaW50c1xuICAgIHNob3c6IG51bGwsXG5cbiAgICAvLyBhbHdheXMgc2NhbGVcbiAgICBzY2FsZTogdHJ1ZVxuICB9LCBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRzKTtcblxuICAvKipcbiAgICogTWFwcGluZyBvdmVybGF5SWQgLT4gb3ZlcmxheVxuICAgKi9cbiAgdGhpcy5fb3ZlcmxheXMgPSB7fTtcblxuICAvKipcbiAgICogTWFwcGluZyBlbGVtZW50SWQgLT4gb3ZlcmxheSBjb250YWluZXJcbiAgICovXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzID0gW107XG5cbiAgLy8gcm9vdCBodG1sIGVsZW1lbnQgZm9yIGFsbCBvdmVybGF5c1xuICB0aGlzLl9vdmVybGF5Um9vdCA9IGNyZWF0ZVJvb3QoY2FudmFzLmdldENvbnRhaW5lcigpKTtcblxuICB0aGlzLl9pbml0KCk7XG59XG5cblxuT3ZlcmxheXMuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5vdmVybGF5cycsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIG92ZXJsYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGlkIG9yIGEgbGlzdCBvZiBvdmVybGF5c1xuICogZm9yIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIHR5cGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyByZXR1cm4gdGhlIHNpbmdsZSBvdmVybGF5IHdpdGggdGhlIGdpdmVuIGlkXG4gKiBvdmVybGF5cy5nZXQoJ3NvbWUtaWQnKTtcbiAqXG4gKiAvLyByZXR1cm4gYWxsIG92ZXJsYXlzIGZvciB0aGUgc2hhcGVcbiAqIG92ZXJsYXlzLmdldCh7IGVsZW1lbnQ6IHNvbWVTaGFwZSB9KTtcbiAqXG4gKiAvLyByZXR1cm4gYWxsIG92ZXJsYXlzIG9uIHNoYXBlIHdpdGggdHlwZSAnYmFkZ2UnXG4gKiBvdmVybGF5cy5nZXQoeyBlbGVtZW50OiBzb21lU2hhcGUsIHR5cGU6ICdiYWRnZScgfSk7XG4gKlxuICogLy8gc2hhcGUgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzIGlkXG4gKiBvdmVybGF5cy5nZXQoeyBlbGVtZW50OiAnZWxlbWVudC1pZCcsIHR5cGU6ICdiYWRnZScgfSk7XG4gKlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoLmlkXVxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IFtzZWFyY2guZWxlbWVudF1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoLnR5cGVdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fEFycmF5PE9iamVjdD59IHRoZSBvdmVybGF5KHMpXG4gKi9cbk92ZXJsYXlzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihzZWFyY2gpIHtcblxuICBpZiAoaXNTdHJpbmcoc2VhcmNoKSkge1xuICAgIHNlYXJjaCA9IHsgaWQ6IHNlYXJjaCB9O1xuICB9XG5cbiAgaWYgKGlzU3RyaW5nKHNlYXJjaC5lbGVtZW50KSkge1xuICAgIHNlYXJjaC5lbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzZWFyY2guZWxlbWVudCk7XG4gIH1cblxuICBpZiAoc2VhcmNoLmVsZW1lbnQpIHtcbiAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fZ2V0T3ZlcmxheUNvbnRhaW5lcihzZWFyY2guZWxlbWVudCwgdHJ1ZSk7XG5cbiAgICAvLyByZXR1cm4gYSBsaXN0IG9mIG92ZXJsYXlzIHdoZW4gc2VhcmNoaW5nIGJ5IGVsZW1lbnQgKCt0eXBlKVxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIHJldHVybiBzZWFyY2gudHlwZSA/IGZpbHRlcihjb250YWluZXIub3ZlcmxheXMsIG1hdGNoUGF0dGVybih7IHR5cGU6IHNlYXJjaC50eXBlIH0pKSA6IGNvbnRhaW5lci5vdmVybGF5cy5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9IGVsc2VcbiAgaWYgKHNlYXJjaC50eXBlKSB7XG4gICAgcmV0dXJuIGZpbHRlcih0aGlzLl9vdmVybGF5cywgbWF0Y2hQYXR0ZXJuKHsgdHlwZTogc2VhcmNoLnR5cGUgfSkpO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gcmV0dXJuIHNpbmdsZSBlbGVtZW50IHdoZW4gc2VhcmNoaW5nIGJ5IGlkXG4gICAgcmV0dXJuIHNlYXJjaC5pZCA/IHRoaXMuX292ZXJsYXlzW3NlYXJjaC5pZF0gOiBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZHMgYSBIVE1MIG92ZXJsYXkgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xkanMubW9kZWwuQmFzZX0gICBlbGVtZW50ICAgYXR0YWNoIG92ZXJsYXkgdG8gdGhpcyBzaGFwZVxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW3R5cGVdICAgIG9wdGlvbmFsIHR5cGUgdG8gYXNzaWduIHRvIHRoZSBvdmVybGF5XG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBvdmVybGF5ICAgdGhlIG92ZXJsYXkgY29uZmlndXJhdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9ICAgICAgIG92ZXJsYXkuaHRtbCAgICAgICAgICAgICAgICAgaHRtbCBlbGVtZW50IHRvIHVzZSBhcyBhbiBvdmVybGF5XG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5zaG93XSAgICAgICAgICAgICAgIHNob3cgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkuc2hvdy5taW5ab29tXSAgICAgICBtaW5pbWFsIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgb3ZlcmxheVxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkuc2hvdy5tYXhab29tXSAgICAgICBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgb3ZlcmxheVxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgb3ZlcmxheS5wb3NpdGlvbiAgICAgICAgICAgICB3aGVyZSB0byBhdHRhY2ggdGhlIG92ZXJsYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnBvc2l0aW9uLmxlZnRdICAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGxlZnQgYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkucG9zaXRpb24udG9wXSAgICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggdG9wIGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnBvc2l0aW9uLmJvdHRvbV0gICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGJvdHRvbSBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5wb3NpdGlvbi5yaWdodF0gICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCByaWdodCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSAgICAgICAgICBbb3ZlcmxheS5zY2FsZT10cnVlXSAgICAgICAgIGZhbHNlIHRvIHByZXNlcnZlIHRoZSBzYW1lIHNpemUgcmVnYXJkbGVzcyBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFncmFtIHpvb21cbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNjYWxlLm1pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNjYWxlLm1heF1cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgICBpZCB0aGF0IG1heSBiZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgb3ZlcmxheSBmb3IgdXBkYXRlIG9yIHJlbW92YWxcbiAqL1xuT3ZlcmxheXMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIG92ZXJsYXkpIHtcblxuICBpZiAoaXNPYmplY3QodHlwZSkpIHtcbiAgICBvdmVybGF5ID0gdHlwZTtcbiAgICB0eXBlID0gbnVsbDtcbiAgfVxuXG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKCFvdmVybGF5LnBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IG92ZXJsYXkgcG9zaXRpb24nKTtcbiAgfVxuXG4gIGlmICghb3ZlcmxheS5odG1sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IG92ZXJsYXkgaHRtbCcpO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVsZW1lbnQgc3BlY2lmaWVkJyk7XG4gIH1cblxuICB2YXIgaWQgPSB0aGlzLl9pZHMubmV4dCgpO1xuXG4gIG92ZXJsYXkgPSBhc3NpZ24oe30sIHRoaXMuX292ZXJsYXlEZWZhdWx0cywgb3ZlcmxheSwge1xuICAgIGlkOiBpZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaHRtbDogb3ZlcmxheS5odG1sXG4gIH0pO1xuXG4gIHRoaXMuX2FkZE92ZXJsYXkob3ZlcmxheSk7XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBhbiBvdmVybGF5IHdpdGggdGhlIGdpdmVuIGlkIG9yIGFsbCBvdmVybGF5cyBtYXRjaGluZyB0aGUgZ2l2ZW4gZmlsdGVyLlxuICpcbiAqIEBzZWUgT3ZlcmxheXMjZ2V0IGZvciBmaWx0ZXIgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lkXVxuICogQHBhcmFtIHtPYmplY3R9IFtmaWx0ZXJdXG4gKi9cbk92ZXJsYXlzLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcblxuICB2YXIgb3ZlcmxheXMgPSB0aGlzLmdldChmaWx0ZXIpIHx8IFtdO1xuXG4gIGlmICghaXNBcnJheShvdmVybGF5cykpIHtcbiAgICBvdmVybGF5cyA9IFsgb3ZlcmxheXMgXTtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKG92ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihvdmVybGF5LmVsZW1lbnQsIHRydWUpO1xuXG4gICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgIGRvbVJlbW92ZShvdmVybGF5Lmh0bWwpO1xuICAgICAgZG9tUmVtb3ZlKG92ZXJsYXkuaHRtbENvbnRhaW5lcik7XG5cbiAgICAgIGRlbGV0ZSBvdmVybGF5Lmh0bWxDb250YWluZXI7XG4gICAgICBkZWxldGUgb3ZlcmxheS5lbGVtZW50O1xuXG4gICAgICBkZWxldGUgc2VsZi5fb3ZlcmxheXNbb3ZlcmxheS5pZF07XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgdmFyIGlkeCA9IGNvbnRhaW5lci5vdmVybGF5cy5pbmRleE9mKG92ZXJsYXkpO1xuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgY29udGFpbmVyLm92ZXJsYXlzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbn07XG5cblxuT3ZlcmxheXMucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbigpIHtcbiAgc2V0VmlzaWJsZSh0aGlzLl9vdmVybGF5Um9vdCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gIHNldFZpc2libGUodGhpcy5fb3ZlcmxheVJvb3QsIGZhbHNlKTtcbn07XG5cbk92ZXJsYXlzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9vdmVybGF5cyA9IHt9O1xuXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzID0gW107XG5cbiAgZG9tQ2xlYXIodGhpcy5fb3ZlcmxheVJvb3QpO1xufTtcblxuT3ZlcmxheXMucHJvdG90eXBlLl91cGRhdGVPdmVybGF5Q29udGFpbmVyID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gIHZhciBlbGVtZW50ID0gY29udGFpbmVyLmVsZW1lbnQsXG4gICAgICBodG1sID0gY29udGFpbmVyLmh0bWw7XG5cbiAgLy8gdXBkYXRlIGNvbnRhaW5lciBsZWZ0LHRvcCBhY2NvcmRpbmcgdG8gdGhlIGVsZW1lbnRzIHgseSBjb29yZGluYXRlc1xuICAvLyB0aGlzIGVuc3VyZXMgd2UgY2FuIGF0dGFjaCBjaGlsZCBlbGVtZW50cyByZWxhdGl2ZSB0byB0aGlzIGNvbnRhaW5lclxuXG4gIHZhciB4ID0gZWxlbWVudC54LFxuICAgICAgeSA9IGVsZW1lbnQueTtcblxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICB2YXIgYmJveCA9IGdldEJCb3goZWxlbWVudCk7XG4gICAgeCA9IGJib3gueDtcbiAgICB5ID0gYmJveC55O1xuICB9XG5cbiAgc2V0UG9zaXRpb24oaHRtbCwgeCwgeSk7XG5cbiAgZG9tQXR0cihjb250YWluZXIuaHRtbCwgJ2RhdGEtY29udGFpbmVyLWlkJywgZWxlbWVudC5pZCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheSA9IGZ1bmN0aW9uKG92ZXJsYXkpIHtcblxuICB2YXIgcG9zaXRpb24gPSBvdmVybGF5LnBvc2l0aW9uLFxuICAgICAgaHRtbENvbnRhaW5lciA9IG92ZXJsYXkuaHRtbENvbnRhaW5lcixcbiAgICAgIGVsZW1lbnQgPSBvdmVybGF5LmVsZW1lbnQ7XG5cbiAgLy8gdXBkYXRlIG92ZXJsYXkgaHRtbCByZWxhdGl2ZSB0byBzaGFwZSBiZWNhdXNlXG4gIC8vIGl0IGlzIGFscmVhZHkgcG9zaXRpb25lZCBvbiB0aGUgZWxlbWVudFxuXG4gIC8vIHVwZGF0ZSByZWxhdGl2ZVxuICB2YXIgbGVmdCA9IHBvc2l0aW9uLmxlZnQsXG4gICAgICB0b3AgPSBwb3NpdGlvbi50b3A7XG5cbiAgaWYgKHBvc2l0aW9uLnJpZ2h0ICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHZhciB3aWR0aDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgd2lkdGggPSBnZXRCQm94KGVsZW1lbnQpLndpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IGVsZW1lbnQud2lkdGg7XG4gICAgfVxuXG4gICAgbGVmdCA9IHBvc2l0aW9uLnJpZ2h0ICogLTEgKyB3aWR0aDtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbi5ib3R0b20gIT09IHVuZGVmaW5lZCkge1xuXG4gICAgdmFyIGhlaWdodDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgaGVpZ2h0ID0gZ2V0QkJveChlbGVtZW50KS5oZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgIH1cblxuICAgIHRvcCA9IHBvc2l0aW9uLmJvdHRvbSAqIC0xICsgaGVpZ2h0O1xuICB9XG5cbiAgc2V0UG9zaXRpb24oaHRtbENvbnRhaW5lciwgbGVmdCB8fCAwLCB0b3AgfHwgMCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fY3JlYXRlT3ZlcmxheUNvbnRhaW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGh0bWwgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJkanMtb3ZlcmxheXNcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiIC8+Jyk7XG5cbiAgdGhpcy5fb3ZlcmxheVJvb3QuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgdmFyIGNvbnRhaW5lciA9IHtcbiAgICBodG1sOiBodG1sLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgb3ZlcmxheXM6IFtdXG4gIH07XG5cbiAgdGhpcy5fdXBkYXRlT3ZlcmxheUNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzLnB1c2goY29udGFpbmVyKTtcblxuICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZVJvb3QgPSBmdW5jdGlvbih2aWV3Ym94KSB7XG4gIHZhciBzY2FsZSA9IHZpZXdib3guc2NhbGUgfHwgMTtcblxuICB2YXIgbWF0cml4ID0gJ21hdHJpeCgnICtcbiAgW1xuICAgIHNjYWxlLFxuICAgIDAsXG4gICAgMCxcbiAgICBzY2FsZSxcbiAgICAtMSAqIHZpZXdib3gueCAqIHNjYWxlLFxuICAgIC0xICogdmlld2JveC55ICogc2NhbGVcbiAgXS5qb2luKCcsJykgK1xuICAnKSc7XG5cbiAgc2V0VHJhbnNmb3JtKHRoaXMuX292ZXJsYXlSb290LCBtYXRyaXgpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX2dldE92ZXJsYXlDb250YWluZXIgPSBmdW5jdGlvbihlbGVtZW50LCByYXcpIHtcbiAgdmFyIGNvbnRhaW5lciA9IGZpbmQodGhpcy5fb3ZlcmxheUNvbnRhaW5lcnMsIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gYy5lbGVtZW50ID09PSBlbGVtZW50O1xuICB9KTtcblxuXG4gIGlmICghY29udGFpbmVyICYmICFyYXcpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3ZlcmxheUNvbnRhaW5lcihlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fYWRkT3ZlcmxheSA9IGZ1bmN0aW9uKG92ZXJsYXkpIHtcblxuICB2YXIgaWQgPSBvdmVybGF5LmlkLFxuICAgICAgZWxlbWVudCA9IG92ZXJsYXkuZWxlbWVudCxcbiAgICAgIGh0bWwgPSBvdmVybGF5Lmh0bWwsXG4gICAgICBodG1sQ29udGFpbmVyLFxuICAgICAgb3ZlcmxheUNvbnRhaW5lcjtcblxuICAvLyB1bndyYXAganF1ZXJ5IChmb3IgdGhvc2Ugd2hvIG5lZWQgaXQpXG4gIGlmIChodG1sLmdldCAmJiBodG1sLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBodG1sID0gaHRtbC5nZXQoMCk7XG4gIH1cblxuICAvLyBjcmVhdGUgcHJvcGVyIGh0bWwgZWxlbWVudHMgZnJvbVxuICAvLyBvdmVybGF5IEhUTUwgc3RyaW5nc1xuICBpZiAoaXNTdHJpbmcoaHRtbCkpIHtcbiAgICBodG1sID0gZG9taWZ5KGh0bWwpO1xuICB9XG5cbiAgb3ZlcmxheUNvbnRhaW5lciA9IHRoaXMuX2dldE92ZXJsYXlDb250YWluZXIoZWxlbWVudCk7XG5cbiAgaHRtbENvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImRqcy1vdmVybGF5XCIgZGF0YS1vdmVybGF5LWlkPVwiJyArIGlkICsgJ1wiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCI+Jyk7XG5cbiAgaHRtbENvbnRhaW5lci5hcHBlbmRDaGlsZChodG1sKTtcblxuICBpZiAob3ZlcmxheS50eXBlKSB7XG4gICAgZG9tQ2xhc3NlcyhodG1sQ29udGFpbmVyKS5hZGQoJ2Rqcy1vdmVybGF5LScgKyBvdmVybGF5LnR5cGUpO1xuICB9XG5cbiAgb3ZlcmxheS5odG1sQ29udGFpbmVyID0gaHRtbENvbnRhaW5lcjtcblxuICBvdmVybGF5Q29udGFpbmVyLm92ZXJsYXlzLnB1c2gob3ZlcmxheSk7XG4gIG92ZXJsYXlDb250YWluZXIuaHRtbC5hcHBlbmRDaGlsZChodG1sQ29udGFpbmVyKTtcblxuICB0aGlzLl9vdmVybGF5c1tpZF0gPSBvdmVybGF5O1xuXG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXkob3ZlcmxheSk7XG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXlWaXNpYmlsdHkob3ZlcmxheSwgdGhpcy5fY2FudmFzLnZpZXdib3goKSk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheVZpc2liaWx0eSA9IGZ1bmN0aW9uKG92ZXJsYXksIHZpZXdib3gpIHtcbiAgdmFyIHNob3cgPSBvdmVybGF5LnNob3csXG4gICAgICBtaW5ab29tID0gc2hvdyAmJiBzaG93Lm1pblpvb20sXG4gICAgICBtYXhab29tID0gc2hvdyAmJiBzaG93Lm1heFpvb20sXG4gICAgICBodG1sQ29udGFpbmVyID0gb3ZlcmxheS5odG1sQ29udGFpbmVyLFxuICAgICAgdmlzaWJsZSA9IHRydWU7XG5cbiAgaWYgKHNob3cpIHtcbiAgICBpZiAoXG4gICAgICAoaXNEZWZpbmVkKG1pblpvb20pICYmIG1pblpvb20gPiB2aWV3Ym94LnNjYWxlKSB8fFxuICAgICAgKGlzRGVmaW5lZChtYXhab29tKSAmJiBtYXhab29tIDwgdmlld2JveC5zY2FsZSlcbiAgICApIHtcbiAgICAgIHZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXRWaXNpYmxlKGh0bWxDb250YWluZXIsIHZpc2libGUpO1xuICB9XG5cbiAgdGhpcy5fdXBkYXRlT3ZlcmxheVNjYWxlKG92ZXJsYXksIHZpZXdib3gpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXlTY2FsZSA9IGZ1bmN0aW9uKG92ZXJsYXksIHZpZXdib3gpIHtcbiAgdmFyIHNob3VsZFNjYWxlID0gb3ZlcmxheS5zY2FsZSxcbiAgICAgIG1pblNjYWxlLFxuICAgICAgbWF4U2NhbGUsXG4gICAgICBodG1sQ29udGFpbmVyID0gb3ZlcmxheS5odG1sQ29udGFpbmVyO1xuXG4gIHZhciBzY2FsZSwgdHJhbnNmb3JtID0gJyc7XG5cbiAgaWYgKHNob3VsZFNjYWxlICE9PSB0cnVlKSB7XG5cbiAgICBpZiAoc2hvdWxkU2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICBtaW5TY2FsZSA9IDE7XG4gICAgICBtYXhTY2FsZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblNjYWxlID0gc2hvdWxkU2NhbGUubWluO1xuICAgICAgbWF4U2NhbGUgPSBzaG91bGRTY2FsZS5tYXg7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmaW5lZChtaW5TY2FsZSkgJiYgdmlld2JveC5zY2FsZSA8IG1pblNjYWxlKSB7XG4gICAgICBzY2FsZSA9ICgxIC8gdmlld2JveC5zY2FsZSB8fCAxKSAqIG1pblNjYWxlO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQobWF4U2NhbGUpICYmIHZpZXdib3guc2NhbGUgPiBtYXhTY2FsZSkge1xuICAgICAgc2NhbGUgPSAoMSAvIHZpZXdib3guc2NhbGUgfHwgMSkgKiBtYXhTY2FsZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNEZWZpbmVkKHNjYWxlKSkge1xuICAgIHRyYW5zZm9ybSA9ICdzY2FsZSgnICsgc2NhbGUgKyAnLCcgKyBzY2FsZSArICcpJztcbiAgfVxuXG4gIHNldFRyYW5zZm9ybShodG1sQ29udGFpbmVyLCB0cmFuc2Zvcm0pO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXlzVmlzaWJpbHR5ID0gZnVuY3Rpb24odmlld2JveCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHRoaXMuX292ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG4gICAgc2VsZi5fdXBkYXRlT3ZlcmxheVZpc2liaWx0eShvdmVybGF5LCB2aWV3Ym94KTtcbiAgfSk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuXG4gIC8vIHNjcm9sbC96b29tIGludGVncmF0aW9uXG5cbiAgZnVuY3Rpb24gdXBkYXRlVmlld2JveCh2aWV3Ym94KSB7XG4gICAgc2VsZi5fdXBkYXRlUm9vdCh2aWV3Ym94KTtcbiAgICBzZWxmLl91cGRhdGVPdmVybGF5c1Zpc2liaWx0eSh2aWV3Ym94KTtcblxuICAgIHNlbGYuc2hvdygpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5naW5nJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLmhpZGUoKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVwZGF0ZVZpZXdib3goZXZlbnQudmlld2JveCk7XG4gIH0pO1xuXG5cbiAgLy8gcmVtb3ZlIGludGVncmF0aW9uXG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUucmVtb3ZlJywgJ2Nvbm5lY3Rpb24ucmVtb3ZlJyBdLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG4gICAgdmFyIG92ZXJsYXlzID0gc2VsZi5nZXQoeyBlbGVtZW50OiBlbGVtZW50IH0pO1xuXG4gICAgZm9yRWFjaChvdmVybGF5cywgZnVuY3Rpb24obykge1xuICAgICAgc2VsZi5yZW1vdmUoby5pZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihlbGVtZW50KTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGRvbVJlbW92ZShjb250YWluZXIuaHRtbCk7XG4gICAgICB2YXIgaSA9IHNlbGYuX292ZXJsYXlDb250YWluZXJzLmluZGV4T2YoY29udGFpbmVyKTtcbiAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICBzZWxmLl9vdmVybGF5Q29udGFpbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuXG4gIC8vIG1vdmUgaW50ZWdyYXRpb25cblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jaGFuZ2VkJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihlbGVtZW50LCB0cnVlKTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGZvckVhY2goY29udGFpbmVyLm92ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG4gICAgICAgIHNlbGYuX3VwZGF0ZU92ZXJsYXkob3ZlcmxheSk7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fdXBkYXRlT3ZlcmxheUNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBtYXJrZXIgaW50ZWdyYXRpb24sIHNpbXBseSBhZGQgdGhlbSBvbiB0aGUgb3ZlcmxheXMgYXMgY2xhc3NlcywgdG9vLlxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1hcmtlci51cGRhdGUnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IHNlbGYuX2dldE92ZXJsYXlDb250YWluZXIoZS5lbGVtZW50LCB0cnVlKTtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBkb21DbGFzc2VzKGNvbnRhaW5lci5odG1sKVtlLmFkZCA/ICdhZGQnIDogJ3JlbW92ZSddKGUubWFya2VyKTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gY2xlYXIgb3ZlcmxheXMgd2l0aCBkaWFncmFtXG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uY2xlYXInLCB0aGlzLmNsZWFyLCB0aGlzKTtcbn07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3QocGFyZW50Tm9kZSkge1xuICB2YXIgcm9vdCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1vdmVybGF5LWNvbnRhaW5lclwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMDsgaGVpZ2h0OiAwO1wiIC8+J1xuICApO1xuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvb3QsIHBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aW9uKGVsLCB4LCB5KSB7XG4gIGFzc2lnbihlbC5zdHlsZSwgeyBsZWZ0OiB4ICsgJ3B4JywgdG9wOiB5ICsgJ3B4JyB9KTtcbn1cblxuZnVuY3Rpb24gc2V0VmlzaWJsZShlbCwgdmlzaWJsZSkge1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA9PT0gZmFsc2UgPyAnbm9uZScgOiAnJztcbn1cblxuZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsLCB0cmFuc2Zvcm0pIHtcblxuICBlbC5zdHlsZVsndHJhbnNmb3JtLW9yaWdpbiddID0gJ3RvcCBsZWZ0JztcblxuICBbICcnLCAnLW1zLScsICctd2Via2l0LScgXS5mb3JFYWNoKGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIGVsLnN0eWxlW3ByZWZpeCArICd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTtcbiAgfSk7XG59IiwiaW1wb3J0IE92ZXJsYXlzIGZyb20gJy4vT3ZlcmxheXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdvdmVybGF5cycgXSxcbiAgb3ZlcmxheXM6IFsgJ3R5cGUnLCBPdmVybGF5cyBdXG59OyIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIGNsZWFyIGFzIGRvbUNsZWFyLFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIG1hdGNoZXMgYXMgZG9tTWF0Y2hlcyxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIGV2ZW50IGFzIGRvbUV2ZW50XG59IGZyb20gJ21pbi1kb20nO1xuXG5cbnZhciBUT0dHTEVfU0VMRUNUT1IgPSAnLmRqcy1wYWxldHRlLXRvZ2dsZScsXG4gICAgRU5UUllfU0VMRUNUT1IgPSAnLmVudHJ5JyxcbiAgICBFTEVNRU5UX1NFTEVDVE9SID0gVE9HR0xFX1NFTEVDVE9SICsgJywgJyArIEVOVFJZX1NFTEVDVE9SO1xuXG52YXIgUEFMRVRURV9PUEVOX0NMUyA9ICdvcGVuJyxcbiAgICBQQUxFVFRFX1RXT19DT0xVTU5fQ0xTID0gJ3R3by1jb2x1bW4nO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIHBhbGV0dGUgY29udGFpbmluZyBtb2RlbGluZyBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFsZXR0ZShldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbigndG9vbC1tYW5hZ2VyLnVwZGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRvb2wgPSBldmVudC50b29sO1xuXG4gICAgc2VsZi51cGRhdGVUb29sSGlnaGxpZ2h0KHRvb2wpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaTE4bi5jaGFuZ2VkJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5fdXBkYXRlKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcblxuICAgIHNlbGYuX2RpYWdyYW1Jbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBzZWxmLl9yZWJ1aWxkKCk7XG4gIH0pO1xufVxuXG5QYWxldHRlLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhIHByb3ZpZGVyIHdpdGggdGhlIHBhbGV0dGVcbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtwcmlvcml0eT0xMDAwXVxuICogQHBhcmFtICB7UGFsZXR0ZVByb3ZpZGVyfSBwcm92aWRlclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwYWxldHRlUHJvdmlkZXIgPSB7XG4gKiAgIGdldFBhbGV0dGVFbnRyaWVzOiBmdW5jdGlvbigpIHtcbiAqICAgICByZXR1cm4gZnVuY3Rpb24oZW50cmllcykge1xuICogICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgLi4uZW50cmllcyxcbiAqICAgICAgICAgJ2VudHJ5LTEnOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICdNeSBFbnRyeScsXG4gKiAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsgYWxlcnQoXCJJIGhhdmUgYmVlbiBjbGlja2VkIVwiKTsgfVxuICogICAgICAgICB9XG4gKiAgICAgICB9O1xuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqXG4gKiBwYWxldHRlLnJlZ2lzdGVyUHJvdmlkZXIoODAwLCBwYWxldHRlUHJvdmlkZXIpO1xuICovXG5QYWxldHRlLnByb3RvdHlwZS5yZWdpc3RlclByb3ZpZGVyID0gZnVuY3Rpb24ocHJpb3JpdHksIHByb3ZpZGVyKSB7XG4gIGlmICghcHJvdmlkZXIpIHtcbiAgICBwcm92aWRlciA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLm9uKCdwYWxldHRlLmdldFByb3ZpZGVycycsIHByaW9yaXR5LCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnByb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcbiAgfSk7XG5cbiAgdGhpcy5fcmVidWlsZCgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhbGV0dGUgZW50cmllc1xuICpcbiAqIEByZXR1cm4ge09iamVjdDxzdHJpbmcsIFBhbGV0dGVFbnRyeURlc2NyaXB0b3I+fSBtYXAgb2YgZW50cmllc1xuICovXG5QYWxldHRlLnByb3RvdHlwZS5nZXRFbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoKTtcblxuICByZXR1cm4gcHJvdmlkZXJzLnJlZHVjZShhZGRQYWxldHRlRW50cmllcywge30pO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAoIXRoaXMuX2RpYWdyYW1Jbml0aWFsaXplZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoKTtcblxuICBpZiAoIXByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBwYXJlbnRDb250YWluZXIgPSB0aGlzLl9nZXRQYXJlbnRDb250YWluZXIoKTtcblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gZG9taWZ5KFBhbGV0dGUuSFRNTF9NQVJLVVApO1xuXG4gIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCBFTEVNRU5UX1NFTEVDVE9SLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgaWYgKGRvbU1hdGNoZXModGFyZ2V0LCBUT0dHTEVfU0VMRUNUT1IpKSB7XG4gICAgICByZXR1cm4gc2VsZi50b2dnbGUoKTtcbiAgICB9XG5cbiAgICBzZWxmLnRyaWdnZXIoJ2NsaWNrJywgZXZlbnQpO1xuICB9KTtcblxuICAvLyBwcmV2ZW50IGRyYWcgcHJvcGFnYXRpb25cbiAgZG9tRXZlbnQuYmluZChjb250YWluZXIsICdtb3VzZWRvd24nLCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9KTtcblxuICAvLyBwcmV2ZW50IGRyYWcgcHJvcGFnYXRpb25cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsIEVOVFJZX1NFTEVDVE9SLCAnZHJhZ3N0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5yZXNpemVkJywgdGhpcy5fbGF5b3V0Q2hhbmdlZCwgdGhpcyk7XG5cbiAgZXZlbnRCdXMuZmlyZSgncGFsZXR0ZS5jcmVhdGUnLCB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXJcbiAgfSk7XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS5fZ2V0UHJvdmlkZXJzID0gZnVuY3Rpb24oaWQpIHtcblxuICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudCh7XG4gICAgdHlwZTogJ3BhbGV0dGUuZ2V0UHJvdmlkZXJzJyxcbiAgICBwcm92aWRlcnM6IFtdXG4gIH0pO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoZXZlbnQpO1xuXG4gIHJldHVybiBldmVudC5wcm92aWRlcnM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBwYWxldHRlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gW3N0YXRlXSB7IG9wZW4sIHR3b0NvbHVtbiB9XG4gKi9cblBhbGV0dGUucHJvdG90eXBlLl90b2dnbGVTdGF0ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG5cbiAgc3RhdGUgPSBzdGF0ZSB8fCB7fTtcblxuICB2YXIgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50Q29udGFpbmVyKCksXG4gICAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIHR3b0NvbHVtbjtcblxuICB2YXIgY2xzID0gZG9tQ2xhc3Nlcyhjb250YWluZXIpO1xuXG4gIGlmICgndHdvQ29sdW1uJyBpbiBzdGF0ZSkge1xuICAgIHR3b0NvbHVtbiA9IHN0YXRlLnR3b0NvbHVtbjtcbiAgfSBlbHNlIHtcbiAgICB0d29Db2x1bW4gPSB0aGlzLl9uZWVkc0NvbGxhcHNlKHBhcmVudC5jbGllbnRIZWlnaHQsIHRoaXMuX2VudHJpZXMgfHwge30pO1xuICB9XG5cbiAgLy8gYWx3YXlzIHVwZGF0ZSB0d28gY29sdW1uXG4gIGNscy50b2dnbGUoUEFMRVRURV9UV09fQ09MVU1OX0NMUywgdHdvQ29sdW1uKTtcblxuICBpZiAoJ29wZW4nIGluIHN0YXRlKSB7XG4gICAgY2xzLnRvZ2dsZShQQUxFVFRFX09QRU5fQ0xTLCBzdGF0ZS5vcGVuKTtcbiAgfVxuXG4gIGV2ZW50QnVzLmZpcmUoJ3BhbGV0dGUuY2hhbmdlZCcsIHtcbiAgICB0d29Db2x1bW46IHR3b0NvbHVtbixcbiAgICBvcGVuOiB0aGlzLmlzT3BlbigpXG4gIH0pO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBlbnRyaWVzQ29udGFpbmVyID0gZG9tUXVlcnkoJy5kanMtcGFsZXR0ZS1lbnRyaWVzJywgdGhpcy5fY29udGFpbmVyKSxcbiAgICAgIGVudHJpZXMgPSB0aGlzLl9lbnRyaWVzID0gdGhpcy5nZXRFbnRyaWVzKCk7XG5cbiAgZG9tQ2xlYXIoZW50cmllc0NvbnRhaW5lcik7XG5cbiAgZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcblxuICAgIHZhciBncm91cGluZyA9IGVudHJ5Lmdyb3VwIHx8ICdkZWZhdWx0JztcblxuICAgIHZhciBjb250YWluZXIgPSBkb21RdWVyeSgnW2RhdGEtZ3JvdXA9JyArIGdyb3VwaW5nICsgJ10nLCBlbnRyaWVzQ29udGFpbmVyKTtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZ3JvdXBcIiBkYXRhLWdyb3VwPVwiJyArIGdyb3VwaW5nICsgJ1wiPjwvZGl2PicpO1xuICAgICAgZW50cmllc0NvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgIH1cblxuICAgIHZhciBodG1sID0gZW50cnkuaHRtbCB8fCAoXG4gICAgICBlbnRyeS5zZXBhcmF0b3IgP1xuICAgICAgICAnPGhyIGNsYXNzPVwic2VwYXJhdG9yXCIgLz4nIDpcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJlbnRyeVwiIGRyYWdnYWJsZT1cInRydWVcIj48L2Rpdj4nKTtcblxuXG4gICAgdmFyIGNvbnRyb2wgPSBkb21pZnkoaHRtbCk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuXG4gICAgaWYgKCFlbnRyeS5zZXBhcmF0b3IpIHtcbiAgICAgIGRvbUF0dHIoY29udHJvbCwgJ2RhdGEtYWN0aW9uJywgaWQpO1xuXG4gICAgICBpZiAoZW50cnkudGl0bGUpIHtcbiAgICAgICAgZG9tQXR0cihjb250cm9sLCAndGl0bGUnLCBlbnRyeS50aXRsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeS5jbGFzc05hbWUpIHtcbiAgICAgICAgYWRkQ2xhc3Nlcyhjb250cm9sLCBlbnRyeS5jbGFzc05hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICAgICAgY29udHJvbC5hcHBlbmRDaGlsZChkb21pZnkoJzxpbWcgc3JjPVwiJyArIGVudHJ5LmltYWdlVXJsICsgJ1wiPicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIG9wZW4gYWZ0ZXIgdXBkYXRlXG4gIHRoaXMub3BlbigpO1xufTtcblxuXG4vKipcbiAqIFRyaWdnZXIgYW4gYWN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgcGFsZXR0ZVxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gYWN0aW9uXG4gKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgZXZlbnQsIGF1dG9BY3RpdmF0ZSkge1xuICB2YXIgZW50cmllcyA9IHRoaXMuX2VudHJpZXMsXG4gICAgICBlbnRyeSxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBvcmlnaW5hbEV2ZW50LFxuICAgICAgYnV0dG9uID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gIGlmICghYnV0dG9uKSB7XG4gICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBlbnRyeSA9IGVudHJpZXNbZG9tQXR0cihidXR0b24sICdkYXRhLWFjdGlvbicpXTtcblxuICAvLyB3aGVuIHVzZXIgY2xpY2tzIG9uIHRoZSBwYWxldHRlIGFuZCBub3Qgb24gYW4gYWN0aW9uXG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBoYW5kbGVyID0gZW50cnkuYWN0aW9uO1xuXG4gIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuXG4gIC8vIHNpbXBsZSBhY3Rpb24gKHZpYSBjYWxsYmFjayBmdW5jdGlvbilcbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2snKSB7XG4gICAgICBoYW5kbGVyKG9yaWdpbmFsRXZlbnQsIGF1dG9BY3RpdmF0ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChoYW5kbGVyW2FjdGlvbl0pIHtcbiAgICAgIGhhbmRsZXJbYWN0aW9uXShvcmlnaW5hbEV2ZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNpbGVuY2Ugb3RoZXIgYWN0aW9uc1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX2xheW91dENoYW5nZWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdG9nZ2xlU3RhdGUoe30pO1xufTtcblxuLyoqXG4gKiBEbyB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRvIHR3byBjb2x1bW5zP1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhdmFpbGFibGVIZWlnaHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRyaWVzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuX25lZWRzQ29sbGFwc2UgPSBmdW5jdGlvbihhdmFpbGFibGVIZWlnaHQsIGVudHJpZXMpIHtcblxuICAvLyB0b3AgbWFyZ2luICsgYm90dG9tIHRvZ2dsZSArIGJvdHRvbSBtYXJnaW5cbiAgLy8gaW1wbGVtZW50b3JzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleVxuICAvLyBjaGFuZ2UgdGhlIHBhbGV0dGUgc3R5bGVzXG4gIHZhciBtYXJnaW4gPSAyMCArIDEwICsgMjA7XG5cbiAgdmFyIGVudHJpZXNIZWlnaHQgPSBPYmplY3Qua2V5cyhlbnRyaWVzKS5sZW5ndGggKiA0NjtcblxuICByZXR1cm4gYXZhaWxhYmxlSGVpZ2h0IDwgZW50cmllc0hlaWdodCArIG1hcmdpbjtcbn07XG5cbi8qKlxuICogQ2xvc2UgdGhlIHBhbGV0dGVcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcblxuICB0aGlzLl90b2dnbGVTdGF0ZSh7XG4gICAgb3BlbjogZmFsc2UsXG4gICAgdHdvQ29sdW1uOiBmYWxzZVxuICB9KTtcbn07XG5cblxuLyoqXG4gKiBPcGVuIHRoZSBwYWxldHRlXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdG9nZ2xlU3RhdGUoeyBvcGVuOiB0cnVlIH0pO1xufTtcblxuXG5QYWxldHRlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbihvcGVuKSB7XG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMub3BlbigpO1xuICB9XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS5pc0FjdGl2ZVRvb2wgPSBmdW5jdGlvbih0b29sKSB7XG4gIHJldHVybiB0b29sICYmIHRoaXMuX2FjdGl2ZVRvb2wgPT09IHRvb2w7XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS51cGRhdGVUb29sSGlnaGxpZ2h0ID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZW50cmllc0NvbnRhaW5lcixcbiAgICAgIHRvb2xzQ29udGFpbmVyO1xuXG4gIGlmICghdGhpcy5fdG9vbHNDb250YWluZXIpIHtcbiAgICBlbnRyaWVzQ29udGFpbmVyID0gZG9tUXVlcnkoJy5kanMtcGFsZXR0ZS1lbnRyaWVzJywgdGhpcy5fY29udGFpbmVyKTtcblxuICAgIHRoaXMuX3Rvb2xzQ29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWdyb3VwPXRvb2xzXScsIGVudHJpZXNDb250YWluZXIpO1xuICB9XG5cbiAgdG9vbHNDb250YWluZXIgPSB0aGlzLl90b29sc0NvbnRhaW5lcjtcblxuICBmb3JFYWNoKHRvb2xzQ29udGFpbmVyLmNoaWxkcmVuLCBmdW5jdGlvbih0b29sKSB7XG4gICAgdmFyIGFjdGlvbk5hbWUgPSB0b29sLmdldEF0dHJpYnV0ZSgnZGF0YS1hY3Rpb24nKTtcblxuICAgIGlmICghYWN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b29sQ2xhc3NlcyA9IGRvbUNsYXNzZXModG9vbCk7XG5cbiAgICBhY3Rpb25OYW1lID0gYWN0aW9uTmFtZS5yZXBsYWNlKCctdG9vbCcsICcnKTtcblxuICAgIGlmICh0b29sQ2xhc3Nlcy5jb250YWlucygnZW50cnknKSAmJiBhY3Rpb25OYW1lID09PSBuYW1lKSB7XG4gICAgICB0b29sQ2xhc3Nlcy5hZGQoJ2hpZ2hsaWdodGVkLWVudHJ5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvb2xDbGFzc2VzLnJlbW92ZSgnaGlnaGxpZ2h0ZWQtZW50cnknKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwYWxldHRlIGlzIG9wZW5lZC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHBhbGV0dGUub3BlbigpO1xuICpcbiAqIGlmIChwYWxldHRlLmlzT3BlbigpKSB7XG4gKiAgIC8vIHllcywgd2UgYXJlIG9wZW5cbiAqIH1cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHBhbGV0dGUgaXMgb3BlbmVkXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZG9tQ2xhc3Nlcyh0aGlzLl9jb250YWluZXIpLmhhcyhQQUxFVFRFX09QRU5fQ0xTKTtcbn07XG5cbi8qKlxuICogR2V0IGNvbnRhaW5lciB0aGUgcGFsZXR0ZSBsaXZlcyBpbi5cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICovXG5QYWxldHRlLnByb3RvdHlwZS5fZ2V0UGFyZW50Q29udGFpbmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jYW52YXMuZ2V0Q29udGFpbmVyKCk7XG59O1xuXG5cbi8qIG1hcmt1cCBkZWZpbml0aW9uICovXG5cblBhbGV0dGUuSFRNTF9NQVJLVVAgPVxuICAnPGRpdiBjbGFzcz1cImRqcy1wYWxldHRlXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtcGFsZXR0ZS1lbnRyaWVzXCI+PC9kaXY+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtcGFsZXR0ZS10b2dnbGVcIj48L2Rpdj4nICtcbiAgJzwvZGl2Pic7XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcykge1xuXG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3NlcyhlbGVtZW50KTtcblxuICB2YXIgYWN0dWFsQ2xhc3NOYW1lcyA9IGlzQXJyYXkoY2xhc3NOYW1lcykgPyBjbGFzc05hbWVzIDogY2xhc3NOYW1lcy5zcGxpdCgvXFxzKy9nKTtcbiAgYWN0dWFsQ2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykge1xuICAgIGNsYXNzZXMuYWRkKGNscyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRQYWxldHRlRW50cmllcyhlbnRyaWVzLCBwcm92aWRlcikge1xuXG4gIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0UGFsZXR0ZUVudHJpZXMoKTtcblxuICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgIHJldHVybiBlbnRyaWVzT3JVcGRhdGVyKGVudHJpZXMpO1xuICB9XG5cbiAgZm9yRWFjaChlbnRyaWVzT3JVcGRhdGVyLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICBlbnRyaWVzW2lkXSA9IGVudHJ5O1xuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn0iLCJpbXBvcnQgUGFsZXR0ZSBmcm9tICcuL1BhbGV0dGUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdwYWxldHRlJyBdLFxuICBwYWxldHRlOiBbICd0eXBlJywgUGFsZXR0ZSBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0Z1bmN0aW9uLFxuICBpc0RlZmluZWQsXG4gIG9taXQsXG4gIHNpemVcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgZG9taWZ5IGFzIGRvbWlmeSxcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIHJlbW92ZSBhcyBkb21SZW1vdmVcbn0gZnJvbSAnbWluLWRvbSc7XG5cbnZhciBEQVRBX1JFRiA9ICdkYXRhLWlkJztcblxudmFyIENMT1NFX0VWRU5UUyA9IFtcbiAgJ2NvbnRleHRQYWQuY2xvc2UnLFxuICAnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLFxuICAnY29tbWFuZFN0YWNrLmNoYW5nZWQnXG5dO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIHBvcHVwIG1lbnUgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBvZiBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBjYW52YXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW2NvbmZpZy5zY2FsZT17IG1pbjogMS4wLCBtYXg6IDEuNSB9XVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWluXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWF4XVxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb3B1cE1lbnUoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdmFyIHNjYWxlID0gaXNEZWZpbmVkKGNvbmZpZyAmJiBjb25maWcuc2NhbGUpID8gY29uZmlnLnNjYWxlIDoge1xuICAgIG1pbjogMSxcbiAgICBtYXg6IDEuNVxuICB9O1xuXG4gIHRoaXMuX2NvbmZpZyA9IHtcbiAgICBzY2FsZTogc2NhbGVcbiAgfTtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX3Byb3ZpZGVycyA9IHt9O1xuICB0aGlzLl9jdXJyZW50ID0ge307XG59XG5cblBvcHVwTWVudS4kaW5qZWN0ID0gW1xuICAnY29uZmlnLnBvcHVwTWVudScsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHBvcHVwIG1lbnUgcHJvdmlkZXJcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5PTEwMDBdXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByb3ZpZGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHBvcHVwTWVudVByb3ZpZGVyID0ge1xuICogICBnZXRQb3B1cE1lbnVFbnRyaWVzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gKiAgICAgcmV0dXJuIHtcbiAqICAgICAgICdlbnRyeS0xJzoge1xuICogICAgICAgICBsYWJlbDogJ015IEVudHJ5JyxcbiAqICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsgYWxlcnQoXCJJIGhhdmUgYmVlbiBjbGlja2VkIVwiKTsgfVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqXG4gKiBwb3B1cE1lbnUucmVnaXN0ZXJQcm92aWRlcignbXlNZW51SUQnLCBwb3B1cE1lbnVQcm92aWRlcik7XG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKGlkLCBwcmlvcml0eSwgcHJvdmlkZXIpIHtcbiAgaWYgKCFwcm92aWRlcikge1xuICAgIHByb3ZpZGVyID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMub24oJ3BvcHVwTWVudS5nZXRQcm92aWRlcnMuJyArIGlkLCBwcmlvcml0eSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIHBvcHVwIG1lbnUgaGFzIGVudHJpZXMuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbXB0eVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbihlbGVtZW50LCBwcm92aWRlcklkKSB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICB9XG5cbiAgaWYgKCFwcm92aWRlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm92aWRlcklkIHBhcmFtZXRlciBpcyBtaXNzaW5nJyk7XG4gIH1cblxuICB2YXIgcHJvdmlkZXJzID0gdGhpcy5fZ2V0UHJvdmlkZXJzKHByb3ZpZGVySWQpO1xuXG4gIGlmICghcHJvdmlkZXJzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgZW50cmllcyA9IHRoaXMuX2dldEVudHJpZXMoZWxlbWVudCwgcHJvdmlkZXJzKSxcbiAgICAgIGhlYWRlckVudHJpZXMgPSB0aGlzLl9nZXRIZWFkZXJFbnRyaWVzKGVsZW1lbnQsIHByb3ZpZGVycyk7XG5cbiAgdmFyIGhhc0VudHJpZXMgPSBzaXplKGVudHJpZXMpID4gMCxcbiAgICAgIGhhc0hlYWRlckVudHJpZXMgPSBoZWFkZXJFbnRyaWVzICYmIHNpemUoaGVhZGVyRW50cmllcykgPiAwO1xuXG4gIHJldHVybiAhaGFzRW50cmllcyAmJiAhaGFzSGVhZGVyRW50cmllcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgZW50cmllcyBhbmQgb3BlbiBwb3B1cCBtZW51IGF0IGdpdmVuIHBvc2l0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IGlkIHByb3ZpZGVyIGlkXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBvc2l0aW9uXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBwb3B1cCBtZW51IGluc3RhbmNlXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlkLCBwb3NpdGlvbikge1xuXG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoaWQpO1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRWxlbWVudCBpcyBtaXNzaW5nJyk7XG4gIH1cblxuICBpZiAoIXByb3ZpZGVycyB8fCAhcHJvdmlkZXJzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVnaXN0ZXJlZCBwcm92aWRlcnMgZm9yOiAnICsgaWQpO1xuICB9XG5cbiAgaWYgKCFwb3NpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigndGhlIHBvc2l0aW9uIGFyZ3VtZW50IGlzIG1pc3NpbmcnKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdGhpcy5fZW1pdCgnb3BlbicpO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudCA9IHtcbiAgICBjbGFzc05hbWU6IGlkLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH07XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLl9nZXRFbnRyaWVzKGVsZW1lbnQsIHByb3ZpZGVycyksXG4gICAgICBoZWFkZXJFbnRyaWVzID0gdGhpcy5fZ2V0SGVhZGVyRW50cmllcyhlbGVtZW50LCBwcm92aWRlcnMpO1xuXG4gIGN1cnJlbnQuZW50cmllcyA9IGFzc2lnbih7fSwgZW50cmllcywgaGVhZGVyRW50cmllcyk7XG5cbiAgY3VycmVudC5jb250YWluZXIgPSB0aGlzLl9jcmVhdGVDb250YWluZXIoKTtcblxuICBpZiAoc2l6ZShoZWFkZXJFbnRyaWVzKSkge1xuICAgIGN1cnJlbnQuY29udGFpbmVyLmFwcGVuZENoaWxkKFxuICAgICAgdGhpcy5fY3JlYXRlRW50cmllcyhoZWFkZXJFbnRyaWVzLCAnZGpzLXBvcHVwLWhlYWRlcicpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzaXplKGVudHJpZXMpKSB7XG4gICAgY3VycmVudC5jb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLl9jcmVhdGVFbnRyaWVzKGVudHJpZXMsICdkanMtcG9wdXAtYm9keScpXG4gICAgKTtcbiAgfVxuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXMsXG4gICAgICBwYXJlbnQgPSBjYW52YXMuZ2V0Q29udGFpbmVyKCk7XG5cbiAgdGhpcy5fYXR0YWNoQ29udGFpbmVyKGN1cnJlbnQuY29udGFpbmVyLCBwYXJlbnQsIHBvc2l0aW9uLmN1cnNvcik7XG4gIHRoaXMuX2JpbmRBdXRvQ2xvc2UoKTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBwb3B1cCBtZW51IGFuZCB1bmJpbmRzIHRoZSBldmVudCBoYW5kbGVycy5cbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2Nsb3NlJyk7XG5cbiAgdGhpcy5fdW5iaW5kQXV0b0Nsb3NlKCk7XG4gIGRvbVJlbW92ZSh0aGlzLl9jdXJyZW50LmNvbnRhaW5lcik7XG4gIHRoaXMuX2N1cnJlbnQuY29udGFpbmVyID0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYW4gb3BlbiBwb3B1cCBtZW51IGV4aXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgb3BlblxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9jdXJyZW50LmNvbnRhaW5lcjtcbn07XG5cblxuLyoqXG4gKiBUcmlnZ2VyIGFuIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gZW50cnkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKlxuICogQHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gY2FsbGJhY2ssIGlmIGFueVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihldmVudCkge1xuXG4gIC8vIHNpbGVuY2Ugb3RoZXIgYWN0aW9uc1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIHZhciBlbGVtZW50ID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0LFxuICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZWxlbWVudCwgREFUQV9SRUYpO1xuXG4gIHZhciBlbnRyeSA9IHRoaXMuX2dldEVudHJ5KGVudHJ5SWQpO1xuXG4gIGlmIChlbnRyeS5hY3Rpb24pIHtcbiAgICByZXR1cm4gZW50cnkuYWN0aW9uLmNhbGwobnVsbCwgZXZlbnQsIGVudHJ5KTtcbiAgfVxufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0UHJvdmlkZXJzID0gZnVuY3Rpb24oaWQpIHtcblxuICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudCh7XG4gICAgdHlwZTogJ3BvcHVwTWVudS5nZXRQcm92aWRlcnMuJyArIGlkLFxuICAgIHByb3ZpZGVyczogW11cbiAgfSk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZShldmVudCk7XG5cbiAgcmV0dXJuIGV2ZW50LnByb3ZpZGVycztcbn07XG5cblBvcHVwTWVudS5wcm90b3R5cGUuX2dldEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBwcm92aWRlcnMpIHtcblxuICB2YXIgZW50cmllcyA9IHt9O1xuXG4gIGZvckVhY2gocHJvdmlkZXJzLCBmdW5jdGlvbihwcm92aWRlcikge1xuXG4gICAgLy8gaGFuZGxlIGxlZ2FjeSBtZXRob2RcbiAgICBpZiAoIXByb3ZpZGVyLmdldFBvcHVwTWVudUVudHJpZXMpIHtcbiAgICAgIGZvckVhY2gocHJvdmlkZXIuZ2V0RW50cmllcyhlbGVtZW50KSwgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgdmFyIGlkID0gZW50cnkuaWQ7XG5cbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlcnkgZW50cnkgbXVzdCBoYXZlIHRoZSBpZCBwcm9wZXJ0eSBzZXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVudHJpZXNbaWRdID0gb21pdChlbnRyeSwgWyAnaWQnIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZW50cmllc09yVXBkYXRlciA9IHByb3ZpZGVyLmdldFBvcHVwTWVudUVudHJpZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXNPclVwZGF0ZXIoZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgICAgIGVudHJpZXNbaWRdID0gZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0SGVhZGVyRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3ZpZGVycykge1xuXG4gIHZhciBlbnRyaWVzID0ge307XG5cbiAgZm9yRWFjaChwcm92aWRlcnMsIGZ1bmN0aW9uKHByb3ZpZGVyKSB7XG5cbiAgICAvLyBoYW5kbGUgbGVnYWN5IG1ldGhvZFxuICAgIGlmICghcHJvdmlkZXIuZ2V0UG9wdXBNZW51SGVhZGVyRW50cmllcykge1xuICAgICAgaWYgKCFwcm92aWRlci5nZXRIZWFkZXJFbnRyaWVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yRWFjaChwcm92aWRlci5nZXRIZWFkZXJFbnRyaWVzKGVsZW1lbnQpLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICB2YXIgaWQgPSBlbnRyeS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVyeSBlbnRyeSBtdXN0IGhhdmUgdGhlIGlkIHByb3BlcnR5IHNldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllc1tpZF0gPSBvbWl0KGVudHJ5LCBbICdpZCcgXSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0UG9wdXBNZW51SGVhZGVyRW50cmllcyhlbGVtZW50KTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGVudHJpZXNPclVwZGF0ZXIpKSB7XG4gICAgICBlbnRyaWVzID0gZW50cmllc09yVXBkYXRlcihlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yRWFjaChlbnRyaWVzT3JVcGRhdGVyLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICAgICAgZW50cmllc1tpZF0gPSBlbnRyeTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJpZXM7XG5cblxufTtcblxuLyoqXG4gKiBHZXRzIGFuIGVudHJ5IGluc3RhbmNlIChlaXRoZXIgZW50cnkgb3IgaGVhZGVyRW50cnkpIGJ5IGlkLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gZW50cnlJZFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gZW50cnkgaW5zdGFuY2VcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0RW50cnkgPSBmdW5jdGlvbihlbnRyeUlkKSB7XG5cbiAgdmFyIGVudHJ5ID0gdGhpcy5fY3VycmVudC5lbnRyaWVzW2VudHJ5SWRdO1xuXG4gIGlmICghZW50cnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VudHJ5IG5vdCBmb3VuZCcpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJ5O1xufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZW1pdCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwb3B1cE1lbnUuJyArIGV2ZW50TmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHBvcHVwIG1lbnUgY29udGFpbmVyLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYSBET00gY29udGFpbmVyXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZGpzLXBvcHVwXCI+JyksXG4gICAgICBwb3NpdGlvbiA9IHRoaXMuX2N1cnJlbnQucG9zaXRpb24sXG4gICAgICBjbGFzc05hbWUgPSB0aGlzLl9jdXJyZW50LmNsYXNzTmFtZTtcblxuICBhc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgbGVmdDogcG9zaXRpb24ueCArICdweCcsXG4gICAgdG9wOiBwb3NpdGlvbi55ICsgJ3B4JyxcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xuICB9KTtcblxuICBkb21DbGFzc2VzKGNvbnRhaW5lcikuYWRkKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgY29udGFpbmVyIHRvIHRoZSBET00uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lclxuICogQHBhcmFtIHtPYmplY3R9IHBhcmVudFxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9hdHRhY2hDb250YWluZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHBhcmVudCwgY3Vyc29yKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBFdmVudCBoYW5kbGVyXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnLmVudHJ5JyAsJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoZXZlbnQpO1xuICB9KTtcblxuICB0aGlzLl91cGRhdGVTY2FsZShjb250YWluZXIpO1xuXG4gIC8vIEF0dGFjaCB0byBET01cbiAgcGFyZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgaWYgKGN1cnNvcikge1xuICAgIHRoaXMuX2Fzc3VyZUlzSW5ib3VuZHMoY29udGFpbmVyLCBjdXJzb3IpO1xuICB9XG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyBwb3B1cCBzdHlsZS50cmFuc2Zvcm0gd2l0aCByZXNwZWN0IHRvIHRoZSBjb25maWcgYW5kIHpvb20gbGV2ZWwuXG4gKlxuICogQG1ldGhvZCBfdXBkYXRlU2NhbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX3VwZGF0ZVNjYWxlID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gIHZhciB6b29tID0gdGhpcy5fY2FudmFzLnpvb20oKTtcblxuICB2YXIgc2NhbGVDb25maWcgPSB0aGlzLl9jb25maWcuc2NhbGUsXG4gICAgICBtaW5TY2FsZSxcbiAgICAgIG1heFNjYWxlLFxuICAgICAgc2NhbGUgPSB6b29tO1xuXG4gIGlmIChzY2FsZUNvbmZpZyAhPT0gdHJ1ZSkge1xuXG4gICAgaWYgKHNjYWxlQ29uZmlnID09PSBmYWxzZSkge1xuICAgICAgbWluU2NhbGUgPSAxO1xuICAgICAgbWF4U2NhbGUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5TY2FsZSA9IHNjYWxlQ29uZmlnLm1pbjtcbiAgICAgIG1heFNjYWxlID0gc2NhbGVDb25maWcubWF4O1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQobWluU2NhbGUpICYmIHpvb20gPCBtaW5TY2FsZSkge1xuICAgICAgc2NhbGUgPSBtaW5TY2FsZTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZpbmVkKG1heFNjYWxlKSAmJiB6b29tID4gbWF4U2NhbGUpIHtcbiAgICAgIHNjYWxlID0gbWF4U2NhbGU7XG4gICAgfVxuXG4gIH1cblxuICBzZXRUcmFuc2Zvcm0oY29udGFpbmVyLCAnc2NhbGUoJyArIHNjYWxlICsgJyknKTtcbn07XG5cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVudSBpcyBhbHdheXMgZnVsbHkgc2hvd25cbiAqXG4gKiBAbWV0aG9kIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjb250YWluZXJcbiAqIEBwYXJhbSAge1Bvc2l0aW9ufSBjdXJzb3Ige3gsIHl9XG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2Fzc3VyZUlzSW5ib3VuZHMgPSBmdW5jdGlvbihjb250YWluZXIsIGN1cnNvcikge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzLFxuICAgICAgY2xpZW50UmVjdCA9IGNhbnZhcy5fY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHZhciBjb250YWluZXJYID0gY29udGFpbmVyLm9mZnNldExlZnQsXG4gICAgICBjb250YWluZXJZID0gY29udGFpbmVyLm9mZnNldFRvcCxcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLnNjcm9sbFdpZHRoLFxuICAgICAgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCxcbiAgICAgIG92ZXJBeGlzID0ge30sXG4gICAgICBsZWZ0LCB0b3A7XG5cbiAgdmFyIGN1cnNvclBvc2l0aW9uID0ge1xuICAgIHg6IGN1cnNvci54IC0gY2xpZW50UmVjdC5sZWZ0LFxuICAgIHk6IGN1cnNvci55IC0gY2xpZW50UmVjdC50b3BcbiAgfTtcblxuICBpZiAoY29udGFpbmVyWCArIGNvbnRhaW5lcldpZHRoID4gY2xpZW50UmVjdC53aWR0aCkge1xuICAgIG92ZXJBeGlzLnggPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lclkgKyBjb250YWluZXJIZWlnaHQgPiBjbGllbnRSZWN0LmhlaWdodCkge1xuICAgIG92ZXJBeGlzLnkgPSB0cnVlO1xuICB9XG5cbiAgaWYgKG92ZXJBeGlzLnggJiYgb3ZlckF4aXMueSkge1xuICAgIGxlZnQgPSBjdXJzb3JQb3NpdGlvbi54IC0gY29udGFpbmVyV2lkdGggKyAncHgnO1xuICAgIHRvcCA9IGN1cnNvclBvc2l0aW9uLnkgLSBjb250YWluZXJIZWlnaHQgKyAncHgnO1xuICB9IGVsc2UgaWYgKG92ZXJBeGlzLngpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCAtIGNvbnRhaW5lcldpZHRoICsgJ3B4JztcbiAgICB0b3AgPSBjdXJzb3JQb3NpdGlvbi55ICsgJ3B4JztcbiAgfSBlbHNlIGlmIChvdmVyQXhpcy55ICYmIGN1cnNvclBvc2l0aW9uLnkgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCArICdweCc7XG4gICAgdG9wID0gMTAgKyAncHgnO1xuICB9IGVsc2UgaWYgKG92ZXJBeGlzLnkpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCArICdweCc7XG4gICAgdG9wID0gY3Vyc29yUG9zaXRpb24ueSAtIGNvbnRhaW5lckhlaWdodCArICdweCc7XG4gIH1cblxuICBhc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7IGxlZnQ6IGxlZnQsIHRvcDogdG9wIH0sIHsgdmlzaWJpbGl0eTogJ3Zpc2libGUnLCAnei1pbmRleCc6IDEwMDAgfSk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGxpc3Qgb2YgZW50cmllcyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgRE9NIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGVudHJpZXMgYW4gYXJyYXkgb2YgZW50cnkgb2JqZWN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZW50cnkgY29udGFpbmVyXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhIERPTSBjb250YWluZXJcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fY3JlYXRlRW50cmllcyA9IGZ1bmN0aW9uKGVudHJpZXMsIGNsYXNzTmFtZSkge1xuXG4gIHZhciBlbnRyaWVzQ29udGFpbmVyID0gZG9taWZ5KCc8ZGl2PicpLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgZG9tQ2xhc3NlcyhlbnRyaWVzQ29udGFpbmVyKS5hZGQoY2xhc3NOYW1lKTtcblxuICBmb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgIHZhciBlbnRyeUNvbnRhaW5lciA9IHNlbGYuX2NyZWF0ZUVudHJ5KGVudHJ5LCBpZCk7XG4gICAgZW50cmllc0NvbnRhaW5lci5hcHBlbmRDaGlsZChlbnRyeUNvbnRhaW5lcik7XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzQ29udGFpbmVyO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBzaW5nbGUgZW50cnkgYW5kIHJldHVybnMgaXQgYXMgYSBET00gY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZW50cnlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGEgRE9NIGNvbnRhaW5lclxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9jcmVhdGVFbnRyeSA9IGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuXG4gIHZhciBlbnRyeUNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdj4nKSxcbiAgICAgIGVudHJ5Q2xhc3NlcyA9IGRvbUNsYXNzZXMoZW50cnlDb250YWluZXIpO1xuXG4gIGVudHJ5Q2xhc3Nlcy5hZGQoJ2VudHJ5Jyk7XG5cbiAgaWYgKGVudHJ5LmNsYXNzTmFtZSkge1xuICAgIGVudHJ5LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICBlbnRyeUNsYXNzZXMuYWRkKGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBkb21BdHRyKGVudHJ5Q29udGFpbmVyLCBEQVRBX1JFRiwgaWQpO1xuXG4gIGlmIChlbnRyeS5sYWJlbCkge1xuICAgIHZhciBsYWJlbCA9IGRvbWlmeSgnPHNwYW4+Jyk7XG4gICAgbGFiZWwudGV4dENvbnRlbnQgPSBlbnRyeS5sYWJlbDtcbiAgICBlbnRyeUNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7XG4gIH1cblxuICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICBlbnRyeUNvbnRhaW5lci5hcHBlbmRDaGlsZChkb21pZnkoJzxpbWcgc3JjPVwiJyArIGVudHJ5LmltYWdlVXJsICsgJ1wiIC8+JykpO1xuICB9XG5cbiAgaWYgKGVudHJ5LmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgIGVudHJ5Q2xhc3Nlcy5hZGQoJ2FjdGl2ZScpO1xuICB9XG5cbiAgaWYgKGVudHJ5LmRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgZW50cnlDbGFzc2VzLmFkZCgnZGlzYWJsZWQnKTtcbiAgfVxuXG4gIGlmIChlbnRyeS50aXRsZSkge1xuICAgIGVudHJ5Q29udGFpbmVyLnRpdGxlID0gZW50cnkudGl0bGU7XG4gIH1cblxuICByZXR1cm4gZW50cnlDb250YWluZXI7XG59O1xuXG5cbi8qKlxuICogU2V0IHVwIGxpc3RlbmVyIHRvIGNsb3NlIHBvcHVwIGF1dG9tYXRpY2FsbHkgb24gY2VydGFpbiBldmVudHMuXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2JpbmRBdXRvQ2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMub25jZShDTE9TRV9FVkVOVFMsIHRoaXMuY2xvc2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSB0aGUgYXV0by1jbG9zaW5nIGxpc3RlbmVyLlxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl91bmJpbmRBdXRvQ2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMub2ZmKENMT1NFX0VWRU5UUywgdGhpcy5jbG9zZSwgdGhpcyk7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBzZXRUcmFuc2Zvcm0oZWxlbWVudCwgdHJhbnNmb3JtKSB7XG4gIGVsZW1lbnQuc3R5bGVbJ3RyYW5zZm9ybS1vcmlnaW4nXSA9ICd0b3AgbGVmdCc7XG5cbiAgWyAnJywgJy1tcy0nLCAnLXdlYmtpdC0nIF0uZm9yRWFjaChmdW5jdGlvbihwcmVmaXgpIHtcbiAgICBlbGVtZW50LnN0eWxlW3ByZWZpeCArICd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTtcbiAgfSk7XG59IiwiaW1wb3J0IFBvcHVwTWVudSBmcm9tICcuL1BvcHVwTWVudSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3BvcHVwTWVudScgXSxcbiAgcG9wdXBNZW51OiBbICd0eXBlJywgUG9wdXBNZW51IF1cbn07XG4iLCJpbXBvcnQge1xyXG4gIGZvckVhY2hcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXHJcbiAgYXR0ciBhcyBzdmdBdHRyLFxyXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcclxuICBjbG9uZSBhcyBzdmdDbG9uZSxcclxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxyXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcclxufSBmcm9tICd0aW55LXN2Zyc7XHJcblxyXG5pbXBvcnQgeyBxdWVyeSBhcyBkb21RdWVyeSB9IGZyb20gJ21pbi1kb20nO1xyXG5cclxuaW1wb3J0IHsgZ2V0VmlzdWFsIH0gZnJvbSAnLi4vLi4vdXRpbC9HcmFwaGljc1V0aWwnO1xyXG5cclxudmFyIE1BUktFUl9UWVBFUyA9IFtcclxuICAnbWFya2VyLXN0YXJ0JyxcclxuICAnbWFya2VyLW1pZCcsXHJcbiAgJ21hcmtlci1lbmQnXHJcbl07XHJcblxyXG52YXIgTk9ERVNfQ0FOX0hBVkVfTUFSS0VSID0gW1xyXG4gICdjaXJjbGUnLFxyXG4gICdlbGxpcHNlJyxcclxuICAnbGluZScsXHJcbiAgJ3BhdGgnLFxyXG4gICdwb2x5Z29uJyxcclxuICAncG9seWxpbmUnLFxyXG4gICdyZWN0J1xyXG5dO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHN1cHBvcnQgZm9yIHByZXZpZXdzIG9mIG1vdmluZy9yZXNpemluZyBlbGVtZW50cy5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFByZXZpZXdTdXBwb3J0KGVsZW1lbnRSZWdpc3RyeSwgZXZlbnRCdXMsIGNhbnZhcywgc3R5bGVzKSB7XHJcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xyXG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcclxuICB0aGlzLl9zdHlsZXMgPSBzdHlsZXM7XHJcblxyXG4gIHRoaXMuX2Nsb25lZE1hcmtlcnMgPSB7fTtcclxuXHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbignZHJhZy5jbGVhbnVwJywgZnVuY3Rpb24oKSB7XHJcbiAgICBmb3JFYWNoKHNlbGYuX2Nsb25lZE1hcmtlcnMsIGZ1bmN0aW9uKGNsb25lZE1hcmtlcikge1xyXG4gICAgICBzdmdSZW1vdmUoY2xvbmVkTWFya2VyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNlbGYuX2Nsb25lZE1hcmtlcnMgPSB7fTtcclxuICB9KTtcclxufVxyXG5cclxuUHJldmlld1N1cHBvcnQuJGluamVjdCA9IFtcclxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnLFxyXG4gICdzdHlsZXMnXHJcbl07XHJcblxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgZ3JhcGhpY3Mgb2YgYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLmdldEdmeCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBtb3ZlIHByZXZpZXcgb2YgYSBnaXZlbiBzaGFwZSB0byBhIGdpdmVuIHN2ZyBncm91cC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdyb3VwXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2dmeF1cclxuICpcclxuICogQHJldHVybiB7U1ZHRWxlbWVudH0gZHJhZ2dlclxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLmFkZERyYWdnZXIgPSBmdW5jdGlvbihlbGVtZW50LCBncm91cCwgZ2Z4KSB7XHJcbiAgZ2Z4ID0gZ2Z4IHx8IHRoaXMuZ2V0R2Z4KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZHJhZ2dlciA9IHN2Z0Nsb25lKGdmeCk7XHJcbiAgdmFyIGJib3ggPSBnZnguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gIHRoaXMuX2Nsb25lTWFya2VycyhnZXRWaXN1YWwoZHJhZ2dlcikpO1xyXG5cclxuICBzdmdBdHRyKGRyYWdnZXIsIHRoaXMuX3N0eWxlcy5jbHMoJ2Rqcy1kcmFnZ2VyJywgW10sIHtcclxuICAgIHg6IGJib3gudG9wLFxyXG4gICAgeTogYmJveC5sZWZ0XHJcbiAgfSkpO1xyXG5cclxuICBzdmdBcHBlbmQoZ3JvdXAsIGRyYWdnZXIpO1xyXG5cclxuICByZXR1cm4gZHJhZ2dlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgcmVzaXplIHByZXZpZXcgb2YgYSBnaXZlbiBzaGFwZSB0byBhIGdpdmVuIHN2ZyBncm91cC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdyb3VwXHJcbiAqXHJcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IGZyYW1lXHJcbiAqL1xyXG5QcmV2aWV3U3VwcG9ydC5wcm90b3R5cGUuYWRkRnJhbWUgPSBmdW5jdGlvbihzaGFwZSwgZ3JvdXApIHtcclxuXHJcbiAgdmFyIGZyYW1lID0gc3ZnQ3JlYXRlKCdyZWN0Jywge1xyXG4gICAgY2xhc3M6ICdkanMtcmVzaXplLW92ZXJsYXknLFxyXG4gICAgd2lkdGg6ICBzaGFwZS53aWR0aCxcclxuICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0LFxyXG4gICAgeDogc2hhcGUueCxcclxuICAgIHk6IHNoYXBlLnlcclxuICB9KTtcclxuXHJcbiAgc3ZnQXBwZW5kKGdyb3VwLCBmcmFtZSk7XHJcblxyXG4gIHJldHVybiBmcmFtZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBhbGwgbWFya2VycyByZWZlcmVuY2VkIGJ5IGEgbm9kZSBhbmQgaXRzIGNoaWxkIG5vZGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLl9jbG9uZU1hcmtlcnMgPSBmdW5jdGlvbihnZngpIHtcclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIGlmIChnZnguY2hpbGROb2Rlcykge1xyXG5cclxuICAgIC8vIFRPRE86IHVzZSBmb3JFYWNoIG9uY2Ugd2UgZHJvcCBQaGFudG9tSlNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2Z4LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGNsb25lIG1hcmtlcnMgb2YgY2hpbGQgbm9kZXNcclxuICAgICAgc2VsZi5fY2xvbmVNYXJrZXJzKGdmeC5jaGlsZE5vZGVzWyBpIF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKCFjYW5IYXZlTWFya2VyKGdmeCkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIE1BUktFUl9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uKG1hcmtlclR5cGUpIHtcclxuICAgIGlmIChzdmdBdHRyKGdmeCwgbWFya2VyVHlwZSkpIHtcclxuICAgICAgdmFyIG1hcmtlciA9IGdldE1hcmtlcihnZngsIG1hcmtlclR5cGUsIHNlbGYuX2NhbnZhcy5nZXRDb250YWluZXIoKSk7XHJcblxyXG4gICAgICBzZWxmLl9jbG9uZU1hcmtlcihnZngsIG1hcmtlciwgbWFya2VyVHlwZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgbWFya2VyIHJlZmVyZW5jZWQgYnkgYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBtYXJrZXJcclxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmtlclR5cGVcclxuICovXHJcblByZXZpZXdTdXBwb3J0LnByb3RvdHlwZS5fY2xvbmVNYXJrZXIgPSBmdW5jdGlvbihnZngsIG1hcmtlciwgbWFya2VyVHlwZSkge1xyXG4gIHZhciBtYXJrZXJJZCA9IG1hcmtlci5pZDtcclxuXHJcbiAgdmFyIGNsb25lZE1hcmtlciA9IHRoaXMuX2Nsb25lZE1hcmtlcnNbIG1hcmtlcklkIF07XHJcblxyXG4gIGlmICghY2xvbmVkTWFya2VyKSB7XHJcbiAgICBjbG9uZWRNYXJrZXIgPSBzdmdDbG9uZShtYXJrZXIpO1xyXG5cclxuICAgIHZhciBjbG9uZWRNYXJrZXJJZCA9IG1hcmtlcklkICsgJy1jbG9uZSc7XHJcblxyXG4gICAgY2xvbmVkTWFya2VyLmlkID0gY2xvbmVkTWFya2VySWQ7XHJcblxyXG4gICAgc3ZnQ2xhc3NlcyhjbG9uZWRNYXJrZXIpXHJcbiAgICAgIC5hZGQoJ2Rqcy1kcmFnZ2VyJylcclxuICAgICAgLmFkZCgnZGpzLWRyYWdnZXItbWFya2VyJyk7XHJcblxyXG4gICAgdGhpcy5fY2xvbmVkTWFya2Vyc1sgbWFya2VySWQgXSA9IGNsb25lZE1hcmtlcjtcclxuXHJcbiAgICB2YXIgZGVmcyA9IGRvbVF1ZXJ5KCdkZWZzJywgdGhpcy5fY2FudmFzLl9zdmcpO1xyXG5cclxuICAgIGlmICghZGVmcykge1xyXG4gICAgICBkZWZzID0gc3ZnQ3JlYXRlKCdkZWZzJyk7XHJcblxyXG4gICAgICBzdmdBcHBlbmQodGhpcy5fY2FudmFzLl9zdmcsIGRlZnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN2Z0FwcGVuZChkZWZzLCBjbG9uZWRNYXJrZXIpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlZmVyZW5jZSA9IGlkVG9SZWZlcmVuY2UodGhpcy5fY2xvbmVkTWFya2Vyc1sgbWFya2VySWQgXS5pZCk7XHJcblxyXG4gIHN2Z0F0dHIoZ2Z4LCBtYXJrZXJUeXBlLCByZWZlcmVuY2UpO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG4vKipcclxuICogR2V0IG1hcmtlciBvZiBnaXZlbiB0eXBlIHJlZmVyZW5jZWQgYnkgbm9kZS5cclxuICpcclxuICogQHBhcmFtIHtOb2RlfSBub2RlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrZXJUeXBlXHJcbiAqIEBwYXJhbSB7Tm9kZX0gW3BhcmVudE5vZGVdXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX1cclxuICovXHJcbmZ1bmN0aW9uIGdldE1hcmtlcihub2RlLCBtYXJrZXJUeXBlLCBwYXJlbnROb2RlKSB7XHJcbiAgdmFyIGlkID0gcmVmZXJlbmNlVG9JZChzdmdBdHRyKG5vZGUsIG1hcmtlclR5cGUpKTtcclxuXHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KCdtYXJrZXIjJyArIGlkLCBwYXJlbnROb2RlIHx8IGRvY3VtZW50KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBJRCBvZiBmcmFnbWVudCB3aXRoaW4gY3VycmVudCBkb2N1bWVudCBmcm9tIGl0cyBmdW5jdGlvbmFsIElSSSByZWZlcmVuY2UuXHJcbiAqIFJlZmVyZW5jZXMgbWF5IHVzZSBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cclxuZnVuY3Rpb24gcmVmZXJlbmNlVG9JZChyZWZlcmVuY2UpIHtcclxuICByZXR1cm4gcmVmZXJlbmNlLm1hdGNoKC91cmxcXChbJ1wiXT8jKFteJ1wiXSopWydcIl0/XFwpLylbMV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgZnVuY3Rpb25hbCBJUkkgcmVmZXJlbmNlIGZvciBnaXZlbiBJRCBvZiBmcmFnbWVudCB3aXRoaW4gY3VycmVudCBkb2N1bWVudC5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAqL1xyXG5mdW5jdGlvbiBpZFRvUmVmZXJlbmNlKGlkKSB7XHJcbiAgcmV0dXJuICd1cmwoIycgKyBpZCArICcpJztcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIHdldGhlciBub2RlIHR5cGUgY2FuIGhhdmUgbWFya2VyIGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIGNhbkhhdmVNYXJrZXIobm9kZSkge1xyXG4gIHJldHVybiBOT0RFU19DQU5fSEFWRV9NQVJLRVIuaW5kZXhPZihub2RlLm5vZGVOYW1lKSAhPT0gLTE7XHJcbn0iLCJpbXBvcnQgUHJldmlld1N1cHBvcnQgZnJvbSAnLi9QcmV2aWV3U3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3ByZXZpZXdTdXBwb3J0JyBdLFxuICBwcmV2aWV3U3VwcG9ydDogWyAndHlwZScsIFByZXZpZXdTdXBwb3J0IF1cbn07XG4iLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBhbGxvdyByZXBsYWNpbmcgb2YgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlcGxhY2UobW9kZWxpbmcpIHtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5SZXBsYWNlLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG9sZEVsZW1lbnQgLSBFbGVtZW50IHRvIGJlIHJlcGxhY2VkXG4gKiBAcGFyYW0ge09iamVjdH0gIG5ld0VsZW1lbnREYXRhIC0gQ29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IGVsZW1lbnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgdGhlIG5ldyBib3VuZHMgYW5kIHR5cGUuXG4gKiBAcGFyYW0ge09iamVjdH0gIG9wdGlvbnMgLSBDdXN0b20gb3B0aW9ucyB0aGF0IHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGNvbnRleHQuIEl0IGNhbiBiZSB1c2VkIHRvIGluamVjdCBkYXRhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5lZWRlZCBpbiB0aGUgY29tbWFuZCBjaGFpbi4gRm9yIGV4YW1wbGUgaXQgY291bGQgYmUgdXNlZCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRidXMub24oJ2NvbW1hbmRTdGFjay5zaGFwZS5yZXBsYWNlLnBvc3RFeGVjdXRlJykgdG8gY2hhbmdlIHNoYXBlIGF0dHJpYnV0ZXMgYWZ0ZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlIGNyZWF0aW9uLlxuICovXG5SZXBsYWNlLnByb3RvdHlwZS5yZXBsYWNlRWxlbWVudCA9IGZ1bmN0aW9uKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnREYXRhLCBvcHRpb25zKSB7XG5cbiAgaWYgKG9sZEVsZW1lbnQud2F5cG9pbnRzKSB7XG5cbiAgICAvLyBUT0RPKG5pa2t1KTogd2UgZG8gbm90IHJlcGxhY2UgY29ubmVjdGlvbnMsIHlldFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHdpZHRoID0gbmV3RWxlbWVudERhdGEud2lkdGggfHwgb2xkRWxlbWVudC53aWR0aCxcbiAgICAgIGhlaWdodCA9IG5ld0VsZW1lbnREYXRhLmhlaWdodCB8fCBvbGRFbGVtZW50LmhlaWdodCxcbiAgICAgIHggPSBuZXdFbGVtZW50RGF0YS54IHx8IG9sZEVsZW1lbnQueCxcbiAgICAgIHkgPSBuZXdFbGVtZW50RGF0YS55IHx8IG9sZEVsZW1lbnQueSxcbiAgICAgIGNlbnRlclggPSByb3VuZCh4ICsgd2lkdGggLyAyKSxcbiAgICAgIGNlbnRlclkgPSByb3VuZCh5ICsgaGVpZ2h0IC8gMik7XG5cbiAgLy8gbW9kZWxpbmcgQVBJIHJlcXVpcmVzIGNlbnRlciBjb29yZGluYXRlcyxcbiAgLy8gYWNjb3VudCBmb3IgdGhhdCB3aGVuIGhhbmRsaW5nIHNoYXBlIGJvdW5kc1xuXG4gIHJldHVybiBtb2RlbGluZy5yZXBsYWNlU2hhcGUoXG4gICAgb2xkRWxlbWVudCxcbiAgICBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIG5ld0VsZW1lbnREYXRhLFxuICAgICAge1xuICAgICAgICB4OiBjZW50ZXJYLFxuICAgICAgICB5OiBjZW50ZXJZLFxuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICB9XG4gICAgKSxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuIiwiaW1wb3J0IFJlcGxhY2UgZnJvbSAnLi9SZXBsYWNlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAncmVwbGFjZScgXSxcbiAgcmVwbGFjZTogWyAndHlwZScsIFJlcGxhY2UgXVxufTsiLCJpbXBvcnQge1xuICBwaWNrLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICByZXNpemVCb3VuZHMsXG4gIGVuc3VyZUNvbnN0cmFpbnRzLFxuICBjb21wdXRlQ2hpbGRyZW5CQm94LFxuICBnZXRNaW5SZXNpemVCb3VuZHNcbn0gZnJvbSAnLi9SZXNpemVVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRNaWQsXG4gIHJvdW5kQm91bmRzXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIERFRkFVTFRfTUlOX1dJRFRIID0gMTA7XG5cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIHJlc2l6aW5nIG9mIHNoYXBlcyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBhcmUgcGFydCBvZiBzaGFwZSByZXNpemU6XG4gKlxuICogICogYWRkaW5nIHJlc2l6ZSBoYW5kbGVzLFxuICogICogY3JlYXRpbmcgYSB2aXN1YWwgZHVyaW5nIHJlc2l6ZVxuICogICogY2hlY2tpbmcgcmVzaXplIHJ1bGVzXG4gKiAgKiBjb21taXR0aW5nIGEgY2hhbmdlIG9uY2UgZmluaXNoZWRcbiAqXG4gKlxuICogIyMgQ3VzdG9taXppbmdcbiAqXG4gKiBJdCdzIHBvc3NpYmxlIHRvIGN1c3RvbWl6ZSB0aGUgcmVzaXppbmcgYmVoYXZpb3VyIGJ5IGludGVyY2VwdGluZyAncmVzaXplLnN0YXJ0J1xuICogYW5kIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgdGhyb3VnaCB0aGUgJ2NvbnRleHQnOlxuICpcbiAqICAgKiBtaW5EaW1lbnNpb25zICh7IHdpZHRoLCBoZWlnaHQgfSk6IG1pbmltdW0gc2hhcGUgZGltZW5zaW9uc1xuICpcbiAqICAgKiBjaGlsZHJlbkJveFBhZGRpbmcgKHsgbGVmdCwgdG9wLCBib3R0b20sIHJpZ2h0IH0gfHwgbnVtYmVyKTpcbiAqICAgICBnYXAgYmV0d2VlbiB0aGUgbWluaW11bSBib3VuZGluZyBib3ggYW5kIHRoZSBjb250YWluZXJcbiAqXG4gKiBmLmV4OlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCAxNTAwLCBmdW5jdGlvbihldmVudCkge1xuICogICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gKlxuICogIGNvbnRleHQubWluRGltZW5zaW9ucyA9IHsgd2lkdGg6IDE0MCwgaGVpZ2h0OiAxMjAgfTtcbiAqXG4gKiAgLy8gUGFzc2luZyBnZW5lcmFsIHBhZGRpbmdcbiAqICBjb250ZXh0LmNoaWxkcmVuQm94UGFkZGluZyA9IDMwO1xuICpcbiAqICAvLyBQYXNzaW5nIHBhZGRpbmcgdG8gYSBzcGVjaWZpYyBzaWRlXG4gKiAgY29udGV4dC5jaGlsZHJlbkJveFBhZGRpbmcubGVmdCA9IDIwO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplKGV2ZW50QnVzLCBydWxlcywgbW9kZWxpbmcsIGRyYWdnaW5nKSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cblxuICAvKipcbiAgICogSGFuZGxlIHJlc2l6ZSBtb3ZlIGJ5IHNwZWNpZmllZCBkZWx0YS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogQHBhcmFtIHtQb2ludH0gZGVsdGFcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmUoY29udGV4dCwgZGVsdGEpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgICByZXNpemVDb25zdHJhaW50cyA9IGNvbnRleHQucmVzaXplQ29uc3RyYWludHMsXG4gICAgICAgIG5ld0JvdW5kcztcblxuICAgIGNvbnRleHQuZGVsdGEgPSBkZWx0YTtcblxuICAgIG5ld0JvdW5kcyA9IHJlc2l6ZUJvdW5kcyhzaGFwZSwgZGlyZWN0aW9uLCBkZWx0YSk7XG5cbiAgICAvLyBlbnN1cmUgY29uc3RyYWludHMgZHVyaW5nIHJlc2l6ZVxuICAgIGNvbnRleHQubmV3Qm91bmRzID0gZW5zdXJlQ29uc3RyYWludHMobmV3Qm91bmRzLCByZXNpemVDb25zdHJhaW50cyk7XG5cbiAgICAvLyB1cGRhdGUgKyBjYWNoZSBleGVjdXRhYmxlIHN0YXRlXG4gICAgY29udGV4dC5jYW5FeGVjdXRlID0gc2VsZi5jYW5SZXNpemUoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHJlc2l6ZSBzdGFydC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVTdGFydChjb250ZXh0KSB7XG5cbiAgICB2YXIgcmVzaXplQ29uc3RyYWludHMgPSBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzLFxuXG4gICAgICAgIC8vIGV2YWx1YXRlIG1pbkJvdW5kcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWluQm91bmRzID0gY29udGV4dC5taW5Cb3VuZHM7XG5cbiAgICBpZiAocmVzaXplQ29uc3RyYWludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtaW5Cb3VuZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWluQm91bmRzID0gc2VsZi5jb21wdXRlTWluUmVzaXplQm94KGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnRleHQucmVzaXplQ29uc3RyYWludHMgPSB7XG4gICAgICBtaW46IGFzVFJCTChtaW5Cb3VuZHMpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVzaXplIGVuZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVFbmQoY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgaWYgKGNhbkV4ZWN1dGUpIHtcblxuICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBmb3IgbmV3IGJvdW5kc1xuICAgICAgLy8gKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICAgIG5ld0JvdW5kcyA9IHJvdW5kQm91bmRzKG5ld0JvdW5kcyk7XG5cbiAgICAgIGlmICghYm91bmRzQ2hhbmdlZChzaGFwZSwgbmV3Qm91bmRzKSkge1xuXG4gICAgICAgIC8vIG5vIHJlc2l6ZSBuZWNlc3NhcnlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBwZXJmb3JtIHRoZSBhY3R1YWwgcmVzaXplXG4gICAgICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgICB9XG4gIH1cblxuXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGhhbmRsZVN0YXJ0KGV2ZW50LmNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbigncmVzaXplLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBkZWx0YSA9IHtcbiAgICAgIHg6IGV2ZW50LmR4LFxuICAgICAgeTogZXZlbnQuZHlcbiAgICB9O1xuXG4gICAgaGFuZGxlTW92ZShldmVudC5jb250ZXh0LCBkZWx0YSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBoYW5kbGVFbmQoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xuXG59XG5cblxuUmVzaXplLnByb3RvdHlwZS5jYW5SZXNpemUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBydWxlcyA9IHRoaXMuX3J1bGVzO1xuXG4gIHZhciBjdHggPSBwaWNrKGNvbnRleHQsIFsgJ25ld0JvdW5kcycsICdzaGFwZScsICdkZWx0YScsICdkaXJlY3Rpb24nIF0pO1xuXG4gIHJldHVybiBydWxlcy5hbGxvd2VkKCdzaGFwZS5yZXNpemUnLCBjdHgpO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSBhIHJlc2l6ZSBvcGVyYXRpb24uXG4gKlxuICogWW91IG1heSBzcGVjaWZ5IGFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhbmQgbXVzdCBzcGVjaWZ5IGFcbiAqIHJlc2l6ZSBkaXJlY3Rpb24gZHVyaW5nIGFjdGl2YXRpb24gb2YgdGhlIHJlc2l6ZSBldmVudC5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gY29udGV4dE9yRGlyZWN0aW9uXG4gKi9cblJlc2l6ZS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbihldmVudCwgc2hhcGUsIGNvbnRleHRPckRpcmVjdGlvbikge1xuICB2YXIgZHJhZ2dpbmcgPSB0aGlzLl9kcmFnZ2luZyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkaXJlY3Rpb247XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0T3JEaXJlY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgY29udGV4dE9yRGlyZWN0aW9uID0ge1xuICAgICAgZGlyZWN0aW9uOiBjb250ZXh0T3JEaXJlY3Rpb25cbiAgICB9O1xuICB9XG5cbiAgY29udGV4dCA9IGFzc2lnbih7IHNoYXBlOiBzaGFwZSB9LCBjb250ZXh0T3JEaXJlY3Rpb24pO1xuXG4gIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uO1xuXG4gIGlmICghZGlyZWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgYSBkaXJlY3Rpb24gKG58d3xzfGV8bnd8c2V8bmV8c3cpJyk7XG4gIH1cblxuICBkcmFnZ2luZy5pbml0KGV2ZW50LCBnZXRSZWZlcmVuY2VQb2ludChzaGFwZSwgZGlyZWN0aW9uKSwgJ3Jlc2l6ZScsIHtcbiAgICBhdXRvQWN0aXZhdGU6IHRydWUsXG4gICAgY3Vyc29yOiBnZXRDdXJzb3IoZGlyZWN0aW9uKSxcbiAgICBkYXRhOiB7XG4gICAgICBzaGFwZTogc2hhcGUsXG4gICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfVxuICB9KTtcbn07XG5cblJlc2l6ZS5wcm90b3R5cGUuY29tcHV0ZU1pblJlc2l6ZUJveCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgbWluRGltZW5zaW9ucyxcbiAgICAgIGNoaWxkcmVuQm91bmRzO1xuXG4gIG1pbkRpbWVuc2lvbnMgPSBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgfHwge1xuICAgIHdpZHRoOiBERUZBVUxUX01JTl9XSURUSCxcbiAgICBoZWlnaHQ6IERFRkFVTFRfTUlOX1dJRFRIXG4gIH07XG5cbiAgLy8gZ2V0IGNoaWxkcmVuIGJvdW5kc1xuICBjaGlsZHJlbkJvdW5kcyA9IGNvbXB1dGVDaGlsZHJlbkJCb3goc2hhcGUsIGNvbnRleHQuY2hpbGRyZW5Cb3hQYWRkaW5nKTtcblxuICAvLyBnZXQgY29ycmVjdCBtaW5pbXVtIGJvdW5kcyBmcm9tIGdpdmVuIHJlc2l6ZSBkaXJlY3Rpb25cbiAgLy8gYmFzaWNhbGx5IGVuc3VyZXMgdGhhdCB0aGUgbWluQm91bmRzIGlzIG1heChjaGlsZHJlbkJvdW5kcywgbWluRGltZW5zaW9ucylcbiAgcmV0dXJuIGdldE1pblJlc2l6ZUJvdW5kcyhkaXJlY3Rpb24sIHNoYXBlLCBtaW5EaW1lbnNpb25zLCBjaGlsZHJlbkJvdW5kcyk7XG59O1xuXG5cblJlc2l6ZS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAncnVsZXMnLFxuICAnbW9kZWxpbmcnLFxuICAnZHJhZ2dpbmcnXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gYm91bmRzQ2hhbmdlZChzaGFwZSwgbmV3Qm91bmRzKSB7XG4gIHJldHVybiBzaGFwZS54ICE9PSBuZXdCb3VuZHMueCB8fFxuICAgIHNoYXBlLnkgIT09IG5ld0JvdW5kcy55IHx8XG4gICAgc2hhcGUud2lkdGggIT09IG5ld0JvdW5kcy53aWR0aCB8fFxuICAgIHNoYXBlLmhlaWdodCAhPT0gbmV3Qm91bmRzLmhlaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZmVyZW5jZVBvaW50KHNoYXBlLCBkaXJlY3Rpb24pIHtcbiAgdmFyIG1pZCA9IGdldE1pZChzaGFwZSksXG4gICAgICB0cmJsID0gYXNUUkJMKHNoYXBlKTtcblxuICB2YXIgcmVmZXJlbmNlUG9pbnQgPSB7XG4gICAgeDogbWlkLngsXG4gICAgeTogbWlkLnlcbiAgfTtcblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC55ID0gdHJibC50b3A7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3MnKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC55ID0gdHJibC5ib3R0b207XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC54ID0gdHJibC5yaWdodDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMSkge1xuICAgIHJlZmVyZW5jZVBvaW50LnggPSB0cmJsLmxlZnQ7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnNvcihkaXJlY3Rpb24pIHtcbiAgdmFyIHByZWZpeCA9ICdyZXNpemUtJztcblxuICBpZiAoZGlyZWN0aW9uID09PSAnbicgfHwgZGlyZWN0aW9uID09PSAncycpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ25zJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJyB8fCBkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgIHJldHVybiBwcmVmaXggKyAnZXcnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ253JyB8fCBkaXJlY3Rpb24gPT09ICdzZScpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ253c2UnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmVmaXggKyAnbmVzdyc7XG4gIH1cbn0iLCJpbXBvcnQge1xuICBiaW5kLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNsZWFyIGFzIHN2Z0NsZWFyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnRcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGlzUHJpbWFyeUJ1dHRvblxufSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgdHJhbnNmb3JtXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7IGdldFJlZmVyZW5jZVBvaW50IH0gZnJvbSAnLi9SZXNpemUnO1xuXG52YXIgSEFORExFX09GRlNFVCA9IC02LFxuICAgIEhBTkRMRV9TSVpFID0gNCxcbiAgICBIQU5ETEVfSElUX1NJWkUgPSAyMDtcblxudmFyIENMU19SRVNJWkVSID0gJ2Rqcy1yZXNpemVyJztcblxudmFyIGRpcmVjdGlvbnMgPSBbICduJywgJ3cnLCAncycsICdlJywgJ253JywgJ25lJywgJ3NlJywgJ3N3JyBdO1xuXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIGFkZGluZyByZXNpemUgaGFuZGxlcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICogQHBhcmFtIHtSZXNpemV9IHJlc2l6ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVIYW5kbGVzKGV2ZW50QnVzLCBjYW52YXMsIHNlbGVjdGlvbiwgcmVzaXplKSB7XG5cbiAgdGhpcy5fcmVzaXplID0gcmVzaXplO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbmV3U2VsZWN0aW9uID0gZS5uZXdTZWxlY3Rpb247XG5cbiAgICAvLyByZW1vdmUgb2xkIHNlbGVjdGlvbiBtYXJrZXJzXG4gICAgc2VsZi5yZW1vdmVSZXNpemVycygpO1xuXG4gICAgLy8gYWRkIG5ldyBzZWxlY3Rpb24gbWFya2VycyBPTkxZIGlmIHNpbmdsZSBzZWxlY3Rpb25cbiAgICBpZiAobmV3U2VsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZm9yRWFjaChuZXdTZWxlY3Rpb24sIGJpbmQoc2VsZi5hZGRSZXNpemVyLCBzZWxmKSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc2hhcGUuY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmVsZW1lbnQ7XG5cbiAgICBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWQoc2hhcGUpKSB7XG4gICAgICBzZWxmLnJlbW92ZVJlc2l6ZXJzKCk7XG5cbiAgICAgIHNlbGYuYWRkUmVzaXplcihzaGFwZSk7XG4gICAgfVxuICB9KTtcbn1cblxuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5tYWtlRHJhZ2dhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4LCBkaXJlY3Rpb24pIHtcbiAgdmFyIHJlc2l6ZSA9IHRoaXMuX3Jlc2l6ZTtcblxuICBmdW5jdGlvbiBzdGFydFJlc2l6ZShldmVudCkge1xuXG4gICAgLy8gb25seSB0cmlnZ2VyIG9uIGxlZnQgbW91c2UgYnV0dG9uXG4gICAgaWYgKGlzUHJpbWFyeUJ1dHRvbihldmVudCkpIHtcbiAgICAgIHJlc2l6ZS5hY3RpdmF0ZShldmVudCwgZWxlbWVudCwgZGlyZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBkb21FdmVudC5iaW5kKGdmeCwgJ21vdXNlZG93bicsIHN0YXJ0UmVzaXplKTtcbiAgZG9tRXZlbnQuYmluZChnZngsICd0b3VjaHN0YXJ0Jywgc3RhcnRSZXNpemUpO1xufTtcblxuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5fY3JlYXRlUmVzaXplciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHksIGRpcmVjdGlvbikge1xuICB2YXIgcmVzaXplcnNQYXJlbnQgPSB0aGlzLl9nZXRSZXNpemVyc1BhcmVudCgpO1xuXG4gIHZhciBvZmZzZXQgPSBnZXRIYW5kbGVPZmZzZXQoZGlyZWN0aW9uKTtcblxuICB2YXIgZ3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdDbGFzc2VzKGdyb3VwKS5hZGQoQ0xTX1JFU0laRVIpO1xuICBzdmdDbGFzc2VzKGdyb3VwKS5hZGQoQ0xTX1JFU0laRVIgKyAnLScgKyBlbGVtZW50LmlkKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKENMU19SRVNJWkVSICsgJy0nICsgZGlyZWN0aW9uKTtcblxuICBzdmdBcHBlbmQocmVzaXplcnNQYXJlbnQsIGdyb3VwKTtcblxuICB2YXIgdmlzdWFsID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cih2aXN1YWwsIHtcbiAgICB4OiAtSEFORExFX1NJWkUgLyAyICsgb2Zmc2V0LngsXG4gICAgeTogLUhBTkRMRV9TSVpFIC8gMiArIG9mZnNldC55LFxuICAgIHdpZHRoOiBIQU5ETEVfU0laRSxcbiAgICBoZWlnaHQ6IEhBTkRMRV9TSVpFXG4gIH0pO1xuXG4gIHN2Z0NsYXNzZXModmlzdWFsKS5hZGQoQ0xTX1JFU0laRVIgKyAnLXZpc3VhbCcpO1xuXG4gIHN2Z0FwcGVuZChncm91cCwgdmlzdWFsKTtcblxuICB2YXIgaGl0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cihoaXQsIHtcbiAgICB4OiAtSEFORExFX0hJVF9TSVpFIC8gMiArIG9mZnNldC54LFxuICAgIHk6IC1IQU5ETEVfSElUX1NJWkUgLyAyICsgb2Zmc2V0LnksXG4gICAgd2lkdGg6IEhBTkRMRV9ISVRfU0laRSxcbiAgICBoZWlnaHQ6IEhBTkRMRV9ISVRfU0laRVxuICB9KTtcblxuICBzdmdDbGFzc2VzKGhpdCkuYWRkKENMU19SRVNJWkVSICsgJy1oaXQnKTtcblxuICBzdmdBcHBlbmQoZ3JvdXAsIGhpdCk7XG5cbiAgdHJhbnNmb3JtKGdyb3VwLCB4LCB5KTtcblxuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5jcmVhdGVSZXNpemVyID0gZnVuY3Rpb24oZWxlbWVudCwgZGlyZWN0aW9uKSB7XG4gIHZhciBwb2ludCA9IGdldFJlZmVyZW5jZVBvaW50KGVsZW1lbnQsIGRpcmVjdGlvbik7XG5cbiAgdmFyIHJlc2l6ZXIgPSB0aGlzLl9jcmVhdGVSZXNpemVyKGVsZW1lbnQsIHBvaW50LngsIHBvaW50LnksIGRpcmVjdGlvbik7XG5cbiAgdGhpcy5tYWtlRHJhZ2dhYmxlKGVsZW1lbnQsIHJlc2l6ZXIsIGRpcmVjdGlvbik7XG59O1xuXG4vLyByZXNpemUgaGFuZGxlcyBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQWRkIHJlc2l6ZXJzIGZvciBhIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKi9cblJlc2l6ZUhhbmRsZXMucHJvdG90eXBlLmFkZFJlc2l6ZXIgPSBmdW5jdGlvbihzaGFwZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHJlc2l6ZSA9IHRoaXMuX3Jlc2l6ZTtcblxuICBpZiAoIXJlc2l6ZS5jYW5SZXNpemUoeyBzaGFwZTogc2hhcGUgfSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JFYWNoKGRpcmVjdGlvbnMsIGZ1bmN0aW9uKGRpcmVjdGlvbikge1xuICAgIHNlbGYuY3JlYXRlUmVzaXplcihzaGFwZSwgZGlyZWN0aW9uKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgcmVzaXplcnNcbiAqL1xuUmVzaXplSGFuZGxlcy5wcm90b3R5cGUucmVtb3ZlUmVzaXplcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc2l6ZXJzUGFyZW50ID0gdGhpcy5fZ2V0UmVzaXplcnNQYXJlbnQoKTtcblxuICBzdmdDbGVhcihyZXNpemVyc1BhcmVudCk7XG59O1xuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5fZ2V0UmVzaXplcnNQYXJlbnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NhbnZhcy5nZXRMYXllcigncmVzaXplcnMnKTtcbn07XG5cblJlc2l6ZUhhbmRsZXMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdzZWxlY3Rpb24nLFxuICAncmVzaXplJ1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEhhbmRsZU9mZnNldChkaXJlY3Rpb24pIHtcbiAgdmFyIG9mZnNldCA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICBvZmZzZXQueCA9IC1IQU5ETEVfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCd3JykgIT09IC0xKSB7XG4gICAgb2Zmc2V0LnggPSBIQU5ETEVfT0ZGU0VUO1xuICB9XG5cbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XG4gICAgb2Zmc2V0LnkgPSAtSEFORExFX09GRlNFVDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMSkge1xuICAgIG9mZnNldC55ID0gSEFORExFX09GRlNFVDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQ7XG59IiwidmFyIE1BUktFUl9SRVNJWklORyA9ICdkanMtcmVzaXppbmcnLFxuICAgIE1BUktFUl9SRVNJWkVfTk9UX09LID0gJ3Jlc2l6ZS1ub3Qtb2snO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5pbXBvcnQge1xuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmUsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3Nlc1xufSBmcm9tICd0aW55LXN2Zyc7XG5cblxuLyoqXG4gKiBQcm92aWRlcyBwcmV2aWV3cyBmb3IgcmVzaXppbmcgc2hhcGVzIHdoZW4gcmVzaXppbmcuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7UHJldmlld1N1cHBvcnR9IHByZXZpZXdTdXBwb3J0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZVByZXZpZXcoZXZlbnRCdXMsIGNhbnZhcywgcHJldmlld1N1cHBvcnQpIHtcblxuICAvKipcbiAgICogVXBkYXRlIHJlc2l6ZXIgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVGcmFtZShjb250ZXh0KSB7XG5cbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBib3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lO1xuXG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lID0gcHJldmlld1N1cHBvcnQuYWRkRnJhbWUoc2hhcGUsIGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSk7XG5cbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgfVxuXG4gICAgaWYgKGJvdW5kcy53aWR0aCA+IDUpIHtcbiAgICAgIHN2Z0F0dHIoZnJhbWUsIHsgeDogYm91bmRzLngsIHdpZHRoOiBib3VuZHMud2lkdGggfSk7XG4gICAgfVxuXG4gICAgaWYgKGJvdW5kcy5oZWlnaHQgPiA1KSB7XG4gICAgICBzdmdBdHRyKGZyYW1lLCB7IHk6IGJvdW5kcy55LCBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuY2FuRXhlY3V0ZSkge1xuICAgICAgc3ZnQ2xhc3NlcyhmcmFtZSkucmVtb3ZlKE1BUktFUl9SRVNJWkVfTk9UX09LKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQ2xhc3NlcyhmcmFtZSkuYWRkKE1BUktFUl9SRVNJWkVfTk9UX09LKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJlc2l6ZXIgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVGcmFtZShjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lO1xuXG4gICAgaWYgKGZyYW1lKSB7XG4gICAgICBzdmdSZW1vdmUoY29udGV4dC5mcmFtZSk7XG4gICAgfVxuXG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihzaGFwZSwgTUFSS0VSX1JFU0laSU5HKTtcbiAgfVxuXG4gIC8vIGFkZCBhbmQgdXBkYXRlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB1cGRhdGVGcmFtZShldmVudC5jb250ZXh0KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVtb3ZlRnJhbWUoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xuXG59XG5cblJlc2l6ZVByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07IiwiaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBpc051bWJlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBtYXggPSBNYXRoLm1heCxcbiAgICBtaW4gPSBNYXRoLm1pbjtcblxudmFyIERFRkFVTFRfQ0hJTERfQk9YX1BBRERJTkcgPSAyMDtcblxuaW1wb3J0IHtcbiAgZ2V0QkJveFxufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBhc0JvdW5kc1xufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cblxuLyoqXG4gKiBTdWJzdHJhY3QgYSBUUkJMIGZyb20gYW5vdGhlclxuICpcbiAqIEBwYXJhbSAge1RSQkx9IHRyYmxBXG4gKiBAcGFyYW0gIHtUUkJMfSB0cmJsQlxuICpcbiAqIEByZXR1cm4ge1RSQkx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJhY3RUUkJMKHRyYmxBLCB0cmJsQikge1xuICByZXR1cm4ge1xuICAgIHRvcDogdHJibEEudG9wIC0gdHJibEIudG9wLFxuICAgIHJpZ2h0OiB0cmJsQS5yaWdodCAtIHRyYmxCLnJpZ2h0LFxuICAgIGJvdHRvbTogdHJibEEuYm90dG9tIC0gdHJibEIuYm90dG9tLFxuICAgIGxlZnQ6IHRyYmxBLmxlZnQgLSB0cmJsQi5sZWZ0XG4gIH07XG59XG5cbi8qKlxuICogUmVzaXplIHRoZSBnaXZlbiBib3VuZHMgYnkgdGhlIHNwZWNpZmllZCBkZWx0YSBmcm9tIGEgZ2l2ZW4gYW5jaG9yIHBvaW50LlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBib3VuZHMgdGhlIGJvdW5kaW5nIGJveCB0aGF0IHNob3VsZCBiZSByZXNpemVkXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBlbGVtZW50IGlzIHJlc2l6ZWQgKG53LCBuZSwgc2UsIHN3KVxuICogQHBhcmFtIHtQb2ludH0gZGVsdGEgb2YgdGhlIHJlc2l6ZSBvcGVyYXRpb25cbiAqXG4gKiBAcmV0dXJuIHtCb3VuZHN9IHJlc2l6ZWQgYm91bmRpbmcgYm94XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVCb3VuZHMoYm91bmRzLCBkaXJlY3Rpb24sIGRlbHRhKSB7XG4gIHZhciBkeCA9IGRlbHRhLngsXG4gICAgICBkeSA9IGRlbHRhLnk7XG5cbiAgdmFyIG5ld0JvdW5kcyA9IHtcbiAgICB4OiBib3VuZHMueCxcbiAgICB5OiBib3VuZHMueSxcbiAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogYm91bmRzLmhlaWdodFxuICB9O1xuXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy55ID0gYm91bmRzLnkgKyBkeTtcbiAgICBuZXdCb3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIGR5O1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XG4gICAgbmV3Qm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgKyBkeTtcbiAgfVxuXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZignZScpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCArIGR4O1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCd3JykgIT09IC0xKSB7XG4gICAgbmV3Qm91bmRzLnggPSBib3VuZHMueCArIGR4O1xuICAgIG5ld0JvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCAtIGR4O1xuICB9XG5cbiAgcmV0dXJuIG5ld0JvdW5kcztcbn1cblxuXG4vKipcbiAqIFJlc2l6ZSB0aGUgZ2l2ZW4gYm91bmRzIGJ5IGFwcGx5aW5nIHRoZSBwYXNzZWRcbiAqIHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gZGVsdGEuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IGJvdW5kc1xuICogQHBhcmFtIHtUUkJMfSB0cmJsUmVzaXplXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplVFJCTChib3VuZHMsIHJlc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgKHJlc2l6ZS5sZWZ0IHx8IDApLFxuICAgIHk6IGJvdW5kcy55ICsgKHJlc2l6ZS50b3AgfHwgMCksXG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCAtIChyZXNpemUubGVmdCB8fCAwKSArIChyZXNpemUucmlnaHQgfHwgMCksXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IC0gKHJlc2l6ZS50b3AgfHwgMCkgKyAocmVzaXplLmJvdHRvbSB8fCAwKVxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWF0dGFjaFBvaW50KGJvdW5kcywgbmV3Qm91bmRzLCBwb2ludCkge1xuXG4gIHZhciBzeCA9IGJvdW5kcy53aWR0aCAvIG5ld0JvdW5kcy53aWR0aCxcbiAgICAgIHN5ID0gYm91bmRzLmhlaWdodCAvIG5ld0JvdW5kcy5oZWlnaHQ7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKChuZXdCb3VuZHMueCArIG5ld0JvdW5kcy53aWR0aCAvIDIpKSAtIE1hdGguZmxvb3IoKChib3VuZHMueCArIGJvdW5kcy53aWR0aCAvIDIpIC0gcG9pbnQueCkgLyBzeCksXG4gICAgeTogTWF0aC5yb3VuZCgobmV3Qm91bmRzLnkgKyBuZXdCb3VuZHMuaGVpZ2h0IC8gMikpIC0gTWF0aC5mbG9vcigoKGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCAvIDIpIC0gcG9pbnQueSkgLyBzeSlcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBhcHBseUNvbnN0cmFpbnRzKGF0dHIsIHRyYmwsIHJlc2l6ZUNvbnN0cmFpbnRzKSB7XG5cbiAgdmFyIHZhbHVlID0gdHJibFthdHRyXSxcbiAgICAgIG1pblZhbHVlID0gcmVzaXplQ29uc3RyYWludHMubWluICYmIHJlc2l6ZUNvbnN0cmFpbnRzLm1pblthdHRyXSxcbiAgICAgIG1heFZhbHVlID0gcmVzaXplQ29uc3RyYWludHMubWF4ICYmIHJlc2l6ZUNvbnN0cmFpbnRzLm1heFthdHRyXTtcblxuICBpZiAoaXNOdW1iZXIobWluVmFsdWUpKSB7XG4gICAgdmFsdWUgPSAoL3RvcHxsZWZ0Ly50ZXN0KGF0dHIpID8gbWluIDogbWF4KSh2YWx1ZSwgbWluVmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKG1heFZhbHVlKSkge1xuICAgIHZhbHVlID0gKC90b3B8bGVmdC8udGVzdChhdHRyKSA/IG1heCA6IG1pbikodmFsdWUsIG1heFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnN0cmFpbnRzKGN1cnJlbnRCb3VuZHMsIHJlc2l6ZUNvbnN0cmFpbnRzKSB7XG5cbiAgaWYgKCFyZXNpemVDb25zdHJhaW50cykge1xuICAgIHJldHVybiBjdXJyZW50Qm91bmRzO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRUcmJsID0gYXNUUkJMKGN1cnJlbnRCb3VuZHMpO1xuXG4gIHJldHVybiBhc0JvdW5kcyh7XG4gICAgdG9wOiBhcHBseUNvbnN0cmFpbnRzKCd0b3AnLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpLFxuICAgIHJpZ2h0OiBhcHBseUNvbnN0cmFpbnRzKCdyaWdodCcsIGN1cnJlbnRUcmJsLCByZXNpemVDb25zdHJhaW50cyksXG4gICAgYm90dG9tOiBhcHBseUNvbnN0cmFpbnRzKCdib3R0b20nLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpLFxuICAgIGxlZnQ6IGFwcGx5Q29uc3RyYWludHMoJ2xlZnQnLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpXG4gIH0pO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaW5SZXNpemVCb3VuZHMoZGlyZWN0aW9uLCBjdXJyZW50Qm91bmRzLCBtaW5EaW1lbnNpb25zLCBjaGlsZHJlbkJvdW5kcykge1xuXG4gIHZhciBjdXJyZW50Qm94ID0gYXNUUkJMKGN1cnJlbnRCb3VuZHMpO1xuXG4gIHZhciBtaW5Cb3ggPSB7XG4gICAgdG9wOiAvbi8udGVzdChkaXJlY3Rpb24pID8gY3VycmVudEJveC5ib3R0b20gLSBtaW5EaW1lbnNpb25zLmhlaWdodCA6IGN1cnJlbnRCb3gudG9wLFxuICAgIGxlZnQ6IC93Ly50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LnJpZ2h0IC0gbWluRGltZW5zaW9ucy53aWR0aCA6IGN1cnJlbnRCb3gubGVmdCxcbiAgICBib3R0b206IC9zLy50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LnRvcCArIG1pbkRpbWVuc2lvbnMuaGVpZ2h0IDogY3VycmVudEJveC5ib3R0b20sXG4gICAgcmlnaHQ6IC9lLy50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LmxlZnQgKyBtaW5EaW1lbnNpb25zLndpZHRoIDogY3VycmVudEJveC5yaWdodFxuICB9O1xuXG4gIHZhciBjaGlsZHJlbkJveCA9IGNoaWxkcmVuQm91bmRzID8gYXNUUkJMKGNoaWxkcmVuQm91bmRzKSA6IG1pbkJveDtcblxuICB2YXIgY29tYmluZWRCb3ggPSB7XG4gICAgdG9wOiBtaW4obWluQm94LnRvcCwgY2hpbGRyZW5Cb3gudG9wKSxcbiAgICBsZWZ0OiBtaW4obWluQm94LmxlZnQsIGNoaWxkcmVuQm94LmxlZnQpLFxuICAgIGJvdHRvbTogbWF4KG1pbkJveC5ib3R0b20sIGNoaWxkcmVuQm94LmJvdHRvbSksXG4gICAgcmlnaHQ6IG1heChtaW5Cb3gucmlnaHQsIGNoaWxkcmVuQm94LnJpZ2h0KVxuICB9O1xuXG4gIHJldHVybiBhc0JvdW5kcyhjb21iaW5lZEJveCk7XG59XG5cbmZ1bmN0aW9uIGFzUGFkZGluZyhtYXlCZVBhZGRpbmcsIGRlZmF1bHRWYWx1ZSkge1xuICBpZiAodHlwZW9mIG1heUJlUGFkZGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbWF5QmVQYWRkaW5nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBERUZBVUxUX0NISUxEX0JPWF9QQURESU5HO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRQYWRkaW5nKGJib3gsIHBhZGRpbmcpIHtcbiAgdmFyIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbTtcblxuICBpZiAodHlwZW9mIHBhZGRpbmcgPT09ICdvYmplY3QnKSB7XG4gICAgbGVmdCA9IGFzUGFkZGluZyhwYWRkaW5nLmxlZnQpO1xuICAgIHJpZ2h0ID0gYXNQYWRkaW5nKHBhZGRpbmcucmlnaHQpO1xuICAgIHRvcCA9IGFzUGFkZGluZyhwYWRkaW5nLnRvcCk7XG4gICAgYm90dG9tID0gYXNQYWRkaW5nKHBhZGRpbmcuYm90dG9tKTtcbiAgfSBlbHNlIHtcbiAgICBsZWZ0ID0gcmlnaHQgPSB0b3AgPSBib3R0b20gPSBhc1BhZGRpbmcocGFkZGluZyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGJib3gueCAtIGxlZnQsXG4gICAgeTogYmJveC55IC0gdG9wLFxuICAgIHdpZHRoOiBiYm94LndpZHRoICsgbGVmdCArIHJpZ2h0LFxuICAgIGhlaWdodDogYmJveC5oZWlnaHQgKyB0b3AgKyBib3R0b21cbiAgfTtcbn1cblxuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBlbGVtZW50IHBhcnQgb2YgdGhlIHJlc2l6ZVxuICogdGFyZ2V0cyBtaW4gYm91bmRhcnkgYm94P1xuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggZXhjbHVkZXNcbiAqIGNvbm5lY3Rpb25zIGFuZCBsYWJlbHMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBpc0JCb3hDaGlsZChlbGVtZW50KSB7XG5cbiAgLy8gZXhjbHVkZSBjb25uZWN0aW9uc1xuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBleGNsdWRlIGxhYmVsc1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmV0dXJuIGNoaWxkcmVuIGJvdW5kaW5nIGNvbXB1dGVkIGZyb20gYSBzaGFwZXMgY2hpbGRyZW5cbiAqIG9yIGEgbGlzdCBvZiBwcmVmaWx0ZXJlZCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV8QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gc2hhcGVPckNoaWxkcmVuXG4gKiBAcGFyYW0gIHtudW1iZXJ8T2JqZWN0fSBwYWRkaW5nXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNoaWxkcmVuQkJveChzaGFwZU9yQ2hpbGRyZW4sIHBhZGRpbmcpIHtcblxuICB2YXIgZWxlbWVudHM7XG5cbiAgLy8gY29tcHV0ZSBiYXNlZCBvbiBzaGFwZVxuICBpZiAoc2hhcGVPckNoaWxkcmVuLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG5cbiAgICAvLyBncmFiIGFsbCB0aGUgY2hpbGRyZW4gdGhhdCBhcmUgcGFydCBvZiB0aGVcbiAgICAvLyBwYXJlbnRzIGNoaWxkcmVuIGJveFxuICAgIGVsZW1lbnRzID0gZmlsdGVyKHNoYXBlT3JDaGlsZHJlbi5jaGlsZHJlbiwgaXNCQm94Q2hpbGQpO1xuXG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudHMgPSBzaGFwZU9yQ2hpbGRyZW47XG4gIH1cblxuICBpZiAoZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFkZFBhZGRpbmcoZ2V0QkJveChlbGVtZW50cyksIHBhZGRpbmcpO1xuICB9XG59XG4iLCJpbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuXG5pbXBvcnQgUmVzaXplIGZyb20gJy4vUmVzaXplJztcbmltcG9ydCBSZXNpemVQcmV2aWV3IGZyb20gJy4vUmVzaXplUHJldmlldyc7XG5pbXBvcnQgUmVzaXplSGFuZGxlcyBmcm9tICcuL1Jlc2l6ZUhhbmRsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAncmVzaXplJyxcbiAgICAncmVzaXplUHJldmlldycsXG4gICAgJ3Jlc2l6ZUhhbmRsZXMnXG4gIF0sXG4gIHJlc2l6ZTogWyAndHlwZScsIFJlc2l6ZSBdLFxuICByZXNpemVQcmV2aWV3OiBbICd0eXBlJywgUmVzaXplUHJldmlldyBdLFxuICByZXNpemVIYW5kbGVzOiBbICd0eXBlJywgUmVzaXplSGFuZGxlcyBdXG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICcuLi8uLi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQSBiYXNpYyBwcm92aWRlciB0aGF0IG1heSBiZSBleHRlbmRlZCB0byBpbXBsZW1lbnQgbW9kZWxpbmcgcnVsZXMuXG4gKlxuICogRXh0ZW5zaW9ucyBzaG91bGQgaW1wbGVtZW50IHRoZSBpbml0IG1ldGhvZCB0byBhY3R1YWxseSBhZGQgdGhlaXIgY3VzdG9tXG4gKiBtb2RlbGluZyBjaGVja3MuIENoZWNrcyBtYXkgYmUgYWRkZWQgdmlhIHRoZSAjYWRkUnVsZShhY3Rpb24sIGZuKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUnVsZVByb3ZpZGVyKGV2ZW50QnVzKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLmluaXQoKTtcbn1cblxuUnVsZVByb3ZpZGVyLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoUnVsZVByb3ZpZGVyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5cbi8qKlxuICogQWRkcyBhIG1vZGVsaW5nIHJ1bGUgZm9yIHRoZSBnaXZlbiBhY3Rpb24sIGltcGxlbWVudGVkIHRocm91Z2hcbiAqIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSB0aGUgbW9kZWxpbmcgc3BlY2lmaWMgYWN0aW9uIGNvbnRleHRcbiAqIHRvIHBlcmZvcm0gaXRzIGNoZWNrLiBJdCBtdXN0IHJldHVybiBgZmFsc2VgIHRvIGRpc2FsbG93IHRoZVxuICogYWN0aW9uIGZyb20gaGFwcGVuaW5nIG9yIGB0cnVlYCB0byBhbGxvdyB0aGUgYWN0aW9uLlxuICpcbiAqIEEgcnVsZSBwcm92aWRlciBtYXkgcGFzcyBvdmVyIHRoZSBldmFsdWF0aW9uIHRvIGxvd2VyIHByaW9yaXR5XG4gKiBydWxlcyBieSByZXR1cm5pbmcgcmV0dXJuIG5vdGhpbmcgKG9yIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4pLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogUmVzaXphYmxlUnVsZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAqXG4gKiAgIFxcLyoqXG4gKiAgICAqIFJldHVybiBgdHJ1ZWAsIGBmYWxzZWAgb3Igbm90aGluZyB0byBkZW5vdGVcbiAqICAgICogX2FsbG93ZWRfLCBfbm90IGFsbG93ZWRfIGFuZCBfY29udGludWUgZXZhbHVhdGluZ18uXG4gKiAgICAqXFwvXG4gKiAgIHRoaXMuYWRkUnVsZSgnc2hhcGUucmVzaXplJywgZnVuY3Rpb24oY29udGV4dCkge1xuICpcbiAqICAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuICpcbiAqICAgICBpZiAoIWNvbnRleHQubmV3Qm91bmRzKSB7XG4gKiAgICAgICAvLyBjaGVjayBnZW5lcmFsIHJlc2l6YWJpbGl0eVxuICogICAgICAgaWYgKCFzaGFwZS5yZXNpemFibGUpIHtcbiAqICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICogICAgICAgfVxuICpcbiAqICAgICAgIC8vIG5vdCByZXR1cm5pbmcgYW55dGhpbmcgKHJlYWQ6IHVuZGVmaW5lZClcbiAqICAgICAgIC8vIHdpbGwgY29udGludWUgdGhlIGV2YWx1YXRpb24gb2Ygb3RoZXIgcnVsZXNcbiAqICAgICAgIC8vICh3aXRoIGxvd2VyIHByaW9yaXR5KVxuICogICAgICAgcmV0dXJuO1xuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAvLyBlbGVtZW50IG11c3QgaGF2ZSBtaW5pbXVtIHNpemUgb2YgMTAqMTAgcG9pbnRzXG4gKiAgICAgICByZXR1cm4gY29udGV4dC5uZXdCb3VuZHMud2lkdGggPiAxMCAmJiBjb250ZXh0Lm5ld0JvdW5kcy5oZWlnaHQgPiAxMDtcbiAqICAgICB9XG4gKiAgIH0pO1xuICogfTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBhY3Rpb25zIHRoZSBpZGVudGlmaWVyIGZvciB0aGUgbW9kZWxpbmcgYWN0aW9uIHRvIGNoZWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSB0aGUgcHJpb3JpdHkgYXQgd2hpY2ggdGhpcyBydWxlIGlzIGJlaW5nIGFwcGxpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBhY3R1YWwgY2hlY2tcbiAqL1xuUnVsZVByb3ZpZGVyLnByb3RvdHlwZS5hZGRSdWxlID0gZnVuY3Rpb24oYWN0aW9ucywgcHJpb3JpdHksIGZuKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBhY3Rpb25zID0gWyBhY3Rpb25zIF07XG4gIH1cblxuICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oYWN0aW9uKSB7XG5cbiAgICBzZWxmLmNhbkV4ZWN1dGUoYWN0aW9uLCBwcmlvcml0eSwgZnVuY3Rpb24oY29udGV4dCwgYWN0aW9uLCBldmVudCkge1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQpO1xuICAgIH0sIHRydWUpO1xuICB9KTtcbn07XG5cbi8qKlxuICogSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFkZCBuZXcgcnVsZXMgZHVyaW5nIHByb3ZpZGVyIGluaXRpYWxpemF0aW9uLlxuICovXG5SdWxlUHJvdmlkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHt9OyIsIi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgcnVsZXMgZm9yIGNlcnRhaW4gZGlhZ3JhbSBhY3Rpb25zLlxuICpcbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgaG9vayBpbnRvIHRoZSB7QGxpbmsgQ29tbWFuZFN0YWNrfVxuICogdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHJ1bGUgZXZhbHVhdGlvbi4gTWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlXG4gKiBgY29tbWFuZFN0YWNrYCBzZXJ2aWNlIHdpdGggdGhpcyBtb2R1bGUgaWYgeW91IHBsYW4gdG8gdXNlIGl0LlxuICpcbiAqIFRvZ2V0aGVyIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiB5b3UgbWF5IHVzZSB0aGUge0BsaW5rIFJ1bGVQcm92aWRlcn1cbiAqIHRvIGltcGxlbWVudCB5b3VyIG93biBydWxlIGNoZWNrZXJzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIG1lbnQgdG8gYmUgZWFzaWx5IHJlcGxhY2VkLCB0aHVzIHRoZSB0aW55IGZvb3QgcHJpbnQuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUnVsZXMoaW5qZWN0b3IpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snLCBmYWxzZSk7XG59XG5cblJ1bGVzLiRpbmplY3QgPSBbICdpbmplY3RvcicgXTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgYSBnaXZlbiBtb2RlbGluZyBhY3Rpb24gY2FuIGJlIGV4ZWN1dGVkXG4gKiBpbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIHJlc3BvbmQgd2l0aCBhbGxvdyB1bmxlc3MgYW55b25lXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gdGhlIGFjdGlvbiB0byBiZSBjaGVja2VkXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdIHRoZSBjb250ZXh0IHRvIGNoZWNrIHRoZSBhY3Rpb24gaW5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUsIGZhbHNlIG9yIG51bGwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gaXMgYWxsb3dlZCwgbm90IGFsbG93ZWQgb3Igc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblJ1bGVzLnByb3RvdHlwZS5hbGxvd2VkID0gZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XG4gIHZhciBhbGxvd2VkID0gdHJ1ZTtcblxuICB2YXIgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuXG4gIGlmIChjb21tYW5kU3RhY2spIHtcbiAgICBhbGxvd2VkID0gY29tbWFuZFN0YWNrLmNhbkV4ZWN1dGUoYWN0aW9uLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIG1hcCB1bmRlZmluZWQgdG8gdHJ1ZSwgaS5lLiBubyBydWxlc1xuICByZXR1cm4gYWxsb3dlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFsbG93ZWQ7XG59OyIsImltcG9ydCBSdWxlcyBmcm9tICcuL1J1bGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAncnVsZXMnIF0sXG4gIHJ1bGVzOiBbICd0eXBlJywgUnVsZXMgXVxufTtcbiIsImltcG9ydCB7XG4gIGNsZWFyIGFzIGRvbUNsZWFyLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgYXR0ciBhcyBkb21BdHRyLFxuICBkb21pZnkgYXMgZG9taWZ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBnZXRCQm94IGFzIGdldEJvdW5kaW5nQm94XG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBlc2NhcGVIVE1MXG59IGZyb20gJy4uLy4uL3V0aWwvRXNjYXBlVXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZXMgc2VhcmNoaW5nIGluZnJhc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNlYXJjaFBhZChjYW52YXMsIGV2ZW50QnVzLCBvdmVybGF5cywgc2VsZWN0aW9uKSB7XG4gIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgdGhpcy5fcmVzdWx0cyA9IFtdO1xuICB0aGlzLl9ldmVudE1hcHMgPSBbXTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX292ZXJsYXlzID0gb3ZlcmxheXM7XG4gIHRoaXMuX3NlbGVjdGlvbiA9IHNlbGVjdGlvbjtcblxuICAvLyBzZXR1cCBlbGVtZW50c1xuICB0aGlzLl9jb250YWluZXIgPSBkb21pZnkoU2VhcmNoUGFkLkJPWF9IVE1MKTtcbiAgdGhpcy5fc2VhcmNoSW5wdXQgPSBkb21RdWVyeShTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsIHRoaXMuX2NvbnRhaW5lcik7XG4gIHRoaXMuX3Jlc3VsdHNDb250YWluZXIgPSBkb21RdWVyeShTZWFyY2hQYWQuUkVTVUxUU19DT05UQUlORVJfU0VMRUNUT1IsIHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLy8gYXR0YWNoIHNlYXJjaCBwYWRcbiAgdGhpcy5fY2FudmFzLmdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLy8gY2xlYW51cCBvbiBkZXN0cm95XG4gIGV2ZW50QnVzLm9uKFsgJ2NhbnZhcy5kZXN0cm95JywgJ2RpYWdyYW0uZGVzdHJveScgXSwgdGhpcy5jbG9zZSwgdGhpcyk7XG59XG5cblxuU2VhcmNoUGFkLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnZXZlbnRCdXMnLFxuICAnb3ZlcmxheXMnLFxuICAnc2VsZWN0aW9uJ1xuXTtcblxuXG4vKipcbiAqIEJpbmRzIGFuZCBrZWVwcyB0cmFjayBvZiBhbGwgZXZlbnQgbGlzdGVyZW5lcnNcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fYmluZEV2ZW50cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4pIHtcbiAgICBzZWxmLl9ldmVudE1hcHMucHVzaCh7XG4gICAgICBlbDogZWwsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbGlzdGVuZXI6IGRvbURlbGVnYXRlLmJpbmQoZWwsIHNlbGVjdG9yLCB0eXBlLCBmbilcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNsb3NlIHNlYXJjaCBvbiBjbGlja2luZyBhbnl3aGVyZSBvdXRzaWRlXG4gIGxpc3Rlbihkb2N1bWVudCwgJ2h0bWwnLCAnY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5jbG9zZSgpO1xuICB9KTtcblxuICAvLyBzdG9wIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgYW5kIGNsb3Npbmcgc2VhcmNoXG4gIC8vIGZvY3VzIG9uIGlucHV0XG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiwgJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5kZWxlZ2F0ZVRhcmdldC5mb2N1cygpO1xuICB9KTtcblxuICAvLyBwcmVzZWxlY3QgcmVzdWx0IG9uIGhvdmVyXG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNUT1IsICdtb3VzZW92ZXInLCBmdW5jdGlvbihlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzZWxmLl9zY3JvbGxUb05vZGUoZS5kZWxlZ2F0ZVRhcmdldCk7XG4gICAgc2VsZi5fcHJlc2VsZWN0KGUuZGVsZWdhdGVUYXJnZXQpO1xuICB9KTtcblxuICAvLyBzZWxlY3RzIGRlc2lyZWQgcmVzdWx0IG9uIG1vdXNlIGNsaWNrXG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNUT1IsICdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHNlbGYuX3NlbGVjdChlLmRlbGVnYXRlVGFyZ2V0KTtcbiAgfSk7XG5cbiAgLy8gcHJldmVudCBjdXJzb3IgaW4gaW5wdXQgZnJvbSBnb2luZyBsZWZ0IGFuZCByaWdodCB3aGVuIHVzaW5nIHVwL2Rvd24gdG9cbiAgLy8gbmF2aWdhdGUgcmVzdWx0c1xuICBsaXN0ZW4odGhpcy5fY29udGFpbmVyLCBTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsICdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXG4gICAgLy8gdXBcbiAgICBpZiAoZS5rZXlDb2RlID09PSAzOCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIGRvd25cbiAgICBpZiAoZS5rZXlDb2RlID09PSA0MCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gaGFuZGxlIGtleWJvYXJkIGlucHV0XG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiwgJ2tleXVwJywgZnVuY3Rpb24oZSkge1xuXG4gICAgLy8gZXNjYXBlXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLy8gZW50ZXJcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZi5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gc2VsZWN0ZWQgPyBzZWxmLl9zZWxlY3Qoc2VsZWN0ZWQpIDogc2VsZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIHVwXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgIHJldHVybiBzZWxmLl9zY3JvbGxUb0RpcmVjdGlvbih0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBkb3duXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgIHJldHVybiBzZWxmLl9zY3JvbGxUb0RpcmVjdGlvbigpO1xuICAgIH1cblxuICAgIC8vIGxlZnQgJiYgcmlnaHRcbiAgICAvLyBkbyBub3Qgc2VhcmNoIHdoaWxlIG5hdmlnYXRpbmcgdGV4dCBpbnB1dFxuICAgIGlmIChlLmtleUNvZGUgPT09IDM3IHx8IGUua2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbnl0aGluZyBlbHNlXG4gICAgc2VsZi5fc2VhcmNoKGUuZGVsZWdhdGVUYXJnZXQudmFsdWUpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBVbmJpbmRzIGFsbCBwcmV2aW91c2x5IGVzdGFibGlzaGVkIGxpc3RlbmVyc1xuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl91bmJpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRNYXBzLmZvckVhY2goZnVuY3Rpb24obSkge1xuICAgIGRvbURlbGVnYXRlLnVuYmluZChtLmVsLCBtLnR5cGUsIG0ubGlzdGVuZXIpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHNlYXJjaCBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBwYXR0ZXJuXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NsZWFyUmVzdWx0cygpO1xuXG4gIC8vIGRvIG5vdCBzZWFyY2ggb24gZW1wdHkgcXVlcnlcbiAgaWYgKCFwYXR0ZXJuIHx8IHBhdHRlcm4gPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlYXJjaFJlc3VsdHMgPSB0aGlzLl9zZWFyY2hQcm92aWRlci5maW5kKHBhdHRlcm4pO1xuXG4gIGlmICghc2VhcmNoUmVzdWx0cy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBhcHBlbmQgbmV3IHJlc3VsdHNcbiAgc2VhcmNoUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgIHZhciBpZCA9IHJlc3VsdC5lbGVtZW50LmlkO1xuICAgIHZhciBub2RlID0gc2VsZi5fY3JlYXRlUmVzdWx0Tm9kZShyZXN1bHQsIGlkKTtcbiAgICBzZWxmLl9yZXN1bHRzW2lkXSA9IHtcbiAgICAgIGVsZW1lbnQ6IHJlc3VsdC5lbGVtZW50LFxuICAgICAgbm9kZTogbm9kZVxuICAgIH07XG4gIH0pO1xuXG4gIC8vIHByZXNlbGVjdCBmaXJzdCByZXN1bHRcbiAgdmFyIG5vZGUgPSBkb21RdWVyeShTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SLCB0aGlzLl9yZXN1bHRzQ29udGFpbmVyKTtcbiAgdGhpcy5fc2Nyb2xsVG9Ob2RlKG5vZGUpO1xuICB0aGlzLl9wcmVzZWxlY3Qobm9kZSk7XG59O1xuXG5cbi8qKlxuICogTmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzL25leHQgcmVzdWx0LiBEZWZhdWx0cyB0byBuZXh0IHJlc3VsdC5cbiAqIEBwYXJhbSAge2Jvb2xlYW59IHByZXZpb3VzXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3Njcm9sbFRvRGlyZWN0aW9uID0gZnVuY3Rpb24ocHJldmlvdXMpIHtcbiAgdmFyIHNlbGVjdGVkID0gdGhpcy5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vZGUgPSBwcmV2aW91cyA/IHNlbGVjdGVkLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBzZWxlY3RlZC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIGlmIChub2RlKSB7XG4gICAgdGhpcy5fc2Nyb2xsVG9Ob2RlKG5vZGUpO1xuICAgIHRoaXMuX3ByZXNlbGVjdChub2RlKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFNjcm9sbCB0byB0aGUgbm9kZSBpZiBpdCBpcyBub3QgdmlzaWJsZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3Njcm9sbFRvTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgaWYgKCFub2RlIHx8IG5vZGUgPT09IHRoaXMuX2dldEN1cnJlbnRSZXN1bHQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBub2RlT2Zmc2V0ID0gbm9kZS5vZmZzZXRUb3A7XG4gIHZhciBjb250YWluZXJTY3JvbGwgPSB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvcDtcblxuICB2YXIgYm90dG9tU2Nyb2xsID0gbm9kZU9mZnNldCAtIHRoaXMuX3Jlc3VsdHNDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgbm9kZS5jbGllbnRIZWlnaHQ7XG5cbiAgaWYgKG5vZGVPZmZzZXQgPCBjb250YWluZXJTY3JvbGwpIHtcbiAgICB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvcCA9IG5vZGVPZmZzZXQ7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyU2Nyb2xsIDwgYm90dG9tU2Nyb2xsKSB7XG4gICAgdGhpcy5fcmVzdWx0c0NvbnRhaW5lci5zY3JvbGxUb3AgPSBib3R0b21TY3JvbGw7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgYWxsIHJlc3VsdHMgZGF0YS5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fY2xlYXJSZXN1bHRzID0gZnVuY3Rpb24oKSB7XG4gIGRvbUNsZWFyKHRoaXMuX3Jlc3VsdHNDb250YWluZXIpO1xuXG4gIHRoaXMuX3Jlc3VsdHMgPSBbXTtcblxuICB0aGlzLl9yZXNldE92ZXJsYXkoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuY2xlYXJlZCcpO1xufTtcblxuXG4vKipcbiAqIEdldCBjdXJyZW50bHkgc2VsZWN0ZWQgcmVzdWx0LlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX2dldEN1cnJlbnRSZXN1bHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNURURfU0VMRUNUT1IsIHRoaXMuX3Jlc3VsdHNDb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZSByZXN1bHQgRE9NIGVsZW1lbnQgd2l0aGluIHJlc3VsdHMgY29udGFpbmVyXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgc2VhcmNoIHJlc3VsdC5cbiAqXG4gKiAncmVzdWx0JyA6IG9uZSBvZiB0aGUgZWxlbWVudHMgcmV0dXJuZWQgYnkgU2VhcmNoUHJvdmlkZXJcbiAqICdpZCcgOiBpZCBhdHRyaWJ1dGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBuZXcgRE9NIG5vZGVcbiAqIHJldHVybiA6IGNyZWF0ZWQgRE9NIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtTZWFyY2hSZXN1bHR9IHJlc3VsdFxuICogQHBhcmFtICB7c3RyaW5nfSBpZFxuICogQHJldHVybiB7RWxlbWVudH1cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fY3JlYXRlUmVzdWx0Tm9kZSA9IGZ1bmN0aW9uKHJlc3VsdCwgaWQpIHtcbiAgdmFyIG5vZGUgPSBkb21pZnkoU2VhcmNoUGFkLlJFU1VMVF9IVE1MKTtcblxuICAvLyBjcmVhdGUgb25seSBpZiBhdmFpbGFibGVcbiAgaWYgKHJlc3VsdC5wcmltYXJ5VG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVJbm5lclRleHROb2RlKG5vZGUsIHJlc3VsdC5wcmltYXJ5VG9rZW5zLCBTZWFyY2hQYWQuUkVTVUxUX1BSSU1BUllfSFRNTCk7XG4gIH1cblxuICAvLyBzZWNvbmRhcnkgdG9rZW5zIChyZXByZXNlbnQgZWxlbWVudCBJRCkgYXJlIGFsbHdheXMgYXZhaWxhYmxlXG4gIGNyZWF0ZUlubmVyVGV4dE5vZGUobm9kZSwgcmVzdWx0LnNlY29uZGFyeVRva2VucywgU2VhcmNoUGFkLlJFU1VMVF9TRUNPTkRBUllfSFRNTCk7XG5cbiAgZG9tQXR0cihub2RlLCBTZWFyY2hQYWQuUkVTVUxUX0lEX0FUVFJJQlVURSwgaWQpO1xuXG4gIHRoaXMuX3Jlc3VsdHNDb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgc2VhcmNoIGVsZW1lbnQgcHJvdmlkZXIuXG4gKlxuICogU2VhcmNoUHJvdmlkZXIuZmluZCAtIHByb3ZpZGVzIHNlYXJjaCBmdW5jdGlvbiBvdmVyIG93biBlbGVtZW50c1xuICogIChwYXR0ZXJuKSA9PiBbeyB0ZXh0OiA8U3RyaW5nPiwgZWxlbWVudDogPEVsZW1lbnQ+fSwgLi4uXVxuICpcbiAqIEBwYXJhbSAge1NlYXJjaFByb3ZpZGVyfSBwcm92aWRlclxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLnJlZ2lzdGVyUHJvdmlkZXIgPSBmdW5jdGlvbihwcm92aWRlcikge1xuICB0aGlzLl9zZWFyY2hQcm92aWRlciA9IHByb3ZpZGVyO1xufTtcblxuXG4vKipcbiAqIE9wZW4gc2VhcmNoIHBhZC5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fc2VhcmNoUHJvdmlkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHNlYXJjaCBwcm92aWRlciByZWdpc3RlcmVkJyk7XG4gIH1cblxuICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2JpbmRFdmVudHMoKTtcblxuICB0aGlzLl9vcGVuID0gdHJ1ZTtcblxuICBkb21DbGFzc2VzKHRoaXMuX2NvbnRhaW5lcikuYWRkKCdvcGVuJyk7XG5cbiAgdGhpcy5fc2VhcmNoSW5wdXQuZm9jdXMoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQub3BlbmVkJyk7XG59O1xuXG5cbi8qKlxuICogQ2xvc2Ugc2VhcmNoIHBhZC5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl91bmJpbmRFdmVudHMoKTtcblxuICB0aGlzLl9vcGVuID0gZmFsc2U7XG5cbiAgZG9tQ2xhc3Nlcyh0aGlzLl9jb250YWluZXIpLnJlbW92ZSgnb3BlbicpO1xuXG4gIHRoaXMuX2NsZWFyUmVzdWx0cygpO1xuXG4gIHRoaXMuX3NlYXJjaElucHV0LnZhbHVlID0gJyc7XG4gIHRoaXMuX3NlYXJjaElucHV0LmJsdXIoKTtcblxuICB0aGlzLl9yZXNldE92ZXJsYXkoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuY2xvc2VkJyk7XG59O1xuXG5cbi8qKlxuICogVG9nZ2xlcyBzZWFyY2ggcGFkIG9uL29mZi5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5pc09wZW4oKSA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xufTtcblxuXG4vKipcbiAqIFJlcG9ydCBzdGF0ZSBvZiBzZWFyY2ggcGFkLlxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fb3Blbjtcbn07XG5cblxuLyoqXG4gKiBQcmVzZWxlY3QgcmVzdWx0IGVudHJ5LlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fcHJlc2VsZWN0ID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgc2VsZWN0ZWROb2RlID0gdGhpcy5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuXG4gIC8vIGFscmVhZHkgc2VsZWN0ZWRcbiAgaWYgKG5vZGUgPT09IHNlbGVjdGVkTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHJlbW92aW5nIHByZXNlbGVjdGlvbiBmcm9tIGN1cnJlbnQgbm9kZVxuICBpZiAoc2VsZWN0ZWROb2RlKSB7XG4gICAgZG9tQ2xhc3NlcyhzZWxlY3RlZE5vZGUpLnJlbW92ZShTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTKTtcbiAgfVxuXG4gIHZhciBpZCA9IGRvbUF0dHIobm9kZSwgU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUpO1xuICB2YXIgZWxlbWVudCA9IHRoaXMuX3Jlc3VsdHNbaWRdLmVsZW1lbnQ7XG5cbiAgZG9tQ2xhc3Nlcyhub2RlKS5hZGQoU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RFRF9DTEFTUyk7XG5cbiAgdGhpcy5fcmVzZXRPdmVybGF5KGVsZW1lbnQpO1xuXG4gIHRoaXMuX2NlbnRlclZpZXdib3goZWxlbWVudCk7XG5cbiAgdGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQucHJlc2VsZWN0ZWQnLCBlbGVtZW50KTtcbn07XG5cblxuLyoqXG4gKiBTZWxlY3QgcmVzdWx0IG5vZGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9zZWxlY3QgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBpZCA9IGRvbUF0dHIobm9kZSwgU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUpO1xuICB2YXIgZWxlbWVudCA9IHRoaXMuX3Jlc3VsdHNbaWRdLmVsZW1lbnQ7XG5cbiAgdGhpcy5jbG9zZSgpO1xuXG4gIHRoaXMuX3Jlc2V0T3ZlcmxheSgpO1xuXG4gIHRoaXMuX2NlbnRlclZpZXdib3goZWxlbWVudCk7XG5cbiAgdGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuc2VsZWN0ZWQnLCBlbGVtZW50KTtcbn07XG5cblxuLyoqXG4gKiBDZW50ZXIgdmlld2JveCBvbiB0aGUgZWxlbWVudCBtaWRkbGUgcG9pbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9jZW50ZXJWaWV3Ym94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgdmlld2JveCA9IHRoaXMuX2NhbnZhcy52aWV3Ym94KCk7XG5cbiAgdmFyIGJveCA9IGdldEJvdW5kaW5nQm94KGVsZW1lbnQpO1xuXG4gIHZhciBuZXdWaWV3Ym94ID0ge1xuICAgIHg6IChib3gueCArIGJveC53aWR0aC8yKSAtIHZpZXdib3gub3V0ZXIud2lkdGgvMixcbiAgICB5OiAoYm94LnkgKyBib3guaGVpZ2h0LzIpIC0gdmlld2JveC5vdXRlci5oZWlnaHQvMixcbiAgICB3aWR0aDogdmlld2JveC5vdXRlci53aWR0aCxcbiAgICBoZWlnaHQ6IHZpZXdib3gub3V0ZXIuaGVpZ2h0XG4gIH07XG5cbiAgdGhpcy5fY2FudmFzLnZpZXdib3gobmV3Vmlld2JveCk7XG5cbiAgdGhpcy5fY2FudmFzLnpvb20odmlld2JveC5zY2FsZSk7XG59O1xuXG5cbi8qKlxuICogUmVzZXQgb3ZlcmxheSByZW1vdmVzIGFuZCwgb3B0aW9uYWxseSwgc2V0XG4gKiBvdmVybGF5IHRvIGEgbmV3IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9yZXNldE92ZXJsYXkgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmICh0aGlzLl9vdmVybGF5SWQpIHtcbiAgICB0aGlzLl9vdmVybGF5cy5yZW1vdmUodGhpcy5fb3ZlcmxheUlkKTtcbiAgfVxuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgdmFyIGJveCA9IGdldEJvdW5kaW5nQm94KGVsZW1lbnQpO1xuICAgIHZhciBvdmVybGF5ID0gY29uc3RydWN0T3ZlcmxheShib3gpO1xuICAgIHRoaXMuX292ZXJsYXlJZCA9IHRoaXMuX292ZXJsYXlzLmFkZChlbGVtZW50LCBvdmVybGF5KTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbnN0cnVjdCBvdmVybGF5IG9iamVjdCBmb3IgdGhlIGdpdmVuIGJvdW5kaW5nIGJveC5cbiAqXG4gKiBAcGFyYW0gIHtCb3VuZGluZ0JveH0gYm94XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdE92ZXJsYXkoYm94KSB7XG5cbiAgdmFyIG9mZnNldCA9IDY7XG4gIHZhciB3ID0gYm94LndpZHRoICsgb2Zmc2V0ICogMjtcbiAgdmFyIGggPSBib3guaGVpZ2h0ICsgb2Zmc2V0ICogMjtcblxuICB2YXIgc3R5bGVzID0gW1xuICAgICd3aWR0aDogJysgdyArJ3B4JyxcbiAgICAnaGVpZ2h0OiAnKyBoICsgJ3B4J1xuICBdLmpvaW4oJzsgJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjoge1xuICAgICAgYm90dG9tOiBoIC0gb2Zmc2V0LFxuICAgICAgcmlnaHQ6IHcgLSBvZmZzZXRcbiAgICB9LFxuICAgIHNob3c6IHRydWUsXG4gICAgaHRtbDogJzxkaXYgc3R5bGU9XCInICsgc3R5bGVzICsgJ1wiIGNsYXNzPVwiJyArIFNlYXJjaFBhZC5PVkVSTEFZX0NMQVNTICsgJ1wiPjwvZGl2PidcbiAgfTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIGFwcGVuZHMgY2hpbGQgbm9kZSBmcm9tIHJlc3VsdCB0b2tlbnMgYW5kIEhUTUwgdGVtcGxhdGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gdG9rZW5zXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHRlbXBsYXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlubmVyVGV4dE5vZGUocGFyZW50Tm9kZSwgdG9rZW5zLCB0ZW1wbGF0ZSkge1xuICB2YXIgdGV4dCA9IGNyZWF0ZUh0bWxUZXh0KHRva2Vucyk7XG4gIHZhciBjaGlsZE5vZGUgPSBkb21pZnkodGVtcGxhdGUpO1xuICBjaGlsZE5vZGUuaW5uZXJIVE1MID0gdGV4dDtcbiAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBpbnRlcm5hbCBIVE1MIG1hcmt1cCBmcm9tIHJlc3VsdCB0b2tlbnMuXG4gKiBDYXRlcnMgZm9yIGhpZ2hsaWdodGluZyBwYXR0ZXJuIG1hdGNoZWQgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IHRva2Vuc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjcmVhdGVIdG1sVGV4dCh0b2tlbnMpIHtcbiAgdmFyIGh0bWxUZXh0ID0gJyc7XG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24odCkge1xuICAgIGlmICh0Lm1hdGNoZWQpIHtcbiAgICAgIGh0bWxUZXh0ICs9ICc8c3Ryb25nIGNsYXNzPVwiJyArIFNlYXJjaFBhZC5SRVNVTFRfSElHSExJR0hUX0NMQVNTICsgJ1wiPicgKyBlc2NhcGVIVE1MKHQubWF0Y2hlZCkgKyAnPC9zdHJvbmc+JztcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbFRleHQgKz0gZXNjYXBlSFRNTCh0Lm5vcm1hbCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaHRtbFRleHQgIT09ICcnID8gaHRtbFRleHQgOiBudWxsO1xufVxuXG5cbi8qKlxuICogQ09OU1RBTlRTXG4gKi9cblNlYXJjaFBhZC5DT05UQUlORVJfU0VMRUNUT1IgPSAnLmRqcy1zZWFyY2gtY29udGFpbmVyJztcblNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiA9ICcuZGpzLXNlYXJjaC1pbnB1dCBpbnB1dCc7XG5TZWFyY2hQYWQuUkVTVUxUU19DT05UQUlORVJfU0VMRUNUT1IgPSAnLmRqcy1zZWFyY2gtcmVzdWx0cyc7XG5TZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SID0gJy5kanMtc2VhcmNoLXJlc3VsdCc7XG5TZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTID0gJ2Rqcy1zZWFyY2gtcmVzdWx0LXNlbGVjdGVkJztcblNlYXJjaFBhZC5SRVNVTFRfU0VMRUNURURfU0VMRUNUT1IgPSAnLicgKyBTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTO1xuU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUgPSAnZGF0YS1yZXN1bHQtaWQnO1xuU2VhcmNoUGFkLlJFU1VMVF9ISUdITElHSFRfQ0xBU1MgPSAnZGpzLXNlYXJjaC1oaWdobGlnaHQnO1xuU2VhcmNoUGFkLk9WRVJMQVlfQ0xBU1MgPSAnZGpzLXNlYXJjaC1vdmVybGF5JztcblxuU2VhcmNoUGFkLkJPWF9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLWNvbnRhaW5lciBkanMtZHJhZ2dhYmxlIGRqcy1zY3JvbGxhYmxlXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLWlucHV0XCI+JyArXG4gICAgICAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIvPicgK1xuICAgICc8L2Rpdj4nICtcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1zZWFyY2gtcmVzdWx0c1wiPjwvZGl2PicgK1xuICAnPC9kaXY+JztcblxuU2VhcmNoUGFkLlJFU1VMVF9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdFwiPjwvZGl2Pic7XG5cblNlYXJjaFBhZC5SRVNVTFRfUFJJTUFSWV9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdC1wcmltYXJ5XCI+PC9kaXY+JztcblxuU2VhcmNoUGFkLlJFU1VMVF9TRUNPTkRBUllfSFRNTCA9XG4gICc8cCBjbGFzcz1cImRqcy1zZWFyY2gtcmVzdWx0LXNlY29uZGFyeVwiPjwvcD4nO1xuIiwiaW1wb3J0IE92ZXJsYXlzTW9kdWxlIGZyb20gJy4uL292ZXJsYXlzJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcblxuaW1wb3J0IFNlYXJjaFBhZCBmcm9tICcuL1NlYXJjaFBhZCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBPdmVybGF5c01vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgc2VhcmNoUGFkOiBbICd0eXBlJywgU2VhcmNoUGFkIF1cbn07XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IG9mZmVycyB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW4gYSBkaWFncmFtLlxuICogT2ZmZXJzIHRoZSBhcGkgdG8gY29udHJvbCB0aGUgc2VsZWN0aW9uLCB0b28uXG4gKlxuICogQGNsYXNzXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXMgdGhlIGV2ZW50IGJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWxlY3Rpb24oZXZlbnRCdXMpIHtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuXG4gIHRoaXMuX3NlbGVjdGVkRWxlbWVudHMgPSBbXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUucmVtb3ZlJywgJ2Nvbm5lY3Rpb24ucmVtb3ZlJyBdLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG4gICAgc2VsZi5kZXNlbGVjdChlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZGlhZ3JhbS5jbGVhcicgXSwgZnVuY3Rpb24oZSkge1xuICAgIHNlbGYuc2VsZWN0KG51bGwpO1xuICB9KTtcbn1cblxuU2VsZWN0aW9uLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmRlc2VsZWN0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudHM7XG5cbiAgdmFyIGlkeCA9IHNlbGVjdGVkRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcblxuICBpZiAoaWR4ICE9PSAtMSkge1xuICAgIHZhciBvbGRTZWxlY3Rpb24gPSBzZWxlY3RlZEVsZW1lbnRzLnNsaWNlKCk7XG5cbiAgICBzZWxlY3RlZEVsZW1lbnRzLnNwbGljZShpZHgsIDEpO1xuXG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VsZWN0aW9uLmNoYW5nZWQnLCB7IG9sZFNlbGVjdGlvbjogb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb246IHNlbGVjdGVkRWxlbWVudHMgfSk7XG4gIH1cbn07XG5cblxuU2VsZWN0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRWxlbWVudHM7XG59O1xuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmlzU2VsZWN0ZWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xufTtcblxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHNlbGVjdHMgb25lIG9yIG1vcmUgZWxlbWVudHMgb24gdGhlIGRpYWdyYW0uXG4gKlxuICogQnkgcGFzc2luZyBhbiBhZGRpdGlvbmFsIGFkZCBwYXJhbWV0ZXIgeW91IGNhbiBkZWNpZGUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQocylcbiAqIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgYWxyZWFkeSBleGlzdGluZyBzZWxlY3Rpb24gb3Igbm90LlxuICpcbiAqIEBtZXRob2QgU2VsZWN0aW9uI3NlbGVjdFxuICpcbiAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gZWxlbWVudHMgZWxlbWVudCBvciBhcnJheSBvZiBlbGVtZW50cyB0byBiZSBzZWxlY3RlZFxuICogQHBhcmFtICB7Ym9vbGVhbn0gW2FkZF0gd2hldGhlciB0aGUgZWxlbWVudChzKSBzaG91bGQgYmUgYXBwZW5kZWQgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBkZWZhdWx0cyB0byBmYWxzZVxuICovXG5TZWxlY3Rpb24ucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBhZGQpIHtcbiAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzLFxuICAgICAgb2xkU2VsZWN0aW9uID0gc2VsZWN0ZWRFbGVtZW50cy5zbGljZSgpO1xuXG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzID8gWyBlbGVtZW50cyBdIDogW107XG4gIH1cblxuICAvLyBzZWxlY3Rpb24gbWF5IGJlIGNsZWFyZWQgYnkgcGFzc2luZyBhbiBlbXB0eSBhcnJheSBvciBudWxsXG4gIC8vIHRvIHRoZSBtZXRob2RcbiAgaWYgKGFkZCkge1xuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xKSB7XG5cbiAgICAgICAgLy8gYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cy5zbGljZSgpO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VsZWN0aW9uLmNoYW5nZWQnLCB7IG9sZFNlbGVjdGlvbjogb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb246IHNlbGVjdGVkRWxlbWVudHMgfSk7XG59O1xuIiwiaW1wb3J0IHtcbiAgaGFzUHJpbWFyeU1vZGlmaWVyXG59IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQge1xuICBmaW5kLCBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWxlY3Rpb25CZWhhdmlvcihcbiAgICBldmVudEJ1cywgc2VsZWN0aW9uLCBjYW52YXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgYXV0b1NlbGVjdCA9IGhpbnRzLmF1dG9TZWxlY3Q7XG5cbiAgICAvLyBzZWxlY3QgZWxlbWVudHMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZFxuICAgIGlmIChjYW5FeGVjdXRlKSB7XG4gICAgICBpZiAoYXV0b1NlbGVjdCA9PT0gZmFsc2UpIHtcblxuICAgICAgICAvLyBzZWxlY3Qgbm8gZWxlbWVudHNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShhdXRvU2VsZWN0KSkge1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0KGF1dG9TZWxlY3QpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzIGJ5IGRlZmF1bHRcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50cy5maWx0ZXIoaXNTaG93bikpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuZW5kJywgNTAwLCBmdW5jdGlvbihlKSB7XG5cbiAgICAvLyBzZWxlY3QgdGhlIGNvbm5lY3QgZW5kIHRhcmdldFxuICAgIC8vIGFmdGVyIGEgY29ubmVjdCBvcGVyYXRpb25cbiAgICBpZiAoZS5jb250ZXh0LmNhbkV4ZWN1dGUgJiYgZS5jb250ZXh0LmhvdmVyKSB7XG4gICAgICBzZWxlY3Rpb24uc2VsZWN0KGUuY29udGV4dC5ob3Zlcik7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgcHJldmlvdXNTZWxlY3Rpb24gPSBlLnByZXZpb3VzU2VsZWN0aW9uIHx8IFtdO1xuXG4gICAgdmFyIHNoYXBlID0gZWxlbWVudFJlZ2lzdHJ5LmdldChlLmNvbnRleHQuc2hhcGUuaWQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IHRoZSBtYWluIG1vdmVkIGVsZW1lbnQgaXMgYmVpbmdcbiAgICAvLyBzZWxlY3RlZCBhZnRlciBhIG1vdmUgb3BlcmF0aW9uXG4gICAgdmFyIGluU2VsZWN0aW9uID0gZmluZChwcmV2aW91c1NlbGVjdGlvbiwgZnVuY3Rpb24oc2VsZWN0ZWRTaGFwZSkge1xuICAgICAgcmV0dXJuIHNoYXBlLmlkID09PSBzZWxlY3RlZFNoYXBlLmlkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpblNlbGVjdGlvbikge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChzaGFwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTaGlmdCArIGNsaWNrIHNlbGVjdGlvblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQ7XG5cbiAgICAvLyBkbyBub3Qgc2VsZWN0IHRoZSByb290IGVsZW1lbnRcbiAgICAvLyBvciBjb25uZWN0aW9uc1xuICAgIGlmIChlbGVtZW50ID09PSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSkge1xuICAgICAgZWxlbWVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGlzU2VsZWN0ZWQgPSBzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KSxcbiAgICAgICAgaXNNdWx0aVNlbGVjdCA9IHNlbGVjdGlvbi5nZXQoKS5sZW5ndGggPiAxO1xuXG4gICAgLy8gbW91c2UtZXZlbnQ6IFNFTEVDVElPTl9LRVlcbiAgICB2YXIgYWRkID0gaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KTtcblxuICAgIC8vIHNlbGVjdCBPUiBkZXNlbGVjdCBlbGVtZW50IGluIG11bHRpIHNlbGVjdGlvblxuICAgIGlmIChpc1NlbGVjdGVkICYmIGlzTXVsdGlTZWxlY3QpIHtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5kZXNlbGVjdChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0KGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZVxuICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50LCBhZGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuU2VsZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG5mdW5jdGlvbiBpc1Nob3duKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFlbGVtZW50LmhpZGRlbjtcbn1cbiIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgTUFSS0VSX0hPVkVSID0gJ2hvdmVyJyxcbiAgICBNQVJLRVJfU0VMRUNURUQgPSAnc2VsZWN0ZWQnO1xuXG5cbi8qKlxuICogQSBwbHVnaW4gdGhhdCBhZGRzIGEgdmlzaWJsZSBzZWxlY3Rpb24gVUkgdG8gc2hhcGVzIGFuZCBjb25uZWN0aW9uc1xuICogYnkgYXBwZW5kaW5nIHRoZSA8Y29kZT5ob3ZlcjwvY29kZT4gYW5kIDxjb2RlPnNlbGVjdGVkPC9jb2RlPiBjbGFzc2VzIHRvIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKlxuICogTWFrZXMgZWxlbWVudHMgc2VsZWN0YWJsZSwgdG9vLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50c1xuICogQHBhcmFtIHtTZWxlY3Rpb25TZXJ2aWNlfSBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2VsZWN0aW9uVmlzdWFscyhldmVudHMsIGNhbnZhcywgc2VsZWN0aW9uLCBzdHlsZXMpIHtcblxuICB0aGlzLl9tdWx0aVNlbGVjdGlvbkJveCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gYWRkTWFya2VyKGUsIGNscykge1xuICAgIGNhbnZhcy5hZGRNYXJrZXIoZSwgY2xzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU1hcmtlcihlLCBjbHMpIHtcbiAgICBjYW52YXMucmVtb3ZlTWFya2VyKGUsIGNscyk7XG4gIH1cblxuICBldmVudHMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIGFkZE1hcmtlcihldmVudC5lbGVtZW50LCBNQVJLRVJfSE9WRVIpO1xuICB9KTtcblxuICBldmVudHMub24oJ2VsZW1lbnQub3V0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZW1vdmVNYXJrZXIoZXZlbnQuZWxlbWVudCwgTUFSS0VSX0hPVkVSKTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBmdW5jdGlvbiBkZXNlbGVjdChzKSB7XG4gICAgICByZW1vdmVNYXJrZXIocywgTUFSS0VSX1NFTEVDVEVEKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxlY3Qocykge1xuICAgICAgYWRkTWFya2VyKHMsIE1BUktFUl9TRUxFQ1RFRCk7XG4gICAgfVxuXG4gICAgdmFyIG9sZFNlbGVjdGlvbiA9IGV2ZW50Lm9sZFNlbGVjdGlvbixcbiAgICAgICAgbmV3U2VsZWN0aW9uID0gZXZlbnQubmV3U2VsZWN0aW9uO1xuXG4gICAgZm9yRWFjaChvbGRTZWxlY3Rpb24sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChuZXdTZWxlY3Rpb24uaW5kZXhPZihlKSA9PT0gLTEpIHtcbiAgICAgICAgZGVzZWxlY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKG5ld1NlbGVjdGlvbiwgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKG9sZFNlbGVjdGlvbi5pbmRleE9mKGUpID09PSAtMSkge1xuICAgICAgICBzZWxlY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5TZWxlY3Rpb25WaXN1YWxzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3N0eWxlcydcbl07IiwiaW1wb3J0IEludGVyYWN0aW9uRXZlbnRzTW9kdWxlIGZyb20gJy4uL2ludGVyYWN0aW9uLWV2ZW50cyc7XG5pbXBvcnQgT3V0bGluZU1vZHVsZSBmcm9tICcuLi9vdXRsaW5lJztcblxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tICcuL1NlbGVjdGlvbic7XG5pbXBvcnQgU2VsZWN0aW9uVmlzdWFscyBmcm9tICcuL1NlbGVjdGlvblZpc3VhbHMnO1xuaW1wb3J0IFNlbGVjdGlvbkJlaGF2aW9yIGZyb20gJy4vU2VsZWN0aW9uQmVoYXZpb3InO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3NlbGVjdGlvblZpc3VhbHMnLCAnc2VsZWN0aW9uQmVoYXZpb3InIF0sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgT3V0bGluZU1vZHVsZVxuICBdLFxuICBzZWxlY3Rpb246IFsgJ3R5cGUnLCBTZWxlY3Rpb24gXSxcbiAgc2VsZWN0aW9uVmlzdWFsczogWyAndHlwZScsIFNlbGVjdGlvblZpc3VhbHMgXSxcbiAgc2VsZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBTZWxlY3Rpb25CZWhhdmlvciBdXG59O1xuIiwiaW1wb3J0IFNuYXBDb250ZXh0IGZyb20gJy4vU25hcENvbnRleHQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRDaGlsZHJlbixcclxuICBpc1NuYXBwZWQsXHJcbiAgbWlkXHJcbn0gZnJvbSAnLi9TbmFwVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0NtZCB9IGZyb20gJy4uL2tleWJvYXJkL0tleWJvYXJkVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZvckVhY2gsXHJcbiAgaXNOdW1iZXJcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTI1MDtcclxuXHJcblxyXG4vKipcclxuICogU25hcCBkdXJpbmcgY3JlYXRlIGFuZCBtb3ZlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBlbGVtZW50UmVnaXN0cnlcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtTbmFwcGluZ30gc25hcHBpbmdcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZU1vdmVTbmFwcGluZyhlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBzbmFwcGluZykge1xyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLnN0YXJ0JyxcclxuICAgICdzaGFwZS5tb3ZlLnN0YXJ0J1xyXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBzZWxmLmluaXRTbmFwKGV2ZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2NyZWF0ZS5tb3ZlJyxcclxuICAgICdjcmVhdGUuZW5kJyxcclxuICAgICdzaGFwZS5tb3ZlLm1vdmUnLFxyXG4gICAgJ3NoYXBlLm1vdmUuZW5kJ1xyXG4gIF0sIEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0LFxyXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xyXG5cclxuICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICYmIGlzQ21kKGV2ZW50Lm9yaWdpbmFsRXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNTbmFwcGVkKGV2ZW50KSB8fCAhdGFyZ2V0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc25hcFBvaW50cyA9IHNuYXBDb250ZXh0LnBvaW50c0ZvclRhcmdldCh0YXJnZXQpO1xyXG5cclxuICAgIGlmICghc25hcFBvaW50cy5pbml0aWFsaXplZCkge1xyXG4gICAgICBzbmFwUG9pbnRzID0gc2VsZi5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQpO1xyXG5cclxuICAgICAgc25hcFBvaW50cy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc25hcHBpbmcuc25hcChldmVudCwgc25hcFBvaW50cyk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuY2xlYW51cCcsXHJcbiAgICAnc2hhcGUubW92ZS5jbGVhbnVwJ1xyXG4gIF0sIGZ1bmN0aW9uKCkge1xyXG4gICAgc25hcHBpbmcuaGlkZSgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5DcmVhdGVNb3ZlU25hcHBpbmcuJGluamVjdCA9IFtcclxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdzbmFwcGluZydcclxuXTtcclxuXHJcbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuaW5pdFNuYXAgPSBmdW5jdGlvbihldmVudCkge1xyXG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnk7XHJcblxyXG4gIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQ7XHJcblxyXG4gIGlmICghc25hcENvbnRleHQpIHtcclxuICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dCA9IG5ldyBTbmFwQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHNoYXBlTWlkO1xyXG5cclxuICBpZiAoZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCkpIHtcclxuXHJcbiAgICAvLyBtb3ZlXHJcbiAgICBzaGFwZU1pZCA9IG1pZChzaGFwZSwgZXZlbnQpO1xyXG4gIH0gZWxzZSB7XHJcblxyXG4gICAgLy8gY3JlYXRlXHJcbiAgICBzaGFwZU1pZCA9IHtcclxuICAgICAgeDogZXZlbnQueCArIG1pZChzaGFwZSkueCxcclxuICAgICAgeTogZXZlbnQueSArIG1pZChzaGFwZSkueVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHZhciBzaGFwZVRvcExlZnQgPSB7XHJcbiAgICAgICAgeDogc2hhcGVNaWQueCAtIHNoYXBlLndpZHRoIC8gMixcclxuICAgICAgICB5OiBzaGFwZU1pZC55IC0gc2hhcGUuaGVpZ2h0IC8gMlxyXG4gICAgICB9LFxyXG4gICAgICBzaGFwZUJvdHRvbVJpZ2h0ID0ge1xyXG4gICAgICAgIHg6IHNoYXBlTWlkLnggKyBzaGFwZS53aWR0aCAvIDIsXHJcbiAgICAgICAgeTogc2hhcGVNaWQueSArIHNoYXBlLmhlaWdodCAvIDJcclxuICAgICAgfTtcclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbignbWlkJywge1xyXG4gICAgeDogc2hhcGVNaWQueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzaGFwZU1pZC55IC0gZXZlbnQueVxyXG4gIH0pO1xyXG5cclxuICAvLyBzbmFwIGxhYmVscyB0byBtaWQgb25seVxyXG4gIGlmIChpc0xhYmVsKHNoYXBlKSkge1xyXG4gICAgcmV0dXJuIHNuYXBDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbigndG9wLWxlZnQnLCB7XHJcbiAgICB4OiBzaGFwZVRvcExlZnQueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzaGFwZVRvcExlZnQueSAtIGV2ZW50LnlcclxuICB9KTtcclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbignYm90dG9tLXJpZ2h0Jywge1xyXG4gICAgeDogc2hhcGVCb3R0b21SaWdodC54IC0gZXZlbnQueCxcclxuICAgIHk6IHNoYXBlQm90dG9tUmlnaHQueSAtIGV2ZW50LnlcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHNuYXBDb250ZXh0O1xyXG59O1xyXG5cclxuQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzID0gZnVuY3Rpb24oc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCkge1xyXG4gIHZhciBzbmFwVGFyZ2V0cyA9IHRoaXMuZ2V0U25hcFRhcmdldHMoc2hhcGUsIHRhcmdldCk7XHJcblxyXG4gIGZvckVhY2goc25hcFRhcmdldHMsIGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcclxuXHJcbiAgICAvLyBoYW5kbGUgbGFiZWxzXHJcbiAgICBpZiAoaXNMYWJlbChzbmFwVGFyZ2V0KSkge1xyXG5cclxuICAgICAgaWYgKGlzTGFiZWwoc2hhcGUpKSB7XHJcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIG1pZChzbmFwVGFyZ2V0KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgY29ubmVjdGlvbnNcclxuICAgIGlmIChpc0Nvbm5lY3Rpb24oc25hcFRhcmdldCkpIHtcclxuXHJcbiAgICAgIC8vIGlnbm9yZSBzaW5nbGUgc2VnbWVudCBjb25uZWN0aW9uc1xyXG4gICAgICBpZiAoc25hcFRhcmdldC53YXlwb2ludHMubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWdub3JlIGZpcnN0IGFuZCBsYXN0IHdheXBvaW50XHJcbiAgICAgIHZhciB3YXlwb2ludHMgPSBzbmFwVGFyZ2V0LndheXBvaW50cy5zbGljZSgxLCAtMSk7XHJcblxyXG4gICAgICBmb3JFYWNoKHdheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcclxuICAgICAgICBzbmFwUG9pbnRzLmFkZCgnbWlkJywgd2F5cG9pbnQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgc2hhcGVzXHJcbiAgICBzbmFwUG9pbnRzLmFkZCgnbWlkJywgbWlkKHNuYXBUYXJnZXQpKTtcclxuICB9KTtcclxuXHJcbiAgaWYgKCFpc051bWJlcihzaGFwZS54KSB8fCAhaXNOdW1iZXIoc2hhcGUueSkpIHtcclxuICAgIHJldHVybiBzbmFwUG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgLy8gc25hcCB0byBvcmlnaW5hbCBwb3NpdGlvbiB3aGVuIG1vdmluZ1xyXG4gIGlmICh0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xyXG4gICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIG1pZChzaGFwZSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNuYXBQb2ludHM7XHJcbn07XHJcblxyXG5DcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBUYXJnZXRzID0gZnVuY3Rpb24oc2hhcGUsIHRhcmdldCkge1xyXG4gIHJldHVybiBnZXRDaGlsZHJlbih0YXJnZXQpLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xyXG4gICAgcmV0dXJuICFpc0hpZGRlbihjaGlsZCk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC53YXlwb2ludHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSGlkZGVuKGVsZW1lbnQpIHtcclxuICByZXR1cm4gISFlbGVtZW50LmhpZGRlbjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcclxufSIsImltcG9ydCBTbmFwQ29udGV4dCBmcm9tICcuL1NuYXBDb250ZXh0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgYm90dG9tUmlnaHQsXHJcbiAgZ2V0Q2hpbGRyZW4sXHJcbiAgaXNTbmFwcGVkLFxyXG4gIHNldFNuYXBwZWQsXHJcbiAgdG9wTGVmdCxcclxufSBmcm9tICcuL1NuYXBVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQ21kIH0gZnJvbSAnLi4va2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNUUkJMLFxyXG4gIGdldE1pZFxyXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTI1MDtcclxuXHJcblxyXG4vKipcclxuICogU25hcCBkdXJpbmcgcmVzaXplLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge1NuYXBwaW5nfSBzbmFwcGluZ1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplU25hcHBpbmcoZXZlbnRCdXMsIHNuYXBwaW5nKSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbihbICdyZXNpemUuc3RhcnQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBzZWxmLmluaXRTbmFwKGV2ZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ3Jlc2l6ZS5tb3ZlJyxcclxuICAgICdyZXNpemUuZW5kJyxcclxuICBdLCBISUdIRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHBhcmVudCA9IHNoYXBlLnBhcmVudCxcclxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcclxuICAgICAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQ7XHJcblxyXG4gICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQgJiYgaXNDbWQoZXZlbnQub3JpZ2luYWxFdmVudCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1NuYXBwZWQoZXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc25hcFBvaW50cyA9IHNuYXBDb250ZXh0LnBvaW50c0ZvclRhcmdldChwYXJlbnQpO1xyXG5cclxuICAgIGlmICghc25hcFBvaW50cy5pbml0aWFsaXplZCkge1xyXG4gICAgICBzbmFwUG9pbnRzID0gc2VsZi5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCBwYXJlbnQsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICBzbmFwUG9pbnRzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGRpcmVjdGlvbikpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCBldmVudC54KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbChkaXJlY3Rpb24pKSB7XHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5JywgZXZlbnQueSk7XHJcbiAgICB9XHJcblxyXG4gICAgc25hcHBpbmcuc25hcChldmVudCwgc25hcFBvaW50cyk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFsgJ3Jlc2l6ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbigpIHtcclxuICAgIHNuYXBwaW5nLmhpZGUoKTtcclxuICB9KTtcclxufVxyXG5cclxuUmVzaXplU25hcHBpbmcucHJvdG90eXBlLmluaXRTbmFwID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgZGlyZWN0aW9uID0gY29udGV4dC5kaXJlY3Rpb24sXHJcbiAgICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dDtcclxuXHJcbiAgaWYgKCFzbmFwQ29udGV4dCkge1xyXG4gICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0ID0gbmV3IFNuYXBDb250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICB2YXIgc25hcE9yaWdpbiA9IGdldFNuYXBPcmlnaW4oc2hhcGUsIGRpcmVjdGlvbik7XHJcblxyXG4gIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oJ2Nvcm5lcicsIHtcclxuICAgIHg6IHNuYXBPcmlnaW4ueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzbmFwT3JpZ2luLnkgLSBldmVudC55XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBzbmFwQ29udGV4dDtcclxufTtcclxuXHJcblJlc2l6ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzID0gZnVuY3Rpb24oc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCwgZGlyZWN0aW9uKSB7XHJcbiAgdmFyIHNuYXBUYXJnZXRzID0gdGhpcy5nZXRTbmFwVGFyZ2V0cyhzaGFwZSwgdGFyZ2V0KTtcclxuXHJcbiAgZm9yRWFjaChzbmFwVGFyZ2V0cywgZnVuY3Rpb24oc25hcFRhcmdldCkge1xyXG4gICAgc25hcFBvaW50cy5hZGQoJ2Nvcm5lcicsIGJvdHRvbVJpZ2h0KHNuYXBUYXJnZXQpKTtcclxuICAgIHNuYXBQb2ludHMuYWRkKCdjb3JuZXInLCB0b3BMZWZ0KHNuYXBUYXJnZXQpKTtcclxuICB9KTtcclxuXHJcbiAgc25hcFBvaW50cy5hZGQoJ2Nvcm5lcicsIGdldFNuYXBPcmlnaW4oc2hhcGUsIGRpcmVjdGlvbikpO1xyXG5cclxuICByZXR1cm4gc25hcFBvaW50cztcclxufTtcclxuXHJcblJlc2l6ZVNuYXBwaW5nLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnc25hcHBpbmcnXHJcbl07XHJcblxyXG5SZXNpemVTbmFwcGluZy5wcm90b3R5cGUuZ2V0U25hcFRhcmdldHMgPSBmdW5jdGlvbihzaGFwZSwgdGFyZ2V0KSB7XHJcbiAgcmV0dXJuIGdldENoaWxkcmVuKHRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICByZXR1cm4gIWlzQXR0YWNoZWQoY2hpbGQsIHNoYXBlKVxyXG4gICAgICAmJiAhaXNDb25uZWN0aW9uKGNoaWxkKVxyXG4gICAgICAmJiAhaXNIaWRkZW4oY2hpbGQpXHJcbiAgICAgICYmICFpc0xhYmVsKGNoaWxkKTtcclxuICB9KTtcclxufTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gZ2V0U25hcE9yaWdpbihzaGFwZSwgZGlyZWN0aW9uKSB7XHJcbiAgdmFyIG1pZCA9IGdldE1pZChzaGFwZSksXHJcbiAgICAgIHRyYmwgPSBhc1RSQkwoc2hhcGUpO1xyXG5cclxuICB2YXIgc25hcE9yaWdpbiA9IHtcclxuICAgIHg6IG1pZC54LFxyXG4gICAgeTogbWlkLnlcclxuICB9O1xyXG5cclxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueSA9IHRyYmwudG9wO1xyXG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3MnKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueSA9IHRyYmwuYm90dG9tO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdlJykgIT09IC0xKSB7XHJcbiAgICBzbmFwT3JpZ2luLnggPSB0cmJsLnJpZ2h0O1xyXG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3cnKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueCA9IHRyYmwubGVmdDtcclxuICB9XHJcblxyXG4gIHJldHVybiBzbmFwT3JpZ2luO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0F0dGFjaGVkKGVsZW1lbnQsIGhvc3QpIHtcclxuICByZXR1cm4gZWxlbWVudC5ob3N0ID09PSBob3N0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0hpZGRlbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC5oaWRkZW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChkaXJlY3Rpb24pIHtcclxuICByZXR1cm4gZGlyZWN0aW9uID09PSAnbicgfHwgZGlyZWN0aW9uID09PSAncyc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmVydGljYWwoZGlyZWN0aW9uKSB7XHJcbiAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2UnIHx8IGRpcmVjdGlvbiA9PT0gJ3cnO1xyXG59IiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHNuYXBUb1xufSBmcm9tICcuL1NuYXBVdGlsJztcblxuXG4vKipcbiAqIEEgc25hcCBjb250ZXh0LCBjb250YWluaW5nIHRoZSAocG9zc2libHkgaW5jb21wbGV0ZSlcbiAqIG1hcHBpbmdzIG9mIGRyb3AgdGFyZ2V0cyAodG8gaWRlbnRpZnkgdGhlIHNuYXBwaW5nKVxuICogdG8gY29tcHV0ZWQgc25hcCBwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNuYXBDb250ZXh0KCkge1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBTbmFwUG9pbnRzPiBtYXBwaW5nIGRyb3AgdGFyZ2V0cyB0b1xuICAgKiBhIGxpc3Qgb2YgcG9zc2libGUgc25hcHBpbmdzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fdGFyZ2V0cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBQb2ludD4gaW5pdGlhbCBwb3NpdGlvbmluZyBvZiBlbGVtZW50XG4gICAqIHJlZ2FyZGluZyB2YXJpb3VzIHNuYXAgZGlyZWN0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX3NuYXBPcmlnaW5zID0ge307XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc25hcCBsb2NhdGlvbnNcbiAgICpcbiAgICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gICAqL1xuICB0aGlzLl9zbmFwTG9jYXRpb25zID0gW107XG5cbiAgLyoqXG4gICAqIE1hcDxTdHJpbmcsIEFycmF5PFBvaW50Pj4gb2YgZGVmYXVsdCBzbmFwcGluZyBsb2NhdGlvbnNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX2RlZmF1bHRTbmFwcyA9IHt9O1xufVxuXG5cblNuYXBDb250ZXh0LnByb3RvdHlwZS5nZXRTbmFwT3JpZ2luID0gZnVuY3Rpb24oc25hcExvY2F0aW9uKSB7XG4gIHJldHVybiB0aGlzLl9zbmFwT3JpZ2luc1tzbmFwTG9jYXRpb25dO1xufTtcblxuXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuc2V0U25hcE9yaWdpbiA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbiwgaW5pdGlhbFZhbHVlKSB7XG4gIHRoaXMuX3NuYXBPcmlnaW5zW3NuYXBMb2NhdGlvbl0gPSBpbml0aWFsVmFsdWU7XG5cbiAgaWYgKHRoaXMuX3NuYXBMb2NhdGlvbnMuaW5kZXhPZihzbmFwTG9jYXRpb24pID09PSAtMSkge1xuICAgIHRoaXMuX3NuYXBMb2NhdGlvbnMucHVzaChzbmFwTG9jYXRpb24pO1xuICB9XG59O1xuXG5cblNuYXBDb250ZXh0LnByb3RvdHlwZS5hZGREZWZhdWx0U25hcCA9IGZ1bmN0aW9uKHR5cGUsIHBvaW50KSB7XG5cbiAgdmFyIHNuYXBWYWx1ZXMgPSB0aGlzLl9kZWZhdWx0U25hcHNbdHlwZV07XG5cbiAgaWYgKCFzbmFwVmFsdWVzKSB7XG4gICAgc25hcFZhbHVlcyA9IHRoaXMuX2RlZmF1bHRTbmFwc1t0eXBlXSA9IFtdO1xuICB9XG5cbiAgc25hcFZhbHVlcy5wdXNoKHBvaW50KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgbnVtYmVyIG9mIGluaXRpYWxpemVkIHNuYXBzLCBpLmUuIHNuYXAgbG9jYXRpb25zIHN1Y2ggYXNcbiAqIHRvcC1sZWZ0LCBtaWQsIGJvdHRvbS1yaWdodCBhbmQgc28gZm9ydGguXG4gKlxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn0gc25hcExvY2F0aW9uc1xuICovXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuZ2V0U25hcExvY2F0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fc25hcExvY2F0aW9ucztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzbmFwIGxvY2F0aW9ucyBmb3IgdGhpcyBjb250ZXh0LlxuICpcbiAqIFRoZSBvcmRlciBvZiBsb2NhdGlvbnMgZGV0ZXJtaW5lcyBwcmVjZWRlbmNlLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc25hcExvY2F0aW9uc1xuICovXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuc2V0U25hcExvY2F0aW9ucyA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbnMpIHtcbiAgdGhpcy5fc25hcExvY2F0aW9ucyA9IHNuYXBMb2NhdGlvbnM7XG59O1xuXG4vKipcbiAqIEdldCBzbmFwIHBvaW50cyBmb3IgYSBnaXZlbiB0YXJnZXRcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8c3RyaW5nfSB0YXJnZXRcbiAqL1xuU25hcENvbnRleHQucHJvdG90eXBlLnBvaW50c0ZvclRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkge1xuXG4gIHZhciB0YXJnZXRJZCA9IHRhcmdldC5pZCB8fCB0YXJnZXQ7XG5cbiAgdmFyIHNuYXBQb2ludHMgPSB0aGlzLl90YXJnZXRzW3RhcmdldElkXTtcblxuICBpZiAoIXNuYXBQb2ludHMpIHtcbiAgICBzbmFwUG9pbnRzID0gdGhpcy5fdGFyZ2V0c1t0YXJnZXRJZF0gPSBuZXcgU25hcFBvaW50cygpO1xuICAgIHNuYXBQb2ludHMuaW5pdERlZmF1bHRzKHRoaXMuX2RlZmF1bHRTbmFwcyk7XG4gIH1cblxuICByZXR1cm4gc25hcFBvaW50cztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBzbmFwIHBvaW50cyBhbmQgaW5pdGlhbGl6ZXMgdGhlbSB3aXRoIHRoZVxuICogZ2l2ZW4gZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBBcnJheTxQb2ludD4+fSBbZGVmYXVsdFBvaW50c11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNuYXBQb2ludHMoZGVmYXVsdFNuYXBzKSB7XG5cbiAgLyoqXG4gICAqIE1hcDxTdHJpbmcsIE1hcDwoeHx5KSwgQXJyYXk8bnVtYmVyPj4+IG1hcHBpbmcgc25hcCBsb2NhdGlvbnMsXG4gICAqIGkuZS4gdG9wLWxlZnQsIGJvdHRvbS1yaWdodCwgY2VudGVyIHRvIGFjdHVhbCBzbmFwIHZhbHVlcy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX3NuYXBWYWx1ZXMgPSB7fTtcbn1cblxuU25hcFBvaW50cy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oc25hcExvY2F0aW9uLCBwb2ludCkge1xuXG4gIHZhciBzbmFwVmFsdWVzID0gdGhpcy5fc25hcFZhbHVlc1tzbmFwTG9jYXRpb25dO1xuXG4gIGlmICghc25hcFZhbHVlcykge1xuICAgIHNuYXBWYWx1ZXMgPSB0aGlzLl9zbmFwVmFsdWVzW3NuYXBMb2NhdGlvbl0gPSB7IHg6IFtdLCB5OiBbXSB9O1xuICB9XG5cbiAgaWYgKHNuYXBWYWx1ZXMueC5pbmRleE9mKHBvaW50LngpID09PSAtMSkge1xuICAgIHNuYXBWYWx1ZXMueC5wdXNoKHBvaW50LngpO1xuICB9XG5cbiAgaWYgKHNuYXBWYWx1ZXMueS5pbmRleE9mKHBvaW50LnkpID09PSAtMSkge1xuICAgIHNuYXBWYWx1ZXMueS5wdXNoKHBvaW50LnkpO1xuICB9XG59O1xuXG5cblNuYXBQb2ludHMucHJvdG90eXBlLnNuYXAgPSBmdW5jdGlvbihwb2ludCwgc25hcExvY2F0aW9uLCBheGlzLCB0b2xlcmFuY2UpIHtcbiAgdmFyIHNuYXBwaW5nVmFsdWVzID0gdGhpcy5fc25hcFZhbHVlc1tzbmFwTG9jYXRpb25dO1xuXG4gIHJldHVybiBzbmFwcGluZ1ZhbHVlcyAmJiBzbmFwVG8ocG9pbnRbYXhpc10sIHNuYXBwaW5nVmFsdWVzW2F4aXNdLCB0b2xlcmFuY2UpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbnVtYmVyIG9mIGRlZmF1bHQgc25hcHBpbmcgcG9pbnRzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZGVmYXVsdFNuYXBzXG4gKi9cblNuYXBQb2ludHMucHJvdG90eXBlLmluaXREZWZhdWx0cyA9IGZ1bmN0aW9uKGRlZmF1bHRTbmFwcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKGRlZmF1bHRTbmFwcyB8fCB7fSwgZnVuY3Rpb24oc25hcFBvaW50cywgc25hcExvY2F0aW9uKSB7XG4gICAgZm9yRWFjaChzbmFwUG9pbnRzLCBmdW5jdGlvbihwb2ludCkge1xuICAgICAgc2VsZi5hZGQoc25hcExvY2F0aW9uLCBwb2ludCk7XG4gICAgfSk7XG4gIH0pO1xufTsiLCJ2YXIgYWJzID0gTWF0aC5hYnMsXG4gICAgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5cbi8qKlxuICogU25hcCB2YWx1ZSB0byBhIGNvbGxlY3Rpb24gb2YgcmVmZXJlbmNlIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0gIHtBcnJheTxudW1iZXI+fSB2YWx1ZXNcbiAqIEBwYXJhbSAge251bWJlcn0gW3RvbGVyYW5jZT0xMF1cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSB2YWx1ZSB3ZSBzbmFwcGVkIHRvIG9yIG51bGwsIGlmIG5vbmUgc25hcHBlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcFRvKHZhbHVlLCB2YWx1ZXMsIHRvbGVyYW5jZSkge1xuICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgPT09IHVuZGVmaW5lZCA/IDEwIDogdG9sZXJhbmNlO1xuXG4gIHZhciBpZHgsIHNuYXBWYWx1ZTtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IHZhbHVlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgc25hcFZhbHVlID0gdmFsdWVzW2lkeF07XG5cbiAgICBpZiAoYWJzKHNuYXBWYWx1ZSAtIHZhbHVlKSA8PSB0b2xlcmFuY2UpIHtcbiAgICAgIHJldHVybiBzbmFwVmFsdWU7XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExlZnQoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLngsXG4gICAgeTogYm91bmRzLnlcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcFJpZ2h0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgYm91bmRzLndpZHRoLFxuICAgIHk6IGJvdW5kcy55XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3R0b21MZWZ0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54LFxuICAgIHk6IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tUmlnaHQoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGgsXG4gICAgeTogYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWQoYm91bmRzLCBkZWZhdWx0VmFsdWUpIHtcblxuICBpZiAoIWJvdW5kcyB8fCBpc05hTihib3VuZHMueCkgfHwgaXNOYU4oYm91bmRzLnkpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyKSxcbiAgICB5OiByb3VuZChib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgLyAyKVxuICB9O1xufVxuXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHNuYXAgc3RhdGUgb2YgdGhlIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHBhcmFtICB7c3RyaW5nfSBheGlzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHNuYXBwZWQgc3RhdGVcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NuYXBwZWQoZXZlbnQsIGF4aXMpIHtcbiAgdmFyIHNuYXBwZWQgPSBldmVudC5zbmFwcGVkO1xuXG4gIGlmICghc25hcHBlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXhpcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc25hcHBlZFtheGlzXTtcbiAgfVxuXG4gIHJldHVybiBzbmFwcGVkLnggJiYgc25hcHBlZC55O1xufVxuXG5cbi8qKlxuICogU2V0IHRoZSBnaXZlbiBldmVudCBhcyBzbmFwcGVkLlxuICpcbiAqIFRoaXMgbWV0aG9kIG1heSBjaGFuZ2UgdGhlIHggYW5kL29yIHkgcG9zaXRpb24gb2YgdGhlIHNoYXBlXG4gKiBmcm9tIHRoZSBnaXZlbiBldmVudCFcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcbiAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IHZhbHVlXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBvbGQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgYXhpcyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2F4aXMgbXVzdCBiZSBpbiBbeCwgeV0nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInICYmIHZhbHVlICE9PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBOdW1iZXIgb3IgZmFsc2UnKTtcbiAgfVxuXG4gIHZhciBkZWx0YSxcbiAgICAgIHByZXZpb3VzVmFsdWUgPSBldmVudFtheGlzXTtcblxuICB2YXIgc25hcHBlZCA9IGV2ZW50LnNuYXBwZWQgPSAoZXZlbnQuc25hcHBlZCB8fCB7fSk7XG5cblxuICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgc25hcHBlZFtheGlzXSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHNuYXBwZWRbYXhpc10gPSB0cnVlO1xuXG4gICAgZGVsdGEgPSB2YWx1ZSAtIHByZXZpb3VzVmFsdWU7XG5cbiAgICBldmVudFtheGlzXSArPSBkZWx0YTtcbiAgICBldmVudFsnZCcgKyBheGlzXSArPSBkZWx0YTtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIEdldCBjaGlsZHJlbiBvZiBhIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBwYXJlbnRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfGRqcy5tb2RlbC5Db25uZWN0aW9uPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkcmVuKHBhcmVudCkge1xuICByZXR1cm4gcGFyZW50LmNoaWxkcmVuIHx8IFtdO1xufSIsImltcG9ydCB7XG4gIGJpbmQsXG4gIGRlYm91bmNlLFxuICBmb3JFYWNoLFxuICBpc051bWJlcixcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1NuYXBwZWQsXG4gIHNldFNuYXBwZWRcbn0gZnJvbSAnLi9TbmFwVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIFNOQVBfVE9MRVJBTkNFID0gNztcblxuZXhwb3J0IHZhciBTTkFQX0xJTkVfSElERV9ERUxBWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBHZW5lcmljIHNuYXBwaW5nIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU25hcHBpbmcoY2FudmFzKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcblxuICAvLyBkZWxheSBoaWRlIGJ5IDEwMDAgc2Vjb25kcyBzaW5jZSBsYXN0IHNuYXBcbiAgdGhpcy5fYXN5bmNIaWRlID0gZGVib3VuY2UoYmluZCh0aGlzLmhpZGUsIHRoaXMpLCBTTkFQX0xJTkVfSElERV9ERUxBWSk7XG59XG5cblNuYXBwaW5nLiRpbmplY3QgPSBbICdjYW52YXMnIF07XG5cbi8qKlxuICogU25hcCBhbiBldmVudCB0byBnaXZlbiBzbmFwIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtTbmFwUG9pbnRzfSBzbmFwUG9pbnRzXG4gKi9cblNuYXBwaW5nLnByb3RvdHlwZS5zbmFwID0gZnVuY3Rpb24oZXZlbnQsIHNuYXBQb2ludHMpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0LFxuICAgICAgc25hcExvY2F0aW9ucyA9IHNuYXBDb250ZXh0LmdldFNuYXBMb2NhdGlvbnMoKTtcblxuICB2YXIgc25hcHBpbmcgPSB7XG4gICAgeDogaXNTbmFwcGVkKGV2ZW50LCAneCcpLFxuICAgIHk6IGlzU25hcHBlZChldmVudCwgJ3knKVxuICB9O1xuXG4gIGZvckVhY2goc25hcExvY2F0aW9ucywgZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICB2YXIgc25hcE9yaWdpbiA9IHNuYXBDb250ZXh0LmdldFNuYXBPcmlnaW4obG9jYXRpb24pO1xuXG4gICAgdmFyIHNuYXBDdXJyZW50ID0ge1xuICAgICAgeDogZXZlbnQueCArIHNuYXBPcmlnaW4ueCxcbiAgICAgIHk6IGV2ZW50LnkgKyBzbmFwT3JpZ2luLnlcbiAgICB9O1xuXG4gICAgLy8gc25hcCBib3RoIGF4aXMgaWYgbm90IHNuYXBwZWQgYWxyZWFkeVxuICAgIGZvckVhY2goWyAneCcsICd5JyBdLCBmdW5jdGlvbihheGlzKSB7XG4gICAgICB2YXIgbG9jYXRpb25TbmFwcGluZztcblxuICAgICAgaWYgKCFzbmFwcGluZ1theGlzXSkge1xuICAgICAgICBsb2NhdGlvblNuYXBwaW5nID0gc25hcFBvaW50cy5zbmFwKHNuYXBDdXJyZW50LCBsb2NhdGlvbiwgYXhpcywgU05BUF9UT0xFUkFOQ0UpO1xuXG4gICAgICAgIGlmIChsb2NhdGlvblNuYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzbmFwcGluZ1theGlzXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBsb2NhdGlvblNuYXBwaW5nLFxuICAgICAgICAgICAgb3JpZ2luVmFsdWU6IGxvY2F0aW9uU25hcHBpbmcgLSBzbmFwT3JpZ2luW2F4aXNdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gbm8gbmVlZCB0byBjb250aW51ZSBzbmFwcGluZ1xuICAgIGlmIChzbmFwcGluZy54ICYmIHNuYXBwaW5nLnkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHNob3cgc25hcCBsaW5lc1xuICB0aGlzLnNob3dTbmFwTGluZSgndmVydGljYWwnLCBzbmFwcGluZy54ICYmIHNuYXBwaW5nLngudmFsdWUpO1xuICB0aGlzLnNob3dTbmFwTGluZSgnaG9yaXpvbnRhbCcsIHNuYXBwaW5nLnkgJiYgc25hcHBpbmcueS52YWx1ZSk7XG5cbiAgLy8gc25hcCBldmVudFxuICBmb3JFYWNoKFsgJ3gnLCAneScgXSwgZnVuY3Rpb24oYXhpcykge1xuICAgIHZhciBheGlzU25hcHBpbmcgPSBzbmFwcGluZ1theGlzXTtcblxuICAgIGlmIChpc09iamVjdChheGlzU25hcHBpbmcpKSB7XG4gICAgICBzZXRTbmFwcGVkKGV2ZW50LCBheGlzLCBheGlzU25hcHBpbmcub3JpZ2luVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuX2NyZWF0ZUxpbmUgPSBmdW5jdGlvbihvcmllbnRhdGlvbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2NhbnZhcy5nZXRMYXllcignc25hcCcpO1xuXG4gIHZhciBsaW5lID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG5cbiAgc3ZnQXR0cihsaW5lLCB7IGQ6ICdNMCwwIEwwLDAnIH0pO1xuXG4gIHN2Z0NsYXNzZXMobGluZSkuYWRkKCdkanMtc25hcC1saW5lJyk7XG5cbiAgc3ZnQXBwZW5kKHJvb3QsIGxpbmUpO1xuXG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikge1xuXG4gICAgICBpZiAoIWlzTnVtYmVyKHBvc2l0aW9uKSkge1xuICAgICAgICBzdmdBdHRyKGxpbmUsIHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBzdmdBdHRyKGxpbmUsIHtcbiAgICAgICAgICAgIGQ6ICdNLTEwMDAwMCwnICsgcG9zaXRpb24gKyAnIEwrMTAwMDAwLCcgKyBwb3NpdGlvbixcbiAgICAgICAgICAgIGRpc3BsYXk6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3ZnQXR0cihsaW5lLCB7XG4gICAgICAgICAgICBkOiAnTSAnICsgcG9zaXRpb24gKyAnLC0xMDAwMDAgTCAnICsgcG9zaXRpb24gKyAnLCArMTAwMDAwJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuX2NyZWF0ZVNuYXBMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zbmFwTGluZXMgPSB7XG4gICAgaG9yaXpvbnRhbDogdGhpcy5fY3JlYXRlTGluZSgnaG9yaXpvbnRhbCcpLFxuICAgIHZlcnRpY2FsOiB0aGlzLl9jcmVhdGVMaW5lKCd2ZXJ0aWNhbCcpXG4gIH07XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuc2hvd1NuYXBMaW5lID0gZnVuY3Rpb24ob3JpZW50YXRpb24sIHBvc2l0aW9uKSB7XG5cbiAgdmFyIGxpbmUgPSB0aGlzLmdldFNuYXBMaW5lKG9yaWVudGF0aW9uKTtcblxuICBpZiAobGluZSkge1xuICAgIGxpbmUudXBkYXRlKHBvc2l0aW9uKTtcbiAgfVxuXG4gIHRoaXMuX2FzeW5jSGlkZSgpO1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBMaW5lID0gZnVuY3Rpb24ob3JpZW50YXRpb24pIHtcbiAgaWYgKCF0aGlzLl9zbmFwTGluZXMpIHtcbiAgICB0aGlzLl9jcmVhdGVTbmFwTGluZXMoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9zbmFwTGluZXNbb3JpZW50YXRpb25dO1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcbiAgZm9yRWFjaCh0aGlzLl9zbmFwTGluZXMsIGZ1bmN0aW9uKHNuYXBMaW5lKSB7XG4gICAgc25hcExpbmUudXBkYXRlKCk7XG4gIH0pO1xufTtcbiIsImltcG9ydCBDcmVhdGVNb3ZlU25hcHBpbmcgZnJvbSAnLi9DcmVhdGVNb3ZlU25hcHBpbmcnO1xuaW1wb3J0IFJlc2l6ZVNuYXBwaW5nIGZyb20gJy4vUmVzaXplU25hcHBpbmcnO1xuaW1wb3J0IFNuYXBwaW5nIGZyb20gJy4vU25hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2NyZWF0ZU1vdmVTbmFwcGluZycsXG4gICAgJ3Jlc2l6ZVNuYXBwaW5nJyxcbiAgICAnc25hcHBpbmcnXG4gIF0sXG4gIGNyZWF0ZU1vdmVTbmFwcGluZzogWyAndHlwZScsIENyZWF0ZU1vdmVTbmFwcGluZyBdLFxuICByZXNpemVTbmFwcGluZzogWyAndHlwZScsIFJlc2l6ZVNuYXBwaW5nIF0sXG4gIHNuYXBwaW5nOiBbICd0eXBlJywgU25hcHBpbmcgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgaXNOdW1iZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBhc1RSQkwgfSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7IGdldEJCb3ggfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHsgZ2V0RGlyZWN0aW9uIH0gZnJvbSAnLi9TcGFjZVV0aWwnO1xuXG5pbXBvcnQgeyBoYXNQcmltYXJ5TW9kaWZpZXIgfSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHsgc2V0IGFzIHNldEN1cnNvciB9IGZyb20gJy4uLy4uL3V0aWwvQ3Vyc29yJztcblxuaW1wb3J0IHsgc2VsZkFuZEFsbENoaWxkcmVuIH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbnZhciBhYnMgPSBNYXRoLmFicyxcbiAgICByb3VuZCA9IE1hdGgucm91bmQ7XG5cbnZhciBBWElTX1RPX0RJTUVOU0lPTiA9IHtcbiAgeDogJ3dpZHRoJyxcbiAgeTogJ2hlaWdodCdcbn07XG5cbnZhciBDVVJTT1JfQ1JPU1NIQUlSID0gJ2Nyb3NzaGFpcic7XG5cbnZhciBESVJFQ1RJT05fVE9fVFJCTCA9IHtcbiAgbjogJ3RvcCcsXG4gIHc6ICdsZWZ0JyxcbiAgczogJ2JvdHRvbScsXG4gIGU6ICdyaWdodCdcbn07XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcblxudmFyIERJUkVDVElPTl9UT19PUFBPU0lURSA9IHtcbiAgbjogJ3MnLFxuICB3OiAnZScsXG4gIHM6ICduJyxcbiAgZTogJ3cnXG59O1xuXG52YXIgUEFERElORyA9IDIwO1xuXG5cbi8qKlxuICogQWRkIG9yIHJlbW92ZSBzcGFjZSBieSBtb3ZpbmcgYW5kIHJlc2l6aW5nIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKiBAcGFyYW0ge3Rvb2xNYW5hZ2VyfSB0b29sTWFuYWdlclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2woY2FudmFzLCBkcmFnZ2luZywgZXZlbnRCdXMsIG1vZGVsaW5nLCBydWxlcywgdG9vbE1hbmFnZXIpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90b29sTWFuYWdlciA9IHRvb2xNYW5hZ2VyO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0b29sTWFuYWdlci5yZWdpc3RlclRvb2woJ3NwYWNlJywge1xuICAgIHRvb2w6ICdzcGFjZVRvb2wuc2VsZWN0aW9uJyxcbiAgICBkcmFnZ2luZzogJ3NwYWNlVG9vbCdcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudEJ1cy5vbmNlKCdzcGFjZVRvb2wuc2VsZWN0aW9uLmVuZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTWFrZVNwYWNlKGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLm1vdmUnLCBISUdIX1BSSU9SSVRZICwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGluaXRpYWxpemVkID0gY29udGV4dC5pbml0aWFsaXplZDtcblxuICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGluaXRpYWxpemVkID0gY29udGV4dC5pbml0aWFsaXplZCA9IHNlbGYuaW5pdChldmVudCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICBlbnN1cmVDb25zdHJhaW50cyhldmVudCk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBheGlzID0gY29udGV4dC5heGlzLFxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcbiAgICAgICAgbW92aW5nU2hhcGVzID0gY29udGV4dC5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIHJlc2l6aW5nU2hhcGVzID0gY29udGV4dC5yZXNpemluZ1NoYXBlcyxcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0O1xuXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZW5zdXJlQ29uc3RyYWludHMoZXZlbnQpO1xuXG4gICAgdmFyIGRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgZGVsdGFbIGF4aXMgXSA9IHJvdW5kKGV2ZW50WyAnZCcgKyBheGlzIF0pO1xuXG4gICAgc2VsZi5tYWtlU3BhY2UobW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpO1xuXG4gICAgZXZlbnRCdXMub25jZSgnc3BhY2VUb29sLmVuZGVkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgLy8gYWN0aXZhdGUgc3BhY2UgdG9vbCBzZWxlY3Rpb24gYWZ0ZXIgbWFrZSBzcGFjZVxuICAgICAgc2VsZi5hY3RpdmF0ZVNlbGVjdGlvbihldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cblNwYWNlVG9vbC4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuLyoqXG4gKiBBY3RpdmF0ZSBzcGFjZSB0b29sIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0b0FjdGl2YXRlXG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUuYWN0aXZhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihldmVudCwgYXV0b0FjdGl2YXRlLCByZWFjdGl2YXRlKSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdzcGFjZVRvb2wuc2VsZWN0aW9uJywge1xuICAgIGF1dG9BY3RpdmF0ZTogYXV0b0FjdGl2YXRlLFxuICAgIGN1cnNvcjogQ1VSU09SX0NST1NTSEFJUixcbiAgICBkYXRhOiB7XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHJlYWN0aXZhdGU6IHJlYWN0aXZhdGVcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYXBDbGljazogZmFsc2VcbiAgfSk7XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlIHNwYWNlIHRvb2wgbWFrZSBzcGFjZS5cbiAqXG4gKiBAcGFyYW0gIHtNb3VzZUV2ZW50fSBldmVudFxuICovXG5TcGFjZVRvb2wucHJvdG90eXBlLmFjdGl2YXRlTWFrZVNwYWNlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ3NwYWNlVG9vbCcsIHtcbiAgICBhdXRvQWN0aXZhdGU6IHRydWUsXG4gICAgY3Vyc29yOiBDVVJTT1JfQ1JPU1NIQUlSLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogTWFrZSBzcGFjZS5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBtb3ZpbmdTaGFwZXNcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IHJlc2l6aW5nU2hhcGVzXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlbHRhXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhLnhcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGEueVxuICogQHBhcmFtICB7c3RyaW5nfSBkaXJlY3Rpb25cbiAqIEBwYXJhbSAge251bWJlcn0gc3RhcnRcbiAqL1xuU3BhY2VUb29sLnByb3RvdHlwZS5tYWtlU3BhY2UgPSBmdW5jdGlvbihtb3ZpbmdTaGFwZXMsIHJlc2l6aW5nU2hhcGVzLCBkZWx0YSwgZGlyZWN0aW9uLCBzdGFydCkge1xuICByZXR1cm4gdGhpcy5fbW9kZWxpbmcuY3JlYXRlU3BhY2UobW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIG1ha2Ugc3BhY2UgYW5kIHJldHVybiB0cnVlIGlmIHRoYXQgd2FzIHN1Y2Nlc3NmdWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0KSB7XG4gIHZhciBheGlzID0gYWJzKGV2ZW50LmR4KSA+IGFicyhldmVudC5keSkgPyAneCcgOiAneScsXG4gICAgICBkZWx0YSA9IGV2ZW50WyAnZCcgKyBheGlzIF0sXG4gICAgICBzdGFydCA9IGV2ZW50WyBheGlzIF0gLSBkZWx0YTtcblxuICBpZiAoYWJzKGRlbHRhKSA8IDUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBpbnZlcnQgZGVsdGEgdG8gcmVtb3ZlIHNwYWNlIHdoZW4gbW92aW5nIGxlZnRcbiAgaWYgKGRlbHRhIDwgMCkge1xuICAgIGRlbHRhICo9IC0xO1xuICB9XG5cbiAgLy8gaW52ZXJ0IGRlbHRhIHRvIGFkZC9yZW1vdmUgc3BhY2Ugd2hlbiByZW1vdmluZy9hZGRpbmcgc3BhY2UgaWYgbW9kaWZpZXIga2V5IGlzIHByZXNzZWRcbiAgaWYgKGhhc1ByaW1hcnlNb2RpZmllcihldmVudCkpIHtcbiAgICBkZWx0YSAqPSAtMTtcbiAgfVxuXG4gIHZhciBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oYXhpcywgZGVsdGEpO1xuXG4gIHZhciByb290ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgdmFyIGNoaWxkcmVuID0gc2VsZkFuZEFsbENoaWxkcmVuKHJvb3QsIHRydWUpO1xuXG4gIHZhciBlbGVtZW50cyA9IHRoaXMuY2FsY3VsYXRlQWRqdXN0bWVudHMoY2hpbGRyZW4sIGF4aXMsIGRlbHRhLCBzdGFydCk7XG5cbiAgdmFyIG1pbkRpbWVuc2lvbnMgPSB0aGlzLl9ldmVudEJ1cy5maXJlKCdzcGFjZVRvb2wuZ2V0TWluRGltZW5zaW9ucycsIHtcbiAgICBheGlzOiBheGlzLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIHNoYXBlczogZWxlbWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgc3RhcnQ6IHN0YXJ0XG4gIH0pO1xuXG4gIHZhciBzcGFjZVRvb2xDb25zdHJhaW50cyA9IGdldFNwYWNlVG9vbENvbnN0cmFpbnRzKGVsZW1lbnRzLCBheGlzLCBkaXJlY3Rpb24sIHN0YXJ0LCBtaW5EaW1lbnNpb25zKTtcblxuICBhc3NpZ24oXG4gICAgY29udGV4dCxcbiAgICBlbGVtZW50cyxcbiAgICB7XG4gICAgICBheGlzOiBheGlzLFxuICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgICBzcGFjZVRvb2xDb25zdHJhaW50czogc3BhY2VUb29sQ29uc3RyYWludHMsXG4gICAgICBzdGFydDogc3RhcnRcbiAgICB9XG4gICk7XG5cbiAgc2V0Q3Vyc29yKCdyZXNpemUtJyArIChheGlzID09PSAneCcgPyAnZXcnIDogJ25zJykpO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBHZXQgZWxlbWVudHMgdG8gYmUgbW92ZWQgYW5kIHJlc2l6ZWQuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSAge3N0cmluZ30gYXhpc1xuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVxuICogQHBhcmFtICB7bnVtYmVyfSBzdGFydFxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuU3BhY2VUb29sLnByb3RvdHlwZS5jYWxjdWxhdGVBZGp1c3RtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBheGlzLCBkZWx0YSwgc3RhcnQpIHtcbiAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXM7XG5cbiAgdmFyIG1vdmluZ1NoYXBlcyA9IFtdLFxuICAgICAgcmVzaXppbmdTaGFwZXMgPSBbXTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCB8fCBpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGVTdGFydCA9IGVsZW1lbnRbIGF4aXMgXSxcbiAgICAgICAgc2hhcGVFbmQgPSBzaGFwZVN0YXJ0ICsgZWxlbWVudFsgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgLy8gc2hhcGUgdG8gYmUgbW92ZWRcbiAgICBpZiAoKGRlbHRhID4gMCAmJiBzaGFwZVN0YXJ0ID4gc3RhcnQpIHx8IChkZWx0YSA8IDAgJiYgc2hhcGVFbmQgPCBzdGFydCkpIHtcbiAgICAgIHJldHVybiBtb3ZpbmdTaGFwZXMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBzaGFwZSB0byBiZSByZXNpemVkXG4gICAgaWYgKHNoYXBlU3RhcnQgPCBzdGFydCAmJlxuICAgICAgc2hhcGVFbmQgPiBzdGFydCAmJlxuICAgICAgcnVsZXMuYWxsb3dlZCgnc2hhcGUucmVzaXplJywgeyBzaGFwZTogZWxlbWVudCB9KVxuICAgICkge1xuXG4gICAgICByZXR1cm4gcmVzaXppbmdTaGFwZXMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbW92aW5nU2hhcGVzOiBtb3ZpbmdTaGFwZXMsXG4gICAgcmVzaXppbmdTaGFwZXM6IHJlc2l6aW5nU2hhcGVzXG4gIH07XG59O1xuXG5TcGFjZVRvb2wucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdGlvbigpO1xuICB9XG59O1xuXG5TcGFjZVRvb2wucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcy5fZHJhZ2dpbmcuY29udGV4dCgpO1xuXG4gIHJldHVybiBjb250ZXh0ICYmIC9ec3BhY2VUb29sLy50ZXN0KGNvbnRleHQucHJlZml4KTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRQYWRkaW5nKHRyYmwpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRyYmwudG9wIC0gUEFERElORyxcbiAgICByaWdodDogdHJibC5yaWdodCArIFBBRERJTkcsXG4gICAgYm90dG9tOiB0cmJsLmJvdHRvbSArIFBBRERJTkcsXG4gICAgbGVmdDogdHJibC5sZWZ0IC0gUEFERElOR1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb25zdHJhaW50cyhldmVudCkge1xuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICBzcGFjZVRvb2xDb25zdHJhaW50cyA9IGNvbnRleHQuc3BhY2VUb29sQ29uc3RyYWludHM7XG5cbiAgaWYgKCFzcGFjZVRvb2xDb25zdHJhaW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB4LCB5O1xuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0KSkge1xuICAgIHggPSBNYXRoLm1heChldmVudC54LCBzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0KTtcblxuICAgIGV2ZW50LmR4ID0gZXZlbnQuZHggKyB4IC0gZXZlbnQueDtcbiAgICBldmVudC54ID0geDtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCkpIHtcbiAgICB4ID0gTWF0aC5taW4oZXZlbnQueCwgc3BhY2VUb29sQ29uc3RyYWludHMucmlnaHQpO1xuXG4gICAgZXZlbnQuZHggPSBldmVudC5keCArIHggLSBldmVudC54O1xuICAgIGV2ZW50LnggPSB4O1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCkpIHtcbiAgICB5ID0gTWF0aC5tYXgoZXZlbnQueSwgc3BhY2VUb29sQ29uc3RyYWludHMudG9wKTtcblxuICAgIGV2ZW50LmR5ID0gZXZlbnQuZHkgKyB5IC0gZXZlbnQueTtcbiAgICBldmVudC55ID0geTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20pKSB7XG4gICAgeSA9IE1hdGgubWluKGV2ZW50LnksIHNwYWNlVG9vbENvbnN0cmFpbnRzLmJvdHRvbSk7XG5cbiAgICBldmVudC5keSA9IGV2ZW50LmR5ICsgeSAtIGV2ZW50Lnk7XG4gICAgZXZlbnQueSA9IHk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3BhY2VUb29sQ29uc3RyYWludHMoZWxlbWVudHMsIGF4aXMsIGRpcmVjdGlvbiwgc3RhcnQsIG1pbkRpbWVuc2lvbnMpIHtcbiAgdmFyIG1vdmluZ1NoYXBlcyA9IGVsZW1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgIHJlc2l6aW5nU2hhcGVzID0gZWxlbWVudHMucmVzaXppbmdTaGFwZXM7XG5cbiAgaWYgKCFyZXNpemluZ1NoYXBlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc3BhY2VUb29sQ29uc3RyYWludHMgPSB7fSxcbiAgICAgIG1pbixcbiAgICAgIG1heDtcblxuICBmb3JFYWNoKHJlc2l6aW5nU2hhcGVzLCBmdW5jdGlvbihyZXNpemluZ1NoYXBlKSB7XG4gICAgdmFyIHJlc2l6aW5nU2hhcGVCQm94ID0gYXNUUkJMKHJlc2l6aW5nU2hhcGUpO1xuXG4gICAgLy8gZmluZCBjaGlsZHJlbiB0aGF0IGFyZSBub3QgbW92aW5nIG9yIHJlc2l6aW5nXG4gICAgdmFyIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW4gPSBmaWx0ZXIocmVzaXppbmdTaGFwZS5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGNoaWxkKSAmJlxuICAgICAgICAhaXNMYWJlbChjaGlsZCkgJiZcbiAgICAgICAgIWluY2x1ZGVzKG1vdmluZ1NoYXBlcywgY2hpbGQpICYmXG4gICAgICAgICFpbmNsdWRlcyhyZXNpemluZ1NoYXBlcywgY2hpbGQpO1xuICAgIH0pO1xuXG4gICAgLy8gZmluZCBjaGlsZHJlbiB0aGF0IGFyZSBtb3ZpbmdcbiAgICB2YXIgbW92aW5nQ2hpbGRyZW4gPSBmaWx0ZXIocmVzaXppbmdTaGFwZS5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGNoaWxkKSAmJiAhaXNMYWJlbChjaGlsZCkgJiYgaW5jbHVkZXMobW92aW5nU2hhcGVzLCBjaGlsZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgbWluT3JNYXgsXG4gICAgICAgIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW5CQm94LFxuICAgICAgICBtb3ZpbmdDaGlsZHJlbkJCb3g7XG5cbiAgICBpZiAobm9uTW92aW5nUmVzaXppbmdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW5CQm94ID0gYWRkUGFkZGluZyhhc1RSQkwoZ2V0QkJveChub25Nb3ZpbmdSZXNpemluZ0NoaWxkcmVuKSkpO1xuXG4gICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgcmVzaXppbmdTaGFwZUJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBkaXJlY3Rpb24gXSBdICtcbiAgICAgICAgbm9uTW92aW5nUmVzaXppbmdDaGlsZHJlbkJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBkaXJlY3Rpb24gXSBdO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMuYm90dG9tID0gbWF4ID0gaXNOdW1iZXIobWF4KSA/IE1hdGgubWluKG1heCwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3cnKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnJpZ2h0ID0gbWF4ID0gaXNOdW1iZXIobWF4KSA/IE1hdGgubWluKG1heCwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3MnKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0ID0gbWluID0gaXNOdW1iZXIobWluKSA/IE1hdGgubWF4KG1pbiwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vdmluZ0NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgbW92aW5nQ2hpbGRyZW5CQm94ID0gYWRkUGFkZGluZyhhc1RSQkwoZ2V0QkJveChtb3ZpbmdDaGlsZHJlbikpKTtcblxuICAgICAgbWluT3JNYXggPSBzdGFydCAtXG4gICAgICAgIG1vdmluZ0NoaWxkcmVuQkJveFsgRElSRUNUSU9OX1RPX1RSQkxbIERJUkVDVElPTl9UT19PUFBPU0lURVsgZGlyZWN0aW9uIF0gXSBdICtcbiAgICAgICAgcmVzaXppbmdTaGFwZUJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBESVJFQ1RJT05fVE9fT1BQT1NJVEVbIGRpcmVjdGlvbiBdIF0gXTtcblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ24nKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmJvdHRvbSA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy50b3AgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZScpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMubGVmdCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXNpemluZ1NoYXBlTWluRGltZW5zaW9ucyA9IG1pbkRpbWVuc2lvbnMgJiYgbWluRGltZW5zaW9uc1sgcmVzaXppbmdTaGFwZS5pZCBdO1xuXG4gICAgaWYgKHJlc2l6aW5nU2hhcGVNaW5EaW1lbnNpb25zKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20gPSBtYXggPSBpc051bWJlcihtYXgpID8gTWF0aC5taW4obWF4LCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAndycpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgICByZXNpemluZ1NoYXBlWyBBWElTX1RPX0RJTUVOU0lPTiBbIGF4aXMgXSBdICtcbiAgICAgICAgICByZXNpemluZ1NoYXBlTWluRGltZW5zaW9uc1sgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgICByZXNpemluZ1NoYXBlWyBBWElTX1RPX0RJTUVOU0lPTiBbIGF4aXMgXSBdICtcbiAgICAgICAgICByZXNpemluZ1NoYXBlTWluRGltZW5zaW9uc1sgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmxlZnQgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzcGFjZVRvb2xDb25zdHJhaW50cztcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XG59IiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBNQVJLRVJfRFJBR0dJTkcgPSAnZGpzLWRyYWdnaW5nJyxcbiAgICBNQVJLRVJfUkVTSVpJTkcgPSAnZGpzLXJlc2l6aW5nJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxudmFyIG1heCA9IE1hdGgubWF4O1xuXG5cbi8qKlxuICogUHJvdmlkZXMgcHJldmlld3MgZm9yIHNlbGVjdGluZy9tb3ZpbmcvcmVzaXppbmcgc2hhcGVzIHdoZW4gY3JlYXRpbmcvcmVtb3Zpbmcgc3BhY2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7U3R5bGVzfSBzdHlsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sUHJldmlldyhcbiAgICBldmVudEJ1cywgZWxlbWVudFJlZ2lzdHJ5LCBjYW52YXMsXG4gICAgc3R5bGVzLCBwcmV2aWV3U3VwcG9ydCkge1xuXG4gIGZ1bmN0aW9uIGFkZFByZXZpZXdHZngoY29sbGVjdGlvbiwgZHJhZ0dyb3VwKSB7XG4gICAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBwcmV2aWV3U3VwcG9ydC5hZGREcmFnZ2VyKGVsZW1lbnQsIGRyYWdHcm91cCk7XG5cbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGFkZCBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzcGFjZSA9IGNhbnZhcy5nZXRMYXllcignc3BhY2UnKSxcbiAgICAgICAgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2YXIgb3JpZW50YXRpb24gPSB7XG4gICAgICB4OiAnTSAwLC0xMDAwMCBMIDAsMTAwMDAnLFxuICAgICAgeTogJ00gLTEwMDAwLDAgTCAxMDAwMCwwJ1xuICAgIH07XG5cbiAgICB2YXIgY3Jvc3NoYWlyR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgICBzdmdBdHRyKGNyb3NzaGFpckdyb3VwLCBzdHlsZXMuY2xzKCdkanMtY3Jvc3NoYWlyLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XG5cbiAgICBzdmdBcHBlbmQoc3BhY2UsIGNyb3NzaGFpckdyb3VwKTtcblxuICAgIC8vIGhvcml6b250YWwgcGF0aFxuICAgIHZhciBwYXRoWCA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgIHN2Z0F0dHIocGF0aFgsICdkJywgb3JpZW50YXRpb24ueCk7XG4gICAgc3ZnQ2xhc3NlcyhwYXRoWCkuYWRkKCdkanMtY3Jvc3NoYWlyJyk7XG5cbiAgICBzdmdBcHBlbmQoY3Jvc3NoYWlyR3JvdXAsIHBhdGhYKTtcblxuICAgIC8vIHZlcnRpY2FsIHBhdGhcbiAgICB2YXIgcGF0aFkgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICBzdmdBdHRyKHBhdGhZLCAnZCcsIG9yaWVudGF0aW9uLnkpO1xuICAgIHN2Z0NsYXNzZXMocGF0aFkpLmFkZCgnZGpzLWNyb3NzaGFpcicpO1xuXG4gICAgc3ZnQXBwZW5kKGNyb3NzaGFpckdyb3VwLCBwYXRoWSk7XG5cbiAgICBjb250ZXh0LmNyb3NzaGFpckdyb3VwID0gY3Jvc3NoYWlyR3JvdXA7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24ubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNyb3NzaGFpckdyb3VwID0gZXZlbnQuY29udGV4dC5jcm9zc2hhaXJHcm91cDtcblxuICAgIHRyYW5zbGF0ZShjcm9zc2hhaXJHcm91cCwgZXZlbnQueCwgZXZlbnQueSk7XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjcm9zc2hhaXJHcm91cCA9IGNvbnRleHQuY3Jvc3NoYWlyR3JvdXA7XG5cbiAgICBpZiAoY3Jvc3NoYWlyR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShjcm9zc2hhaXJHcm91cCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhZGQgYW5kIHVwZGF0ZSBtb3ZlL3Jlc2l6ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc3BhY2VUb29sLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGxpbmUgPSBjb250ZXh0LmxpbmUsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXMsXG4gICAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXM7XG5cbiAgICBpZiAoIWNvbnRleHQuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRleHQuZHJhZ0dyb3VwKSB7XG4gICAgICB2YXIgc3BhY2VMYXllciA9IGNhbnZhcy5nZXRMYXllcignc3BhY2UnKTtcblxuICAgICAgbGluZSA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihsaW5lLCAnZCcsICdNMCwwIEwwLDAnKTtcbiAgICAgIHN2Z0NsYXNzZXMobGluZSkuYWRkKCdkanMtY3Jvc3NoYWlyJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChzcGFjZUxheWVyLCBsaW5lKTtcblxuICAgICAgY29udGV4dC5saW5lID0gbGluZTtcblxuICAgICAgdmFyIGRyYWdHcm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQXR0cihkcmFnR3JvdXAsIHN0eWxlcy5jbHMoJ2Rqcy1kcmFnLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XG5cbiAgICAgIHN2Z0FwcGVuZChjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksIGRyYWdHcm91cCk7XG5cbiAgICAgIC8vIHNoYXBlc1xuICAgICAgYWRkUHJldmlld0dmeChtb3ZpbmdTaGFwZXMsIGRyYWdHcm91cCk7XG5cbiAgICAgIC8vIGNvbm5lY3Rpb25zXG4gICAgICB2YXIgbW92aW5nQ29ubmVjdGlvbnMgPSBjb250ZXh0Lm1vdmluZ0Nvbm5lY3Rpb25zID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBzb3VyY2VJc01vdmluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gobW92aW5nU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgICAgIGZvckVhY2goc2hhcGUub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUlzTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHRhcmdldElzTW92aW5nID0gZmFsc2U7XG5cbiAgICAgICAgZm9yRWFjaChtb3ZpbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgICAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgdGFyZ2V0SXNNb3ZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgc291cmNlSXNSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgICAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgc291cmNlSXNSZXNpemluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB0YXJnZXRJc1Jlc2l6aW5nID0gZmFsc2U7XG5cbiAgICAgICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgICBmb3JFYWNoKHNoYXBlLmluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gY29ubmVjdGlvbikge1xuICAgICAgICAgICAgICB0YXJnZXRJc1Jlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGlzQ29ubmVjdGlvbihlbGVtZW50KVxuICAgICAgICAgICYmIChzb3VyY2VJc01vdmluZyB8fCBzb3VyY2VJc1Jlc2l6aW5nKVxuICAgICAgICAgICYmICh0YXJnZXRJc01vdmluZyB8fCB0YXJnZXRJc1Jlc2l6aW5nKTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGFkZFByZXZpZXdHZngobW92aW5nQ29ubmVjdGlvbnMsIGRyYWdHcm91cCk7XG5cbiAgICAgIGNvbnRleHQuZHJhZ0dyb3VwID0gZHJhZ0dyb3VwO1xuICAgIH1cblxuICAgIGlmICghY29udGV4dC5mcmFtZUdyb3VwKSB7XG4gICAgICB2YXIgZnJhbWVHcm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQXR0cihmcmFtZUdyb3VwLCBzdHlsZXMuY2xzKCdkanMtZnJhbWUtZ3JvdXAnLCBbICduby1ldmVudHMnIF0pKTtcblxuICAgICAgc3ZnQXBwZW5kKGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSwgZnJhbWVHcm91cCk7XG5cbiAgICAgIHZhciBmcmFtZXMgPSBbXTtcblxuICAgICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgdmFyIGZyYW1lID0gcHJldmlld1N1cHBvcnQuYWRkRnJhbWUoc2hhcGUsIGZyYW1lR3JvdXApO1xuXG4gICAgICAgIHZhciBpbml0aWFsQm91bmRzID0gZnJhbWUuZ2V0QkJveCgpO1xuXG4gICAgICAgIGZyYW1lcy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBmcmFtZSxcbiAgICAgICAgICBpbml0aWFsQm91bmRzOiBpbml0aWFsQm91bmRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbnZhcy5hZGRNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgICB9KTtcblxuICAgICAgY29udGV4dC5mcmFtZUdyb3VwID0gZnJhbWVHcm91cDtcbiAgICAgIGNvbnRleHQuZnJhbWVzID0gZnJhbWVzO1xuICAgIH1cblxuICAgIHZhciBvcmllbnRhdGlvbiA9IHtcbiAgICAgIHg6ICdNJyArIGV2ZW50LnggKyAnLCAtMTAwMDAgTCcgKyBldmVudC54ICsgJywgMTAwMDAnLFxuICAgICAgeTogJ00gLTEwMDAwLCAnICsgZXZlbnQueSArICcgTCAxMDAwMCwgJyArIGV2ZW50LnlcbiAgICB9O1xuXG4gICAgc3ZnQXR0cihsaW5lLCB7IGQ6IG9yaWVudGF0aW9uWyBheGlzIF0gfSk7XG5cbiAgICB2YXIgb3Bwb3NpdGUgPSB7IHg6ICd5JywgeTogJ3gnIH07XG4gICAgdmFyIGRlbHRhID0geyB4OiBldmVudC5keCwgeTogZXZlbnQuZHkgfTtcbiAgICBkZWx0YVsgb3Bwb3NpdGVbIGNvbnRleHQuYXhpcyBdIF0gPSAwO1xuXG4gICAgLy8gdXBkYXRlIG1vdmUgcHJldmlld3NcbiAgICB0cmFuc2xhdGUoY29udGV4dC5kcmFnR3JvdXAsIGRlbHRhLngsIGRlbHRhLnkpO1xuXG4gICAgLy8gdXBkYXRlIHJlc2l6ZSBwcmV2aWV3c1xuICAgIGZvckVhY2goY29udGV4dC5mcmFtZXMsIGZ1bmN0aW9uKGZyYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGZyYW1lLmVsZW1lbnQsXG4gICAgICAgICAgaW5pdGlhbEJvdW5kcyA9IGZyYW1lLmluaXRpYWxCb3VuZHMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICBpZiAoY29udGV4dC5kaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICB3aWR0aDogbWF4KGluaXRpYWxCb3VuZHMud2lkdGggKyBkZWx0YS54LCA1KVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoID0gbWF4KGluaXRpYWxCb3VuZHMud2lkdGggLSBkZWx0YS54LCA1KTtcblxuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgeDogaW5pdGlhbEJvdW5kcy54ICsgaW5pdGlhbEJvdW5kcy53aWR0aCAtIHdpZHRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29udGV4dC5kaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICBoZWlnaHQ6IG1heChpbml0aWFsQm91bmRzLmhlaWdodCArIGRlbHRhLnksIDUpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVpZ2h0ID0gbWF4KGluaXRpYWxCb3VuZHMuaGVpZ2h0IC0gZGVsdGEueSwgNSk7XG5cbiAgICAgICAgc3ZnQXR0cihlbGVtZW50LCB7XG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgeTogaW5pdGlhbEJvdW5kcy55ICsgaW5pdGlhbEJvdW5kcy5oZWlnaHQgLSBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIG1vdmUvcmVzaXplIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgICBtb3ZpbmdDb25uZWN0aW9ucyA9IGNvbnRleHQubW92aW5nQ29ubmVjdGlvbnMsXG4gICAgICAgIHJlc2l6aW5nU2hhcGVzID0gY29udGV4dC5yZXNpemluZ1NoYXBlcyxcbiAgICAgICAgbGluZSA9IGNvbnRleHQubGluZSxcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXAsXG4gICAgICAgIGZyYW1lR3JvdXAgPSBjb250ZXh0LmZyYW1lR3JvdXA7XG5cbiAgICAvLyBtb3Zpbmcgc2hhcGVzXG4gICAgZm9yRWFjaChtb3ZpbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKHNoYXBlLCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH0pO1xuXG4gICAgLy8gbW92aW5nIGNvbm5lY3Rpb25zXG4gICAgZm9yRWFjaChtb3ZpbmdDb25uZWN0aW9ucywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH0pO1xuXG4gICAgaWYgKGRyYWdHcm91cCkge1xuICAgICAgc3ZnUmVtb3ZlKGxpbmUpO1xuICAgICAgc3ZnUmVtb3ZlKGRyYWdHcm91cCk7XG4gICAgfVxuXG4gICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVHcm91cCkge1xuICAgICAgc3ZnUmVtb3ZlKGZyYW1lR3JvdXApO1xuICAgIH1cbiAgfSk7XG59XG5cblNwYWNlVG9vbFByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdjYW52YXMnLFxuICAnc3R5bGVzJyxcbiAgJ3ByZXZpZXdTdXBwb3J0J1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBpcyBhIGNvbm5lY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogUmV0dXJuIGRpcmVjdGlvbiBnaXZlbiBheGlzIGFuZCBkZWx0YS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhXG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKGF4aXMsIGRlbHRhKSB7XG5cbiAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgIGlmIChkZWx0YSA+IDApIHtcbiAgICAgIHJldHVybiAnZSc7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgcmV0dXJuICd3JztcbiAgICB9XG4gIH1cblxuICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgaWYgKGRlbHRhID4gMCkge1xuICAgICAgcmV0dXJuICdzJztcbiAgICB9XG5cbiAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICByZXR1cm4gJ24nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgY29ubmVjdGlvbnMgd2hvc2Ugd2F5cG9pbnRzIGFyZSB0byBiZSB1cGRhdGVkLiBXYXlwb2ludHMgYXJlIHRvIGJlIHVwZGF0ZWQgaWYgc3RhcnRcbiAqIG9yIGVuZCBpcyB0byBiZSBtb3ZlZCBvciByZXNpemVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfSBtb3ZpbmdTaGFwZXNcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfSByZXNpemluZ1NoYXBlc1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZWwuQ29ubmVjdGlvbj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zKG1vdmluZ1NoYXBlcywgcmVzaXppbmdTaGFwZXMpIHtcbiAgdmFyIHdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnMgPSBbXTtcblxuICBmb3JFYWNoKG1vdmluZ1NoYXBlcy5jb25jYXQocmVzaXppbmdTaGFwZXMpLCBmdW5jdGlvbihzaGFwZSkge1xuICAgIHZhciBpbmNvbWluZyA9IHNoYXBlLmluY29taW5nLFxuICAgICAgICBvdXRnb2luZyA9IHNoYXBlLm91dGdvaW5nO1xuXG4gICAgZm9yRWFjaChpbmNvbWluZy5jb25jYXQob3V0Z29pbmcpLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQ7XG5cbiAgICAgIGlmIChpbmNsdWRlcyhtb3ZpbmdTaGFwZXMsIHNvdXJjZSkgfHxcbiAgICAgICAgaW5jbHVkZXMobW92aW5nU2hhcGVzLCB0YXJnZXQpIHx8XG4gICAgICAgIGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCBzb3VyY2UpIHx8XG4gICAgICAgIGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG5cbiAgICAgICAgaWYgKCFpbmNsdWRlcyh3YXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgIHdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gd2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucztcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufVxuXG4vKipcbiAqIFJlc2l6ZSBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGJvdW5kc1xuICogQHBhcmFtIHtudW1iZXJ9IGJvdW5kcy54XG4gKiBAcGFyYW0ge251bWJlcn0gYm91bmRzLnlcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3VuZHMud2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3VuZHMuaGVpZ2h0XG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGVsdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YS54XG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGEueVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUJvdW5kcyhib3VuZHMsIGRpcmVjdGlvbiwgZGVsdGEpIHtcbiAgdmFyIHggPSBib3VuZHMueCxcbiAgICAgIHkgPSBib3VuZHMueSxcbiAgICAgIHdpZHRoID0gYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCxcbiAgICAgIGR4ID0gZGVsdGEueCxcbiAgICAgIGR5ID0gZGVsdGEueTtcblxuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICBjYXNlICduJzpcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCxcbiAgICAgIHk6IHkgKyBkeSxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0IC0gZHlcbiAgICB9O1xuICBjYXNlICdzJzpcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCxcbiAgICAgIHk6IHksXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCArIGR5XG4gICAgfTtcbiAgY2FzZSAndyc6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyBkeCxcbiAgICAgIHk6IHksXG4gICAgICB3aWR0aDogd2lkdGggLSBkeCxcbiAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgfTtcbiAgY2FzZSAnZSc6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5LFxuICAgICAgd2lkdGg6IHdpZHRoICsgZHgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH07XG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGRpcmVjdGlvbjogJyArIGRpcmVjdGlvbik7XG4gIH1cbn0iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuaW1wb3J0IFByZXZpZXdTdXBwb3J0TW9kdWxlIGZyb20gJy4uL3ByZXZpZXctc3VwcG9ydCc7XG5cbmltcG9ydCBTcGFjZVRvb2wgZnJvbSAnLi9TcGFjZVRvb2wnO1xuaW1wb3J0IFNwYWNlVG9vbFByZXZpZXcgZnJvbSAnLi9TcGFjZVRvb2xQcmV2aWV3JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWydzcGFjZVRvb2xQcmV2aWV3J10sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgVG9vbE1hbmFnZXJNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgc3BhY2VUb29sOiBbJ3R5cGUnLCBTcGFjZVRvb2wgXSxcbiAgc3BhY2VUb29sUHJldmlldzogWyd0eXBlJywgU3BhY2VUb29sUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuLyoqXG4gKiBUaGUgdG9vbCBtYW5hZ2VyIGFjdHMgYXMgbWlkZGxlLW1hbiBiZXR3ZWVuIHRoZSBhdmFpbGFibGUgdG9vbCdzIGFuZCB0aGUgUGFsZXR0ZSxcbiAqIGl0IHRha2VzIGNhcmUgb2YgbWFraW5nIHN1cmUgdGhhdCB0aGUgY29ycmVjdCBhY3RpdmUgc3RhdGUgaXMgc2V0LlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gICAgZXZlbnRCdXNcbiAqIEBwYXJhbSAge09iamVjdH0gICAgZHJhZ2dpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9vbE1hbmFnZXIoZXZlbnRCdXMsIGRyYWdnaW5nKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG5cbiAgdGhpcy5fdG9vbHMgPSBbXTtcbiAgdGhpcy5fYWN0aXZlID0gbnVsbDtcbn1cblxuVG9vbE1hbmFnZXIuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2RyYWdnaW5nJyBdO1xuXG5Ub29sTWFuYWdlci5wcm90b3R5cGUucmVnaXN0ZXJUb29sID0gZnVuY3Rpb24obmFtZSwgZXZlbnRzKSB7XG4gIHZhciB0b29scyA9IHRoaXMuX3Rvb2xzO1xuXG4gIGlmICghZXZlbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHRvb2wgaGFzIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBpdFxcJ3MgXCJldmVudHNcIicpO1xuICB9XG5cbiAgdG9vbHMucHVzaChuYW1lKTtcblxuICB0aGlzLmJpbmRFdmVudHMobmFtZSwgZXZlbnRzKTtcbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKHRvb2wpIHtcbiAgcmV0dXJuIHRvb2wgJiYgdGhpcy5fYWN0aXZlID09PSB0b29sO1xufTtcblxuVG9vbE1hbmFnZXIucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKHRvb2wpIHtcbiAgcmV0dXJuIHRoaXMuX3Rvb2xzLmxlbmd0aDtcbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5zZXRBY3RpdmUgPSBmdW5jdGlvbih0b29sKSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIGlmICh0aGlzLl9hY3RpdmUgIT09IHRvb2wpIHtcbiAgICB0aGlzLl9hY3RpdmUgPSB0b29sO1xuXG4gICAgZXZlbnRCdXMuZmlyZSgndG9vbC1tYW5hZ2VyLnVwZGF0ZScsIHsgdG9vbDogdG9vbCB9KTtcbiAgfVxufTtcblxuVG9vbE1hbmFnZXIucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbihuYW1lLCBldmVudHMpIHtcbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXMsXG4gICAgICBkcmFnZ2luZyA9IHRoaXMuX2RyYWdnaW5nO1xuXG4gIHZhciBldmVudHNUb1JlZ2lzdGVyID0gW107XG5cbiAgZXZlbnRCdXMub24oZXZlbnRzLnRvb2wgKyAnLmluaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIC8vIEFjdGl2ZSB0b29scyB0aGF0IHdhbnQgdG8gcmVhY3RpdmF0ZSB0aGVtc2VsdmVzIG11c3QgZG8gdGhpcyBleHBsaWNpdGx5XG4gICAgaWYgKCFjb250ZXh0LnJlYWN0aXZhdGUgJiYgdGhpcy5pc0FjdGl2ZShuYW1lKSkge1xuICAgICAgdGhpcy5zZXRBY3RpdmUobnVsbCk7XG5cbiAgICAgIGRyYWdnaW5nLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0QWN0aXZlKG5hbWUpO1xuXG4gIH0sIHRoaXMpO1xuXG4gIC8vIFRvZG9bcmljYXJkb106IGFkZCB0ZXN0IGNhc2VzXG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50c1RvUmVnaXN0ZXIucHVzaChldmVudCArICcuZW5kZWQnKTtcbiAgICBldmVudHNUb1JlZ2lzdGVyLnB1c2goZXZlbnQgKyAnLmNhbmNlbGVkJyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKGV2ZW50c1RvUmVnaXN0ZXIsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAvLyBXZSBkZWZlciB0aGUgZGUtYWN0aXZhdGlvbiBvZiB0aGUgdG9vbCB0byB0aGUgLmFjdGl2YXRlIHBoYXNlLFxuICAgIC8vIHNvIHdlJ3JlIGFibGUgdG8gY2hlY2sgaWYgd2Ugd2FudCB0byB0b2dnbGUgb2ZmIHRoZSBjdXJyZW50XG4gICAgLy8gYWN0aXZlIHRvb2wgb3Igc3dpdGNoIHRvIGEgbmV3IG9uZVxuICAgIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9yaWdpbmFsRXZlbnQgJiYgZG9tQ2xvc2VzdChvcmlnaW5hbEV2ZW50LnRhcmdldCwgJy5ncm91cFtkYXRhLWdyb3VwPVwidG9vbHNcIl0nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0QWN0aXZlKG51bGwpO1xuICB9LCB0aGlzKTtcbn07XG4iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuXG5pbXBvcnQgVG9vbE1hbmFnZXIgZnJvbSAnLi9Ub29sTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmFnZ2luZ01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAndG9vbE1hbmFnZXInIF0sXG4gIHRvb2xNYW5hZ2VyOiBbICd0eXBlJywgVG9vbE1hbmFnZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGlzU3RyaW5nLFxuICBhc3NpZ24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICByZW1vdmUgYXMgZG9tUmVtb3ZlLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IElkcyBmcm9tICcuLi8uLi91dGlsL0lkR2VuZXJhdG9yJztcblxuLy8gZG9jdW1lbnQgd2lkZSB1bmlxdWUgdG9vbHRpcCBpZHNcbnZhciBpZHMgPSBuZXcgSWRzKCd0dCcpO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3QocGFyZW50Tm9kZSkge1xuICB2YXIgcm9vdCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy10b29sdGlwLWNvbnRhaW5lclwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMDsgaGVpZ2h0OiAwO1wiIC8+J1xuICApO1xuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvb3QsIHBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5cblxuZnVuY3Rpb24gc2V0UG9zaXRpb24oZWwsIHgsIHkpIHtcbiAgYXNzaWduKGVsLnN0eWxlLCB7IGxlZnQ6IHggKyAncHgnLCB0b3A6IHkgKyAncHgnIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRWaXNpYmxlKGVsLCB2aXNpYmxlKSB7XG4gIGVsLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICcnO1xufVxuXG5cbnZhciB0b29sdGlwQ2xhc3MgPSAnZGpzLXRvb2x0aXAnLFxuICAgIHRvb2x0aXBTZWxlY3RvciA9ICcuJyArIHRvb2x0aXBDbGFzcztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBhbGxvd3MgdXNlcnMgdG8gcmVuZGVyIHRvb2wgdGlwcyBvbiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBUaGUgdG9vbHRpcCBzZXJ2aWNlIHdpbGwgdGFrZSBjYXJlIG9mIHVwZGF0aW5nIHRoZSB0b29sdGlwIHBvc2l0aW9uaW5nXG4gKiBkdXJpbmcgbmF2aWdhdGlvbiArIHpvb21pbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKlxuICogLy8gYWRkIGEgcGluayBiYWRnZSBvbiB0aGUgdG9wIGxlZnQgb2YgdGhlIHNoYXBlXG4gKiB0b29sdGlwcy5hZGQoe1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHg6IDUwLFxuICogICAgIHk6IDEwMFxuICogICB9LFxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqIC8vIG9yIHdpdGggb3B0aW9uYWwgbGlmZSBzcGFuXG4gKiB0b29sdGlwcy5hZGQoe1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHRvcDogLTUsXG4gKiAgICAgbGVmdDogLTVcbiAqICAgfSxcbiAqICAgaHRtbDogJzxkaXYgc3R5bGU9XCJ3aWR0aDogMTBweDsgYmFja2dyb3VuZDogZnVjaHNpYTsgY29sb3I6IHdoaXRlO1wiPjA8L2Rpdj4nLFxuICogICB0dGw6IDIwMDBcbiAqIH0pO1xuICpcbiAqIC8vIHJlbW92ZSBhIHRvb2wgdGlwXG4gKiB2YXIgaWQgPSB0b29sdGlwcy5hZGQoLi4uKTtcbiAqIHRvb2x0aXBzLnJlbW92ZShpZCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUb29sdGlwcyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHRoaXMuX2lkcyA9IGlkcztcblxuICB0aGlzLl90b29sdGlwRGVmYXVsdHMgPSB7XG4gICAgc2hvdzoge1xuICAgICAgbWluWm9vbTogMC43LFxuICAgICAgbWF4Wm9vbTogNS4wXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBNYXBwaW5nIHRvb2x0aXBJZCAtPiB0b29sdGlwXG4gICAqL1xuICB0aGlzLl90b29sdGlwcyA9IHt9O1xuXG4gIC8vIHJvb3QgaHRtbCBlbGVtZW50IGZvciBhbGwgdG9vbHRpcHNcbiAgdGhpcy5fdG9vbHRpcFJvb3QgPSBjcmVhdGVSb290KGNhbnZhcy5nZXRDb250YWluZXIoKSk7XG5cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2VvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ21vdXNlb3ZlcicsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2VvdXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHNlbGYudHJpZ2dlcignbW91c2VvdXQnLCBldmVudCk7XG4gIH0pO1xuXG4gIHRoaXMuX2luaXQoKTtcbn1cblxuXG5Ub29sdGlwcy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnY2FudmFzJyBdO1xuXG5cbi8qKlxuICogQWRkcyBhIEhUTUwgdG9vbHRpcCB0byB0aGUgZGlhZ3JhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgIHRvb2x0aXAgICB0aGUgdG9vbHRpcCBjb25maWd1cmF0aW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0gICAgdG9vbHRpcC5odG1sICAgICAgICAgICAgICAgICBodG1sIGVsZW1lbnQgdG8gdXNlIGFzIGFuIHRvb2x0aXBcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgIFt0b29sdGlwLnNob3ddICAgICAgICAgICAgICAgc2hvdyBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5zaG93Lm1pblpvb21dICAgICAgIG1pbmltYWwgem9vbSBsZXZlbCB0byBzaG93IHRoZSB0b29sdGlwXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5zaG93Lm1heFpvb21dICAgICAgIG1heGltdW0gem9vbSBsZXZlbCB0byBzaG93IHRoZSB0b29sdGlwXG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICB0b29sdGlwLnBvc2l0aW9uICAgICAgICAgICAgIHdoZXJlIHRvIGF0dGFjaCB0aGUgdG9vbHRpcFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAucG9zaXRpb24ubGVmdF0gICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggbGVmdCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5wb3NpdGlvbi50b3BdICAgICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCB0b3AgYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAucG9zaXRpb24uYm90dG9tXSAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggYm90dG9tIGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnBvc2l0aW9uLnJpZ2h0XSAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IHJpZ2h0IGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnRpbWVvdXQ9LTFdXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgaWQgdGhhdCBtYXkgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHRvb2x0aXAgZm9yIHVwZGF0ZSBvciByZW1vdmFsXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0b29sdGlwKSB7XG5cbiAgaWYgKCF0b29sdGlwLnBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IHRvb2x0aXAgcG9zaXRpb24nKTtcbiAgfVxuXG4gIGlmICghdG9vbHRpcC5odG1sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IHRvb2x0aXAgaHRtbCcpO1xuICB9XG5cbiAgdmFyIGlkID0gdGhpcy5faWRzLm5leHQoKTtcblxuICB0b29sdGlwID0gYXNzaWduKHt9LCB0aGlzLl90b29sdGlwRGVmYXVsdHMsIHRvb2x0aXAsIHtcbiAgICBpZDogaWRcbiAgfSk7XG5cbiAgdGhpcy5fYWRkVG9vbHRpcCh0b29sdGlwKTtcblxuICBpZiAodG9vbHRpcC50aW1lb3V0KSB7XG4gICAgdGhpcy5zZXRUaW1lb3V0KHRvb2x0aXApO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuVG9vbHRpcHMucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihhY3Rpb24sIGV2ZW50KSB7XG5cbiAgdmFyIG5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCB8fCBldmVudC50YXJnZXQ7XG5cbiAgdmFyIHRvb2x0aXAgPSB0aGlzLmdldChkb21BdHRyKG5vZGUsICdkYXRhLXRvb2x0aXAtaWQnKSk7XG5cbiAgaWYgKCF0b29sdGlwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gJ21vdXNlb3ZlcicgJiYgdG9vbHRpcC50aW1lb3V0KSB7XG4gICAgdGhpcy5jbGVhclRpbWVvdXQodG9vbHRpcCk7XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSAnbW91c2VvdXQnICYmIHRvb2x0aXAudGltZW91dCkge1xuXG4gICAgLy8gY3V0IHRpbWVvdXQgYWZ0ZXIgbW91c2Ugb3V0XG4gICAgdG9vbHRpcC50aW1lb3V0ID0gMTAwMDtcblxuICAgIHRoaXMuc2V0VGltZW91dCh0b29sdGlwKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYSB0b29sdGlwIHdpdGggdGhlIGdpdmVuIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihpZCkge1xuXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBpZC5pZDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl90b29sdGlwc1tpZF07XG59O1xuXG5Ub29sdGlwcy5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHRvb2x0aXAgPSB0aGlzLmdldCh0b29sdGlwKTtcblxuICBpZiAoIXRvb2x0aXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcmVtb3ZlVGltZXIgPSB0b29sdGlwLnJlbW92ZVRpbWVyO1xuXG4gIGlmIChyZW1vdmVUaW1lcikge1xuICAgIGNsZWFyVGltZW91dChyZW1vdmVUaW1lcik7XG4gICAgdG9vbHRpcC5yZW1vdmVUaW1lciA9IG51bGw7XG4gIH1cbn07XG5cblRvb2x0aXBzLnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHRvb2x0aXAgPSB0aGlzLmdldCh0b29sdGlwKTtcblxuICBpZiAoIXRvb2x0aXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmNsZWFyVGltZW91dCh0b29sdGlwKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdG9vbHRpcC5yZW1vdmVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5yZW1vdmUodG9vbHRpcCk7XG4gIH0sIHRvb2x0aXAudGltZW91dCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiB0b29sdGlwIHdpdGggdGhlIGdpdmVuIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpZCkge1xuXG4gIHZhciB0b29sdGlwID0gdGhpcy5nZXQoaWQpO1xuXG4gIGlmICh0b29sdGlwKSB7XG4gICAgZG9tUmVtb3ZlKHRvb2x0aXAuaHRtbCk7XG4gICAgZG9tUmVtb3ZlKHRvb2x0aXAuaHRtbENvbnRhaW5lcik7XG5cbiAgICBkZWxldGUgdG9vbHRpcC5odG1sQ29udGFpbmVyO1xuXG4gICAgZGVsZXRlIHRoaXMuX3Rvb2x0aXBzW3Rvb2x0aXAuaWRdO1xuICB9XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7XG4gIHNldFZpc2libGUodGhpcy5fdG9vbHRpcFJvb3QpO1xufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkge1xuICBzZXRWaXNpYmxlKHRoaXMuX3Rvb2x0aXBSb290LCBmYWxzZSk7XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5fdXBkYXRlUm9vdCA9IGZ1bmN0aW9uKHZpZXdib3gpIHtcbiAgdmFyIGEgPSB2aWV3Ym94LnNjYWxlIHx8IDE7XG4gIHZhciBkID0gdmlld2JveC5zY2FsZSB8fCAxO1xuXG4gIHZhciBtYXRyaXggPSAnbWF0cml4KCcgKyBhICsgJywwLDAsJyArIGQgKyAnLCcgKyAoLTEgKiB2aWV3Ym94LnggKiBhKSArICcsJyArICgtMSAqIHZpZXdib3gueSAqIGQpICsgJyknO1xuXG4gIHRoaXMuX3Rvb2x0aXBSb290LnN0eWxlLnRyYW5zZm9ybSA9IG1hdHJpeDtcbiAgdGhpcy5fdG9vbHRpcFJvb3Quc3R5bGVbJy1tcy10cmFuc2Zvcm0nXSA9IG1hdHJpeDtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLl9hZGRUb29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHZhciBpZCA9IHRvb2x0aXAuaWQsXG4gICAgICBodG1sID0gdG9vbHRpcC5odG1sLFxuICAgICAgaHRtbENvbnRhaW5lcixcbiAgICAgIHRvb2x0aXBSb290ID0gdGhpcy5fdG9vbHRpcFJvb3Q7XG5cbiAgLy8gdW53cmFwIGpxdWVyeSAoZm9yIHRob3NlIHdobyBuZWVkIGl0KVxuICBpZiAoaHRtbC5nZXQgJiYgaHRtbC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgaHRtbCA9IGh0bWwuZ2V0KDApO1xuICB9XG5cbiAgLy8gY3JlYXRlIHByb3BlciBodG1sIGVsZW1lbnRzIGZyb21cbiAgLy8gdG9vbHRpcCBIVE1MIHN0cmluZ3NcbiAgaWYgKGlzU3RyaW5nKGh0bWwpKSB7XG4gICAgaHRtbCA9IGRvbWlmeShodG1sKTtcbiAgfVxuXG4gIGh0bWxDb250YWluZXIgPSBkb21pZnkoJzxkaXYgZGF0YS10b29sdGlwLWlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHRvb2x0aXBDbGFzcyArICdcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiPicpO1xuXG4gIGh0bWxDb250YWluZXIuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgaWYgKHRvb2x0aXAudHlwZSkge1xuICAgIGRvbUNsYXNzZXMoaHRtbENvbnRhaW5lcikuYWRkKCdkanMtdG9vbHRpcC0nICsgdG9vbHRpcC50eXBlKTtcbiAgfVxuXG4gIGlmICh0b29sdGlwLmNsYXNzTmFtZSkge1xuICAgIGRvbUNsYXNzZXMoaHRtbENvbnRhaW5lcikuYWRkKHRvb2x0aXAuY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvb2x0aXAuaHRtbENvbnRhaW5lciA9IGh0bWxDb250YWluZXI7XG5cbiAgdG9vbHRpcFJvb3QuYXBwZW5kQ2hpbGQoaHRtbENvbnRhaW5lcik7XG5cbiAgdGhpcy5fdG9vbHRpcHNbaWRdID0gdG9vbHRpcDtcblxuICB0aGlzLl91cGRhdGVUb29sdGlwKHRvb2x0aXApO1xufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuX3VwZGF0ZVRvb2x0aXAgPSBmdW5jdGlvbih0b29sdGlwKSB7XG5cbiAgdmFyIHBvc2l0aW9uID0gdG9vbHRpcC5wb3NpdGlvbixcbiAgICAgIGh0bWxDb250YWluZXIgPSB0b29sdGlwLmh0bWxDb250YWluZXI7XG5cbiAgLy8gdXBkYXRlIG92ZXJsYXkgaHRtbCBiYXNlZCBvbiB0b29sdGlwIHgsIHlcblxuICBzZXRQb3NpdGlvbihodG1sQ29udGFpbmVyLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLl91cGRhdGVUb29sdGlwVmlzaWJpbHR5ID0gZnVuY3Rpb24odmlld2JveCkge1xuXG4gIGZvckVhY2godGhpcy5fdG9vbHRpcHMsIGZ1bmN0aW9uKHRvb2x0aXApIHtcbiAgICB2YXIgc2hvdyA9IHRvb2x0aXAuc2hvdyxcbiAgICAgICAgaHRtbENvbnRhaW5lciA9IHRvb2x0aXAuaHRtbENvbnRhaW5lcixcbiAgICAgICAgdmlzaWJsZSA9IHRydWU7XG5cbiAgICBpZiAoc2hvdykge1xuICAgICAgaWYgKHNob3cubWluWm9vbSA+IHZpZXdib3guc2NhbGUgfHxcbiAgICAgICAgICBzaG93Lm1heFpvb20gPCB2aWV3Ym94LnNjYWxlKSB7XG4gICAgICAgIHZpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgc2V0VmlzaWJsZShodG1sQ29udGFpbmVyLCB2aXNpYmxlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVG9vbHRpcHMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIHNjcm9sbC96b29tIGludGVncmF0aW9uXG5cbiAgZnVuY3Rpb24gdXBkYXRlVmlld2JveCh2aWV3Ym94KSB7XG4gICAgc2VsZi5fdXBkYXRlUm9vdCh2aWV3Ym94KTtcbiAgICBzZWxmLl91cGRhdGVUb29sdGlwVmlzaWJpbHR5KHZpZXdib3gpO1xuXG4gICAgc2VsZi5zaG93KCk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbignY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHNlbGYuaGlkZSgpO1xuICB9KTtcblxuICB0aGlzLl9ldmVudEJ1cy5vbignY2FudmFzLnZpZXdib3guY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdXBkYXRlVmlld2JveChldmVudC52aWV3Ym94KTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IFRvb2x0aXBzIGZyb20gJy4vVG9vbHRpcHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICd0b29sdGlwcycgXSxcbiAgdG9vbHRpcHM6IFsgJ3R5cGUnLCBUb29sdGlwcyBdXG59OyIsImltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG91Y2hGaXgoY2FudmFzLCBldmVudEJ1cykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5hZGRCQm94TWFya2VyKGUuc3ZnKTtcbiAgfSk7XG59XG5cblRvdWNoRml4LiRpbmplY3QgPSBbICdjYW52YXMnLCAnZXZlbnRCdXMnIF07XG5cblxuLyoqXG4gKiBTYWZhcmkgbW9iaWxlIChpT1MgNykgZG9lcyBub3QgZmlyZSB0b3VjaHN0YXJ0IGV2ZW50IGluIDxTVkc+IGVsZW1lbnRcbiAqIGlmIHRoZXJlIGlzIG5vIHNoYXBlIGJldHdlZW4gMCwwIGFuZCB2aWV3cG9ydCBlbGVtZW50cyBvcmlnaW4uXG4gKlxuICogU28gdG91Y2hzdGFydCBldmVudCBpcyBvbmx5IGZpcmVkIHdoZW4gdGhlIDxnIGNsYXNzPVwidmlld3BvcnRcIj4gZWxlbWVudCB3YXMgaGl0LlxuICogUHV0dGluZyBhbiBlbGVtZW50IG92ZXIgYW5kIGJlbG93IHRoZSAndmlld3BvcnQnIGZpeGVzIHRoYXQgYmVoYXZpb3IuXG4gKi9cblRvdWNoRml4LnByb3RvdHlwZS5hZGRCQm94TWFya2VyID0gZnVuY3Rpb24oc3ZnKSB7XG5cbiAgdmFyIG1hcmtlclN0eWxlID0ge1xuICAgIGZpbGw6ICdub25lJyxcbiAgICBjbGFzczogJ291dGVyLWJvdW5kLW1hcmtlcidcbiAgfTtcblxuICB2YXIgcmVjdDEgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cihyZWN0MSwge1xuICAgIHg6IC0xMDAwMCxcbiAgICB5OiAxMDAwMCxcbiAgICB3aWR0aDogMTAsXG4gICAgaGVpZ2h0OiAxMFxuICB9KTtcbiAgc3ZnQXR0cihyZWN0MSwgbWFya2VyU3R5bGUpO1xuXG4gIHN2Z0FwcGVuZChzdmcsIHJlY3QxKTtcblxuICB2YXIgcmVjdDIgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cihyZWN0Miwge1xuICAgIHg6IDEwMDAwLFxuICAgIHk6IDEwMDAwLFxuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEwXG4gIH0pO1xuICBzdmdBdHRyKHJlY3QyLCBtYXJrZXJTdHlsZSk7XG5cbiAgc3ZnQXBwZW5kKHN2ZywgcmVjdDIpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgY2xvc2VzdCBhcyBkb21DbG9zZXN0XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQgSGFtbWVyIGZyb20gJ2hhbW1lcmpzJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxudmFyIE1JTl9aT09NID0gMC4yLFxuICAgIE1BWF9aT09NID0gNDtcblxudmFyIG1vdXNlRXZlbnRzID0gW1xuICAnbW91c2Vkb3duJyxcbiAgJ21vdXNldXAnLFxuICAnbW91c2VvdmVyJyxcbiAgJ21vdXNlb3V0JyxcbiAgJ2NsaWNrJyxcbiAgJ2RibGNsaWNrJ1xuXTtcblxuZnVuY3Rpb24gbG9nKCkge1xuXG4gIC8vIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIGdldChzZXJ2aWNlLCBpbmplY3Rvcikge1xuICByZXR1cm4gaW5qZWN0b3IuZ2V0KHNlcnZpY2UsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc3RvcEV2ZW50KGV2ZW50KSB7XG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgaWYgKHR5cGVvZiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVRvdWNoUmVjb2duaXplcihub2RlKSB7XG5cbiAgZnVuY3Rpb24gc3RvcE1vdXNlKGV2ZW50KSB7XG5cbiAgICBmb3JFYWNoKG1vdXNlRXZlbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBkb21FdmVudC5iaW5kKG5vZGUsIGUsIHN0b3BFdmVudCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd01vdXNlKGV2ZW50KSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGZvckVhY2gobW91c2VFdmVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9tRXZlbnQudW5iaW5kKG5vZGUsIGUsIHN0b3BFdmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgZG9tRXZlbnQuYmluZChub2RlLCAndG91Y2hzdGFydCcsIHN0b3BNb3VzZSwgdHJ1ZSk7XG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ3RvdWNoZW5kJywgYWxsb3dNb3VzZSwgdHJ1ZSk7XG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ3RvdWNoY2FuY2VsJywgYWxsb3dNb3VzZSwgdHJ1ZSk7XG5cbiAgLy8gQSB0b3VjaCBldmVudCByZWNvZ25pemVyIHRoYXQgaGFuZGxlc1xuICAvLyB0b3VjaCBldmVudHMgb25seSAod2Uga25vdywgd2UgY2FuIGFscmVhZHkgaGFuZGxlXG4gIC8vIG1vdXNlIGV2ZW50cyBvdXQgb2YgdGhlIGJveClcblxuICB2YXIgcmVjb2duaXplciA9IG5ldyBIYW1tZXIuTWFuYWdlcihub2RlLCB7XG4gICAgaW5wdXRDbGFzczogSGFtbWVyLlRvdWNoSW5wdXQsXG4gICAgcmVjb2duaXplcnM6IFtdXG4gIH0pO1xuXG5cbiAgdmFyIHRhcCA9IG5ldyBIYW1tZXIuVGFwKCk7XG4gIHZhciBwYW4gPSBuZXcgSGFtbWVyLlBhbih7IHRocmVzaG9sZDogMTAgfSk7XG4gIHZhciBwcmVzcyA9IG5ldyBIYW1tZXIuUHJlc3MoKTtcbiAgdmFyIHBpbmNoID0gbmV3IEhhbW1lci5QaW5jaCgpO1xuXG4gIHZhciBkb3VibGVUYXAgPSBuZXcgSGFtbWVyLlRhcCh7IGV2ZW50OiAnZG91YmxldGFwJywgdGFwczogMiB9KTtcblxuICBwaW5jaC5yZXF1aXJlRmFpbHVyZShwYW4pO1xuICBwaW5jaC5yZXF1aXJlRmFpbHVyZShwcmVzcyk7XG5cbiAgcmVjb2duaXplci5hZGQoWyBwYW4sIHByZXNzLCBwaW5jaCwgZG91YmxlVGFwLCB0YXAgXSk7XG5cbiAgcmVjb2duaXplci5yZXNldCA9IGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycyxcbiAgICAgICAgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2coJ3JlY29nbml6ZXInLCAnc3RvcCcpO1xuXG4gICAgcmVjb2duaXplci5zdG9wKGZvcmNlKTtcblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcjtcblxuICAgICAgbG9nKCdyZWNvZ25pemVyJywgJ3Jlc2V0Jyk7XG4gICAgICBmb3IgKGkgPSAwOyAociA9IHJlY29nbml6ZXJzW2ldKTsgaSsrKSB7XG4gICAgICAgIHIucmVzZXQoKTtcbiAgICAgICAgci5zdGF0ZSA9IDg7IC8vIEZBSUxFRCBTVEFURVxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH0sIDApO1xuICB9O1xuXG4gIHJlY29nbml6ZXIub24oJ2hhbW1lci5pbnB1dCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnNyY0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJlY29nbml6ZXIucmVzZXQodHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IHByb3ZpZGVzIHRvdWNoIGV2ZW50cyBmb3IgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW50ZXJhY3Rpb25FdmVudHN9IGludGVyYWN0aW9uRXZlbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvdWNoSW50ZXJhY3Rpb25FdmVudHMoXG4gICAgaW5qZWN0b3IsIGNhbnZhcywgZXZlbnRCdXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LCBpbnRlcmFjdGlvbkV2ZW50cykge1xuXG4gIC8vIG9wdGlvbmFsIGludGVncmF0aW9uc1xuICB2YXIgZHJhZ2dpbmcgPSBnZXQoJ2RyYWdnaW5nJywgaW5qZWN0b3IpLFxuICAgICAgbW92ZSA9IGdldCgnbW92ZScsIGluamVjdG9yKSxcbiAgICAgIGNvbnRleHRQYWQgPSBnZXQoJ2NvbnRleHRQYWQnLCBpbmplY3RvciksXG4gICAgICBwYWxldHRlID0gZ2V0KCdwYWxldHRlJywgaW5qZWN0b3IpO1xuXG4gIC8vIHRoZSB0b3VjaCByZWNvZ25pemVyXG4gIHZhciByZWNvZ25pemVyO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZXIodHlwZSkge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBsb2coJ2VsZW1lbnQnLCB0eXBlLCBldmVudCk7XG5cbiAgICAgIGludGVyYWN0aW9uRXZlbnRzLmZpcmUodHlwZSwgZXZlbnQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRHZngodGFyZ2V0KSB7XG4gICAgdmFyIG5vZGUgPSBkb21DbG9zZXN0KHRhcmdldCwgJ3N2ZywgLmRqcy1lbGVtZW50JywgdHJ1ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0RXZlbnRzKHN2Zykge1xuXG4gICAgLy8gdG91Y2ggcmVjb2duaXplclxuICAgIHJlY29nbml6ZXIgPSBjcmVhdGVUb3VjaFJlY29nbml6ZXIoc3ZnKTtcblxuICAgIHJlY29nbml6ZXIub24oJ2RvdWJsZXRhcCcsIGhhbmRsZXIoJ2VsZW1lbnQuZGJsY2xpY2snKSk7XG5cbiAgICByZWNvZ25pemVyLm9uKCd0YXAnLCBoYW5kbGVyKCdlbGVtZW50LmNsaWNrJykpO1xuXG4gICAgZnVuY3Rpb24gc3RhcnRHcmFiQ2FudmFzKGV2ZW50KSB7XG5cbiAgICAgIGxvZygnY2FudmFzJywgJ2dyYWIgc3RhcnQnKTtcblxuICAgICAgdmFyIGx4ID0gMCwgbHkgPSAwO1xuXG4gICAgICBmdW5jdGlvbiB1cGRhdGUoZSkge1xuXG4gICAgICAgIHZhciBkeCA9IGUuZGVsdGFYIC0gbHgsXG4gICAgICAgICAgICBkeSA9IGUuZGVsdGFZIC0gbHk7XG5cbiAgICAgICAgY2FudmFzLnNjcm9sbCh7IGR4OiBkeCwgZHk6IGR5IH0pO1xuXG4gICAgICAgIGx4ID0gZS5kZWx0YVg7XG4gICAgICAgIGx5ID0gZS5kZWx0YVk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChlKSB7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwYW5tb3ZlJywgdXBkYXRlKTtcbiAgICAgICAgcmVjb2duaXplci5vZmYoJ3BhbmVuZCcsIGVuZCk7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwYW5jYW5jZWwnLCBlbmQpO1xuXG4gICAgICAgIGxvZygnY2FudmFzJywgJ2dyYWIgZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHJlY29nbml6ZXIub24oJ3Bhbm1vdmUnLCB1cGRhdGUpO1xuICAgICAgcmVjb2duaXplci5vbigncGFuZW5kJywgZW5kKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BhbmNhbmNlbCcsIGVuZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRHcmFiKGV2ZW50KSB7XG5cbiAgICAgIHZhciBnZnggPSBnZXRHZngoZXZlbnQudGFyZ2V0KSxcbiAgICAgICAgICBlbGVtZW50ID0gZ2Z4ICYmIGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcblxuICAgICAgLy8gcmVjb2duaXplclxuICAgICAgaWYgKG1vdmUgJiYgY2FudmFzLmdldFJvb3RFbGVtZW50KCkgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgbG9nKCdlbGVtZW50JywgJ21vdmUgc3RhcnQnLCBlbGVtZW50LCBldmVudCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtb3ZlLnN0YXJ0KGV2ZW50LCBlbGVtZW50LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0R3JhYkNhbnZhcyhldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRab29tKGUpIHtcblxuICAgICAgbG9nKCdjYW52YXMnLCAnem9vbSBzdGFydCcpO1xuXG4gICAgICB2YXIgem9vbSA9IGNhbnZhcy56b29tKCksXG4gICAgICAgICAgbWlkID0gZS5jZW50ZXI7XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZShlKSB7XG5cbiAgICAgICAgdmFyIHJhdGlvID0gMSAtICgxIC0gZS5zY2FsZSkgLyAxLjUwLFxuICAgICAgICAgICAgbmV3Wm9vbSA9IE1hdGgubWF4KE1JTl9aT09NLCBNYXRoLm1pbihNQVhfWk9PTSwgcmF0aW8gKiB6b29tKSk7XG5cbiAgICAgICAgY2FudmFzLnpvb20obmV3Wm9vbSwgbWlkKTtcblxuICAgICAgICBzdG9wRXZlbnQoZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChlKSB7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwaW5jaG1vdmUnLCB1cGRhdGUpO1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGluY2hlbmQnLCBlbmQpO1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGluY2hjYW5jZWwnLCBlbmQpO1xuXG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQodHJ1ZSk7XG5cbiAgICAgICAgbG9nKCdjYW52YXMnLCAnem9vbSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgcmVjb2duaXplci5vbigncGluY2htb3ZlJywgdXBkYXRlKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BpbmNoZW5kJywgZW5kKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BpbmNoY2FuY2VsJywgZW5kKTtcbiAgICB9XG5cbiAgICByZWNvZ25pemVyLm9uKCdwYW5zdGFydCcsIHN0YXJ0R3JhYik7XG4gICAgcmVjb2duaXplci5vbigncHJlc3MnLCBzdGFydEdyYWIpO1xuXG4gICAgcmVjb2duaXplci5vbigncGluY2hzdGFydCcsIHN0YXJ0Wm9vbSk7XG4gIH1cblxuICBpZiAoZHJhZ2dpbmcpIHtcblxuICAgIC8vIHNpbXVsYXRlIGhvdmVyIGR1cmluZyBkcmFnZ2luZ1xuICAgIGV2ZW50QnVzLm9uKCdkcmFnLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIGlmICghb3JpZ2luYWxFdmVudCB8fCBvcmlnaW5hbEV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3NpdGlvbiA9IHRvUG9pbnQob3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIC8vIHRoaXMgZ2V0cyByZWFsbHkgZXhwZW5zaXZlIC4uLlxuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpLFxuICAgICAgICAgIGdmeCA9IGdldEdmeChub2RlKSxcbiAgICAgICAgICBlbGVtZW50ID0gZ2Z4ICYmIGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcblxuICAgICAgaWYgKGVsZW1lbnQgIT09IGV2ZW50LmhvdmVyKSB7XG4gICAgICAgIGlmIChldmVudC5ob3Zlcikge1xuICAgICAgICAgIGRyYWdnaW5nLm91dChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGRyYWdnaW5nLmhvdmVyKHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG5cbiAgICAgICAgICBldmVudC5ob3ZlciA9IGVsZW1lbnQ7XG4gICAgICAgICAgZXZlbnQuaG92ZXJHZnggPSBnZng7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb250ZXh0UGFkKSB7XG5cbiAgICBldmVudEJ1cy5vbignY29udGV4dFBhZC5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5wYWQuaHRtbDtcblxuICAgICAgLy8gdG91Y2ggcmVjb2duaXplclxuICAgICAgdmFyIHBhZFJlY29nbml6ZXIgPSBjcmVhdGVUb3VjaFJlY29nbml6ZXIobm9kZSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3BhbnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgbG9nKCdjb250ZXh0LXBhZCcsICdwYW5zdGFydCcsIGV2ZW50KTtcbiAgICAgICAgY29udGV4dFBhZC50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigncHJlc3MnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ2NvbnRleHQtcGFkJywgJ3ByZXNzJywgZXZlbnQpO1xuICAgICAgICBjb250ZXh0UGFkLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50LCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCd0YXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ2NvbnRleHQtcGFkJywgJ3RhcCcsIGV2ZW50KTtcbiAgICAgICAgY29udGV4dFBhZC50cmlnZ2VyKCdjbGljaycsIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhbGV0dGUpIHtcbiAgICBldmVudEJ1cy5vbigncGFsZXR0ZS5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5jb250YWluZXI7XG5cbiAgICAgIC8vIHRvdWNoIHJlY29nbml6ZXJcbiAgICAgIHZhciBwYWRSZWNvZ25pemVyID0gY3JlYXRlVG91Y2hSZWNvZ25pemVyKG5vZGUpO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCdwYW5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxvZygncGFsZXR0ZScsICdwYW5zdGFydCcsIGV2ZW50KTtcbiAgICAgICAgcGFsZXR0ZS50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigncHJlc3MnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ3BhbGV0dGUnLCAncHJlc3MnLCBldmVudCk7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlcignZHJhZ3N0YXJ0JywgZXZlbnQsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3RhcCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxvZygncGFsZXR0ZScsICd0YXAnLCBldmVudCk7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlcignY2xpY2snLCBldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuaW5pdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaW5pdEV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcbn1cblxuXG5Ub3VjaEludGVyYWN0aW9uRXZlbnRzLiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdjYW52YXMnLFxuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2ludGVyYWN0aW9uRXZlbnRzJyxcbiAgJ3RvdWNoRml4J1xuXTtcbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuXG5pbXBvcnQgVG91Y2hJbnRlcmFjdGlvbkV2ZW50cyBmcm9tICcuL1RvdWNoSW50ZXJhY3Rpb25FdmVudHMnO1xuaW1wb3J0IFRvdWNoRml4IGZyb20gJy4vVG91Y2hGaXgnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlIF0sXG4gIF9faW5pdF9fOiBbICd0b3VjaEludGVyYWN0aW9uRXZlbnRzJyBdLFxuICB0b3VjaEludGVyYWN0aW9uRXZlbnRzOiBbICd0eXBlJywgVG91Y2hJbnRlcmFjdGlvbkV2ZW50cyBdLFxuICB0b3VjaEZpeDogWyAndHlwZScsIFRvdWNoRml4IF1cbn07IiwiaW1wb3J0IHRyYW5zbGF0ZSBmcm9tICcuL3RyYW5zbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHJhbnNsYXRlOiBbICd2YWx1ZScsIHRyYW5zbGF0ZSBdXG59OyIsIi8qKlxuICogQSBzaW1wbGUgdHJhbnNsYXRpb24gc3R1YiB0byBiZSB1c2VkIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKiBpbiBkaWFncmFtcy4gQ2FuIGJlIGVhc2lseSByZXBsYWNlZCB3aXRoIGEgbW9yZSBzb3BoaXN0aWNhdGVkXG4gKiBzb2x1dGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIHVzZSBpdCBpbnNpZGUgYW55IGRpYWdyYW0gY29tcG9uZW50IGJ5IGluamVjdGluZyBgdHJhbnNsYXRlYC5cbiAqXG4gKiBmdW5jdGlvbiBNeVNlcnZpY2UodHJhbnNsYXRlKSB7XG4gKiAgIGFsZXJ0KHRyYW5zbGF0ZSgnSEVMTE8ge3lvdX0nLCB7IHlvdTogJ1lvdSEnIH0pKTtcbiAqIH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgdG8gaW50ZXJwb2xhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVwbGFjZW1lbnRzXSBhIG1hcCB3aXRoIHN1YnN0aXR1dGVzXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgdHJhbnNsYXRlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNsYXRlKHRlbXBsYXRlLCByZXBsYWNlbWVudHMpIHtcblxuICByZXBsYWNlbWVudHMgPSByZXBsYWNlbWVudHMgfHwge307XG5cbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soW159XSspfS9nLCBmdW5jdGlvbihfLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2tleV0gfHwgJ3snICsga2V5ICsgJ30nO1xuICB9KTtcbn0iLCJpbXBvcnQge1xuICBnZXRNaWRcbn0gZnJvbSAnLi9MYXlvdXRVdGlsJztcblxuXG4vKipcbiAqIEEgYmFzZSBjb25uZWN0aW9uIGxheW91dGVyIGltcGxlbWVudGF0aW9uXG4gKiB0aGF0IGxheW91dHMgdGhlIGNvbm5lY3Rpb24gYnkgZGlyZWN0bHkgY29ubmVjdGluZ1xuICogbWlkKHNvdXJjZSkgKyBtaWQodGFyZ2V0KS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzZUxheW91dGVyKCkge31cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbmV3IGxheW91dGVkIHdheXBvaW50cyBmb3IgdGhlIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogVGhlIGNvbm5lY3Rpb24gcGFzc2VkIGlzIHN0aWxsIHVuY2hhbmdlZDsgeW91IG1heSBmaWd1cmUgb3V0IGFib3V0XG4gKiB0aGUgbmV3IGNvbm5lY3Rpb24gc3RhcnQgLyBlbmQgdmlhIHRoZSBsYXlvdXQgaGludHMgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uU3RhcnRdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvbkVuZF1cbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5zb3VyY2VdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMudGFyZ2V0XVxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gdGhlIGxheW91dGVkIGNvbm5lY3Rpb24gd2F5cG9pbnRzXG4gKi9cbkJhc2VMYXlvdXRlci5wcm90b3R5cGUubGF5b3V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICByZXR1cm4gW1xuICAgIGhpbnRzLmNvbm5lY3Rpb25TdGFydCB8fCBnZXRNaWQoaGludHMuc291cmNlIHx8IGNvbm5lY3Rpb24uc291cmNlKSxcbiAgICBoaW50cy5jb25uZWN0aW9uRW5kIHx8IGdldE1pZChoaW50cy50YXJnZXQgfHwgY29ubmVjdGlvbi50YXJnZXQpXG4gIF07XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb25cbn0gZnJvbSAnLi9MYXlvdXRVdGlsJztcblxuXG5mdW5jdGlvbiBkb2NraW5nVG9Qb2ludChkb2NraW5nKSB7XG5cbiAgLy8gdXNlIHRoZSBkb2NraW5ncyBhY3R1YWwgcG9pbnQgYW5kXG4gIC8vIHJldGFpbiB0aGUgb3JpZ2luYWwgZG9ja2luZ1xuICByZXR1cm4gYXNzaWduKHsgb3JpZ2luYWw6IGRvY2tpbmcucG9pbnQub3JpZ2luYWwgfHwgZG9ja2luZy5wb2ludCB9LCBkb2NraW5nLmFjdHVhbCk7XG59XG5cblxuLyoqXG4gKiBBIHtAbGluayBDb25uZWN0aW9uRG9ja2luZ30gdGhhdCBjcm9wcyBjb25uZWN0aW9uIHdheXBvaW50cyBiYXNlZCBvblxuICogdGhlIHBhdGgocykgb2YgdGhlIGNvbm5lY3Rpb24gc291cmNlIGFuZCB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtkanMuY29yZS5FbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nKGVsZW1lbnRSZWdpc3RyeSwgZ3JhcGhpY3NGYWN0b3J5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xufVxuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnZ3JhcGhpY3NGYWN0b3J5JyBdO1xuXG5cbi8qKlxuICogQGluaGVyaXREb2MgQ29ubmVjdGlvbkRvY2tpbmcjZ2V0Q3JvcHBlZFdheXBvaW50c1xuICovXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5nZXRDcm9wcGVkV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgc291cmNlLCB0YXJnZXQpIHtcblxuICBzb3VyY2UgPSBzb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2U7XG4gIHRhcmdldCA9IHRhcmdldCB8fCBjb25uZWN0aW9uLnRhcmdldDtcblxuICB2YXIgc291cmNlRG9ja2luZyA9IHRoaXMuZ2V0RG9ja2luZ1BvaW50KGNvbm5lY3Rpb24sIHNvdXJjZSwgdHJ1ZSksXG4gICAgICB0YXJnZXREb2NraW5nID0gdGhpcy5nZXREb2NraW5nUG9pbnQoY29ubmVjdGlvbiwgdGFyZ2V0KTtcblxuICB2YXIgY3JvcHBlZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKHNvdXJjZURvY2tpbmcuaWR4ICsgMSwgdGFyZ2V0RG9ja2luZy5pZHgpO1xuXG4gIGNyb3BwZWRXYXlwb2ludHMudW5zaGlmdChkb2NraW5nVG9Qb2ludChzb3VyY2VEb2NraW5nKSk7XG4gIGNyb3BwZWRXYXlwb2ludHMucHVzaChkb2NraW5nVG9Qb2ludCh0YXJnZXREb2NraW5nKSk7XG5cbiAgcmV0dXJuIGNyb3BwZWRXYXlwb2ludHM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgY29ubmVjdGlvbiBkb2NraW5nIHBvaW50IG9uIHRoZSBzcGVjaWZpZWQgc2hhcGVcbiAqXG4gKiBAaW5oZXJpdERvYyBDb25uZWN0aW9uRG9ja2luZyNnZXREb2NraW5nUG9pbnRcbiAqL1xuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuZ2V0RG9ja2luZ1BvaW50ID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgc2hhcGUsIGRvY2tTdGFydCkge1xuXG4gIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgIGRvY2tpbmdJZHgsXG4gICAgICBkb2NraW5nUG9pbnQsXG4gICAgICBjcm9wcGVkUG9pbnQ7XG5cbiAgZG9ja2luZ0lkeCA9IGRvY2tTdGFydCA/IDAgOiB3YXlwb2ludHMubGVuZ3RoIC0gMTtcbiAgZG9ja2luZ1BvaW50ID0gd2F5cG9pbnRzW2RvY2tpbmdJZHhdO1xuXG4gIGNyb3BwZWRQb2ludCA9IHRoaXMuX2dldEludGVyc2VjdGlvbihzaGFwZSwgY29ubmVjdGlvbiwgZG9ja1N0YXJ0KTtcblxuICByZXR1cm4ge1xuICAgIHBvaW50OiBkb2NraW5nUG9pbnQsXG4gICAgYWN0dWFsOiBjcm9wcGVkUG9pbnQgfHwgZG9ja2luZ1BvaW50LFxuICAgIGlkeDogZG9ja2luZ0lkeFxuICB9O1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKHNoYXBlLCBjb25uZWN0aW9uLCB0YWtlRmlyc3QpIHtcblxuICB2YXIgc2hhcGVQYXRoID0gdGhpcy5fZ2V0U2hhcGVQYXRoKHNoYXBlKSxcbiAgICAgIGNvbm5lY3Rpb25QYXRoID0gdGhpcy5fZ2V0Q29ubmVjdGlvblBhdGgoY29ubmVjdGlvbik7XG5cbiAgcmV0dXJuIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKHNoYXBlUGF0aCwgY29ubmVjdGlvblBhdGgsIHRha2VGaXJzdCk7XG59O1xuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5fZ2V0Q29ubmVjdGlvblBhdGggPSBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gIHJldHVybiB0aGlzLl9ncmFwaGljc0ZhY3RvcnkuZ2V0Q29ubmVjdGlvblBhdGgoY29ubmVjdGlvbik7XG59O1xuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5fZ2V0U2hhcGVQYXRoID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHRoaXMuX2dyYXBoaWNzRmFjdG9yeS5nZXRTaGFwZVBhdGgoc2hhcGUpO1xufTtcblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldEdmeCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbn07XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgcG9pbnREaXN0YW5jZSxcbiAgcG9pbnRzT25MaW5lXG59IGZyb20gJy4uL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQgaW50ZXJzZWN0UGF0aHMgZnJvbSAncGF0aC1pbnRlcnNlY3Rpb24nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZEJvdW5kcyhib3VuZHMpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54KSxcbiAgICB5OiBNYXRoLnJvdW5kKGJvdW5kcy55KSxcbiAgICB3aWR0aDogTWF0aC5yb3VuZChib3VuZHMud2lkdGgpLFxuICAgIGhlaWdodDogTWF0aC5yb3VuZChib3VuZHMuaGVpZ2h0KVxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFBvaW50KHBvaW50KSB7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKHBvaW50LngpLFxuICAgIHk6IE1hdGgucm91bmQocG9pbnQueSlcbiAgfTtcbn1cblxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGJvdW5kcyB0byBhIHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gZGVzY3JpcHRvci5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc3xQb2ludH0gYm91bmRzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNUUkJMKGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHRvcDogYm91bmRzLnksXG4gICAgcmlnaHQ6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICBib3R0b206IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMCksXG4gICAgbGVmdDogYm91bmRzLnhcbiAgfTtcbn1cblxuXG4vKipcbiAqIENvbnZlcnQgYSB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCB9IHRvIGFuIG9iamVjdHMgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0cmJsXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNCb3VuZHModHJibCkge1xuICByZXR1cm4ge1xuICAgIHg6IHRyYmwubGVmdCxcbiAgICB5OiB0cmJsLnRvcCxcbiAgICB3aWR0aDogdHJibC5yaWdodCAtIHRyYmwubGVmdCxcbiAgICBoZWlnaHQ6IHRyYmwuYm90dG9tIC0gdHJibC50b3BcbiAgfTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgbWlkIG9mIHRoZSBnaXZlbiBib3VuZHMgb3IgcG9pbnQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN8UG9pbnR9IGJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkKGJvdW5kcykge1xuICByZXR1cm4gcm91bmRQb2ludCh7XG4gICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIHx8IDApIC8gMixcbiAgICB5OiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApIC8gMlxuICB9KTtcbn1cblxuXG4vLyBvcmllbnRhdGlvbiB1dGlscyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogR2V0IG9yaWVudGF0aW9uIG9mIHRoZSBnaXZlbiByZWN0YW5nbGUgd2l0aCByZXNwZWN0IHRvXG4gKiB0aGUgcmVmZXJlbmNlIHJlY3RhbmdsZS5cbiAqXG4gKiBBIHBhZGRpbmcgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSBtYXkgYmUgcGFzc2VkIHRvIGluZmx1ZW5jZVxuICogaG9yaXpvbnRhbCAvIHZlcnRpY2FsIG9yaWVudGF0aW9uIGFuZCBpbnRlcnNlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHJlY3RcbiAqIEBwYXJhbSB7Qm91bmRzfSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7UG9pbnR8bnVtYmVyfSBwYWRkaW5nXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgb3JpZW50YXRpb247IG9uZSBvZiB0b3AsIHRvcC1sZWZ0LCBsZWZ0LCAuLi4sIGJvdHRvbSwgcmlnaHQgb3IgaW50ZXJzZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZW50YXRpb24ocmVjdCwgcmVmZXJlbmNlLCBwYWRkaW5nKSB7XG5cbiAgcGFkZGluZyA9IHBhZGRpbmcgfHwgMDtcblxuICAvLyBtYWtlIHN1cmUgd2UgY2FuIHVzZSBhbiBvYmplY3QsIHRvb1xuICAvLyBmb3IgaW5kaXZpZHVhbCB7IHgsIHkgfSBwYWRkaW5nXG4gIGlmICghaXNPYmplY3QocGFkZGluZykpIHtcbiAgICBwYWRkaW5nID0geyB4OiBwYWRkaW5nLCB5OiBwYWRkaW5nIH07XG4gIH1cblxuXG4gIHZhciByZWN0T3JpZW50YXRpb24gPSBhc1RSQkwocmVjdCksXG4gICAgICByZWZlcmVuY2VPcmllbnRhdGlvbiA9IGFzVFJCTChyZWZlcmVuY2UpO1xuXG4gIHZhciB0b3AgPSByZWN0T3JpZW50YXRpb24uYm90dG9tICsgcGFkZGluZy55IDw9IHJlZmVyZW5jZU9yaWVudGF0aW9uLnRvcCxcbiAgICAgIHJpZ2h0ID0gcmVjdE9yaWVudGF0aW9uLmxlZnQgLSBwYWRkaW5nLnggPj0gcmVmZXJlbmNlT3JpZW50YXRpb24ucmlnaHQsXG4gICAgICBib3R0b20gPSByZWN0T3JpZW50YXRpb24udG9wIC0gcGFkZGluZy55ID49IHJlZmVyZW5jZU9yaWVudGF0aW9uLmJvdHRvbSxcbiAgICAgIGxlZnQgPSByZWN0T3JpZW50YXRpb24ucmlnaHQgKyBwYWRkaW5nLnggPD0gcmVmZXJlbmNlT3JpZW50YXRpb24ubGVmdDtcblxuICB2YXIgdmVydGljYWwgPSB0b3AgPyAndG9wJyA6IChib3R0b20gPyAnYm90dG9tJyA6IG51bGwpLFxuICAgICAgaG9yaXpvbnRhbCA9IGxlZnQgPyAnbGVmdCcgOiAocmlnaHQgPyAncmlnaHQnIDogbnVsbCk7XG5cbiAgaWYgKGhvcml6b250YWwgJiYgdmVydGljYWwpIHtcbiAgICByZXR1cm4gdmVydGljYWwgKyAnLScgKyBob3Jpem9udGFsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBob3Jpem9udGFsIHx8IHZlcnRpY2FsIHx8ICdpbnRlcnNlY3QnO1xuICB9XG59XG5cblxuLy8gaW50ZXJzZWN0aW9uIHV0aWxzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBHZXQgaW50ZXJzZWN0aW9uIGJldHdlZW4gYW4gZWxlbWVudCBhbmQgYSBsaW5lIHBhdGguXG4gKlxuICogQHBhcmFtIHtQYXRoRGVmfSBlbGVtZW50UGF0aFxuICogQHBhcmFtIHtQYXRoRGVmfSBsaW5lUGF0aFxuICogQHBhcmFtIHtib29sZWFufSBjcm9wU3RhcnQgY3JvcCBmcm9tIHN0YXJ0IG9yIGVuZFxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb24oZWxlbWVudFBhdGgsIGxpbmVQYXRoLCBjcm9wU3RhcnQpIHtcblxuICB2YXIgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbnMoZWxlbWVudFBhdGgsIGxpbmVQYXRoKTtcblxuICAvLyByZWNvZ25pemUgaW50ZXJzZWN0aW9uc1xuICAvLyBvbmx5IG9uZSAtPiBjaG9vc2VcbiAgLy8gdHdvIGNsb3NlIHRvZ2V0aGVyIC0+IGNob29zZSBmaXJzdFxuICAvLyB0d28gb3IgbW9yZSBkaXN0aW5jdCAtPiBwdWxsIG91dCBhcHByb3ByaWF0ZSBvbmVcbiAgLy8gbm9uZSAtPiBvayAoZmFsbGJhY2sgdG8gcG9pbnQgaXRzZWxmKVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gcm91bmRQb2ludChpbnRlcnNlY3Rpb25zWzBdKTtcbiAgfSBlbHNlIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA9PT0gMiAmJiBwb2ludERpc3RhbmNlKGludGVyc2VjdGlvbnNbMF0sIGludGVyc2VjdGlvbnNbMV0pIDwgMSkge1xuICAgIHJldHVybiByb3VuZFBvaW50KGludGVyc2VjdGlvbnNbMF0pO1xuICB9IGVsc2UgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID4gMSkge1xuXG4gICAgLy8gc29ydCBieSBpbnRlcnNlY3Rpb25zIGJhc2VkIG9uIGNvbm5lY3Rpb24gc2VnbWVudCArXG4gICAgLy8gZGlzdGFuY2UgZnJvbSBzdGFydFxuICAgIGludGVyc2VjdGlvbnMgPSBzb3J0QnkoaW50ZXJzZWN0aW9ucywgZnVuY3Rpb24oaSkge1xuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5mbG9vcihpLnQyICogMTAwKSB8fCAxO1xuXG4gICAgICBkaXN0YW5jZSA9IDEwMCAtIGRpc3RhbmNlO1xuXG4gICAgICBkaXN0YW5jZSA9IChkaXN0YW5jZSA8IDEwID8gJzAnIDogJycpICsgZGlzdGFuY2U7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIHNvcnQgc3RyaW5nIHRoYXQgbWFrZXMgc3VyZSB3ZSBzb3J0XG4gICAgICAvLyBsaW5lIHNlZ21lbnQgQVNDICsgbGluZSBzZWdtZW50IHBvc2l0aW9uIERFU0MgKGZvciBjcm9wU3RhcnQpXG4gICAgICAvLyBsaW5lIHNlZ21lbnQgQVNDICsgbGluZSBzZWdtZW50IHBvc2l0aW9uIEFTQyAoZm9yIGNyb3BFbmQpXG4gICAgICByZXR1cm4gaS5zZWdtZW50MiArICcjJyArIGRpc3RhbmNlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvdW5kUG9pbnQoaW50ZXJzZWN0aW9uc1tjcm9wU3RhcnQgPyAwIDogaW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxXSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9ucyhhLCBiKSB7XG4gIHJldHVybiBpbnRlcnNlY3RQYXRocyhhLCBiKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKHdheXBvaW50cykge1xuXG4gIC8vIGFsdGVyIGNvcHkgb2Ygd2F5cG9pbnRzLCBub3Qgb3JpZ2luYWxcbiAgd2F5cG9pbnRzID0gd2F5cG9pbnRzLnNsaWNlKCk7XG5cbiAgdmFyIGlkeCA9IDAsXG4gICAgICBwb2ludCxcbiAgICAgIHByZXZpb3VzUG9pbnQsXG4gICAgICBuZXh0UG9pbnQ7XG5cbiAgd2hpbGUgKHdheXBvaW50c1tpZHhdKSB7XG4gICAgcG9pbnQgPSB3YXlwb2ludHNbaWR4XTtcbiAgICBwcmV2aW91c1BvaW50ID0gd2F5cG9pbnRzW2lkeCAtIDFdO1xuICAgIG5leHRQb2ludCA9IHdheXBvaW50c1tpZHggKyAxXTtcblxuICAgIGlmIChwb2ludERpc3RhbmNlKHBvaW50LCBuZXh0UG9pbnQpID09PSAwIHx8XG4gICAgICAgIHBvaW50c09uTGluZShwcmV2aW91c1BvaW50LCBuZXh0UG9pbnQsIHBvaW50KSkge1xuXG4gICAgICAvLyByZW1vdmUgcG9pbnQsIGlmIG92ZXJsYXBwaW5nIHdpdGgge25leHRQb2ludH1cbiAgICAgIC8vIG9yIG9uIGxpbmUgd2l0aCB7cHJldmlvdXNQb2ludH0gLT4ge3BvaW50fSAtPiB7bmV4dFBvaW50fVxuICAgICAgd2F5cG9pbnRzLnNwbGljZShpZHgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZHgrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzO1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaW5kLFxuICBpc0FycmF5LFxuICB3aXRob3V0XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZFxufSBmcm9tICcuL0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBwb2ludEluUmVjdCxcbiAgcG9pbnREaXN0YW5jZSxcbiAgcG9pbnRzQWxpZ25lZCxcbiAgcG9pbnRzT25MaW5lXG59IGZyb20gJy4uL3V0aWwvR2VvbWV0cnknO1xuXG52YXIgTUlOX1NFR01FTlRfTEVOR1RIID0gMjAsXG4gICAgUE9JTlRfT1JJRU5UQVRJT05fUEFERElORyA9IDU7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbnZhciBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEID0gMjAsXG4gICAgT1JJRU5UQVRJT05fVEhSRVNIT0xEID0ge1xuICAgICAgJ2g6aCc6IDIwLFxuICAgICAgJ3Y6dic6IDIwLFxuICAgICAgJ2g6dic6IC0xMCxcbiAgICAgICd2OmgnOiAtMTBcbiAgICB9O1xuXG5mdW5jdGlvbiBuZWVkc1R1cm4ob3JpZW50YXRpb24sIHN0YXJ0RGlyZWN0aW9uKSB7XG4gIHJldHVybiAhe1xuICAgIHQ6IC90b3AvLFxuICAgIHI6IC9yaWdodC8sXG4gICAgYjogL2JvdHRvbS8sXG4gICAgbDogL2xlZnQvLFxuICAgIGg6IC8uLyxcbiAgICB2OiAvLi9cbiAgfVtzdGFydERpcmVjdGlvbl0udGVzdChvcmllbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNhbkxheW91dFN0cmFpZ2h0KGRpcmVjdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICB0OiAvdG9wLyxcbiAgICByOiAvcmlnaHQvLFxuICAgIGI6IC9ib3R0b20vLFxuICAgIGw6IC9sZWZ0LyxcbiAgICBoOiAvbGVmdHxyaWdodC8sXG4gICAgdjogL3RvcHxib3R0b20vXG4gIH1bZGlyZWN0aW9uXS50ZXN0KHRhcmdldE9yaWVudGF0aW9uKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuICB2YXIgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihiLCBhLCBQT0lOVF9PUklFTlRBVElPTl9QQURESU5HKTtcblxuICB2YXIgc3RhcnREaXJlY3Rpb24gPSBkaXJlY3Rpb25zLnNwbGl0KCc6JylbMF07XG5cbiAgdmFyIHhtaWQgPSByb3VuZCgoYi54IC0gYS54KSAvIDIgKyBhLngpLFxuICAgICAgeW1pZCA9IHJvdW5kKChiLnkgLSBhLnkpIC8gMiArIGEueSk7XG5cbiAgdmFyIHNlZ21lbnRFbmQsIHNlZ21lbnREaXJlY3Rpb25zO1xuXG4gIHZhciBsYXlvdXRTdHJhaWdodCA9IGNhbkxheW91dFN0cmFpZ2h0KHN0YXJ0RGlyZWN0aW9uLCBvcmllbnRhdGlvbiksXG4gICAgICBsYXlvdXRIb3Jpem9udGFsID0gL2h8cnxsLy50ZXN0KHN0YXJ0RGlyZWN0aW9uKSxcbiAgICAgIGxheW91dFR1cm4gPSBmYWxzZTtcblxuICB2YXIgdHVybk5leHREaXJlY3Rpb25zID0gZmFsc2U7XG5cbiAgaWYgKGxheW91dFN0cmFpZ2h0KSB7XG4gICAgc2VnbWVudEVuZCA9IGxheW91dEhvcml6b250YWwgPyB7IHg6IHhtaWQsIHk6IGEueSB9IDogeyB4OiBhLngsIHk6IHltaWQgfTtcblxuICAgIHNlZ21lbnREaXJlY3Rpb25zID0gbGF5b3V0SG9yaXpvbnRhbCA/ICdoOmgnIDogJ3Y6dic7XG4gIH0gZWxzZSB7XG4gICAgbGF5b3V0VHVybiA9IG5lZWRzVHVybihvcmllbnRhdGlvbiwgc3RhcnREaXJlY3Rpb24pO1xuXG4gICAgc2VnbWVudERpcmVjdGlvbnMgPSBsYXlvdXRIb3Jpem9udGFsID8gJ2g6dicgOiAndjpoJztcblxuICAgIGlmIChsYXlvdXRUdXJuKSB7XG5cbiAgICAgIGlmIChsYXlvdXRIb3Jpem9udGFsKSB7XG4gICAgICAgIHR1cm5OZXh0RGlyZWN0aW9ucyA9IHltaWQgPT09IGEueTtcblxuICAgICAgICBzZWdtZW50RW5kID0ge1xuICAgICAgICAgIHg6IGEueCArIE1JTl9TRUdNRU5UX0xFTkdUSCAqICgvbC8udGVzdChzdGFydERpcmVjdGlvbikgPyAtMSA6IDEpLFxuICAgICAgICAgIHk6IHR1cm5OZXh0RGlyZWN0aW9ucyA/IHltaWQgKyBNSU5fU0VHTUVOVF9MRU5HVEggOiB5bWlkXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0dXJuTmV4dERpcmVjdGlvbnMgPSB4bWlkID09PSBhLng7XG5cbiAgICAgICAgc2VnbWVudEVuZCA9IHtcbiAgICAgICAgICB4OiB0dXJuTmV4dERpcmVjdGlvbnMgPyB4bWlkICsgTUlOX1NFR01FTlRfTEVOR1RIIDogeG1pZCxcbiAgICAgICAgICB5OiBhLnkgKyBNSU5fU0VHTUVOVF9MRU5HVEggKiAoL3QvLnRlc3Qoc3RhcnREaXJlY3Rpb24pID8gLTEgOiAxKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRFbmQgPSB7XG4gICAgICAgIHg6IHhtaWQsXG4gICAgICAgIHk6IHltaWRcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3YXlwb2ludHM6IGdldEJlbmRwb2ludHMoYSwgc2VnbWVudEVuZCwgc2VnbWVudERpcmVjdGlvbnMpLmNvbmNhdChzZWdtZW50RW5kKSxcbiAgICBkaXJlY3Rpb25zOiAgc2VnbWVudERpcmVjdGlvbnMsXG4gICAgdHVybk5leHREaXJlY3Rpb25zOiB0dXJuTmV4dERpcmVjdGlvbnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnRTZWdtZW50KGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGdldFNlZ21lbnRCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBnZXRFbmRTZWdtZW50KGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgdmFyIGludmVydGVkU2VnbWVudCA9IGdldFNlZ21lbnRCZW5kcG9pbnRzKGIsIGEsIGludmVydERpcmVjdGlvbnMoZGlyZWN0aW9ucykpO1xuXG4gIHJldHVybiB7XG4gICAgd2F5cG9pbnRzOiBpbnZlcnRlZFNlZ21lbnQud2F5cG9pbnRzLnNsaWNlKCkucmV2ZXJzZSgpLFxuICAgIGRpcmVjdGlvbnM6IGludmVydERpcmVjdGlvbnMoaW52ZXJ0ZWRTZWdtZW50LmRpcmVjdGlvbnMpLFxuICAgIHR1cm5OZXh0RGlyZWN0aW9uczogaW52ZXJ0ZWRTZWdtZW50LnR1cm5OZXh0RGlyZWN0aW9uc1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNaWRTZWdtZW50KHN0YXJ0U2VnbWVudCwgZW5kU2VnbWVudCkge1xuXG4gIHZhciBzdGFydERpcmVjdGlvbiA9IHN0YXJ0U2VnbWVudC5kaXJlY3Rpb25zLnNwbGl0KCc6JylbMV0sXG4gICAgICBlbmREaXJlY3Rpb24gPSBlbmRTZWdtZW50LmRpcmVjdGlvbnMuc3BsaXQoJzonKVswXTtcblxuICBpZiAoc3RhcnRTZWdtZW50LnR1cm5OZXh0RGlyZWN0aW9ucykge1xuICAgIHN0YXJ0RGlyZWN0aW9uID0gc3RhcnREaXJlY3Rpb24gPT0gJ2gnID8gJ3YnIDogJ2gnO1xuICB9XG5cbiAgaWYgKGVuZFNlZ21lbnQudHVybk5leHREaXJlY3Rpb25zKSB7XG4gICAgZW5kRGlyZWN0aW9uID0gZW5kRGlyZWN0aW9uID09ICdoJyA/ICd2JyA6ICdoJztcbiAgfVxuXG4gIHZhciBkaXJlY3Rpb25zID0gc3RhcnREaXJlY3Rpb24gKyAnOicgKyBlbmREaXJlY3Rpb247XG5cbiAgdmFyIGJlbmRwb2ludHMgPSBnZXRCZW5kcG9pbnRzKFxuICAgIHN0YXJ0U2VnbWVudC53YXlwb2ludHNbc3RhcnRTZWdtZW50LndheXBvaW50cy5sZW5ndGggLSAxXSxcbiAgICBlbmRTZWdtZW50LndheXBvaW50c1swXSxcbiAgICBkaXJlY3Rpb25zXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB3YXlwb2ludHM6IGJlbmRwb2ludHMsXG4gICAgZGlyZWN0aW9uczogZGlyZWN0aW9uc1xuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZlcnREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMuc3BsaXQoJzonKS5yZXZlcnNlKCkuam9pbignOicpO1xufVxuXG4vKipcbiAqIEhhbmRsZSBzaW1wbGUgbGF5b3V0cyB3aXRoIG1heGltdW0gdHdvIGJlbmRwb2ludHMuXG4gKi9cbmZ1bmN0aW9uIGdldFNpbXBsZUJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuXG4gIHZhciB4bWlkID0gcm91bmQoKGIueCAtIGEueCkgLyAyICsgYS54KSxcbiAgICAgIHltaWQgPSByb3VuZCgoYi55IC0gYS55KSAvIDIgKyBhLnkpO1xuXG4gIC8vIG9uZSBwb2ludCwgcmlnaHQgb3IgbGVmdCBmcm9tIGFcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICdoOnYnKSB7XG4gICAgcmV0dXJuIFsgeyB4OiBiLngsIHk6IGEueSB9IF07XG4gIH1cblxuICAvLyBvbmUgcG9pbnQsIGFib3ZlIG9yIGJlbG93IGFcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICd2OmgnKSB7XG4gICAgcmV0dXJuIFsgeyB4OiBhLngsIHk6IGIueSB9IF07XG4gIH1cblxuICAvLyB2ZXJ0aWNhbCBzZWdtZW50IGJldHdlZW4gYSBhbmQgYlxuICBpZiAoZGlyZWN0aW9ucyA9PT0gJ2g6aCcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiB4bWlkLCB5OiBhLnkgfSxcbiAgICAgIHsgeDogeG1pZCwgeTogYi55IH1cbiAgICBdO1xuICB9XG5cbiAgLy8gaG9yaXpvbnRhbCBzZWdtZW50IGJldHdlZW4gYSBhbmQgYlxuICBpZiAoZGlyZWN0aW9ucyA9PT0gJ3Y6dicpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiBhLngsIHk6IHltaWQgfSxcbiAgICAgIHsgeDogYi54LCB5OiB5bWlkIH1cbiAgICBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRpcmVjdGlvbnM6IGNhbiBvbmx5IGhhbmRsZSB2YXJpYW5zIG9mIFtodl06W2h2XScpO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWlkIHBvaW50cyBmb3IgYSBtYW5oYXR0YW4gY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHMuXG4gKlxuICogQGV4YW1wbGUgaDpoIChob3Jpem9udGFsOmhvcml6b250YWwpXG4gKlxuICogW2FdLS0tLVt4XVxuICogICAgICAgICB8XG4gKiAgICAgICAgW3hdLS0tLVtiXVxuICpcbiAqIEBleGFtcGxlIGg6diAoaG9yaXpvbnRhbDp2ZXJ0aWNhbClcbiAqXG4gKiBbYV0tLS0tW3hdXG4gKiAgICAgICAgIHxcbiAqICAgICAgICBbYl1cbiAqXG4gKiBAZXhhbXBsZSBoOnIgKGhvcml6b250YWw6cmlnaHQpXG4gKlxuICogW2FdLS0tLVt4XVxuICogICAgICAgICB8XG4gKiAgICBbYl0tW3hdXG4gKlxuICogQHBhcmFtICB7UG9pbnR9IGFcbiAqIEBwYXJhbSAge1BvaW50fSBiXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGRpcmVjdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59XG4gKi9cbmZ1bmN0aW9uIGdldEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucyB8fCAnaDpoJztcblxuICBpZiAoIWlzVmFsaWREaXJlY3Rpb25zKGRpcmVjdGlvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3Vua25vd24gZGlyZWN0aW9uczogPCcgKyBkaXJlY3Rpb25zICsgJz46ICcgK1xuICAgICAgJ211c3QgYmUgc3BlY2lmaWVkIGFzIDxzdGFydD46PGVuZD4gJyArXG4gICAgICAnd2l0aCBzdGFydC9lbmQgaW4geyBoLHYsdCxyLGIsbCB9J1xuICAgICk7XG4gIH1cblxuICAvLyBjb21wdXRlIGV4cGxpY2l0IGRpcmVjdGlvbnMsIGludm9sdmluZyB0cmJsIGRvY2tpbmdzXG4gIC8vIHVzaW5nIGEgdGhyZWUgc2VnbWVudGVkIGxheW91dGluZyBhbGdvcml0aG1cbiAgaWYgKGlzRXhwbGljaXREaXJlY3Rpb25zKGRpcmVjdGlvbnMpKSB7XG4gICAgdmFyIHN0YXJ0U2VnbWVudCA9IGdldFN0YXJ0U2VnbWVudChhLCBiLCBkaXJlY3Rpb25zKSxcbiAgICAgICAgZW5kU2VnbWVudCA9IGdldEVuZFNlZ21lbnQoYSwgYiwgZGlyZWN0aW9ucyksXG4gICAgICAgIG1pZFNlZ21lbnQgPSBnZXRNaWRTZWdtZW50KHN0YXJ0U2VnbWVudCwgZW5kU2VnbWVudCk7XG5cbiAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgc3RhcnRTZWdtZW50LndheXBvaW50cyxcbiAgICAgIG1pZFNlZ21lbnQud2F5cG9pbnRzLFxuICAgICAgZW5kU2VnbWVudC53YXlwb2ludHNcbiAgICApO1xuICB9XG5cbiAgLy8gaGFuZGxlIHNpbXBsZSBbaHZdOltodl0gY2FzZXMgdGhhdCBjYW4gYmUgZWFzaWx5IGNvbXB1dGVkXG4gIHJldHVybiBnZXRTaW1wbGVCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBhY2NvcmRpbmdcbiAqIHRvIHRoZSBtYW5oYXR0YW4gbGF5b3V0IChvbmx5IGhvcml6b250YWwgYW5kIHZlcnRpY2FsKSBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBhXG4gKiBAcGFyYW0ge1BvaW50fSBiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtkaXJlY3Rpb25zPSdoOmgnXSBzcGVjaWZpZXMgbWFuaGF0dGFuIGRpcmVjdGlvbnMgZm9yIGVhY2ggcG9pbnQgYXMge2FkaXJlY3Rpb259OntiZGlyZWN0aW9ufS5cbiAgICAgICAgICAgICAgICAgICBBIGRpcmVjdGlvbmZvciBhIHBvaW50IGlzIGVpdGhlciBgaGAgKGhvcml6b250YWwpIG9yIGB2YCAodmVydGljYWwpXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdFBvaW50cyhhLCBiLCBkaXJlY3Rpb25zKSB7XG5cbiAgdmFyIHBvaW50cyA9IGdldEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucyk7XG5cbiAgcG9pbnRzLnVuc2hpZnQoYSk7XG4gIHBvaW50cy5wdXNoKGIpO1xuXG4gIHJldHVybiB3aXRob3V0UmVkdW5kYW50UG9pbnRzKHBvaW50cyk7XG59XG5cblxuLyoqXG4gKiBDb25uZWN0IHR3byByZWN0YW5nbGVzIHVzaW5nIGEgbWFuaGF0dGFuIGxheW91dGVkIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHNvdXJjZSBzb3VyY2UgcmVjdGFuZ2xlXG4gKiBAcGFyYW0ge0JvdW5kc30gdGFyZ2V0IHRhcmdldCByZWN0YW5nbGVcbiAqIEBwYXJhbSB7UG9pbnR9IFtzdGFydF0gc291cmNlIGRvY2tpbmdcbiAqIEBwYXJhbSB7UG9pbnR9IFtlbmRdIHRhcmdldCBkb2NraW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaGludHMucHJlc2VydmVEb2NraW5nPXNvdXJjZV0gcHJlc2VydmUgZG9ja2luZyBvbiBzZWxlY3RlZCBzaWRlXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtoaW50cy5wcmVmZXJyZWRMYXlvdXRzXVxuICogQHBhcmFtIHtQb2ludHxib29sZWFufSBbaGludHMuY29ubmVjdGlvblN0YXJ0XSB3aGV0aGVyIHRoZSBzdGFydCBjaGFuZ2VkXG4gKiBAcGFyYW0ge1BvaW50fGJvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uRW5kXSB3aGV0aGVyIHRoZSBlbmQgY2hhbmdlZFxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gY29ubmVjdGlvbiBwb2ludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RSZWN0YW5nbGVzKHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cykge1xuXG4gIHZhciBwcmVmZXJyZWRMYXlvdXRzID0gaGludHMgJiYgaGludHMucHJlZmVycmVkTGF5b3V0cyB8fCBbXTtcblxuICB2YXIgcHJlZmVycmVkTGF5b3V0ID0gd2l0aG91dChwcmVmZXJyZWRMYXlvdXRzLCAnc3RyYWlnaHQnKVswXSB8fCAnaDpoJztcblxuICB2YXIgdGhyZXNob2xkID0gT1JJRU5UQVRJT05fVEhSRVNIT0xEW3ByZWZlcnJlZExheW91dF0gfHwgMDtcblxuICB2YXIgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2UsIHRhcmdldCwgdGhyZXNob2xkKTtcblxuICB2YXIgZGlyZWN0aW9ucyA9IGdldERpcmVjdGlvbnMob3JpZW50YXRpb24sIHByZWZlcnJlZExheW91dCk7XG5cbiAgc3RhcnQgPSBzdGFydCB8fCBnZXRNaWQoc291cmNlKTtcbiAgZW5kID0gZW5kIHx8IGdldE1pZCh0YXJnZXQpO1xuXG4gIHZhciBkaXJlY3Rpb25TcGxpdCA9IGRpcmVjdGlvbnMuc3BsaXQoJzonKTtcblxuICAvLyBjb21wdXRlIGFjdHVhbCBkb2NraW5nIHBvaW50cyBmb3Igc3RhcnQgLyBlbmRcbiAgLy8gdGhpcyBlbnN1cmVzIHdlIHByb3Blcmx5IGxheW91dCBvbmx5IHBhcnRzIG9mIHRoZVxuICAvLyBjb25uZWN0aW9uIHRoYXQgbGllcyBpbiBiZXR3ZWVuIHRoZSB0d28gcmVjdGFuZ2xlc1xuICB2YXIgc3RhcnREb2NraW5nID0gZ2V0RG9ja2luZ1BvaW50KHN0YXJ0LCBzb3VyY2UsIGRpcmVjdGlvblNwbGl0WzBdLCBpbnZlcnRPcmllbnRhdGlvbihvcmllbnRhdGlvbikpLFxuICAgICAgZW5kRG9ja2luZyA9IGdldERvY2tpbmdQb2ludChlbmQsIHRhcmdldCwgZGlyZWN0aW9uU3BsaXRbMV0sIG9yaWVudGF0aW9uKTtcblxuICByZXR1cm4gY29ubmVjdFBvaW50cyhzdGFydERvY2tpbmcsIGVuZERvY2tpbmcsIGRpcmVjdGlvbnMpO1xufVxuXG5cbi8qKlxuICogUmVwYWlyIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdHdvIHJlY3RhbmdsZXMsIG9mIHdoaWNoIG9uZSBoYXMgYmVlbiB1cGRhdGVkLlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBzb3VyY2VcbiAqIEBwYXJhbSB7Qm91bmRzfSB0YXJnZXRcbiAqIEBwYXJhbSB7UG9pbnR9IFtzdGFydF1cbiAqIEBwYXJhbSB7UG9pbnR9IFtlbmRdXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gW3dheXBvaW50c11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtoaW50cy5wcmVmZXJyZWRMYXlvdXRzXSBsaXN0IG9mIHByZWZlcnJlZCBsYXlvdXRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uU3RhcnRdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uRW5kXVxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gcmVwYWlyZWQgd2F5cG9pbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBhaXJDb25uZWN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCB3YXlwb2ludHMsIGhpbnRzKSB7XG5cbiAgaWYgKGlzQXJyYXkoc3RhcnQpKSB7XG4gICAgd2F5cG9pbnRzID0gc3RhcnQ7XG4gICAgaGludHMgPSBlbmQ7XG5cbiAgICBzdGFydCA9IGdldE1pZChzb3VyY2UpO1xuICAgIGVuZCA9IGdldE1pZCh0YXJnZXQpO1xuICB9XG5cbiAgaGludHMgPSBhc3NpZ24oeyBwcmVmZXJyZWRMYXlvdXRzOiBbXSB9LCBoaW50cyk7XG4gIHdheXBvaW50cyA9IHdheXBvaW50cyB8fCBbXTtcblxuICB2YXIgcHJlZmVycmVkTGF5b3V0cyA9IGhpbnRzLnByZWZlcnJlZExheW91dHMsXG4gICAgICBwcmVmZXJTdHJhaWdodCA9IHByZWZlcnJlZExheW91dHMuaW5kZXhPZignc3RyYWlnaHQnKSAhPT0gLTEsXG4gICAgICByZXBhaXJlZFdheXBvaW50cztcblxuICAvLyBqdXN0IGxheW91dCBub24tZXhpc3Rpbmcgb3Igc2ltcGxlIGNvbm5lY3Rpb25zXG4gIC8vIGF0dGVtcHQgdG8gcmVuZGVyIHN0cmFpZ2h0IGxpbmVzLCBpZiByZXF1aXJlZFxuXG4gIC8vIGF0dGVtcHQgdG8gbGF5b3V0IGEgc3RyYWlnaHQgbGluZVxuICByZXBhaXJlZFdheXBvaW50cyA9IHByZWZlclN0cmFpZ2h0ICYmIHRyeUxheW91dFN0cmFpZ2h0KHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cyk7XG5cbiAgaWYgKHJlcGFpcmVkV2F5cG9pbnRzKSB7XG4gICAgcmV0dXJuIHJlcGFpcmVkV2F5cG9pbnRzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGxheW91dCBmcm9tIGVuZFxuICByZXBhaXJlZFdheXBvaW50cyA9IGhpbnRzLmNvbm5lY3Rpb25FbmQgJiYgdHJ5UmVwYWlyQ29ubmVjdGlvbkVuZCh0YXJnZXQsIHNvdXJjZSwgZW5kLCB3YXlwb2ludHMpO1xuXG4gIGlmIChyZXBhaXJlZFdheXBvaW50cykge1xuICAgIHJldHVybiByZXBhaXJlZFdheXBvaW50cztcbiAgfVxuXG4gIC8vIHRyeSB0byBsYXlvdXQgZnJvbSBzdGFydFxuICByZXBhaXJlZFdheXBvaW50cyA9IGhpbnRzLmNvbm5lY3Rpb25TdGFydCAmJiB0cnlSZXBhaXJDb25uZWN0aW9uU3RhcnQoc291cmNlLCB0YXJnZXQsIHN0YXJ0LCB3YXlwb2ludHMpO1xuXG4gIGlmIChyZXBhaXJlZFdheXBvaW50cykge1xuICAgIHJldHVybiByZXBhaXJlZFdheXBvaW50cztcbiAgfVxuXG4gIC8vIG9yIHdoZXRoZXIgbm90aGluZyBzZWVtcyB0byBoYXZlIGNoYW5nZWRcbiAgaWYgKCFoaW50cy5jb25uZWN0aW9uU3RhcnQgJiYgIWhpbnRzLmNvbm5lY3Rpb25FbmQgJiYgd2F5cG9pbnRzICYmIHdheXBvaW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzO1xuICB9XG5cbiAgLy8gc2ltcGx5IHJlY29ubmVjdCBpZiBub3RoaW5nIGVsc2Ugd29ya2VkXG4gIHJldHVybiBjb25uZWN0UmVjdGFuZ2xlcyhzb3VyY2UsIHRhcmdldCwgc3RhcnQsIGVuZCwgaGludHMpO1xufVxuXG5cbmZ1bmN0aW9uIGluUmFuZ2UoYSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gYSA+PSBzdGFydCAmJiBhIDw9IGVuZDtcbn1cblxuZnVuY3Rpb24gaXNJblJhbmdlKGF4aXMsIGEsIGIpIHtcbiAgdmFyIHNpemUgPSB7XG4gICAgeDogJ3dpZHRoJyxcbiAgICB5OiAnaGVpZ2h0J1xuICB9O1xuXG4gIHJldHVybiBpblJhbmdlKGFbYXhpc10sIGJbYXhpc10sIGJbYXhpc10gKyBiW3NpemVbYXhpc11dKTtcbn1cblxuLyoqXG4gKiBMYXlvdXQgYSBzdHJhaWdodCBjb25uZWN0aW9uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHNvdXJjZVxuICogQHBhcmFtIHtCb3VuZHN9IHRhcmdldFxuICogQHBhcmFtIHtQb2ludH0gc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IGVuZFxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD58bnVsbH0gd2F5cG9pbnRzIGlmIHN0cmFpZ2h0IGxheW91dCB3b3JrZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeUxheW91dFN0cmFpZ2h0KHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cykge1xuICB2YXIgYXhpcyA9IHt9LFxuICAgICAgcHJpbWFyeUF4aXMsXG4gICAgICBvcmllbnRhdGlvbjtcblxuICBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHNvdXJjZSwgdGFyZ2V0KTtcblxuICAvLyBvbmx5IGxheW91dCBhIHN0cmFpZ2h0IGNvbm5lY3Rpb24gaWYgc2hhcGVzIGFyZVxuICAvLyBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBhbGlnbmVkXG4gIGlmICghL14odG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSQvLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoL3RvcHxib3R0b20vLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcHJpbWFyeUF4aXMgPSAneCc7XG4gIH1cblxuICBpZiAoL2xlZnR8cmlnaHQvLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcHJpbWFyeUF4aXMgPSAneSc7XG4gIH1cblxuICBpZiAoaGludHMucHJlc2VydmVEb2NraW5nID09PSAndGFyZ2V0Jykge1xuXG4gICAgaWYgKCFpc0luUmFuZ2UocHJpbWFyeUF4aXMsIGVuZCwgc291cmNlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXhpc1twcmltYXJ5QXhpc10gPSBlbmRbcHJpbWFyeUF4aXNdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBzdGFydC54LFxuICAgICAgICB5OiBheGlzLnkgIT09IHVuZGVmaW5lZCA/IGF4aXMueSA6IHN0YXJ0LnksXG4gICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBzdGFydC54LFxuICAgICAgICAgIHk6IGF4aXMueSAhPT0gdW5kZWZpbmVkID8gYXhpcy55IDogc3RhcnQueVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBlbmQueCxcbiAgICAgICAgeTogZW5kLnlcbiAgICAgIH1cbiAgICBdO1xuXG4gIH0gZWxzZSB7XG5cbiAgICBpZiAoIWlzSW5SYW5nZShwcmltYXJ5QXhpcywgc3RhcnQsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGF4aXNbcHJpbWFyeUF4aXNdID0gc3RhcnRbcHJpbWFyeUF4aXNdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgeDogc3RhcnQueCxcbiAgICAgICAgeTogc3RhcnQueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBlbmQueCxcbiAgICAgICAgeTogYXhpcy55ICE9PSB1bmRlZmluZWQgPyBheGlzLnkgOiBlbmQueSxcbiAgICAgICAgb3JpZ2luYWw6IHtcbiAgICAgICAgICB4OiBheGlzLnggIT09IHVuZGVmaW5lZCA/IGF4aXMueCA6IGVuZC54LFxuICAgICAgICAgIHk6IGF4aXMueSAhPT0gdW5kZWZpbmVkID8gYXhpcy55IDogZW5kLnlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH1cblxufVxuXG4vKipcbiAqIFJlcGFpciBhIGNvbm5lY3Rpb24gZnJvbSBzdGFydC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gbW92ZWRcbiAqIEBwYXJhbSB7Qm91bmRzfSBvdGhlclxuICogQHBhcmFtIHtQb2ludH0gbmV3RG9ja2luZ1xuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHBvaW50cyBvcmlnaW5hbFBvaW50cyBmcm9tIG1vdmVkIHRvIG90aGVyXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fG51bGx9IHRoZSByZXBhaXJlZCBwb2ludHMgYmV0d2VlbiB0aGUgdHdvIHJlY3RhbmdsZXNcbiAqL1xuZnVuY3Rpb24gdHJ5UmVwYWlyQ29ubmVjdGlvblN0YXJ0KG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgcG9pbnRzKSB7XG4gIHJldHVybiBfdHJ5UmVwYWlyQ29ubmVjdGlvblNpZGUobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCBwb2ludHMpO1xufVxuXG4vKipcbiAqIFJlcGFpciBhIGNvbm5lY3Rpb24gZnJvbSBlbmQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG1vdmVkXG4gKiBAcGFyYW0ge0JvdW5kc30gb3RoZXJcbiAqIEBwYXJhbSB7UG9pbnR9IG5ld0RvY2tpbmdcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMgb3JpZ2luYWxQb2ludHMgZnJvbSBtb3ZlZCB0byBvdGhlclxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50PnxudWxsfSB0aGUgcmVwYWlyZWQgcG9pbnRzIGJldHdlZW4gdGhlIHR3byByZWN0YW5nbGVzXG4gKi9cbmZ1bmN0aW9uIHRyeVJlcGFpckNvbm5lY3Rpb25FbmQobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCBwb2ludHMpIHtcbiAgdmFyIHdheXBvaW50cyA9IHBvaW50cy5zbGljZSgpLnJldmVyc2UoKTtcblxuICB3YXlwb2ludHMgPSBfdHJ5UmVwYWlyQ29ubmVjdGlvblNpZGUobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCB3YXlwb2ludHMpO1xuXG4gIHJldHVybiB3YXlwb2ludHMgPyB3YXlwb2ludHMucmV2ZXJzZSgpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYSBjb25uZWN0aW9uIGZyb20gb25lIHNpZGUgdGhhdCBtb3ZlZC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gbW92ZWRcbiAqIEBwYXJhbSB7Qm91bmRzfSBvdGhlclxuICogQHBhcmFtIHtQb2ludH0gbmV3RG9ja2luZ1xuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHBvaW50cyBvcmlnaW5hbFBvaW50cyBmcm9tIG1vdmVkIHRvIG90aGVyXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fSB0aGUgcmVwYWlyZWQgcG9pbnRzIGJldHdlZW4gdGhlIHR3byByZWN0YW5nbGVzXG4gKi9cbmZ1bmN0aW9uIF90cnlSZXBhaXJDb25uZWN0aW9uU2lkZShtb3ZlZCwgb3RoZXIsIG5ld0RvY2tpbmcsIHBvaW50cykge1xuXG4gIGZ1bmN0aW9uIG5lZWRzUmVsYXlvdXQocG9pbnRzKSB7XG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZWxheW91dCBpZiB0d28gcG9pbnRzIG92ZXJsYXBcbiAgICAvLyB0aGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0b1xuICAgIHJldHVybiAhIWZpbmQocG9pbnRzLCBmdW5jdGlvbihwLCBpZHgpIHtcbiAgICAgIHZhciBxID0gcG9pbnRzW2lkeCAtIDFdO1xuXG4gICAgICByZXR1cm4gcSAmJiBwb2ludERpc3RhbmNlKHAsIHEpIDwgMztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGFpckJlbmRwb2ludChjYW5kaWRhdGUsIG9sZFBlZXIsIG5ld1BlZXIpIHtcblxuICAgIHZhciBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKG9sZFBlZXIsIGNhbmRpZGF0ZSk7XG5cbiAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgIGNhc2UgJ3YnOlxuXG4gICAgICAvLyByZXBhaXIgaG9yaXpvbnRhbCBhbGlnbm1lbnRcbiAgICAgIHJldHVybiB7IHg6IG5ld1BlZXIueCwgeTogY2FuZGlkYXRlLnkgfTtcbiAgICBjYXNlICdoJzpcblxuICAgICAgLy8gcmVwYWlyIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgcmV0dXJuIHsgeDogY2FuZGlkYXRlLngsIHk6IG5ld1BlZXIueSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHg6IGNhbmRpZGF0ZS54LCB5OiBjYW5kaWRhdGUuIHkgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU92ZXJsYXBwaW5nKHBvaW50cywgYSwgYikge1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gcG9pbnRzLmxlbmd0aCAtIDI7IGkgIT09IDA7IGktLSkge1xuXG4gICAgICAvLyBpbnRlcnNlY3RzICg/KSBicmVhaywgcmVtb3ZlIGFsbCBiZW5kcG9pbnRzIHVwIHRvIHRoaXMgb25lIGFuZCByZWxheW91dFxuICAgICAgaWYgKHBvaW50SW5SZWN0KHBvaW50c1tpXSwgYSwgSU5URVJTRUNUSU9OX1RIUkVTSE9MRCkgfHxcbiAgICAgICAgICBwb2ludEluUmVjdChwb2ludHNbaV0sIGIsIElOVEVSU0VDVElPTl9USFJFU0hPTEQpKSB7XG5cbiAgICAgICAgLy8gcmV0dXJuIHNsaWNlZCBvbGQgY29ubmVjdGlvblxuICAgICAgICByZXR1cm4gcG9pbnRzLnNsaWNlKGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG4gIH1cblxuICAvLyAoMCkgb25seSByZXBhaXIgd2hhdCBoYXMgbGF5b3V0YWJsZSBiZW5kcG9pbnRzXG5cbiAgLy8gKDEpIGlmIG9ubHkgb25lIGJlbmRwb2ludCBhbmQgb24gc2hhcGUgbW92ZWQgb250byBvdGhlciBzaGFwZXMgYXhpc1xuICAvLyAgICAgKGhvcml6b250YWxseSAvIHZlcnRpY2FsbHkpLCByZWxheW91dFxuXG4gIGlmIChuZWVkc1JlbGF5b3V0KHBvaW50cykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvbGREb2NraW5nID0gcG9pbnRzWzBdLFxuICAgICAgbmV3UG9pbnRzID0gcG9pbnRzLnNsaWNlKCksXG4gICAgICBzbGljZWRQb2ludHM7XG5cbiAgLy8gKDIpIHJlcGFpciBvbmx5IGxhc3QgbGluZSBzZWdtZW50IGFuZCBvbmx5IGlmIGl0IHdhcyBsYXlvdXRlZCBiZWZvcmVcblxuICBuZXdQb2ludHNbMF0gPSBuZXdEb2NraW5nO1xuICBuZXdQb2ludHNbMV0gPSByZXBhaXJCZW5kcG9pbnQobmV3UG9pbnRzWzFdLCBvbGREb2NraW5nLCBuZXdEb2NraW5nKTtcblxuXG4gIC8vICgzKSBpZiBzaGFwZSBpbnRlcnNlY3RzIHdpdGggYW55IGJlbmRwb2ludCBhZnRlciByZXBhaXIsXG4gIC8vICAgICByZW1vdmUgYWxsIHNlZ21lbnRzIHVwIHRvIHRoaXMgYmVuZHBvaW50IGFuZCByZXBhaXIgZnJvbSB0aGVyZVxuICBzbGljZWRQb2ludHMgPSByZW1vdmVPdmVybGFwcGluZyhuZXdQb2ludHMsIG1vdmVkLCBvdGhlcik7XG5cbiAgaWYgKHNsaWNlZFBvaW50cyAhPT0gbmV3UG9pbnRzKSB7XG4gICAgbmV3UG9pbnRzID0gX3RyeVJlcGFpckNvbm5lY3Rpb25TaWRlKG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgc2xpY2VkUG9pbnRzKTtcbiAgfVxuXG4gIC8vICg0KSBkbyBOT1QgcmVwYWlyIGlmIHJlcGFpcmVkIGJlbmRwb2ludHMgYXJlIGFsaWduZWRcbiAgaWYgKG5ld1BvaW50cyAmJiBwb2ludHNBbGlnbmVkKG5ld1BvaW50cykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQb2ludHM7XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYW5oYXR0YW4gZGlyZWN0aW9ucyBjb25uZWN0aW5nIHR3byByZWN0YW5nbGVzXG4gKiB3aXRoIHRoZSBnaXZlbiBvcmllbnRhdGlvbi5cbiAqXG4gKiBXaWxsIGFsd2F5cyByZXR1cm4gdGhlIGRlZmF1bHQgbGF5b3V0LCBpZiBpdCBpcyBzcGVjaWZpY1xuICogcmVnYXJkaW5nIHNpZGVzIGFscmVhZHkgKHRyYmwpLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogZ2V0RGlyZWN0aW9ucygndG9wJyk7IC8vIC0+ICd2OnYnXG4gKiBnZXREaXJlY3Rpb25zKCdpbnRlcnNlY3QnKTsgLy8gLT4gJ3Q6dCdcbiAqXG4gKiBnZXREaXJlY3Rpb25zKCd0b3AtcmlnaHQnLCAndjpoJyk7IC8vIC0+ICd2OmgnXG4gKiBnZXREaXJlY3Rpb25zKCd0b3AtcmlnaHQnLCAnaDpoJyk7IC8vIC0+ICdoOmgnXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmllbnRhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRMYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGlvbnMob3JpZW50YXRpb24sIGRlZmF1bHRMYXlvdXQpIHtcblxuICAvLyBkb24ndCBvdmVycmlkZSBzcGVjaWZpYyB0cmJsIGRpcmVjdGlvbnNcbiAgaWYgKGlzRXhwbGljaXREaXJlY3Rpb25zKGRlZmF1bHRMYXlvdXQpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMYXlvdXQ7XG4gIH1cblxuICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gIGNhc2UgJ2ludGVyc2VjdCc6XG4gICAgcmV0dXJuICd0OnQnO1xuXG4gIGNhc2UgJ3RvcCc6XG4gIGNhc2UgJ2JvdHRvbSc6XG4gICAgcmV0dXJuICd2OnYnO1xuXG4gIGNhc2UgJ2xlZnQnOlxuICBjYXNlICdyaWdodCc6XG4gICAgcmV0dXJuICdoOmgnO1xuXG4gIC8vICd0b3AtbGVmdCdcbiAgLy8gJ3RvcC1yaWdodCdcbiAgLy8gJ2JvdHRvbS1sZWZ0J1xuICAvLyAnYm90dG9tLXJpZ2h0J1xuICBkZWZhdWx0OlxuICAgIHJldHVybiBkZWZhdWx0TGF5b3V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMgJiYgL15ofHZ8dHxyfGJ8bDpofHZ8dHxyfGJ8bCQvLnRlc3QoZGlyZWN0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljaXREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMgJiYgL3R8cnxifGwvLnRlc3QoZGlyZWN0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGludmVydE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHJldHVybiB7XG4gICAgJ3RvcCc6ICdib3R0b20nLFxuICAgICdib3R0b20nOiAndG9wJyxcbiAgICAnbGVmdCc6ICdyaWdodCcsXG4gICAgJ3JpZ2h0JzogJ2xlZnQnLFxuICAgICd0b3AtbGVmdCc6ICdib3R0b20tcmlnaHQnLFxuICAgICdib3R0b20tcmlnaHQnOiAndG9wLWxlZnQnLFxuICAgICd0b3AtcmlnaHQnOiAnYm90dG9tLWxlZnQnLFxuICAgICdib3R0b20tbGVmdCc6ICd0b3AtcmlnaHQnLFxuICB9W29yaWVudGF0aW9uXTtcbn1cblxuZnVuY3Rpb24gZ2V0RG9ja2luZ1BvaW50KHBvaW50LCByZWN0YW5nbGUsIGRvY2tpbmdEaXJlY3Rpb24sIHRhcmdldE9yaWVudGF0aW9uKSB7XG5cbiAgLy8gZW5zdXJlIHdlIGVuZCB1cCB3aXRoIGEgc3BlY2lmaWMgZG9ja2luZyBkaXJlY3Rpb25cbiAgLy8gYmFzZWQgb24gdGhlIHRhcmdldE9yaWVudGF0aW9uLCBpZiA8aHx2PiBpcyBiZWluZyBwYXNzZWRcblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ2gnKSB7XG4gICAgZG9ja2luZ0RpcmVjdGlvbiA9IC9sZWZ0Ly50ZXN0KHRhcmdldE9yaWVudGF0aW9uKSA/ICdsJyA6ICdyJztcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAndicpIHtcbiAgICBkb2NraW5nRGlyZWN0aW9uID0gL3RvcC8udGVzdCh0YXJnZXRPcmllbnRhdGlvbikgPyAndCcgOiAnYic7XG4gIH1cblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ3QnKSB7XG4gICAgcmV0dXJuIHsgb3JpZ2luYWw6IHBvaW50LCB4OiBwb2ludC54LCB5OiByZWN0YW5nbGUueSB9O1xuICB9XG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICdyJykge1xuICAgIHJldHVybiB7IG9yaWdpbmFsOiBwb2ludCwgeDogcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHk6IHBvaW50LnkgfTtcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAnYicpIHtcbiAgICByZXR1cm4geyBvcmlnaW5hbDogcG9pbnQsIHg6IHBvaW50LngsIHk6IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCB9O1xuICB9XG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICdsJykge1xuICAgIHJldHVybiB7IG9yaWdpbmFsOiBwb2ludCwgeDogcmVjdGFuZ2xlLngsIHk6IHBvaW50LnkgfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBkb2NraW5nRGlyZWN0aW9uOiA8JyArIGRvY2tpbmdEaXJlY3Rpb24gKyAnPicpO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIGxpc3Qgb2Ygd2F5cG9pbnRzIHdpdGggcmVkdW5kYW50IG9uZXMgZmlsdGVyZWQgb3V0LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogT3JpZ2luYWwgcG9pbnRzOlxuICpcbiAqICAgW3hdIC0tLS0tIFt4XSAtLS0tLS0gW3hdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFt4XSAtLS0tLSBbeF0gLSBbeF1cbiAqXG4gKiBGaWx0ZXJlZDpcbiAqXG4gKiAgIFt4XSAtLS0tLS0tLS0tLS0tLS0tIFt4XVxuICogICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICBbeF0gLS0tLS0tLS0tLS0gW3hdXG4gKlxuICogQHBhcmFtICB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0UmVkdW5kYW50UG9pbnRzKHdheXBvaW50cykge1xuICByZXR1cm4gd2F5cG9pbnRzLnJlZHVjZShmdW5jdGlvbihwb2ludHMsIHAsIGlkeCkge1xuXG4gICAgdmFyIHByZXZpb3VzID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSxcbiAgICAgICAgbmV4dCA9IHdheXBvaW50c1tpZHggKyAxXTtcblxuICAgIGlmICghcG9pbnRzT25MaW5lKHByZXZpb3VzLCBuZXh0LCBwLCAwKSkge1xuICAgICAgcG9pbnRzLnB1c2gocCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbiAgfSwgW10pO1xufVxuIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IFJlZnMgZnJvbSAnb2JqZWN0LXJlZnMnO1xuXG52YXIgcGFyZW50UmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2NoaWxkcmVuJywgZW51bWVyYWJsZTogdHJ1ZSwgY29sbGVjdGlvbjogdHJ1ZSB9LCB7IG5hbWU6ICdwYXJlbnQnIH0pLFxuICAgIGxhYmVsUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2xhYmVscycsIGVudW1lcmFibGU6IHRydWUsIGNvbGxlY3Rpb246IHRydWUgfSwgeyBuYW1lOiAnbGFiZWxUYXJnZXQnIH0pLFxuICAgIGF0dGFjaGVyUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2F0dGFjaGVycycsIGNvbGxlY3Rpb246IHRydWUgfSwgeyBuYW1lOiAnaG9zdCcgfSksXG4gICAgb3V0Z29pbmdSZWZzID0gbmV3IFJlZnMoeyBuYW1lOiAnb3V0Z29pbmcnLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ3NvdXJjZScgfSksXG4gICAgaW5jb21pbmdSZWZzID0gbmV3IFJlZnMoeyBuYW1lOiAnaW5jb21pbmcnLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ3RhcmdldCcgfSk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBkanMubW9kZWxcbiAqL1xuXG4vKipcbiAqIEBtZW1iZXJPZiBkanMubW9kZWxcbiAqL1xuXG4vKipcbiAqIFRoZSBiYXNpYyBncmFwaGljYWwgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAY2xhc3NcbiAqXG4gKiBAYWJzdHJhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2UoKSB7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdGhhdCBiYWNrcyB1cCB0aGUgc2hhcGVcbiAgICpcbiAgICogQG5hbWUgQmFzZSNidXNpbmVzc09iamVjdFxuICAgKiBAdHlwZSBPYmplY3RcbiAgICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYnVzaW5lc3NPYmplY3QnLCB7XG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG5cblxuICAvKipcbiAgICogU2luZ2xlIGxhYmVsIHN1cHBvcnQsIHdpbGwgbWFwcGVkIHRvIG11bHRpIGxhYmVsIGFycmF5XG4gICAqXG4gICAqIEBuYW1lIEJhc2UjbGFiZWxcbiAgICogQHR5cGUgT2JqZWN0XG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2xhYmVsJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbHNbMF07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKG5ld0xhYmVsKSB7XG5cbiAgICAgIHZhciBsYWJlbCA9IHRoaXMubGFiZWwsXG4gICAgICAgICAgbGFiZWxzID0gdGhpcy5sYWJlbHM7XG5cbiAgICAgIGlmICghbmV3TGFiZWwgJiYgbGFiZWwpIHtcbiAgICAgICAgbGFiZWxzLnJlbW92ZShsYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbHMuYWRkKG5ld0xhYmVsLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHNoYXBlXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjcGFyZW50XG4gICAqIEB0eXBlIFNoYXBlXG4gICAqL1xuICBwYXJlbnRSZWZzLmJpbmQodGhpcywgJ3BhcmVudCcpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBsYWJlbHNcbiAgICpcbiAgICogQG5hbWUgQmFzZSNsYWJlbHNcbiAgICogQHR5cGUgTGFiZWxcbiAgICovXG4gIGxhYmVsUmVmcy5iaW5kKHRoaXMsICdsYWJlbHMnKTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnNcbiAgICpcbiAgICogQG5hbWUgQmFzZSNvdXRnb2luZ1xuICAgKiBAdHlwZSBBcnJheTxDb25uZWN0aW9uPlxuICAgKi9cbiAgb3V0Z29pbmdSZWZzLmJpbmQodGhpcywgJ291dGdvaW5nJyk7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGluY29taW5nIGNvbm5lY3Rpb25zXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjaW5jb21pbmdcbiAgICogQHR5cGUgQXJyYXk8Q29ubmVjdGlvbj5cbiAgICovXG4gIGluY29taW5nUmVmcy5iaW5kKHRoaXMsICdpbmNvbWluZycpO1xufVxuXG5cbi8qKlxuICogQSBncmFwaGljYWwgb2JqZWN0XG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgQmFzZS5jYWxsKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgZnJhbWUgc2hhcGVzXG4gICAqXG4gICAqIEBuYW1lIFNoYXBlI2lzRnJhbWVcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgY2hpbGRyZW5cbiAgICpcbiAgICogQG5hbWUgU2hhcGUjY2hpbGRyZW5cbiAgICogQHR5cGUgQXJyYXk8QmFzZT5cbiAgICovXG4gIHBhcmVudFJlZnMuYmluZCh0aGlzLCAnY2hpbGRyZW4nKTtcblxuICAvKipcbiAgICogQG5hbWUgU2hhcGUjaG9zdFxuICAgKiBAdHlwZSBTaGFwZVxuICAgKi9cbiAgYXR0YWNoZXJSZWZzLmJpbmQodGhpcywgJ2hvc3QnKTtcblxuICAvKipcbiAgICogQG5hbWUgU2hhcGUjYXR0YWNoZXJzXG4gICAqIEB0eXBlIFNoYXBlXG4gICAqL1xuICBhdHRhY2hlclJlZnMuYmluZCh0aGlzLCAnYXR0YWNoZXJzJyk7XG59XG5cbmluaGVyaXRzKFNoYXBlLCBCYXNlKTtcblxuXG4vKipcbiAqIEEgcm9vdCBncmFwaGljYWwgb2JqZWN0XG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBTaGFwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gUm9vdCgpIHtcbiAgU2hhcGUuY2FsbCh0aGlzKTtcbn1cblxuaW5oZXJpdHMoUm9vdCwgU2hhcGUpO1xuXG5cbi8qKlxuICogQSBsYWJlbCBmb3IgYW4gZWxlbWVudFxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGV4dGVuZHMgU2hhcGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExhYmVsKCkge1xuICBTaGFwZS5jYWxsKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWxlZCBlbGVtZW50XG4gICAqXG4gICAqIEBuYW1lIExhYmVsI2xhYmVsVGFyZ2V0XG4gICAqIEB0eXBlIEJhc2VcbiAgICovXG4gIGxhYmVsUmVmcy5iaW5kKHRoaXMsICdsYWJlbFRhcmdldCcpO1xufVxuXG5pbmhlcml0cyhMYWJlbCwgU2hhcGUpO1xuXG5cbi8qKlxuICogQSBjb25uZWN0aW9uIGJldHdlZW4gdHdvIGVsZW1lbnRzXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0aW9uKCkge1xuICBCYXNlLmNhbGwodGhpcyk7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoaXMgY29ubmVjdGlvbiBvcmlnaW5hdGVzIGZyb21cbiAgICpcbiAgICogQG5hbWUgQ29ubmVjdGlvbiNzb3VyY2VcbiAgICogQHR5cGUgQmFzZVxuICAgKi9cbiAgb3V0Z29pbmdSZWZzLmJpbmQodGhpcywgJ3NvdXJjZScpO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGlzIGNvbm5lY3Rpb24gcG9pbnRzIHRvXG4gICAqXG4gICAqIEBuYW1lIENvbm5lY3Rpb24jdGFyZ2V0XG4gICAqIEB0eXBlIEJhc2VcbiAgICovXG4gIGluY29taW5nUmVmcy5iaW5kKHRoaXMsICd0YXJnZXQnKTtcbn1cblxuaW5oZXJpdHMoQ29ubmVjdGlvbiwgQmFzZSk7XG5cblxudmFyIHR5cGVzID0ge1xuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uLFxuICBzaGFwZTogU2hhcGUsXG4gIGxhYmVsOiBMYWJlbCxcbiAgcm9vdDogUm9vdFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1vZGVsIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKlxuICogQG1ldGhvZCBjcmVhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBzaGFwZTEgPSBNb2RlbC5jcmVhdGUoJ3NoYXBlJywgeyB4OiAxMCwgeTogMTAsIHdpZHRoOiAxMDAsIGhlaWdodDogMTAwIH0pO1xuICogdmFyIHNoYXBlMiA9IE1vZGVsLmNyZWF0ZSgnc2hhcGUnLCB7IHg6IDIxMCwgeTogMjEwLCB3aWR0aDogMTAwLCBoZWlnaHQ6IDEwMCB9KTtcbiAqXG4gKiB2YXIgY29ubmVjdGlvbiA9IE1vZGVsLmNyZWF0ZSgnY29ubmVjdGlvbicsIHsgd2F5cG9pbnRzOiBbIHsgeDogMTEwLCB5OiA1NSB9LCB7eDogMjEwLCB5OiA1NSB9IF0gfSk7XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxvd2VyLWNhc2VkIG1vZGVsIG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMgYXR0cmlidXRlcyB0byBpbml0aWFsaXplIHRoZSBuZXcgbW9kZWwgaW5zdGFuY2Ugd2l0aFxuICpcbiAqIEByZXR1cm4ge0Jhc2V9IHRoZSBuZXcgbW9kZWwgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSh0eXBlLCBhdHRycykge1xuICB2YXIgVHlwZSA9IHR5cGVzW3R5cGVdO1xuICBpZiAoIVR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdHlwZTogPCcgKyB0eXBlICsgJz4nKTtcbiAgfVxuICByZXR1cm4gYXNzaWduKG5ldyBUeXBlKCksIGF0dHJzKTtcbn0iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICBtb3ZlU3BlZWQ6IDUwLFxuICBtb3ZlU3BlZWRBY2NlbGVyYXRlZDogMjAwXG59O1xuXG5cbi8qKlxuICogQSBmZWF0dXJlIHRoYXQgYWxsb3dzIHVzZXJzIHRvIG1vdmUgdGhlIGNhbnZhcyB1c2luZyB0aGUga2V5Ym9hcmQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkPTUwXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkQWNjZWxlcmF0ZWQ9MjAwXVxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmRNb3ZlKFxuICAgIGNvbmZpZyxcbiAgICBrZXlib2FyZCxcbiAgICBjYW52YXNcbikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9jb25maWcgPSBhc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuXG4gIGtleWJvYXJkLmFkZExpc3RlbmVyKGFycm93c0xpc3RlbmVyKTtcblxuXG4gIGZ1bmN0aW9uIGFycm93c0xpc3RlbmVyKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQsXG4gICAgICAgIGNvbmZpZyA9IHNlbGYuX2NvbmZpZztcblxuICAgIGlmICgha2V5Ym9hcmQuaXNDbWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFtcbiAgICAgICdBcnJvd0xlZnQnLCAnTGVmdCcsXG4gICAgICAnQXJyb3dVcCcsICdVcCcsXG4gICAgICAnQXJyb3dEb3duJywgJ0Rvd24nLFxuICAgICAgJ0Fycm93UmlnaHQnLCAnUmlnaHQnXG4gICAgXSwgZXZlbnQpKSB7XG5cbiAgICAgIHZhciBzcGVlZCA9IChcbiAgICAgICAga2V5Ym9hcmQuaXNTaGlmdChldmVudCkgP1xuICAgICAgICAgIGNvbmZpZy5tb3ZlU3BlZWRBY2NlbGVyYXRlZCA6XG4gICAgICAgICAgY29uZmlnLm1vdmVTcGVlZFxuICAgICAgKTtcblxuICAgICAgdmFyIGRpcmVjdGlvbjtcblxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICBjYXNlICdMZWZ0JzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ2xlZnQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnVXAnOlxuICAgICAgICBkaXJlY3Rpb24gPSAndXAnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnUmlnaHQnOlxuICAgICAgICBkaXJlY3Rpb24gPSAncmlnaHQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdEb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ2Rvd24nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc2VsZi5tb3ZlQ2FudmFzKHtcbiAgICAgICAgc3BlZWQ6IHNwZWVkLFxuICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMubW92ZUNhbnZhcyA9IGZ1bmN0aW9uKG9wdHMpIHtcblxuICAgIHZhciBkeCA9IDAsXG4gICAgICAgIGR5ID0gMCxcbiAgICAgICAgc3BlZWQgPSBvcHRzLnNwZWVkO1xuXG4gICAgdmFyIGFjdHVhbFNwZWVkID0gc3BlZWQgLyBNYXRoLm1pbihNYXRoLnNxcnQoY2FudmFzLnZpZXdib3goKS5zY2FsZSksIDEpO1xuXG4gICAgc3dpdGNoIChvcHRzLmRpcmVjdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOiAvLyBMZWZ0XG4gICAgICBkeCA9IGFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXAnOiAvLyBVcFxuICAgICAgZHkgPSBhY3R1YWxTcGVlZDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzogLy8gUmlnaHRcbiAgICAgIGR4ID0gLWFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG93bic6IC8vIERvd25cbiAgICAgIGR5ID0gLWFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FudmFzLnNjcm9sbCh7XG4gICAgICBkeDogZHgsXG4gICAgICBkeTogZHlcbiAgICB9KTtcbiAgfTtcblxufVxuXG5cbktleWJvYXJkTW92ZS4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmtleWJvYXJkTW92ZScsXG4gICdrZXlib2FyZCcsXG4gICdjYW52YXMnXG5dO1xuIiwiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4uLy4uL2ZlYXR1cmVzL2tleWJvYXJkJztcblxuaW1wb3J0IEtleWJvYXJkTW92ZSBmcm9tICcuL0tleWJvYXJkTW92ZSc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEtleWJvYXJkTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdrZXlib2FyZE1vdmUnIF0sXG4gIGtleWJvYXJkTW92ZTogWyAndHlwZScsIEtleWJvYXJkTW92ZSBdXG59OyIsImltcG9ydCB7XG4gIHNldCBhcyBjdXJzb3JTZXQsXG4gIHVuc2V0IGFzIGN1cnNvclVuc2V0XG59IGZyb20gJy4uLy4uL3V0aWwvQ3Vyc29yJztcblxuaW1wb3J0IHtcbiAgaW5zdGFsbCBhcyBpbnN0YWxsQ2xpY2tUcmFwXG59IGZyb20gJy4uLy4uL3V0aWwvQ2xpY2tUcmFwJztcblxuaW1wb3J0IHtcbiAgZGVsdGEgYXMgZGVsdGFQb3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9Qb3NpdGlvblV0aWwnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgY2xvc2VzdCBhcyBkb21DbG9zZXN0XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICB0b1BvaW50XG59IGZyb20gJy4uLy4uL3V0aWwvRXZlbnQnO1xuXG5cbnZhciBUSFJFU0hPTEQgPSAxNTtcblxuXG4vKipcbiAqIE1vdmUgdGhlIGNhbnZhcyB2aWEgbW91c2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUNhbnZhcyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdmFyIGNvbnRleHQ7XG5cblxuICAvLyBsaXN0ZW4gZm9yIG1vdmUgb24gZWxlbWVudCBtb3VzZSBkb3duO1xuICAvLyBhbGxvdyBvdGhlcnMgdG8gaG9vayBpbnRvIHRoZSBldmVudCBiZWZvcmUgdXMgdGhvdWdoXG4gIC8vIChkcmFnZ2luZyAvIGVsZW1lbnQgbW92aW5nIHdpbGwgZG8gdGhpcylcbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGhhbmRsZVN0YXJ0KGUub3JpZ2luYWxFdmVudCk7XG4gIH0pO1xuXG5cbiAgZnVuY3Rpb24gaGFuZGxlTW92ZShldmVudCkge1xuXG4gICAgdmFyIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcbiAgICAgICAgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KSxcbiAgICAgICAgZGVsdGEgPSBkZWx0YVBvcyhwb3NpdGlvbiwgc3RhcnQpO1xuXG4gICAgaWYgKCFjb250ZXh0LmRyYWdnaW5nICYmIGxlbmd0aChkZWx0YSkgPiBUSFJFU0hPTEQpIHtcbiAgICAgIGNvbnRleHQuZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICBpbnN0YWxsQ2xpY2tUcmFwKGV2ZW50QnVzKTtcblxuICAgICAgY3Vyc29yU2V0KCdncmFiJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuZHJhZ2dpbmcpIHtcblxuICAgICAgdmFyIGxhc3RQb3NpdGlvbiA9IGNvbnRleHQubGFzdCB8fCBjb250ZXh0LnN0YXJ0O1xuXG4gICAgICBkZWx0YSA9IGRlbHRhUG9zKHBvc2l0aW9uLCBsYXN0UG9zaXRpb24pO1xuXG4gICAgICBjYW52YXMuc2Nyb2xsKHtcbiAgICAgICAgZHg6IGRlbHRhLngsXG4gICAgICAgIGR5OiBkZWx0YS55XG4gICAgICB9KTtcblxuICAgICAgY29udGV4dC5sYXN0ID0gcG9zaXRpb247XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBzZWxlY3RcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBoYW5kbGVFbmQoZXZlbnQpIHtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBoYW5kbGVNb3ZlKTtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgaGFuZGxlRW5kKTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgY3Vyc29yVW5zZXQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0KGV2ZW50KSB7XG5cbiAgICAvLyBldmVudCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgJy5kanMtZHJhZ2dhYmxlJ1xuICAgIGlmIChkb21DbG9zZXN0KGV2ZW50LnRhcmdldCwgJy5kanMtZHJhZ2dhYmxlJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIHJlamVjdCBub24tbGVmdCBsZWZ0IG1vdXNlIGJ1dHRvbiBvciBtb2RpZmllciBrZXlcbiAgICBpZiAoZXZlbnQuYnV0dG9uIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dCA9IHtcbiAgICAgIHN0YXJ0OiB0b1BvaW50KGV2ZW50KVxuICAgIH07XG5cbiAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgaGFuZGxlTW92ZSk7XG4gICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBoYW5kbGVFbmQpO1xuXG4gICAgLy8gd2UndmUgaGFuZGxlZCB0aGUgZXZlbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5cbk1vdmVDYW52YXMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy9cblxuZnVuY3Rpb24gbGVuZ3RoKHBvaW50KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnQueCwgMikgKyBNYXRoLnBvdyhwb2ludC55LCAyKSk7XG59XG4iLCJpbXBvcnQgTW92ZUNhbnZhcyBmcm9tICcuL01vdmVDYW52YXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdtb3ZlQ2FudmFzJyBdLFxuICBtb3ZlQ2FudmFzOiBbICd0eXBlJywgTW92ZUNhbnZhcyBdXG59OyIsImltcG9ydCBUb3VjaE1vZHVsZSBmcm9tICcuLi8uLi9mZWF0dXJlcy90b3VjaCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBUb3VjaE1vZHVsZVxuICBdXG59OyIsImltcG9ydCB7XG4gIGV2ZW50IGFzIGRvbUV2ZW50LFxuICBjbG9zZXN0IGFzIGRvbUNsb3Nlc3Rcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGdldFN0ZXBTaXplLFxuICBjYXBcbn0gZnJvbSAnLi9ab29tVXRpbCc7XG5cbmltcG9ydCB7XG4gIGxvZzEwXG59IGZyb20gJy4uLy4uL3V0aWwvTWF0aCc7XG5cbmltcG9ydCB7XG4gIGJpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgc2lnbiA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbihuKSB7XG4gIHJldHVybiBuID49IDAgPyAxIDogLTE7XG59O1xuXG52YXIgUkFOR0UgPSB7IG1pbjogMC4yLCBtYXg6IDQgfSxcbiAgICBOVU1fU1RFUFMgPSAxMDtcblxudmFyIERFTFRBX1RIUkVTSE9MRCA9IDAuMTtcblxudmFyIERFRkFVTFRfU0NBTEUgPSAwLjc1O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHpvb21pbmcgYW5kIHNjcm9sbGluZyB3aXRoaW4gdGhlXG4gKiB7QGxpbmsgQ2FudmFzfSB2aWEgdGhlIG1vdXNlIHdoZWVsLlxuICpcbiAqIE1vdXNlIHdoZWVsIHpvb21pbmcgLyBzY3JvbGxpbmcgbWF5IGJlIGRpc2FibGVkIHVzaW5nXG4gKiB0aGUge0BsaW5rIHRvZ2dsZShlbmFibGVkKX0gbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXVxuICogQHBhcmFtIHtib29sZWFufSBbY29uZmlnLmVuYWJsZWQ9dHJ1ZV0gZGVmYXVsdCBlbmFibGVkIHN0YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZT0uNzVdIHNjcm9sbCBzZW5zaXZpdHlcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFpvb21TY3JvbGwoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2NvbnRhaW5lciA9IGNhbnZhcy5fY29udGFpbmVyO1xuXG4gIHRoaXMuX2hhbmRsZVdoZWVsID0gYmluZCh0aGlzLl9oYW5kbGVXaGVlbCwgdGhpcyk7XG5cbiAgdGhpcy5fdG90YWxEZWx0YSA9IDA7XG4gIHRoaXMuX3NjYWxlID0gY29uZmlnLnNjYWxlIHx8IERFRkFVTFRfU0NBTEU7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuaW5pdCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLl9pbml0KGNvbmZpZy5lbmFibGVkICE9PSBmYWxzZSk7XG4gIH0pO1xufVxuXG5ab29tU2Nyb2xsLiRpbmplY3QgPSBbXG4gICdjb25maWcuem9vbVNjcm9sbCcsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dO1xuXG5ab29tU2Nyb2xsLnByb3RvdHlwZS5zY3JvbGwgPSBmdW5jdGlvbiBzY3JvbGwoZGVsdGEpIHtcbiAgdGhpcy5fY2FudmFzLnNjcm9sbChkZWx0YSk7XG59O1xuXG5cblpvb21TY3JvbGwucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHRoaXMuX2NhbnZhcy56b29tKCdmaXQtdmlld3BvcnQnKTtcbn07XG5cbi8qKlxuICogWm9vbSBkZXBlbmRpbmcgb24gZGVsdGEuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhXG4gKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb25cbiAqL1xuWm9vbVNjcm9sbC5wcm90b3R5cGUuem9vbSA9IGZ1bmN0aW9uIHpvb20oZGVsdGEsIHBvc2l0aW9uKSB7XG5cbiAgLy8gem9vbSB3aXRoIGhhbGYgdGhlIHN0ZXAgc2l6ZSBvZiBzdGVwWm9vbVxuICB2YXIgc3RlcFNpemUgPSBnZXRTdGVwU2l6ZShSQU5HRSwgTlVNX1NURVBTICogMik7XG5cbiAgLy8gYWRkIHVudGlsIHRocmVzaG9sZCByZWFjaGVkXG4gIHRoaXMuX3RvdGFsRGVsdGEgKz0gZGVsdGE7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMuX3RvdGFsRGVsdGEpID4gREVMVEFfVEhSRVNIT0xEKSB7XG4gICAgdGhpcy5fem9vbShkZWx0YSwgcG9zaXRpb24sIHN0ZXBTaXplKTtcblxuICAgIC8vIHJlc2V0XG4gICAgdGhpcy5fdG90YWxEZWx0YSA9IDA7XG4gIH1cbn07XG5cblxuWm9vbVNjcm9sbC5wcm90b3R5cGUuX2hhbmRsZVdoZWVsID0gZnVuY3Rpb24gaGFuZGxlV2hlZWwoZXZlbnQpIHtcblxuICAvLyBldmVudCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgJy5kanMtc2Nyb2xsYWJsZSdcbiAgaWYgKGRvbUNsb3Nlc3QoZXZlbnQudGFyZ2V0LCAnLmRqcy1zY3JvbGxhYmxlJywgdHJ1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IHRoaXMuX2NvbnRhaW5lcjtcblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIC8vIHBpbmNoIHRvIHpvb20gaXMgbWFwcGVkIHRvIHdoZWVsICsgY3RybEtleSA9IHRydWVcbiAgLy8gaW4gbW9kZXJuIGJyb3dzZXJzICghKVxuXG4gIHZhciBpc1pvb20gPSBldmVudC5jdHJsS2V5O1xuXG4gIHZhciBpc0hvcml6b250YWxTY3JvbGwgPSBldmVudC5zaGlmdEtleTtcblxuICB2YXIgZmFjdG9yID0gLTEgKiB0aGlzLl9zY2FsZSxcbiAgICAgIGRlbHRhO1xuXG4gIGlmIChpc1pvb20pIHtcbiAgICBmYWN0b3IgKj0gZXZlbnQuZGVsdGFNb2RlID09PSAwID8gMC4wMjAgOiAwLjMyO1xuICB9IGVsc2Uge1xuICAgIGZhY3RvciAqPSBldmVudC5kZWx0YU1vZGUgPT09IDAgPyAxLjAgOiAxNi4wO1xuICB9XG5cbiAgaWYgKGlzWm9vbSkge1xuICAgIHZhciBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgb2Zmc2V0ID0ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCAtIGVsZW1lbnRSZWN0LmxlZnQsXG4gICAgICB5OiBldmVudC5jbGllbnRZIC0gZWxlbWVudFJlY3QudG9wXG4gICAgfTtcblxuICAgIGRlbHRhID0gKFxuICAgICAgTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhldmVudC5kZWx0YVksIDIpICtcbiAgICAgICAgTWF0aC5wb3coZXZlbnQuZGVsdGFYLCAyKVxuICAgICAgKSAqIHNpZ24oZXZlbnQuZGVsdGFZKSAqIGZhY3RvclxuICAgICk7XG5cbiAgICAvLyB6b29tIGluIHJlbGF0aXZlIHRvIGRpYWdyYW0ge3gseX0gY29vcmRpbmF0ZXNcbiAgICB0aGlzLnpvb20oZGVsdGEsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsU2Nyb2xsKSB7XG4gICAgICBkZWx0YSA9IHtcbiAgICAgICAgZHg6IGZhY3RvciAqIGV2ZW50LmRlbHRhWSxcbiAgICAgICAgZHk6IDBcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICBkeDogZmFjdG9yICogZXZlbnQuZGVsdGFYLFxuICAgICAgICBkeTogZmFjdG9yICogZXZlbnQuZGVsdGFZXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsKGRlbHRhKTtcbiAgfVxufTtcblxuLyoqXG4gKiBab29tIHdpdGggZml4ZWQgc3RlcCBzaXplLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFpvb20gZGVsdGEgKDEgZm9yIHpvb21pbmcgaW4sIC0xIGZvciBvdXQpLlxuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uXG4gKi9cblpvb21TY3JvbGwucHJvdG90eXBlLnN0ZXBab29tID0gZnVuY3Rpb24gc3RlcFpvb20oZGVsdGEsIHBvc2l0aW9uKSB7XG5cbiAgdmFyIHN0ZXBTaXplID0gZ2V0U3RlcFNpemUoUkFOR0UsIE5VTV9TVEVQUyk7XG5cbiAgdGhpcy5fem9vbShkZWx0YSwgcG9zaXRpb24sIHN0ZXBTaXplKTtcbn07XG5cblxuLyoqXG4gKiBab29tIGluL291dCBnaXZlbiBhIHN0ZXAgc2l6ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBTaXplXG4gKi9cblpvb21TY3JvbGwucHJvdG90eXBlLl96b29tID0gZnVuY3Rpb24oZGVsdGEsIHBvc2l0aW9uLCBzdGVwU2l6ZSkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBkaXJlY3Rpb24gPSBkZWx0YSA+IDAgPyAxIDogLTE7XG5cbiAgdmFyIGN1cnJlbnRMaW5lYXJab29tTGV2ZWwgPSBsb2cxMChjYW52YXMuem9vbSgpKTtcblxuICAvLyBzbmFwIHRvIGEgcHJveGltYXRlIHpvb20gc3RlcFxuICB2YXIgbmV3TGluZWFyWm9vbUxldmVsID0gTWF0aC5yb3VuZChjdXJyZW50TGluZWFyWm9vbUxldmVsIC8gc3RlcFNpemUpICogc3RlcFNpemU7XG5cbiAgLy8gaW5jcmVhc2Ugb3IgZGVjcmVhc2Ugb25lIHpvb20gc3RlcCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uXG4gIG5ld0xpbmVhclpvb21MZXZlbCArPSBzdGVwU2l6ZSAqIGRpcmVjdGlvbjtcblxuICAvLyBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGxvZ2FyaXRobWljIHpvb20gbGV2ZWwgYmFzZWQgb24gdGhlIGxpbmVhciB6b29tIGxldmVsXG4gIC8vIChlLmcuIDIgZm9yIGFuIGFic29sdXRlIHgyIHpvb20pXG4gIHZhciBuZXdMb2dab29tTGV2ZWwgPSBNYXRoLnBvdygxMCwgbmV3TGluZWFyWm9vbUxldmVsKTtcblxuICBjYW52YXMuem9vbShjYXAoUkFOR0UsIG5ld0xvZ1pvb21MZXZlbCksIHBvc2l0aW9uKTtcbn07XG5cblxuLyoqXG4gKiBUb2dnbGUgdGhlIHpvb20gc2Nyb2xsIGFiaWxpdHkgdmlhIG1vdXNlIHdoZWVsLlxuICpcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtuZXdFbmFibGVkXSBuZXcgZW5hYmxlZCBzdGF0ZVxuICovXG5ab29tU2Nyb2xsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUobmV3RW5hYmxlZCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY29udGFpbmVyO1xuICB2YXIgaGFuZGxlV2hlZWwgPSB0aGlzLl9oYW5kbGVXaGVlbDtcblxuICB2YXIgb2xkRW5hYmxlZCA9IHRoaXMuX2VuYWJsZWQ7XG5cbiAgaWYgKHR5cGVvZiBuZXdFbmFibGVkID09PSAndW5kZWZpbmVkJykge1xuICAgIG5ld0VuYWJsZWQgPSAhb2xkRW5hYmxlZDtcbiAgfVxuXG4gIC8vIG9ubHkgcmVhY3Qgb24gYWN0dWFsIGNoYW5nZXNcbiAgaWYgKG9sZEVuYWJsZWQgIT09IG5ld0VuYWJsZWQpIHtcblxuICAgIC8vIGFkZCBvciByZW1vdmUgd2hlZWwgbGlzdGVuZXIgYmFzZWQgb25cbiAgICAvLyBjaGFuZ2VkIGVuYWJsZWQgc3RhdGVcbiAgICBkb21FdmVudFtuZXdFbmFibGVkID8gJ2JpbmQnIDogJ3VuYmluZCddKGVsZW1lbnQsICd3aGVlbCcsIGhhbmRsZVdoZWVsLCBmYWxzZSk7XG4gIH1cblxuICB0aGlzLl9lbmFibGVkID0gbmV3RW5hYmxlZDtcblxuICByZXR1cm4gbmV3RW5hYmxlZDtcbn07XG5cblxuWm9vbVNjcm9sbC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihuZXdFbmFibGVkKSB7XG4gIHRoaXMudG9nZ2xlKG5ld0VuYWJsZWQpO1xufTtcbiIsImltcG9ydCB7XG4gIGxvZzEwXG59IGZyb20gJy4uLy4uL3V0aWwvTWF0aCc7XG5cbi8qKlxuICogR2V0IHN0ZXAgc2l6ZSBmb3IgZ2l2ZW4gcmFuZ2UgYW5kIG51bWJlciBvZiBzdGVwcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZS5taW5cbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZS5tYXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0ZXBTaXplKHJhbmdlLCBzdGVwcykge1xuXG4gIHZhciBtaW5MaW5lYXJSYW5nZSA9IGxvZzEwKHJhbmdlLm1pbiksXG4gICAgICBtYXhMaW5lYXJSYW5nZSA9IGxvZzEwKHJhbmdlLm1heCk7XG5cbiAgdmFyIGFic29sdXRlTGluZWFyUmFuZ2UgPSBNYXRoLmFicyhtaW5MaW5lYXJSYW5nZSkgKyBNYXRoLmFicyhtYXhMaW5lYXJSYW5nZSk7XG5cbiAgcmV0dXJuIGFic29sdXRlTGluZWFyUmFuZ2UgLyBzdGVwcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcChyYW5nZSwgc2NhbGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHJhbmdlLm1pbiwgTWF0aC5taW4ocmFuZ2UubWF4LCBzY2FsZSkpO1xufVxuIiwiaW1wb3J0IFpvb21TY3JvbGwgZnJvbSAnLi9ab29tU2Nyb2xsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnem9vbVNjcm9sbCcgXSxcbiAgem9vbVNjcm9sbDogWyAndHlwZScsIFpvb21TY3JvbGwgXVxufTsiLCJpbXBvcnQge1xuICBhc1RSQkwsXG4gIGdldE9yaWVudGF0aW9uLFxuICByb3VuZFBvaW50XG59IGZyb20gJy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgY2VudGVyLFxuICBkZWx0YVxufSBmcm9tICcuL1Bvc2l0aW9uVXRpbCc7XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb2ludCByZWxhdGl2ZSB0byB0aGUgbmV3IGVsZW1lbnQncyBwb3NpdGlvblxuICpcbiAqIEBwYXJhbSB7cG9pbnR9IHBvaW50IFthYnNvbHV0ZV1cbiAqIEBwYXJhbSB7Ym91bmRzfSBvbGRCb3VuZHNcbiAqIEBwYXJhbSB7Ym91bmRzfSBuZXdCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtwb2ludH0gcG9pbnQgW2Fic29sdXRlXVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3QXR0YWNoUG9pbnQocG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHZhciBvbGRDZW50ZXIgPSBjZW50ZXIob2xkQm91bmRzKSxcbiAgICAgIG5ld0NlbnRlciA9IGNlbnRlcihuZXdCb3VuZHMpLFxuICAgICAgb2xkRGVsdGEgPSBkZWx0YShwb2ludCwgb2xkQ2VudGVyKTtcblxuICB2YXIgbmV3RGVsdGEgPSB7XG4gICAgeDogb2xkRGVsdGEueCAqIChuZXdCb3VuZHMud2lkdGggLyBvbGRCb3VuZHMud2lkdGgpLFxuICAgIHk6IG9sZERlbHRhLnkgKiAobmV3Qm91bmRzLmhlaWdodCAvIG9sZEJvdW5kcy5oZWlnaHQpXG4gIH07XG5cbiAgcmV0dXJuIHJvdW5kUG9pbnQoe1xuICAgIHg6IG5ld0NlbnRlci54ICsgbmV3RGVsdGEueCxcbiAgICB5OiBuZXdDZW50ZXIueSArIG5ld0RlbHRhLnlcbiAgfSk7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaGFwZSdzIGRlbHRhIHJlbGF0aXZlIHRvIGEgbmV3IHBvc2l0aW9uXG4gKiBvZiBhIGNlcnRhaW4gZWxlbWVudCdzIGJvdW5kc1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBwb2ludCBbYWJzb2x1dGVdXG4gKiBAcGFyYW0ge2JvdW5kc30gb2xkQm91bmRzXG4gKiBAcGFyYW0ge2JvdW5kc30gbmV3Qm91bmRzXG4gKlxuICogQHJldHVybiB7ZGVsdGF9IGRlbHRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBdHRhY2hTaGFwZURlbHRhKHNoYXBlLCBvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICB2YXIgc2hhcGVDZW50ZXIgPSBjZW50ZXIoc2hhcGUpLFxuICAgICAgb2xkQ2VudGVyID0gY2VudGVyKG9sZEJvdW5kcyksXG4gICAgICBuZXdDZW50ZXIgPSBjZW50ZXIobmV3Qm91bmRzKSxcbiAgICAgIHNoYXBlRGVsdGEgPSBkZWx0YShzaGFwZSwgc2hhcGVDZW50ZXIpLFxuICAgICAgb2xkQ2VudGVyRGVsdGEgPSBkZWx0YShzaGFwZUNlbnRlciwgb2xkQ2VudGVyKSxcbiAgICAgIHN0aWNreVBvc2l0aW9uRGVsdGEgPSBnZXRTdGlja3lQb3NpdGlvbkRlbHRhKHNoYXBlQ2VudGVyLCBvbGRCb3VuZHMsIG5ld0JvdW5kcyk7XG5cbiAgaWYgKHN0aWNreVBvc2l0aW9uRGVsdGEpIHtcbiAgICByZXR1cm4gc3RpY2t5UG9zaXRpb25EZWx0YTtcbiAgfVxuXG4gIHZhciBuZXdDZW50ZXJEZWx0YSA9IHtcbiAgICB4OiBvbGRDZW50ZXJEZWx0YS54ICogKG5ld0JvdW5kcy53aWR0aCAvIG9sZEJvdW5kcy53aWR0aCksXG4gICAgeTogb2xkQ2VudGVyRGVsdGEueSAqIChuZXdCb3VuZHMuaGVpZ2h0IC8gb2xkQm91bmRzLmhlaWdodClcbiAgfTtcblxuICB2YXIgbmV3U2hhcGVDZW50ZXIgPSB7XG4gICAgeDogbmV3Q2VudGVyLnggKyBuZXdDZW50ZXJEZWx0YS54LFxuICAgIHk6IG5ld0NlbnRlci55ICsgbmV3Q2VudGVyRGVsdGEueVxuICB9O1xuXG4gIHJldHVybiByb3VuZFBvaW50KHtcbiAgICB4OiBuZXdTaGFwZUNlbnRlci54ICsgc2hhcGVEZWx0YS54IC0gc2hhcGUueCxcbiAgICB5OiBuZXdTaGFwZUNlbnRlci55ICsgc2hhcGVEZWx0YS55IC0gc2hhcGUueVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RpY2t5UG9zaXRpb25EZWx0YShvbGRTaGFwZUNlbnRlciwgb2xkQm91bmRzLCBuZXdCb3VuZHMpIHtcbiAgdmFyIG9sZFRSQkwgPSBhc1RSQkwob2xkQm91bmRzKSxcbiAgICAgIG5ld1RSQkwgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICBpZiAoaXNNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9sZE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24ob2xkQm91bmRzLCBvbGRTaGFwZUNlbnRlciksXG4gICAgICBzdGlja3lQb3NpdGlvbkRlbHRhLFxuICAgICAgbmV3U2hhcGVDZW50ZXIsXG4gICAgICBuZXdPcmllbnRhdGlvbjtcblxuICBpZiAob2xkT3JpZW50YXRpb24gPT09ICd0b3AnKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiBuZXdUUkJMLmJvdHRvbSAtIG9sZFRSQkwuYm90dG9tXG4gICAgfTtcbiAgfSBlbHNlIGlmIChvbGRPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICBzdGlja3lQb3NpdGlvbkRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IG5ld1RSQkwudG9wIC0gb2xkVFJCTC50b3BcbiAgICB9O1xuICB9IGVsc2UgaWYgKG9sZE9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IG5ld1RSQkwubGVmdCAtIG9sZFRSQkwubGVmdCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9IGVsc2UgaWYgKG9sZE9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICBzdGlja3lQb3NpdGlvbkRlbHRhID0ge1xuICAgICAgeDogbmV3VFJCTC5yaWdodCAtIG9sZFRSQkwucmlnaHQsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIGZhbGxiYWNrIHRvIHByb3BvcnRpb25hbCBtb3ZlbWVudCBmb3IgY29ybmVyLXBsYWNlZCBhdHRhY2htZW50c1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbmV3U2hhcGVDZW50ZXIgPSB7XG4gICAgeDogb2xkU2hhcGVDZW50ZXIueCArIHN0aWNreVBvc2l0aW9uRGVsdGEueCxcbiAgICB5OiBvbGRTaGFwZUNlbnRlci55ICsgc3RpY2t5UG9zaXRpb25EZWx0YS55XG4gIH07XG5cbiAgbmV3T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihuZXdCb3VuZHMsIG5ld1NoYXBlQ2VudGVyKTtcblxuICBpZiAobmV3T3JpZW50YXRpb24gIT09IG9sZE9yaWVudGF0aW9uKSB7XG5cbiAgICAvLyBmYWxsYmFjayB0byBwcm9wb3J0aW9uYWwgbW92ZW1lbnQgaWYgb3JpZW50YXRpb24gd291bGQgb3RoZXJ3aXNlIGNoYW5nZVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHN0aWNreVBvc2l0aW9uRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGlzTW92ZWQob2xkVFJCTCwgbmV3VFJCTCkge1xuICByZXR1cm4gaXNIb3Jpem9udGFsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB8fCBpc1ZlcnRpY2FsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKTtcbn1cblxuZnVuY3Rpb24gaXNIb3Jpem9udGFsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB7XG4gIHJldHVybiBvbGRUUkJMLnJpZ2h0ICE9PSBuZXdUUkJMLnJpZ2h0ICYmIG9sZFRSQkwubGVmdCAhPT0gbmV3VFJCTC5sZWZ0O1xufVxuXG5mdW5jdGlvbiBpc1ZlcnRpY2FsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB7XG4gIHJldHVybiBvbGRUUkJMLnRvcCAhPT0gbmV3VFJCTC50b3AgJiYgb2xkVFJCTC5ib3R0b20gIT09IG5ld1RSQkwuYm90dG9tO1xufVxuIiwidmFyIFRSQVBfUFJJT1JJVFkgPSA1MDAwO1xuXG4vKipcbiAqIEluc3RhbGxzIGEgY2xpY2sgdHJhcCB0aGF0IHByZXZlbnRzIGEgZ2hvc3QgY2xpY2sgZm9sbG93aW5nIGEgZHJhZ2dpbmcgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRvIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgaW5zdGFsbGVkIHRyYXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsKGV2ZW50QnVzLCBldmVudE5hbWUpIHtcblxuICBldmVudE5hbWUgPSBldmVudE5hbWUgfHwgJ2VsZW1lbnQuY2xpY2snO1xuXG4gIGZ1bmN0aW9uIHRyYXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXZlbnRCdXMub25jZShldmVudE5hbWUsIFRSQVBfUFJJT1JJVFksIHRyYXApO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBldmVudEJ1cy5vZmYoZXZlbnROYW1lLCB0cmFwKTtcbiAgfTtcbn0iLCIvKipcbiAqIEZhaWxzYWZlIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBjb2xsZWN0aW9uXG4gKlxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gW2NvbGxlY3Rpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtlbGVtZW50XVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gdGhlIHByZXZpb3VzIGluZGV4IG9mIHRoZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmUoY29sbGVjdGlvbiwgZWxlbWVudCkge1xuXG4gIGlmICghY29sbGVjdGlvbiB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpZHggPSBjb2xsZWN0aW9uLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICBjb2xsZWN0aW9uLnNwbGljZShpZHgsIDEpO1xuICB9XG5cbiAgcmV0dXJuIGlkeDtcbn1cblxuLyoqXG4gKiBGYWlsIHNhdmUgYWRkIGFuIGVsZW1lbnQgdG8gdGhlIGdpdmVuIGNvbm5lY3Rpb24sIGVuc3VyaW5nXG4gKiBpdCBkb2VzIG5vdCB5ZXQgZXhpc3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKGNvbGxlY3Rpb24sIGVsZW1lbnQsIGlkeCkge1xuXG4gIGlmICghY29sbGVjdGlvbiB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaWR4ICE9PSAnbnVtYmVyJykge1xuICAgIGlkeCA9IC0xO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRJZHggPSBjb2xsZWN0aW9uLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGN1cnJlbnRJZHggIT09IC0xKSB7XG5cbiAgICBpZiAoY3VycmVudElkeCA9PT0gaWR4KSB7XG5cbiAgICAgIC8vIG5vdGhpbmcgdG8gZG8sIHBvc2l0aW9uIGhhcyBub3QgY2hhbmdlZFxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gY3VycmVudCBwb3NpdGlvblxuICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShjdXJyZW50SWR4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gYWxyZWFkeSBleGlzdHMgaW4gY29sbGVjdGlvblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlkeCAhPT0gLTEpIHtcblxuICAgIC8vIGluc2VydCBhdCBzcGVjaWZpZWQgcG9zaXRpb25cbiAgICBjb2xsZWN0aW9uLnNwbGljZShpZHgsIDAsIGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gcHVzaCB0byBlbmRcbiAgICBjb2xsZWN0aW9uLnB1c2goZWxlbWVudCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEZhaWwgc2F2ZSBnZXQgdGhlIGluZGV4IG9mIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvciAtMSBpZiBjb2xsZWN0aW9uIG9yIGVsZW1lbnQgZG9cbiAqICAgICAgICAgICAgICAgICAgbm90IGV4aXN0IG9yIHRoZSBlbGVtZW50IGlzIG5vdCBjb250YWluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGNvbGxlY3Rpb24sIGVsZW1lbnQpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xufVxuIiwiaW1wb3J0IHtcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzXG59IGZyb20gJ21pbi1kb20nO1xuXG52YXIgQ1VSU09SX0NMU19QQVRURVJOID0gL15kanMtY3Vyc29yLS4qJC87XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChtb2RlKSB7XG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3Nlcyhkb2N1bWVudC5ib2R5KTtcblxuICBjbGFzc2VzLnJlbW92ZU1hdGNoaW5nKENVUlNPUl9DTFNfUEFUVEVSTik7XG5cbiAgaWYgKG1vZGUpIHtcbiAgICBjbGFzc2VzLmFkZCgnZGpzLWN1cnNvci0nICsgbW9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0KCkge1xuICBzZXQobnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXMobW9kZSkge1xuICB2YXIgY2xhc3NlcyA9IGRvbUNsYXNzZXMoZG9jdW1lbnQuYm9keSk7XG5cbiAgcmV0dXJuIGNsYXNzZXMuaGFzKCdkanMtY3Vyc29yLScgKyBtb2RlKTtcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgaXNPYmplY3QsXG4gIGlzVW5kZWZpbmVkLFxuICBncm91cEJ5LFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEdldCBwYXJlbnQgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuYmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudHMpIHtcblxuICAvLyBmaW5kIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBjaGlsZHJlbiBvZiBhbnkgb3RoZXIgZWxlbWVudHNcbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiAhZmluZChlbGVtZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGUgIT09IGVsZW1lbnQgJiYgZ2V0UGFyZW50KGVsZW1lbnQsIGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIGlmICghcGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQ7XG4gIH1cblxuICBpZiAoIWVsZW1lbnQucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGdldFBhcmVudChlbGVtZW50LnBhcmVudCwgcGFyZW50KTtcbn1cblxuXG4vKipcbiAqIEFkZHMgYW4gZWxlbWVudCB0byBhIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGVcbiAqIGVsZW1lbnQgd2FzIGFkZGVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVuaXF1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKGVsZW1lbnRzLCBlLCB1bmlxdWUpIHtcbiAgdmFyIGNhbkFkZCA9ICF1bmlxdWUgfHwgZWxlbWVudHMuaW5kZXhPZihlKSA9PT0gLTE7XG5cbiAgaWYgKGNhbkFkZCkge1xuICAgIGVsZW1lbnRzLnB1c2goZSk7XG4gIH1cblxuICByZXR1cm4gY2FuQWRkO1xufVxuXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIGNhbGxpbmcgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGBmbmBcbiAqIHdpdGggKGVsZW1lbnQsIGluZGV4LCByZWN1cnNpb25EZXB0aCkuXG4gKlxuICogUmVjdXJzZSBpbnRvIGFsbCBlbGVtZW50cyB0aGF0IGFyZSByZXR1cm5lZCBieSBgZm5gLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheTxPYmplY3Q+fSBlbGVtZW50c1xuICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGl0ZXJhdG9yIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIChlbGVtZW50LCBpbmRleCwgcmVjdXJzaW9uRGVwdGgpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtkZXB0aF0gbWF4aW11bSByZWN1cnNpb24gZGVwdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hFbGVtZW50KGVsZW1lbnRzLCBmbiwgZGVwdGgpIHtcblxuICBkZXB0aCA9IGRlcHRoIHx8IDA7XG5cbiAgaWYgKCFpc0FycmF5KGVsZW1lbnRzKSkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24ocywgaSkge1xuICAgIHZhciBmaWx0ZXIgPSBmbihzLCBpLCBkZXB0aCk7XG5cbiAgICBpZiAoaXNBcnJheShmaWx0ZXIpICYmIGZpbHRlci5sZW5ndGgpIHtcbiAgICAgIGVhY2hFbGVtZW50KGZpbHRlciwgZm4sIGRlcHRoICsgMSk7XG4gICAgfVxuICB9KTtcbn1cblxuXG4vKipcbiAqIENvbGxlY3RzIHNlbGYgKyBjaGlsZCBlbGVtZW50cyB1cCB0byBhIGdpdmVuIGRlcHRoIGZyb20gYSBsaXN0IG9mIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfEFycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdGhlIGVsZW1lbnRzIHRvIHNlbGVjdCB0aGUgY2hpbGRyZW4gZnJvbVxuICogQHBhcmFtICB7Ym9vbGVhbn0gdW5pcXVlIHdoZXRoZXIgdG8gcmV0dXJuIGEgdW5pcXVlIHJlc3VsdCBzZXQgKG5vIGR1cGxpY2F0ZXMpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heERlcHRoIHRoZSBkZXB0aCB0byBzZWFyY2ggdGhyb3VnaCBvciAtMSBmb3IgaW5maW5pdGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZvdW5kIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kQ2hpbGRyZW4oZWxlbWVudHMsIHVuaXF1ZSwgbWF4RGVwdGgpIHtcbiAgdmFyIHJlc3VsdCA9IFtdLFxuICAgICAgcHJvY2Vzc2VkQ2hpbGRyZW4gPSBbXTtcblxuICBlYWNoRWxlbWVudChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaSwgZGVwdGgpIHtcbiAgICBhZGQocmVzdWx0LCBlbGVtZW50LCB1bmlxdWUpO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcblxuICAgIC8vIG1heCB0cmF2ZXJzYWwgZGVwdGggbm90IHJlYWNoZWQgeWV0XG4gICAgaWYgKG1heERlcHRoID09PSAtMSB8fCBkZXB0aCA8IG1heERlcHRoKSB7XG5cbiAgICAgIC8vIGNoaWxkcmVuIGV4aXN0ICYmIGNoaWxkcmVuIG5vdCB5ZXQgcHJvY2Vzc2VkXG4gICAgICBpZiAoY2hpbGRyZW4gJiYgYWRkKHByb2Nlc3NlZENoaWxkcmVuLCBjaGlsZHJlbiwgdW5pcXVlKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHVybiBzZWxmICsgZGlyZWN0IGNoaWxkcmVuIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdG8gcXVlcnlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGFsbG93RHVwbGljYXRlcyB0byBhbGxvdyBkdXBsaWNhdGVzIGluIHRoZSByZXN1bHQgc2V0XG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgY29sbGVjdGVkIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kRGlyZWN0Q2hpbGRyZW4oZWxlbWVudHMsIGFsbG93RHVwbGljYXRlcykge1xuICByZXR1cm4gc2VsZkFuZENoaWxkcmVuKGVsZW1lbnRzLCAhYWxsb3dEdXBsaWNhdGVzLCAxKTtcbn1cblxuXG4vKipcbiAqIFJldHVybiBzZWxmICsgQUxMIGNoaWxkcmVuIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdG8gcXVlcnlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGFsbG93RHVwbGljYXRlcyB0byBhbGxvdyBkdXBsaWNhdGVzIGluIHRoZSByZXN1bHQgc2V0XG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgY29sbGVjdGVkIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kQWxsQ2hpbGRyZW4oZWxlbWVudHMsIGFsbG93RHVwbGljYXRlcykge1xuICByZXR1cm4gc2VsZkFuZENoaWxkcmVuKGVsZW1lbnRzLCAhYWxsb3dEdXBsaWNhdGVzLCAtMSk7XG59XG5cblxuLyoqXG4gKiBHZXRzIHRoZSB0aGUgY2xvc3VyZSBmb3IgYWxsIHNlbGVjdGVkIGVsZW1lbnRzLFxuICogdGhlaXIgZW5jbG9zZWQgY2hpbGRyZW4gYW5kIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFufSBbaXNUb3BMZXZlbD10cnVlXVxuICogQHBhcmFtIHtPYmplY3R9IFtleGlzdGluZ0Nsb3N1cmVdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBuZXdDbG9zdXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9zdXJlKGVsZW1lbnRzLCBpc1RvcExldmVsLCBjbG9zdXJlKSB7XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGlzVG9wTGV2ZWwpKSB7XG4gICAgaXNUb3BMZXZlbCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXNPYmplY3QoaXNUb3BMZXZlbCkpIHtcbiAgICBjbG9zdXJlID0gaXNUb3BMZXZlbDtcbiAgICBpc1RvcExldmVsID0gdHJ1ZTtcbiAgfVxuXG5cbiAgY2xvc3VyZSA9IGNsb3N1cmUgfHwge307XG5cbiAgdmFyIGFsbFNoYXBlcyA9IGNvcHlPYmplY3QoY2xvc3VyZS5hbGxTaGFwZXMpLFxuICAgICAgYWxsQ29ubmVjdGlvbnMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuYWxsQ29ubmVjdGlvbnMpLFxuICAgICAgZW5jbG9zZWRFbGVtZW50cyA9IGNvcHlPYmplY3QoY2xvc3VyZS5lbmNsb3NlZEVsZW1lbnRzKSxcbiAgICAgIGVuY2xvc2VkQ29ubmVjdGlvbnMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuZW5jbG9zZWRDb25uZWN0aW9ucyk7XG5cbiAgdmFyIHRvcExldmVsID0gY29weU9iamVjdChcbiAgICBjbG9zdXJlLnRvcExldmVsLFxuICAgIGlzVG9wTGV2ZWwgJiYgZ3JvdXBCeShlbGVtZW50cywgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfSlcbiAgKTtcblxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbm5lY3Rpb24oYykge1xuICAgIGlmICh0b3BMZXZlbFtjLnNvdXJjZS5pZF0gJiYgdG9wTGV2ZWxbYy50YXJnZXQuaWRdKSB7XG4gICAgICB0b3BMZXZlbFtjLmlkXSA9IFsgYyBdO1xuICAgIH1cblxuICAgIC8vIG5vdCBlbmNsb3NlZCBhcyBhIGNoaWxkLCBidXQgbWF5YmUgbG9naWNhbGx5XG4gICAgLy8gKGNvbm5lY3RpbmcgdHdvIG1vdmVkIGVsZW1lbnRzPylcbiAgICBpZiAoYWxsU2hhcGVzW2Muc291cmNlLmlkXSAmJiBhbGxTaGFwZXNbYy50YXJnZXQuaWRdKSB7XG4gICAgICBlbmNsb3NlZENvbm5lY3Rpb25zW2MuaWRdID0gZW5jbG9zZWRFbGVtZW50c1tjLmlkXSA9IGM7XG4gICAgfVxuXG4gICAgYWxsQ29ubmVjdGlvbnNbYy5pZF0gPSBjO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRWxlbWVudChlbGVtZW50KSB7XG5cbiAgICBlbmNsb3NlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuXG4gICAgICAvLyByZW1lbWJlciBjb25uZWN0aW9uXG4gICAgICBlbmNsb3NlZENvbm5lY3Rpb25zW2VsZW1lbnQuaWRdID0gYWxsQ29ubmVjdGlvbnNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHJlbWVtYmVyIHNoYXBlXG4gICAgICBhbGxTaGFwZXNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuXG4gICAgICAvLyByZW1lbWJlciBhbGwgY29ubmVjdGlvbnNcbiAgICAgIGZvckVhY2goZWxlbWVudC5pbmNvbWluZywgaGFuZGxlQ29ubmVjdGlvbik7XG5cbiAgICAgIGZvckVhY2goZWxlbWVudC5vdXRnb2luZywgaGFuZGxlQ29ubmVjdGlvbik7XG5cbiAgICAgIC8vIHJlY3Vyc2UgaW50byBjaGlsZHJlblxuICAgICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gICAgfVxuICB9XG5cbiAgZWFjaEVsZW1lbnQoZWxlbWVudHMsIGhhbmRsZUVsZW1lbnQpO1xuXG4gIHJldHVybiB7XG4gICAgYWxsU2hhcGVzOiBhbGxTaGFwZXMsXG4gICAgYWxsQ29ubmVjdGlvbnM6IGFsbENvbm5lY3Rpb25zLFxuICAgIHRvcExldmVsOiB0b3BMZXZlbCxcbiAgICBlbmNsb3NlZENvbm5lY3Rpb25zOiBlbmNsb3NlZENvbm5lY3Rpb25zLFxuICAgIGVuY2xvc2VkRWxlbWVudHM6IGVuY2xvc2VkRWxlbWVudHNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdXJyb3VuZGluZyBiYm94IGZvciBhbGwgZWxlbWVudHMgaW5cbiAqIHRoZSBhcnJheSBvciB0aGUgZWxlbWVudCBwcmltaXRpdmUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fGRqcy5tb2RlbC5TaGFwZX0gZWxlbWVudHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RvcFJlY3Vyc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QkJveChlbGVtZW50cywgc3RvcFJlY3Vyc2lvbikge1xuXG4gIHN0b3BSZWN1cnNpb24gPSAhIXN0b3BSZWN1cnNpb247XG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFtlbGVtZW50c107XG4gIH1cblxuICB2YXIgbWluWCxcbiAgICAgIG1pblksXG4gICAgICBtYXhYLFxuICAgICAgbWF4WTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAvLyBJZiBlbGVtZW50IGlzIGEgY29ubmVjdGlvbiB0aGUgYmJveCBtdXN0IGJlIGNvbXB1dGVkIGZpcnN0XG4gICAgdmFyIGJib3ggPSBlbGVtZW50O1xuICAgIGlmIChlbGVtZW50LndheXBvaW50cyAmJiAhc3RvcFJlY3Vyc2lvbikge1xuICAgICAgYmJveCA9IGdldEJCb3goZWxlbWVudC53YXlwb2ludHMsIHRydWUpO1xuICAgIH1cblxuICAgIHZhciB4ID0gYmJveC54LFxuICAgICAgICB5ID0gYmJveC55LFxuICAgICAgICBoZWlnaHQgPSBiYm94LmhlaWdodCB8fCAwLFxuICAgICAgICB3aWR0aCA9IGJib3gud2lkdGggfHwgMDtcblxuICAgIGlmICh4IDwgbWluWCB8fCBtaW5YID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1pblggPSB4O1xuICAgIH1cbiAgICBpZiAoeSA8IG1pblkgfHwgbWluWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtaW5ZID0geTtcbiAgICB9XG5cbiAgICBpZiAoKHggKyB3aWR0aCkgPiBtYXhYIHx8IG1heFggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4WCA9IHggKyB3aWR0aDtcbiAgICB9XG4gICAgaWYgKCh5ICsgaGVpZ2h0KSA+IG1heFkgfHwgbWF4WSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXhZID0geSArIGhlaWdodDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIGhlaWdodDogbWF4WSAtIG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YXG4gIH07XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBlbmNsb3NlZCBmcm9tIHRoZSBib3VuZGluZyBib3guXG4gKlxuICogICAqIElmIGJib3guKHdpZHRofGhlaWdodCkgaXMgbm90IHNwZWNpZmllZCB0aGUgbWV0aG9kIHJldHVybnNcbiAqICAgICBhbGwgZWxlbWVudHMgd2l0aCBlbGVtZW50LngveSA+IGJib3gueC95XG4gKiAgICogSWYgb25seSBiYm94Lnggb3IgYmJveC55IGlzIHNwZWNpZmllZCwgbWV0aG9kIHJldHVybiBhbGwgZWxlbWVudHMgd2l0aFxuICogICAgIGUueCA+IGJib3gueCBvciBlLnkgPiBiYm94LnlcbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGVsZW1lbnRzIExpc3Qgb2YgRWxlbWVudHMgdG8gc2VhcmNoIHRocm91Z2hcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBiYm94IHRoZSBlbmNsb3NpbmcgYmJveC5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbmNsb3NlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5jbG9zZWRFbGVtZW50cyhlbGVtZW50cywgYmJveCkge1xuXG4gIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0ge307XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIGUgPSBlbGVtZW50O1xuXG4gICAgaWYgKGUud2F5cG9pbnRzKSB7XG4gICAgICBlID0gZ2V0QkJveChlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTnVtYmVyKGJib3gueSkgJiYgKGUueCA+IGJib3gueCkpIHtcbiAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIWlzTnVtYmVyKGJib3gueCkgJiYgKGUueSA+IGJib3gueSkpIHtcbiAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH1cbiAgICBpZiAoZS54ID4gYmJveC54ICYmIGUueSA+IGJib3gueSkge1xuICAgICAgaWYgKGlzTnVtYmVyKGJib3gud2lkdGgpICYmIGlzTnVtYmVyKGJib3guaGVpZ2h0KSAmJlxuICAgICAgICAgIGUud2lkdGggKyBlLnggPCBiYm94LndpZHRoICsgYmJveC54ICYmXG4gICAgICAgICAgZS5oZWlnaHQgKyBlLnkgPCBiYm94LmhlaWdodCArIGJib3gueSkge1xuXG4gICAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgICAgfSBlbHNlIGlmICghaXNOdW1iZXIoYmJveC53aWR0aCkgfHwgIWlzTnVtYmVyKGJib3guaGVpZ2h0KSkge1xuICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlKGVsZW1lbnQpIHtcblxuICBpZiAoJ3dheXBvaW50cycgaW4gZWxlbWVudCkge1xuICAgIHJldHVybiAnY29ubmVjdGlvbic7XG4gIH1cblxuICBpZiAoJ3gnIGluIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gJ3NoYXBlJztcbiAgfVxuXG4gIHJldHVybiAncm9vdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZyYW1lRWxlbWVudChlbGVtZW50KSB7XG5cbiAgcmV0dXJuICEhKGVsZW1lbnQgJiYgZWxlbWVudC5pc0ZyYW1lKTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc3JjMSwgc3JjMikge1xuICByZXR1cm4gYXNzaWduKHt9LCBzcmMxIHx8IHt9LCBzcmMyIHx8IHt9KTtcbn0iLCJleHBvcnQge1xuICBkZWZhdWx0IGFzIGVzY2FwZUNTU1xufSBmcm9tICdjc3MuZXNjYXBlJztcblxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjMzk7J1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUhUTUwoc3RyKSB7XG4gIHN0ciA9ICcnICsgc3RyO1xuXG4gIHJldHVybiBzdHIgJiYgc3RyLnJlcGxhY2UoL1smPD5cIiddL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIEhUTUxfRVNDQVBFX01BUFttYXRjaF07XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gX19zdG9wUHJvcGFnYXRpb24oZXZlbnQpIHtcbiAgaWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQuc3RvcFByb3BhZ2F0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdpbmFsKGV2ZW50KSB7XG4gIHJldHVybiBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50LnNyY0V2ZW50O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZXZlbnQsIGltbWVkaWF0ZSkge1xuICBfX3N0b3BQcm9wYWdhdGlvbihldmVudCwgaW1tZWRpYXRlKTtcbiAgX19zdG9wUHJvcGFnYXRpb24oZ2V0T3JpZ2luYWwoZXZlbnQpLCBpbW1lZGlhdGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BvaW50KGV2ZW50KSB7XG5cbiAgaWYgKGV2ZW50LnBvaW50ZXJzICYmIGV2ZW50LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgIGV2ZW50ID0gZXZlbnQucG9pbnRlcnNbMF07XG4gIH1cblxuICBpZiAoZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCkge1xuICAgIGV2ZW50ID0gZXZlbnQudG91Y2hlc1swXTtcbiAgfVxuXG4gIHJldHVybiBldmVudCA/IHtcbiAgICB4OiBldmVudC5jbGllbnRYLFxuICAgIHk6IGV2ZW50LmNsaWVudFlcbiAgfSA6IG51bGw7XG59IiwiaW1wb3J0IHtcbiAgZXZlcnksXG4gIGlzQXJyYXlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqXG4gKiBAcGFyYW0gIHtQb2ludH0gIHBcbiAqIEBwYXJhbSAge1BvaW50fSAgcVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gIGRpc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludERpc3RhbmNlKGEsIGIpIHtcbiAgaWYgKCFhIHx8ICFiKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc3FydChcbiAgICBNYXRoLnBvdyhhLnggLSBiLngsIDIpICtcbiAgICBNYXRoLnBvdyhhLnkgLSBiLnksIDIpXG4gICk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvaW50IHIgaXMgb24gdGhlIGxpbmUgYmV0d2VlbiBwIGFuZCBxXG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtQb2ludH0gIHFcbiAqIEBwYXJhbSAge1BvaW50fSAgclxuICogQHBhcmFtICB7bnVtYmVyfSBbYWNjdXJhY3k9NV0gYWNjdXJhY3kgZm9yIHBvaW50cyBvbiBsaW5lIGNoZWNrIChsb3dlciBpcyBiZXR0ZXIpXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvaW50c09uTGluZShwLCBxLCByLCBhY2N1cmFjeSkge1xuXG4gIGlmICh0eXBlb2YgYWNjdXJhY3kgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgYWNjdXJhY3kgPSA1O1xuICB9XG5cbiAgaWYgKCFwIHx8ICFxIHx8ICFyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHZhbCA9IChxLnggLSBwLngpICogKHIueSAtIHAueSkgLSAocS55IC0gcC55KSAqIChyLnggLSBwLngpLFxuICAgICAgZGlzdCA9IHBvaW50RGlzdGFuY2UocCwgcSk7XG5cbiAgLy8gQHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85MDc0OTEvNDEyMTkwXG4gIHJldHVybiBNYXRoLmFicyh2YWwgLyBkaXN0KSA8PSBhY2N1cmFjeTtcbn1cblxuXG52YXIgQUxJR05FRF9USFJFU0hPTEQgPSAyO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdHdvIHBvaW50cyBhcmUgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkgYWxpZ25lZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50PnxQb2ludH1cbiAqIEBwYXJhbSB7UG9pbnR9XG4gKlxuICogQHJldHVybiB7c3RyaW5nfGJvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNBbGlnbmVkKGEsIGIpIHtcbiAgdmFyIHBvaW50cztcblxuICBpZiAoaXNBcnJheShhKSkge1xuICAgIHBvaW50cyA9IGE7XG4gIH0gZWxzZSB7XG4gICAgcG9pbnRzID0gWyBhLCBiIF07XG4gIH1cblxuICBpZiAocG9pbnRzQWxpZ25lZEhvcml6b250YWxseShwb2ludHMpKSB7XG4gICAgcmV0dXJuICdoJztcbiAgfVxuXG4gIGlmIChwb2ludHNBbGlnbmVkVmVydGljYWxseShwb2ludHMpKSB7XG4gICAgcmV0dXJuICd2JztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50c0FsaWduZWRIb3Jpem9udGFsbHkoYSwgYikge1xuICB2YXIgcG9pbnRzO1xuXG4gIGlmIChpc0FycmF5KGEpKSB7XG4gICAgcG9pbnRzID0gYTtcbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSBbIGEsIGIgXTtcbiAgfVxuXG4gIHZhciBmaXJzdFBvaW50ID0gcG9pbnRzLnNsaWNlKCkuc2hpZnQoKTtcblxuICByZXR1cm4gZXZlcnkocG9pbnRzLCBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBNYXRoLmFicyhmaXJzdFBvaW50LnkgLSBwb2ludC55KSA8PSBBTElHTkVEX1RIUkVTSE9MRDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNBbGlnbmVkVmVydGljYWxseShhLCBiKSB7XG4gIHZhciBwb2ludHM7XG5cbiAgaWYgKGlzQXJyYXkoYSkpIHtcbiAgICBwb2ludHMgPSBhO1xuICB9IGVsc2Uge1xuICAgIHBvaW50cyA9IFsgYSwgYiBdO1xuICB9XG5cbiAgdmFyIGZpcnN0UG9pbnQgPSBwb2ludHMuc2xpY2UoKS5zaGlmdCgpO1xuXG4gIHJldHVybiBldmVyeShwb2ludHMsIGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKGZpcnN0UG9pbnQueCAtIHBvaW50LngpIDw9IEFMSUdORURfVEhSRVNIT0xEO1xuICB9KTtcbn1cblxuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb2ludCBwIGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlIHJlY3RcbiAqXG4gKiBAcGFyYW0gIHtQb2ludH0gIHBcbiAqIEBwYXJhbSAge1JlY3R9IHJlY3RcbiAqIEBwYXJhbSAge251bWJlcn0gdG9sZXJhbmNlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvaW50SW5SZWN0KHAsIHJlY3QsIHRvbGVyYW5jZSkge1xuICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgfHwgMDtcblxuICByZXR1cm4gcC54ID4gcmVjdC54IC0gdG9sZXJhbmNlICYmXG4gICAgICAgICBwLnkgPiByZWN0LnkgLSB0b2xlcmFuY2UgJiZcbiAgICAgICAgIHAueCA8IHJlY3QueCArIHJlY3Qud2lkdGggKyB0b2xlcmFuY2UgJiZcbiAgICAgICAgIHAueSA8IHJlY3QueSArIHJlY3QuaGVpZ2h0ICsgdG9sZXJhbmNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIHBvaW50cyBwIGFuZCBxXG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtQb2ludH0gIHFcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH0gbWlkZGxlIHBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWRQb2ludChwLCBxKSB7XG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChwLnggKyAoKHEueCAtIHAueCkgLyAyLjApKSxcbiAgICB5OiBNYXRoLnJvdW5kKHAueSArICgocS55IC0gcC55KSAvIDIuMCkpXG4gIH07XG59XG4iLCIvKipcbiAqIFNWR3MgZm9yIGVsZW1lbnRzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIHtAbGluayBHcmFwaGljc0ZhY3Rvcnl9LlxuICpcbiAqIFRoaXMgdXRpbGl0eSBnaXZlcyBxdWljayBhY2Nlc3MgdG8gdGhlIGltcG9ydGFudCBzZW1hbnRpY1xuICogcGFydHMgb2YgYW4gZWxlbWVudC5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpc3VhbCBwYXJ0IG9mIGEgZGlhZ3JhbSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtTbmFwPFNWR0VsZW1lbnQ+fSBnZnhcbiAqXG4gKiBAcmV0dXJuIHtTbmFwPFNWR0VsZW1lbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsKGdmeCkge1xuICByZXR1cm4gZ2Z4LmNoaWxkTm9kZXNbMF07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGRyZW4gZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7U25hcDxTVkdFbGVtZW50Pn0gZ2Z4XG4gKiBAcmV0dXJuIHtTbmFwPFNWR0VsZW1lbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oZ2Z4KSB7XG4gIHJldHVybiBnZngucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzFdO1xufSIsIi8qKlxuICogVXRpbCB0aGF0IHByb3ZpZGVzIHVuaXF1ZSBJRHMuXG4gKlxuICogQGNsYXNzIGRqcy51dGlsLklkR2VuZXJhdG9yXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJPZiBkanMudXRpbFxuICpcbiAqIFRoZSBpZHMgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIGEgZ2l2ZW4gcHJlZml4IGFuZCBjb250YWluIGEgcmFuZG9tIHZhbHVlIHRvIGF2b2lkIGNvbGxpc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCBhIHByZWZpeCB0byBwcmVwZW5kIHRvIGdlbmVyYXRlZCBpZHMgKGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIElkR2VuZXJhdG9yKHByZWZpeCkge1xuXG4gIHRoaXMuX2NvdW50ZXIgPSAwO1xuICB0aGlzLl9wcmVmaXggPSAocHJlZml4ID8gcHJlZml4ICsgJy0nIDogJycpICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMCkgKyAnLSc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG5leHQgdW5pcXVlIElELlxuICpcbiAqIEBtZXRob2QgZGpzLnV0aWwuSWRHZW5lcmF0b3IjbmV4dFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBpZFxuICovXG5JZEdlbmVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcHJlZml4ICsgKCsrdGhpcy5fY291bnRlcik7XG59O1xuIiwiaW1wb3J0IHtcbiAgcG9pbnREaXN0YW5jZVxufSBmcm9tICcuL0dlb21ldHJ5JztcblxuaW1wb3J0IGludGVyc2VjdFBhdGhzIGZyb20gJ3BhdGgtaW50ZXJzZWN0aW9uJztcblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBtYXggPSBNYXRoLm1heDtcblxuXG5mdW5jdGlvbiBjaXJjbGVQYXRoKGNlbnRlciwgcikge1xuICB2YXIgeCA9IGNlbnRlci54LFxuICAgICAgeSA9IGNlbnRlci55O1xuXG4gIHJldHVybiBbXG4gICAgWydNJywgeCwgeV0sXG4gICAgWydtJywgMCwgLXJdLFxuICAgIFsnYScsIHIsIHIsIDAsIDEsIDEsIDAsIDIgKiByXSxcbiAgICBbJ2EnLCByLCByLCAwLCAxLCAxLCAwLCAtMiAqIHJdLFxuICAgIFsneiddXG4gIF07XG59XG5cbmZ1bmN0aW9uIGxpbmVQYXRoKHBvaW50cykge1xuICB2YXIgc2VnbWVudHMgPSBbXTtcblxuICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbihwLCBpZHgpIHtcbiAgICBzZWdtZW50cy5wdXNoKFsgaWR4ID09PSAwID8gJ00nIDogJ0wnLCBwLngsIHAueSBdKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5cbnZhciBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEID0gMTA7XG5cbmZ1bmN0aW9uIGdldEJlbmRwb2ludEludGVyc2VjdGlvbih3YXlwb2ludHMsIHJlZmVyZW5jZSkge1xuXG4gIHZhciBpLCB3O1xuXG4gIGZvciAoaSA9IDA7ICh3ID0gd2F5cG9pbnRzW2ldKTsgaSsrKSB7XG5cbiAgICBpZiAocG9pbnREaXN0YW5jZSh3LCByZWZlcmVuY2UpIDw9IElOVEVSU0VDVElPTl9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvaW50OiB3YXlwb2ludHNbaV0sXG4gICAgICAgIGJlbmRwb2ludDogdHJ1ZSxcbiAgICAgICAgaW5kZXg6IGlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpIHtcblxuICB2YXIgaW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdFBhdGhzKGNpcmNsZVBhdGgocmVmZXJlbmNlLCBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEKSwgbGluZVBhdGgod2F5cG9pbnRzKSk7XG5cbiAgdmFyIGEgPSBpbnRlcnNlY3Rpb25zWzBdLFxuICAgICAgYiA9IGludGVyc2VjdGlvbnNbaW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxXSxcbiAgICAgIGlkeDtcblxuICBpZiAoIWEpIHtcblxuICAgIC8vIG5vIGludGVyc2VjdGlvblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGEgIT09IGIpIHtcblxuICAgIGlmIChhLnNlZ21lbnQyICE9PSBiLnNlZ21lbnQyKSB7XG5cbiAgICAgIC8vIHdlIHVzZSB0aGUgYmVuZHBvaW50IGluIGJldHdlZW4gYm90aCBzZWdtZW50c1xuICAgICAgLy8gYXMgdGhlIGludGVyc2VjdGlvbiBwb2ludFxuXG4gICAgICBpZHggPSBtYXgoYS5zZWdtZW50MiwgYi5zZWdtZW50MikgLSAxO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogd2F5cG9pbnRzW2lkeF0sXG4gICAgICAgIGJlbmRwb2ludDogdHJ1ZSxcbiAgICAgICAgaW5kZXg6IGlkeFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcG9pbnQ6IHtcbiAgICAgICAgeDogKHJvdW5kKGEueCArIGIueCkgLyAyKSxcbiAgICAgICAgeTogKHJvdW5kKGEueSArIGIueSkgLyAyKVxuICAgICAgfSxcbiAgICAgIGluZGV4OiBhLnNlZ21lbnQyXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IHtcbiAgICAgIHg6IHJvdW5kKGEueCksXG4gICAgICB5OiByb3VuZChhLnkpXG4gICAgfSxcbiAgICBpbmRleDogYS5zZWdtZW50MlxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIGNvbm5lY3Rpb24gdG93YXJkcyBhIGdpdmVuIHJlZmVyZW5jZSBwb2ludC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICogQHBhcmFtICB7UG9pbnR9IHJlZmVyZW5jZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gaW50ZXJzZWN0aW9uIGRhdGEgKHNlZ21lbnQsIHBvaW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgcmVmZXJlbmNlKSB7XG4gIHJldHVybiBnZXRCZW5kcG9pbnRJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpIHx8IGdldFBhdGhJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpO1xufVxuIiwiLyoqXG4gKiBHZXQgdGhlIGxvZ2FyaXRobSBvZiB4IHdpdGggYmFzZSAxMFxuICogQHBhcmFtICB7SW50ZWdlcn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5sb2coMTApO1xufVxuXG5leHBvcnQgeyBkZWx0YSBhcyBzdWJzdHJhY3QgfSBmcm9tICcuL1Bvc2l0aW9uVXRpbCc7XG4iLCJpbXBvcnQge1xuICBnZXRPcmlnaW5hbCBhcyBnZXRPcmlnaW5hbEV2ZW50XG59IGZyb20gJy4vRXZlbnQnO1xuXG5pbXBvcnQge1xuICBpc01hY1xufSBmcm9tICcuL1BsYXRmb3JtJztcblxuZXhwb3J0IHtcbiAgaXNNYWNcbn0gZnJvbSAnLi9QbGF0Zm9ybSc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWFyeUJ1dHRvbihldmVudCkge1xuXG4gIC8vIGJ1dHRvbiA9PT0gMCAtPiBsZWZ0IMOha2EgcHJpbWFyeSBtb3VzZSBidXR0b25cbiAgcmV0dXJuICEoZ2V0T3JpZ2luYWxFdmVudChldmVudCkgfHwgZXZlbnQpLmJ1dHRvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByaW1hcnlNb2RpZmllcihldmVudCkge1xuICB2YXIgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHx8IGV2ZW50O1xuXG4gIGlmICghaXNQcmltYXJ5QnV0dG9uKGV2ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFVzZSBhbHQgYXMgcHJpbWFyeSBtb2RpZmllciBrZXkgZm9yIG1hYyBPU1xuICBpZiAoaXNNYWMoKSkge1xuICAgIHJldHVybiBvcmlnaW5hbEV2ZW50Lm1ldGFLZXk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsRXZlbnQuY3RybEtleTtcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTZWNvbmRhcnlNb2RpZmllcihldmVudCkge1xuICB2YXIgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHx8IGV2ZW50O1xuXG4gIHJldHVybiBpc1ByaW1hcnlCdXR0b24oZXZlbnQpICYmIG9yaWdpbmFsRXZlbnQuc2hpZnRLZXk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIGlzTWFjKCkge1xuICByZXR1cm4gKC9tYWMvaSkudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xufSIsImV4cG9ydCBmdW5jdGlvbiBjZW50ZXIoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIC8gMiksXG4gICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCAvIDIpXG4gIH07XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbHRhKGEsIGIpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBhLnggLSBiLngsXG4gICAgeTogYS55IC0gYi55XG4gIH07XG59IiwiLyoqXG4gKiBSZW1vdmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgY29sbGVjdGlvbiB1bnRpbCBpdCBpcyBlbXB0eS5cbiAqXG4gKiBUaGlzIGlzIGEgbnVsbC1zYWZlIG9wZXJhdGlvbiB0aGF0IGVuc3VyZXMgZWxlbWVudHNcbiAqIGFyZSBiZWluZyByZW1vdmVkIGZyb20gdGhlIGdpdmVuIGNvbGxlY3Rpb24gdW50aWwgdGhlXG4gKiBjb2xsZWN0aW9uIGlzIGVtcHR5LlxuICpcbiAqIFRoZSBpbXBsZW1lbnRhdGlvbiBkZWFscyB3aXRoIHRoZSBmYWN0IHRoYXQgYSByZW1vdmUgb3BlcmF0aW9uXG4gKiBtYXkgdG91Y2gsIGkuZS4gcmVtb3ZlIG11bHRpcGxlIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uXG4gKiBhdCBhIHRpbWUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBbY29sbGVjdGlvbl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlbW92ZUZuXG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gdGhlIGNsZWFyZWQgY29sbGVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUNsZWFyKGNvbGxlY3Rpb24sIHJlbW92ZUZuKSB7XG5cbiAgaWYgKHR5cGVvZiByZW1vdmVGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVtb3ZlRm4gaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZTtcblxuICB3aGlsZSAoKGUgPSBjb2xsZWN0aW9uWzBdKSkge1xuICAgIHJlbW92ZUZuKGUpO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG4iLCJpbXBvcnQge1xuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb25lbnRzVG9QYXRoKGVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5qb2luKCcsJykucmVwbGFjZSgvLD8oW0Etel0pLD8vZywgJyQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NWR1BvaW50cyhwb2ludHMpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwLCBwOyAocCA9IHBvaW50c1tpXSk7IGkrKykge1xuICAgIHJlc3VsdCArPSBwLnggKyAnLCcgKyBwLnkgKyAnICc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGluZShwb2ludHMsIGF0dHJzKSB7XG5cbiAgdmFyIGxpbmUgPSBzdmdDcmVhdGUoJ3BvbHlsaW5lJyk7XG4gIHN2Z0F0dHIobGluZSwgeyBwb2ludHM6IHRvU1ZHUG9pbnRzKHBvaW50cykgfSk7XG5cbiAgaWYgKGF0dHJzKSB7XG4gICAgc3ZnQXR0cihsaW5lLCBhdHRycyk7XG4gIH1cblxuICByZXR1cm4gbGluZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmUoZ2Z4LCBwb2ludHMpIHtcbiAgc3ZnQXR0cihnZngsIHsgcG9pbnRzOiB0b1NWR1BvaW50cyhwb2ludHMpIH0pO1xuXG4gIHJldHVybiBnZng7XG59XG4iLCJpbXBvcnQge1xyXG4gIHRyYW5zZm9ybSBhcyBzdmdUcmFuc2Zvcm0sXHJcbiAgY3JlYXRlVHJhbnNmb3JtXHJcbn0gZnJvbSAndGlueS1zdmcnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gezxTVkdFbGVtZW50Pn0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcclxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShnZngsIHgsIHksIGFuZ2xlLCBhbW91bnQpIHtcclxuICB2YXIgdHJhbnNsYXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgdHJhbnNsYXRlLnNldFRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgdmFyIHJvdGF0ZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHJvdGF0ZS5zZXRSb3RhdGUoYW5nbGUgfHwgMCwgMCwgMCk7XHJcblxyXG4gIHZhciBzY2FsZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHNjYWxlLnNldFNjYWxlKGFtb3VudCB8fCAxLCBhbW91bnQgfHwgMSk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIFsgdHJhbnNsYXRlLCByb3RhdGUsIHNjYWxlIF0pO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShnZngsIHgsIHkpIHtcclxuICB2YXIgdHJhbnNsYXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgdHJhbnNsYXRlLnNldFRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgc3ZnVHJhbnNmb3JtKGdmeCwgdHJhbnNsYXRlKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKGdmeCwgYW5nbGUpIHtcclxuICB2YXIgcm90YXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgcm90YXRlLnNldFJvdGF0ZShhbmdsZSwgMCwgMCk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIHJvdGF0ZSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShnZngsIGFtb3VudCkge1xyXG4gIHZhciBzY2FsZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHNjYWxlLnNldFNjYWxlKGFtb3VudCwgYW1vdW50KTtcclxuXHJcbiAgc3ZnVHJhbnNmb3JtKGdmeCwgc2NhbGUpO1xyXG59IiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgcmVkdWNlXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIERFRkFVTFRfQk9YX1BBRERJTkcgPSAwO1xuXG52YXIgREVGQVVMVF9MQUJFTF9TSVpFID0ge1xuICB3aWR0aDogMTUwLFxuICBoZWlnaHQ6IDUwXG59O1xuXG5cbmZ1bmN0aW9uIHBhcnNlQWxpZ24oYWxpZ24pIHtcblxuICB2YXIgcGFydHMgPSBhbGlnbi5zcGxpdCgnLScpO1xuXG4gIHJldHVybiB7XG4gICAgaG9yaXpvbnRhbDogcGFydHNbMF0gfHwgJ2NlbnRlcicsXG4gICAgdmVydGljYWw6IHBhcnRzWzFdIHx8ICd0b3AnXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFkZGluZyhwYWRkaW5nKSB7XG5cbiAgaWYgKGlzT2JqZWN0KHBhZGRpbmcpKSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LCBwYWRkaW5nKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBwYWRkaW5nLFxuICAgICAgbGVmdDogcGFkZGluZyxcbiAgICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgICAgYm90dG9tOiBwYWRkaW5nXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUZXh0QkJveCh0ZXh0LCBmYWtlVGV4dCkge1xuXG4gIGZha2VUZXh0LnRleHRDb250ZW50ID0gdGV4dDtcblxuICB2YXIgdGV4dEJCb3g7XG5cbiAgdHJ5IHtcbiAgICB2YXIgYmJveCxcbiAgICAgICAgZW1wdHlMaW5lID0gdGV4dCA9PT0gJyc7XG5cbiAgICAvLyBhZGQgZHVtbXkgdGV4dCwgd2hlbiBsaW5lIGlzIGVtcHR5IHRvXG4gICAgLy8gZGV0ZXJtaW5lIGNvcnJlY3QgaGVpZ2h0XG4gICAgZmFrZVRleHQudGV4dENvbnRlbnQgPSBlbXB0eUxpbmUgPyAnZHVtbXknIDogdGV4dDtcblxuICAgIHRleHRCQm94ID0gZmFrZVRleHQuZ2V0QkJveCgpO1xuXG4gICAgLy8gdGFrZSB0ZXh0IHJlbmRlcmluZyByZWxhdGVkIGhvcml6b250YWxcbiAgICAvLyBwYWRkaW5nIGludG8gYWNjb3VudFxuICAgIGJib3ggPSB7XG4gICAgICB3aWR0aDogdGV4dEJCb3gud2lkdGggKyB0ZXh0QkJveC54ICogMixcbiAgICAgIGhlaWdodDogdGV4dEJCb3guaGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChlbXB0eUxpbmUpIHtcblxuICAgICAgLy8gY29ycmVjdCB3aWR0aFxuICAgICAgYmJveC53aWR0aCA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJib3g7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIExheW91dCB0aGUgbmV4dCBsaW5lIGFuZCByZXR1cm4gdGhlIGxheW91dGVkIGVsZW1lbnQuXG4gKlxuICogQWx0ZXJzIHRoZSBsaW5lcyBwYXNzZWQuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gbGluZXNcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGxpbmUgZGVzY3JpcHRvciwgYW4gb2JqZWN0IHsgd2lkdGgsIGhlaWdodCwgdGV4dCB9XG4gKi9cbmZ1bmN0aW9uIGxheW91dE5leHQobGluZXMsIG1heFdpZHRoLCBmYWtlVGV4dCkge1xuXG4gIHZhciBvcmlnaW5hbExpbmUgPSBsaW5lcy5zaGlmdCgpLFxuICAgICAgZml0TGluZSA9IG9yaWdpbmFsTGluZTtcblxuICB2YXIgdGV4dEJCb3g7XG5cbiAgZm9yICg7Oykge1xuICAgIHRleHRCQm94ID0gZ2V0VGV4dEJCb3goZml0TGluZSwgZmFrZVRleHQpO1xuXG4gICAgdGV4dEJCb3gud2lkdGggPSBmaXRMaW5lID8gdGV4dEJCb3gud2lkdGggOiAwO1xuXG4gICAgLy8gdHJ5IHRvIGZpdFxuICAgIGlmIChmaXRMaW5lID09PSAnICcgfHwgZml0TGluZSA9PT0gJycgfHwgdGV4dEJCb3gud2lkdGggPCBNYXRoLnJvdW5kKG1heFdpZHRoKSB8fCBmaXRMaW5lLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBmaXQobGluZXMsIGZpdExpbmUsIG9yaWdpbmFsTGluZSwgdGV4dEJCb3gpO1xuICAgIH1cblxuICAgIGZpdExpbmUgPSBzaG9ydGVuTGluZShmaXRMaW5lLCB0ZXh0QkJveC53aWR0aCwgbWF4V2lkdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpdChsaW5lcywgZml0TGluZSwgb3JpZ2luYWxMaW5lLCB0ZXh0QkJveCkge1xuICBpZiAoZml0TGluZS5sZW5ndGggPCBvcmlnaW5hbExpbmUubGVuZ3RoKSB7XG4gICAgdmFyIHJlbWFpbmRlciA9IG9yaWdpbmFsTGluZS5zbGljZShmaXRMaW5lLmxlbmd0aCkudHJpbSgpO1xuXG4gICAgbGluZXMudW5zaGlmdChyZW1haW5kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogdGV4dEJCb3gud2lkdGgsXG4gICAgaGVpZ2h0OiB0ZXh0QkJveC5oZWlnaHQsXG4gICAgdGV4dDogZml0TGluZVxuICB9O1xufVxuXG5cbi8qKlxuICogU2hvcnRlbnMgYSBsaW5lIGJhc2VkIG9uIHNwYWNpbmcgYW5kIGh5cGhlbnMuXG4gKiBSZXR1cm5zIHRoZSBzaG9ydGVuZWQgcmVzdWx0IG9uIHN1Y2Nlc3MuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBsaW5lXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heExlbmd0aCB0aGUgbWF4aW11bSBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHNob3J0ZW5lZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc2VtYW50aWNTaG9ydGVuKGxpbmUsIG1heExlbmd0aCkge1xuICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KC8oXFxzfC0pL2cpLFxuICAgICAgcGFydCxcbiAgICAgIHNob3J0ZW5lZFBhcnRzID0gW10sXG4gICAgICBsZW5ndGggPSAwO1xuXG4gIC8vIHRyeSB0byBzaG9ydGVuIHZpYSBzcGFjZXMgKyBoeXBoZW5zXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgd2hpbGUgKChwYXJ0ID0gcGFydHMuc2hpZnQoKSkpIHtcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCArIGxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgICAgICBzaG9ydGVuZWRQYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICBsZW5ndGggKz0gcGFydC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBwYXJ0LCB0b28gaWYgaHlwaGVuIGRvZXMgbm90IGZpdCBhbnltb3JlXG4gICAgICAgIGlmIChwYXJ0ID09PSAnLScpIHtcbiAgICAgICAgICBzaG9ydGVuZWRQYXJ0cy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydGVuZWRQYXJ0cy5qb2luKCcnKTtcbn1cblxuXG5mdW5jdGlvbiBzaG9ydGVuTGluZShsaW5lLCB3aWR0aCwgbWF4V2lkdGgpIHtcbiAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGxpbmUubGVuZ3RoICogKG1heFdpZHRoIC8gd2lkdGgpLCAxKTtcblxuICAvLyB0cnkgdG8gc2hvcnRlbiBzZW1hbnRpY2FsbHkgKGkuZS4gYmFzZWQgb24gc3BhY2VzIGFuZCBoeXBoZW5zKVxuICB2YXIgc2hvcnRlbmVkTGluZSA9IHNlbWFudGljU2hvcnRlbihsaW5lLCBsZW5ndGgpO1xuXG4gIGlmICghc2hvcnRlbmVkTGluZSkge1xuXG4gICAgLy8gZm9yY2Ugc2hvcnRlbiBieSBjdXR0aW5nIHRoZSBsb25nIHdvcmRcbiAgICBzaG9ydGVuZWRMaW5lID0gbGluZS5zbGljZSgwLCBNYXRoLm1heChNYXRoLnJvdW5kKGxlbmd0aCAtIDEpLCAxKSk7XG4gIH1cblxuICByZXR1cm4gc2hvcnRlbmVkTGluZTtcbn1cblxuXG5mdW5jdGlvbiBnZXRIZWxwZXJTdmcoKSB7XG4gIHZhciBoZWxwZXJTdmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscGVyLXN2ZycpO1xuXG4gIGlmICghaGVscGVyU3ZnKSB7XG4gICAgaGVscGVyU3ZnID0gc3ZnQ3JlYXRlKCdzdmcnKTtcblxuICAgIHN2Z0F0dHIoaGVscGVyU3ZnLCB7XG4gICAgICBpZDogJ2hlbHBlci1zdmcnLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBzdHlsZTogJ3Zpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkJ1xuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoZWxwZXJTdmcpO1xuICB9XG5cbiAgcmV0dXJuIGhlbHBlclN2Zztcbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbGFiZWwgdXRpbGl0eVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RGltZW5zaW9uc30gY29uZmlnLnNpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb25maWcucGFkZGluZ1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZy5zdHlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5hbGlnblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXh0KGNvbmZpZykge1xuXG4gIHRoaXMuX2NvbmZpZyA9IGFzc2lnbih7fSwge1xuICAgIHNpemU6IERFRkFVTFRfTEFCRUxfU0laRSxcbiAgICBwYWRkaW5nOiBERUZBVUxUX0JPWF9QQURESU5HLFxuICAgIHN0eWxlOiB7fSxcbiAgICBhbGlnbjogJ2NlbnRlci10b3AnXG4gIH0sIGNvbmZpZyB8fCB7fSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGF5b3V0ZWQgdGV4dCBhcyBhbiBTVkcgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICovXG5UZXh0LnByb3RvdHlwZS5jcmVhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICByZXR1cm4gdGhpcy5sYXlvdXRUZXh0KHRleHQsIG9wdGlvbnMpLmVsZW1lbnQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBsYWJlbHMgbGF5b3V0ZWQgZGltZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCB0byBsYXlvdXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7RGltZW5zaW9uc31cbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0RGltZW5zaW9ucyA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMubGF5b3V0VGV4dCh0ZXh0LCBvcHRpb25zKS5kaW1lbnNpb25zO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbGFiZWwgYW5kIGl0cyBib3VuZGluZyBib3guXG4gKlxuICogQG1ldGhvZCBUZXh0I2NyZWF0ZVRleHRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCB0aGUgdGV4dCB0byByZW5kZXIgb24gdGhlIGxhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuYWxpZ24gaG93IHRvIGFsaWduIGluIHRoZSBib3VuZGluZyBib3guXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgb2YgeyAnY2VudGVyLW1pZGRsZScsICdjZW50ZXItdG9wJyB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gJ2NlbnRlci10b3AnLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuc3R5bGUgc3R5bGUgdG8gYmUgYXBwbGllZCB0byB0aGUgdGV4dFxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmZpdEJveCBpbmRpY2F0ZXMgaWYgYm94IHdpbGwgYmUgcmVjYWxjdWxhdGVkIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdCB0ZXh0XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB7IGVsZW1lbnQsIGRpbWVuc2lvbnMgfVxuICovXG5UZXh0LnByb3RvdHlwZS5sYXlvdXRUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICB2YXIgYm94ID0gYXNzaWduKHt9LCB0aGlzLl9jb25maWcuc2l6ZSwgb3B0aW9ucy5ib3gpLFxuICAgICAgc3R5bGUgPSBhc3NpZ24oe30sIHRoaXMuX2NvbmZpZy5zdHlsZSwgb3B0aW9ucy5zdHlsZSksXG4gICAgICBhbGlnbiA9IHBhcnNlQWxpZ24ob3B0aW9ucy5hbGlnbiB8fCB0aGlzLl9jb25maWcuYWxpZ24pLFxuICAgICAgcGFkZGluZyA9IHBhcnNlUGFkZGluZyhvcHRpb25zLnBhZGRpbmcgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMucGFkZGluZyA6IHRoaXMuX2NvbmZpZy5wYWRkaW5nKSxcbiAgICAgIGZpdEJveCA9IG9wdGlvbnMuZml0Qm94IHx8IGZhbHNlO1xuXG4gIHZhciBsaW5lSGVpZ2h0ID0gZ2V0TGluZUhlaWdodChzdHlsZSk7XG5cbiAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgvXFxyP1xcbi9nKSxcbiAgICAgIGxheW91dGVkID0gW107XG5cbiAgdmFyIG1heFdpZHRoID0gYm94LndpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcblxuICAvLyBlbnN1cmUgY29ycmVjdCByZW5kZXJpbmcgYnkgYXR0YWNoaW5nIGhlbHBlciB0ZXh0IG5vZGUgdG8gaW52aXNpYmxlIFNWR1xuICB2YXIgaGVscGVyVGV4dCA9IHN2Z0NyZWF0ZSgndGV4dCcpO1xuICBzdmdBdHRyKGhlbHBlclRleHQsIHsgeDogMCwgeTogMCB9KTtcbiAgc3ZnQXR0cihoZWxwZXJUZXh0LCBzdHlsZSk7XG5cbiAgdmFyIGhlbHBlclN2ZyA9IGdldEhlbHBlclN2ZygpO1xuXG4gIHN2Z0FwcGVuZChoZWxwZXJTdmcsIGhlbHBlclRleHQpO1xuXG4gIHdoaWxlIChsaW5lcy5sZW5ndGgpIHtcbiAgICBsYXlvdXRlZC5wdXNoKGxheW91dE5leHQobGluZXMsIG1heFdpZHRoLCBoZWxwZXJUZXh0KSk7XG4gIH1cblxuICBpZiAoYWxpZ24udmVydGljYWwgPT09ICdtaWRkbGUnKSB7XG4gICAgcGFkZGluZy50b3AgPSBwYWRkaW5nLmJvdHRvbSA9IDA7XG4gIH1cblxuICB2YXIgdG90YWxIZWlnaHQgPSByZWR1Y2UobGF5b3V0ZWQsIGZ1bmN0aW9uKHN1bSwgbGluZSwgaWR4KSB7XG4gICAgcmV0dXJuIHN1bSArIChsaW5lSGVpZ2h0IHx8IGxpbmUuaGVpZ2h0KTtcbiAgfSwgMCkgKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuXG4gIHZhciBtYXhMaW5lV2lkdGggPSByZWR1Y2UobGF5b3V0ZWQsIGZ1bmN0aW9uKHN1bSwgbGluZSwgaWR4KSB7XG4gICAgcmV0dXJuIGxpbmUud2lkdGggPiBzdW0gPyBsaW5lLndpZHRoIDogc3VtO1xuICB9LCAwKTtcblxuICAvLyB0aGUgeSBwb3NpdGlvbiBvZiB0aGUgbmV4dCBsaW5lXG4gIHZhciB5ID0gcGFkZGluZy50b3A7XG5cbiAgaWYgKGFsaWduLnZlcnRpY2FsID09PSAnbWlkZGxlJykge1xuICAgIHkgKz0gKGJveC5oZWlnaHQgLSB0b3RhbEhlaWdodCkgLyAyO1xuICB9XG5cbiAgLy8gbWFnaWMgbnVtYmVyIGluaXRpYWwgb2Zmc2V0XG4gIHkgLT0gKGxpbmVIZWlnaHQgfHwgbGF5b3V0ZWRbMF0uaGVpZ2h0KSAvIDQ7XG5cblxuICB2YXIgdGV4dEVsZW1lbnQgPSBzdmdDcmVhdGUoJ3RleHQnKTtcblxuICBzdmdBdHRyKHRleHRFbGVtZW50LCBzdHlsZSk7XG5cbiAgLy8gbGF5b3V0IGVhY2ggbGluZSB0YWtpbmcgaW50byBhY2NvdW50IHRoYXQgcGFyZW50XG4gIC8vIHNoYXBlIG1pZ2h0IHJlc2l6ZSB0byBmaXQgdGV4dCBzaXplXG4gIGZvckVhY2gobGF5b3V0ZWQsIGZ1bmN0aW9uKGxpbmUpIHtcblxuICAgIHZhciB4O1xuXG4gICAgeSArPSAobGluZUhlaWdodCB8fCBsaW5lLmhlaWdodCk7XG5cbiAgICBzd2l0Y2ggKGFsaWduLmhvcml6b250YWwpIHtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHggPSBwYWRkaW5nLmxlZnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHggPSAoKGZpdEJveCA/IG1heExpbmVXaWR0aCA6IG1heFdpZHRoKVxuICAgICAgICAtIHBhZGRpbmcucmlnaHQgLSBsaW5lLndpZHRoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcblxuICAgICAgLy8gYWthIGNlbnRlclxuICAgICAgeCA9IE1hdGgubWF4KCgoKGZpdEJveCA/IG1heExpbmVXaWR0aCA6IG1heFdpZHRoKVxuICAgICAgICAtIGxpbmUud2lkdGgpIC8gMiArIHBhZGRpbmcubGVmdCksIDApO1xuICAgIH1cblxuICAgIHZhciB0c3BhbiA9IHN2Z0NyZWF0ZSgndHNwYW4nKTtcbiAgICBzdmdBdHRyKHRzcGFuLCB7IHg6IHgsIHk6IHkgfSk7XG5cbiAgICB0c3Bhbi50ZXh0Q29udGVudCA9IGxpbmUudGV4dDtcblxuICAgIHN2Z0FwcGVuZCh0ZXh0RWxlbWVudCwgdHNwYW4pO1xuICB9KTtcblxuICBzdmdSZW1vdmUoaGVscGVyVGV4dCk7XG5cbiAgdmFyIGRpbWVuc2lvbnMgPSB7XG4gICAgd2lkdGg6IG1heExpbmVXaWR0aCxcbiAgICBoZWlnaHQ6IHRvdGFsSGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBkaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIGVsZW1lbnQ6IHRleHRFbGVtZW50XG4gIH07XG59O1xuXG5cbmZ1bmN0aW9uIGdldExpbmVIZWlnaHQoc3R5bGUpIHtcbiAgaWYgKCdmb250U2l6ZScgaW4gc3R5bGUgJiYgJ2xpbmVIZWlnaHQnIGluIHN0eWxlKSB7XG4gICAgcmV0dXJuIHN0eWxlLmxpbmVIZWlnaHQgKiBwYXJzZUludChzdHlsZS5mb250U2l6ZSwgMTApO1xuICB9XG59IiwiaW1wb3J0IHsgaXNTdHJpbmcsIGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcbmltcG9ydCB7IE1vZGRsZSB9IGZyb20gJ21vZGRsZSc7XG5pbXBvcnQgeyBSZWFkZXIsIFdyaXRlciB9IGZyb20gJ21vZGRsZS14bWwnO1xuXG4vKipcbiAqIEEgc3ViIGNsYXNzIG9mIHtAbGluayBNb2RkbGV9IHdpdGggc3VwcG9ydCBmb3IgaW1wb3J0IGFuZCBleHBvcnQgb2YgQlBNTiAyLjAgeG1sIGZpbGVzLlxuICpcbiAqIEBjbGFzcyBCcG1uTW9kZGxlXG4gKiBAZXh0ZW5kcyBNb2RkbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gcGFja2FnZXMgdG8gdXNlIGZvciBpbnN0YW50aWF0aW5nIHRoZSBtb2RlbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyBvdmVyXG4gKi9cbmZ1bmN0aW9uIEJwbW5Nb2RkbGUocGFja2FnZXMsIG9wdGlvbnMpIHtcbiAgTW9kZGxlLmNhbGwodGhpcywgcGFja2FnZXMsIG9wdGlvbnMpO1xufVxuXG5CcG1uTW9kZGxlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9kZGxlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSByb290RWxlbWVudFxuICogQHByb3BlcnR5IHtBcnJheTxPYmplY3Q+fSByZWZlcmVuY2VzXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbGVtZW50c0J5SWQgLSBhIG1hcHBpbmcgY29udGFpbmluZyBlYWNoIElEIC0+IE1vZGRsZUVsZW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBmcm9tWE1MIGVycm9yLlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogSW5zdGFudGlhdGVzIGEgQlBNTiBtb2RlbCB0cmVlIGZyb20gYSBnaXZlbiB4bWwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIHhtbFN0clxuICogQHBhcmFtIHtTdHJpbmd9ICAgW3R5cGVOYW1lPSdicG1uOkRlZmluaXRpb25zJ10gbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyByZWFkZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cbkJwbW5Nb2RkbGUucHJvdG90eXBlLmZyb21YTUwgPSBmdW5jdGlvbih4bWxTdHIsIHR5cGVOYW1lLCBvcHRpb25zKSB7XG5cbiAgaWYgKCFpc1N0cmluZyh0eXBlTmFtZSkpIHtcbiAgICBvcHRpb25zID0gdHlwZU5hbWU7XG4gICAgdHlwZU5hbWUgPSAnYnBtbjpEZWZpbml0aW9ucyc7XG4gIH1cblxuICB2YXIgcmVhZGVyID0gbmV3IFJlYWRlcihhc3NpZ24oeyBtb2RlbDogdGhpcywgbGF4OiB0cnVlIH0sIG9wdGlvbnMpKTtcbiAgdmFyIHJvb3RIYW5kbGVyID0gcmVhZGVyLmhhbmRsZXIodHlwZU5hbWUpO1xuXG4gIHJldHVybiByZWFkZXIuZnJvbVhNTCh4bWxTdHIsIHJvb3RIYW5kbGVyKTtcbn07XG5cblxuLyoqXG4gKiBUaGUgdG9YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6YXRpb25SZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge1N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgQlBNTiAyLjAgb2JqZWN0IHRyZWUgdG8gWE1MLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIGVsZW1lbnQgICAgdGhlIHJvb3QgZWxlbWVudCwgdHlwaWNhbGx5IGFuIGluc3RhbmNlIG9mIGBicG1uOkRlZmluaXRpb25zYFxuICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdICB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nIHdyaXRlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlcmlhbGl6YXRpb25SZXN1bHQsIEVycm9yPn1cbiAqL1xuQnBtbk1vZGRsZS5wcm90b3R5cGUudG9YTUwgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XG5cbiAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIob3B0aW9ucyk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgcmVzdWx0ID0gd3JpdGVyLnRvWE1MKGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgIHhtbDogcmVzdWx0XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIG5hbWUgPSBcIkJQTU4yMFwiO1xudmFyIHVyaSA9IFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiO1xudmFyIHByZWZpeCA9IFwiYnBtblwiO1xudmFyIGFzc29jaWF0aW9ucyA9IFtcbl07XG52YXIgdHlwZXMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkludGVyZmFjZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uUmVmXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiT3BlcmF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5NZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRNZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlcnJvclJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkVycm9yXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25SZWZcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFbmRQb2ludFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXVkaXRpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNhbGxhYmxlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTW9uaXRvcmluZ1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUGVyZm9ybWVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSZXNvdXJjZVJvbGVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUHJvY2Vzc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXG5cdFx0XHRcIkNhbGxhYmxlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvY2Vzc1R5cGVcIixcblx0XHRcdFx0dHlwZTogXCJQcm9jZXNzVHlwZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDbG9zZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhdWRpdGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkF1ZGl0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1vbml0b3JpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVTZXRzXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0cmVwbGFjZXM6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyI2xhbmVTZXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVNldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZsb3dFbGVtZW50c1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHJlcGxhY2VzOiBcIkZsb3dFbGVtZW50c0NvbnRhaW5lciNmbG93RWxlbWVudHNcIixcblx0XHRcdFx0dHlwZTogXCJGbG93RWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFydGlmYWN0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFydGlmYWN0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvdXJjZXNcIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZVJvbGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdXBwb3J0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb2Nlc3NcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZpbml0aW9uYWxDb2xsYWJvcmF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzRXhlY3V0YWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYW5lU2V0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZXNcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTGFuZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpdGlvbkVsZW1lbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpdGlvbkVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZsb3dOb2RlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd05vZGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjaGlsZExhbmVTZXRcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lU2V0XCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbE1hbnVhbFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdsb2JhbFRhc2tcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWFudWFsVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJVc2VyVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbmRlcmluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZW5kZXJpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkh1bWFuUGVyZm9ybWVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJQZXJmb3JtZXJcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUG90ZW50aWFsT3duZXJcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkh1bWFuUGVyZm9ybWVyXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbFVzZXJUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHbG9iYWxUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbmRlcmluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdhdGV3YXlcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImdhdGV3YXlEaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJHYXRld2F5RGlyZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIlVuc3BlY2lmaWVkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRCYXNlZEdhdGV3YXlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdhdGV3YXlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluc3RhbnRpYXRlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJldmVudEdhdGV3YXlUeXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnRCYXNlZEdhdGV3YXlUeXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiRXhjbHVzaXZlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbXBsZXhHYXRld2F5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHYXRld2F5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhY3RpdmF0aW9uQ29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRlZmF1bHRcIixcblx0XHRcdFx0dHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXhjbHVzaXZlR2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmYXVsdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbmNsdXNpdmVHYXRld2F5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHYXRld2F5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcmFsbGVsR2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSb290RWxlbWVudFwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZWxhdGlvbnNoaXBcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJSZWxhdGlvbnNoaXBEaXJlY3Rpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJhc2VFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0lkOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRvY3VtZW50YXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25EZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25FbGVtZW50c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkVsZW1lbnRzXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4dGVuc2lvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtdXN0VW5kZXJzdGFuZFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmaW5pdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzUmVmZXJlbmNlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25EZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHRlbnNpb25FbGVtZW50c1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZVJlZlwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZXNcIixcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGV4dFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0JvZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGV4dEZvcm1hdFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIixcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDYXRjaEV2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkludGVybWVkaWF0ZVRocm93RXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRocm93RXZlbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRW5kRXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRocm93RXZlbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3RhcnRFdmVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2F0Y2hFdmVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNJbnRlcnJ1cHRpbmdcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWUsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRocm93RXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFJbnB1dHNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFJbnB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhdGNoRXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcmFsbGVsTXVsdGlwbGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPdXRwdXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJvdW5kYXJ5RXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNhdGNoRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmNlbEFjdGl2aXR5XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiB0cnVlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImF0dGFjaGVkVG9SZWZcIixcblx0XHRcdFx0dHlwZTogXCJBY3Rpdml0eVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FuY2VsRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXJyb3JFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXJyb3JSZWZcIixcblx0XHRcdFx0dHlwZTogXCJFcnJvclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUZXJtaW5hdGVFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImVzY2FsYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJFc2NhbGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVzY2FsYXRpb25cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlc2NhbGF0aW9uQ29kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3YWl0Rm9yQ29tcGxldGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhY3Rpdml0eVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkFjdGl2aXR5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRpbWVEYXRlXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRpbWVDeWNsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0aW1lRHVyYXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiTGlua0V2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZUV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk9wZXJhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb25kaXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzaWduYWxSZWZcIixcblx0XHRcdFx0dHlwZTogXCJTaWduYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2lnbmFsXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUaHJvd0V2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFTdGF0ZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXRlbVN1YmplY3RSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFTdGF0ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFTdGF0ZVwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhQXNzb2NpYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0cmFuc2Zvcm1hdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhc3NpZ25tZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiQXNzaWdubWVudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFJbnB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFdpdGhPcHRpb25hbFwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFdpdGhXaGlsZUV4ZWN1dGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXRTZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFdpdGhPcHRpb25hbFwiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0V2l0aFdoaWxlRXhlY3V0aW5nXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW5wdXRTZXRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YUlucHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3B0aW9uYWxJbnB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3aGlsZUV4ZWN1dGluZ0lucHV0UmVmc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcHRpb25hbE91dHB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwid2hpbGVFeGVjdXRpbmdPdXRwdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQcm9wZXJ0eVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJEYXRhQXNzb2NpYXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU91dHB1dEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJEYXRhQXNzb2NpYXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW5wdXRPdXRwdXRTcGVjaWZpY2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YUlucHV0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dHNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldHNcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFPYmplY3RcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCIsXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIklucHV0T3V0cHV0QmluZGluZ1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dERhdGFSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dERhdGFSZWZcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXNzaWdubWVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZyb21cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidG9cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFTdG9yZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIixcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY2FwYWNpdHlcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1VubGltaXRlZFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YVN0b3JlUmVmZXJlbmNlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhU3RvcmVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhU3RvcmVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU9iamVjdFJlZmVyZW5jZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XCJGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU9iamVjdFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPYmplY3RcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb252ZXJzYXRpb25Bc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlubmVyQ29udmVyc2F0aW9uTm9kZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbk5vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRlckNvbnZlcnNhdGlvbk5vZGVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxDb252ZXJzYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNvbnZlcnNhdGlvbk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZENvbGxhYm9yYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb2xsYWJvcmF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDb252ZXJzYXRpb25Ob2RlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YkNvbnZlcnNhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29udmVyc2F0aW9uTm9kZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29udmVyc2F0aW9uTm9kZXNcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlRmxvd1JlZnNcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uS2V5c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQ29udmVyc2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDb2xsYWJvcmF0aW9uXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRuZXJFbnRpdHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRuZXJSb2xlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5UmV0cmlldmFsRXhwcmVzc2lvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidHlwZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVycm9yXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlcnJvckNvZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4cHJlc3Npb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdGlzQWJzdHJhY3Q6IGZhbHNlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib2R5XCIsXG5cdFx0XHRcdGlzQm9keTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRm9ybWFsRXhwcmVzc2lvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXhwcmVzc2lvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZ3VhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2YWx1YXRlc1RvVHlwZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpdGVtUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpdGVtS2luZFwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1LaW5kXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdHJ1Y3R1cmVSZWZcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wb3J0XCIsXG5cdFx0XHRcdHR5cGU6IFwiSW1wb3J0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZsb3dFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhdWRpdGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkF1ZGl0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1vbml0b3JpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYXRlZ29yeVZhbHVlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0ltbWVkaWF0ZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbmRpdGlvbkV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd05vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJGbG93Tm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJGbG93RWxlbWVudHNDb250YWluZXJcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVTZXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZmxvd0VsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYWxsYWJsZUVsZW1lbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlvU3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwicHJvcGVydHlcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN1cHBvcnRlZEludGVyZmFjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyZmFjZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlvQmluZGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0T3V0cHV0QmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZsb3dOb2RlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbmNvbWluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGdvaW5nXCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZXNcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUGF0aFwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFQYXRoXCIsXG5cdFx0XHRcdHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlc291cmNlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VQYXJhbWV0ZXJzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZVBhcmFtZXRlclwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzUmVxdWlyZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25TdWJzY3JpcHRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvbktleVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VGbG93XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlubmVyTWVzc2FnZUZsb3dSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGVyTWVzc2FnZUZsb3dSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbmNvbWluZ0NvbnZlcnNhdGlvbkxpbmtzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0Z29pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnRlcmZhY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnRlcmZhY2VcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50TXVsdGlwbGljaXR5XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZW5kUG9pbnRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRW5kUG9pbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9jZXNzUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvY2Vzc1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5uZXJQYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0ZXJQYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRpY2lwYW50TXVsdGlwbGljaXR5XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1pbmltdW1cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IDAsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWF4aW11bVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb2xsYWJvcmF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDbG9zZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudHNcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZUZsb3dzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFydGlmYWN0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFydGlmYWN0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb252ZXJzYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29udmVyc2F0aW9uQXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uQXNzb2NpYXRpb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VGbG93QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25LZXlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNob3Jlb2dyYXBoeVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbnZlcnNhdGlvbkxpbmtzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5pdGlhdGluZ1BhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvbktleXNcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcFR5cGVcIixcblx0XHRcdFx0dHlwZTogXCJDaG9yZW9ncmFwaHlMb29wVHlwZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJOb25lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FsbENob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZENob3Jlb2dyYXBoeVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YkNob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIixcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeVRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlRmxvd1JlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VGbG93XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdFx0XCJGbG93RWxlbWVudHNDb250YWluZXJcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQ2hvcmVvZ3JhcGh5VGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbml0aWF0aW5nUGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUZXh0QW5ub3RhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQXJ0aWZhY3RcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRleHRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0ZXh0Rm9ybWF0XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcInRleHQvcGxhaW5cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHcm91cFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQXJ0aWZhY3RcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3J5VmFsdWVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDYXRlZ29yeVZhbHVlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBcnRpZmFjdFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXNzb2NpYXRpb25EaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJBc3NvY2lhdGlvbkRpcmVjdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYXRlZ29yeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3J5VmFsdWVcIixcblx0XHRcdFx0dHlwZTogXCJDYXRlZ29yeVZhbHVlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXJ0aWZhY3RcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3JpemVkRmxvd0VsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQWN0aXZpdHlcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzRm9yQ29tcGVuc2F0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW9TcGVjaWZpY2F0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRPdXRwdXRTcGVjaWZpY2F0aW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm91bmRhcnlFdmVudFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJCb3VuZGFyeUV2ZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvcGVydGllc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RhcnRRdWFudGl0eVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvdXJjZXNcIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZVJvbGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbXBsZXRpb25RdWFudGl0eVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTG9vcENoYXJhY3RlcmlzdGljc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTZXJ2aWNlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk9wZXJhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdWJQcm9jZXNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBY3Rpdml0eVwiLFxuXHRcdFx0XCJGbG93RWxlbWVudHNDb250YWluZXJcIixcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0cmlnZ2VyZWRCeUV2ZW50XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzU2VxdWVudGlhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYmVoYXZpb3JcIixcblx0XHRcdFx0dHlwZTogXCJNdWx0aUluc3RhbmNlQmVoYXZpb3JcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiQWxsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ2FyZGluYWxpdHlcIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcERhdGFJbnB1dFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1Bd2FyZUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcERhdGFPdXRwdXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlucHV0RGF0YUl0ZW1cIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXREYXRhSXRlbVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRcIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29tcGxleEJlaGF2aW9yRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29tcGxldGlvbkNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvbmVCZWhhdmlvckV2ZW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibm9uZUJlaGF2aW9yRXZlbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3RhbmRhcmRMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0ZXN0QmVmb3JlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvb3BNYXhpbXVtXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZWdlclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxBY3Rpdml0eVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQWN0aXZpdHlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZEVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBY3Rpdml0eVwiLFxuXHRcdFx0XCJJbnRlcmFjdGlvbk5vZGVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2VuZFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRhc2tcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZWNlaXZlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluc3RhbnRpYXRlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTY3JpcHRUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzY3JpcHRGb3JtYXRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNjcmlwdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCdXNpbmVzc1J1bGVUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFkSG9jU3ViUHJvY2Vzc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiU3ViUHJvY2Vzc1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29tcGxldGlvbkNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcmRlcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFkSG9jT3JkZXJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmNlbFJlbWFpbmluZ0luc3RhbmNlc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVHJhbnNhY3Rpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlN1YlByb2Nlc3NcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb3RvY29sXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXRob2RcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHbG9iYWxTY3JpcHRUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHbG9iYWxUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzY3JpcHRMYW5ndWFnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2NyaXB0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQnVzaW5lc3NSdWxlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2xvYmFsVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2ZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlc291cmNlUm9sZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlUGFyYW1ldGVyQmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlQXNzaWdubWVudEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFyYW1ldGVyUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW1wb3J0XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcG9ydFR5cGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvY2F0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lc3BhY2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEZWZpbml0aW9uc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldE5hbWVzcGFjZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXhwcmVzc2lvbkxhbmd1YWdlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFBhdGhcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVMYW5ndWFnZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wb3J0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkltcG9ydFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicm9vdEVsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUm9vdEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRpYWdyYW1zXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJicG1uZGk6QlBNTkRpYWdyYW1cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHBvcnRlclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVsYXRpb25zaGlwc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbGF0aW9uc2hpcFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXhwb3J0ZXJWZXJzaW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciBlbnVtZXJhdGlvbnMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIlByb2Nlc3NUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQdWJsaWNcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQcml2YXRlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdhdGV3YXlEaXJlY3Rpb25cIixcblx0XHRsaXRlcmFsVmFsdWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiVW5zcGVjaWZpZWRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJDb252ZXJnaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRGl2ZXJnaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTWl4ZWRcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRCYXNlZEdhdGV3YXlUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlBhcmFsbGVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRXhjbHVzaXZlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRm9yd2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkJhY2t3YXJkXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQm90aFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJdGVtS2luZFwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQaHlzaWNhbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkluZm9ybWF0aW9uXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeUxvb3BUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJTdGFuZGFyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VTZXF1ZW50aWFsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTXVsdGlJbnN0YW5jZVBhcmFsbGVsXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJPbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJCb3RoXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VCZWhhdmlvclwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiT25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQWxsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQ29tcGxleFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJBZEhvY09yZGVyaW5nXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlBhcmFsbGVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiU2VxdWVudGlhbFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIHhtbCA9IHtcblx0dGFnQWxpYXM6IFwibG93ZXJDYXNlXCIsXG5cdHR5cGVQcmVmaXg6IFwidFwiXG59O1xudmFyIEJwbW5QYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lLFxuXHR1cmk6IHVyaSxcblx0cHJlZml4OiBwcmVmaXgsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zLFxuXHR0eXBlczogdHlwZXMsXG5cdGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zLFxuXHR4bWw6IHhtbFxufTtcblxudmFyIG5hbWUkMSA9IFwiQlBNTkRJXCI7XG52YXIgdXJpJDEgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvRElcIjtcbnZhciBwcmVmaXgkMSA9IFwiYnBtbmRpXCI7XG52YXIgdHlwZXMkMSA9IFtcblx0e1xuXHRcdG5hbWU6IFwiQlBNTkRpYWdyYW1cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGxhbmVcIixcblx0XHRcdFx0dHlwZTogXCJCUE1OUGxhbmVcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkRpYWdyYW0jcm9vdEVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsYWJlbFN0eWxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsU3R5bGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOkRpYWdyYW1cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQlBNTlBsYW5lXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJwbW5FbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjbW9kZWxFbGVtZW50XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6UGxhbmVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQlBNTlNoYXBlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJwbW5FbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjbW9kZWxFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNIb3Jpem9udGFsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNFeHBhbmRlZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzTWFya2VyVmlzaWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNNZXNzYWdlVmlzaWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50QmFuZEtpbmRcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudEJhbmRLaW5kXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjaG9yZW9ncmFwaHlBY3Rpdml0eVNoYXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTlNoYXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6TGFiZWxlZFNoYXBlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5FZGdlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYnBtbkVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJicG1uOkJhc2VFbGVtZW50XCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VFbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiZGk6RGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkVkZ2Ujc291cmNlXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0RWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcImRpOkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpFZGdlI3RhcmdldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcImluaXRpYXRpbmdcIlxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJkaTpMYWJlbGVkRWRnZVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCUE1OTGFiZWxcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFiZWxTdHlsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNzdHlsZVwiXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOkxhYmVsXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZvbnRcIixcblx0XHRcdFx0dHlwZTogXCJkYzpGb250XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6U3R5bGVcIlxuXHRcdF1cblx0fVxuXTtcbnZhciBlbnVtZXJhdGlvbnMkMSA9IFtcblx0e1xuXHRcdG5hbWU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0b3BfaW5pdGlhdGluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1pZGRsZV9pbml0aWF0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm90dG9tX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0b3Bfbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtaWRkbGVfbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib3R0b21fbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZVZpc2libGVLaW5kXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJub25faW5pdGlhdGluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQxID0gW1xuXTtcbnZhciBCcG1uRGlQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDEsXG5cdHVyaTogdXJpJDEsXG5cdHByZWZpeDogcHJlZml4JDEsXG5cdHR5cGVzOiB0eXBlcyQxLFxuXHRlbnVtZXJhdGlvbnM6IGVudW1lcmF0aW9ucyQxLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQxXG59O1xuXG52YXIgbmFtZSQyID0gXCJEQ1wiO1xudmFyIHVyaSQyID0gXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiO1xudmFyIHByZWZpeCQyID0gXCJkY1wiO1xudmFyIHR5cGVzJDIgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkJvb2xlYW5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlZ2VyXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVhbFwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN0cmluZ1wiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZvbnRcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2l6ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQm9sZFwiLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzSXRhbGljXCIsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNVbmRlcmxpbmVcIixcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1N0cmlrZVRocm91Z2hcIixcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUG9pbnRcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieVwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJvdW5kc1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ4XCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIwXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ5XCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIwXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3aWR0aFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImhlaWdodFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQyID0gW1xuXTtcbnZhciBEY1BhY2thZ2UgPSB7XG5cdG5hbWU6IG5hbWUkMixcblx0dXJpOiB1cmkkMixcblx0cHJlZml4OiBwcmVmaXgkMixcblx0dHlwZXM6IHR5cGVzJDIsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDJcbn07XG5cbnZhciBuYW1lJDMgPSBcIkRJXCI7XG52YXIgdXJpJDMgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXCI7XG52YXIgcHJlZml4JDMgPSBcImRpXCI7XG52YXIgdHlwZXMkMyA9IFtcblx0e1xuXHRcdG5hbWU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzSWQ6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3duaW5nRGlhZ3JhbVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1cIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25pbmdFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtb2RlbEVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3R5bGVcIixcblx0XHRcdFx0dHlwZTogXCJTdHlsZVwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm93bmVkRWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJOb2RlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkRpYWdyYW1FbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVkZ2VcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRGlhZ3JhbUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3YXlwb2ludFwiLFxuXHRcdFx0XHRpc1VuaXF1ZTogZmFsc2UsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJkYzpQb2ludFwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEaWFncmFtXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc0lkOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJvb3RFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRvY3VtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc29sdXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZFN0eWxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3R5bGVcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNoYXBlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdW5kc1wiLFxuXHRcdFx0XHR0eXBlOiBcImRjOkJvdW5kc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQbGFuZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwbGFuZUVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJEaWFncmFtRWxlbWVudFwiLFxuXHRcdFx0XHRzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYWJlbGVkRWRnZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFZGdlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZExhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFiZWxcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0c3Vic2V0dGVkUHJvcGVydHk6IFwiRGlhZ3JhbUVsZW1lbnQtb3duZWRFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYWJlbGVkU2hhcGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiU2hhcGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm93bmVkTGFiZWxcIixcblx0XHRcdFx0dHlwZTogXCJMYWJlbFwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxhYmVsXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdW5kc1wiLFxuXHRcdFx0XHR0eXBlOiBcImRjOkJvdW5kc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdHlsZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNJZDogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlc1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiRWxlbWVudFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQzID0gW1xuXTtcbnZhciB4bWwkMSA9IHtcblx0dGFnQWxpYXM6IFwibG93ZXJDYXNlXCJcbn07XG52YXIgRGlQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDMsXG5cdHVyaTogdXJpJDMsXG5cdHByZWZpeDogcHJlZml4JDMsXG5cdHR5cGVzOiB0eXBlcyQzLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQzLFxuXHR4bWw6IHhtbCQxXG59O1xuXG52YXIgbmFtZSQ0ID0gXCJicG1uLmlvIGNvbG9ycyBmb3IgQlBNTlwiO1xudmFyIHVyaSQ0ID0gXCJodHRwOi8vYnBtbi5pby9zY2hlbWEvYnBtbi9iaW9jb2xvci8xLjBcIjtcbnZhciBwcmVmaXgkNCA9IFwiYmlvY1wiO1xudmFyIHR5cGVzJDQgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkNvbG9yZWRTaGFwZVwiLFxuXHRcdFwiZXh0ZW5kc1wiOiBbXG5cdFx0XHRcImJwbW5kaTpCUE1OU2hhcGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0cm9rZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZmlsbFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbG9yZWRFZGdlXCIsXG5cdFx0XCJleHRlbmRzXCI6IFtcblx0XHRcdFwiYnBtbmRpOkJQTU5FZGdlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdHJva2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZpbGxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGVudW1lcmF0aW9ucyQyID0gW1xuXTtcbnZhciBhc3NvY2lhdGlvbnMkNCA9IFtcbl07XG52YXIgQmlvY1BhY2thZ2UgPSB7XG5cdG5hbWU6IG5hbWUkNCxcblx0dXJpOiB1cmkkNCxcblx0cHJlZml4OiBwcmVmaXgkNCxcblx0dHlwZXM6IHR5cGVzJDQsXG5cdGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDIsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDRcbn07XG5cbnZhciBwYWNrYWdlcyA9IHtcbiAgYnBtbjogQnBtblBhY2thZ2UsXG4gIGJwbW5kaTogQnBtbkRpUGFja2FnZSxcbiAgZGM6IERjUGFja2FnZSxcbiAgZGk6IERpUGFja2FnZSxcbiAgYmlvYzogQmlvY1BhY2thZ2Vcbn07XG5cbmZ1bmN0aW9uIHNpbXBsZShhZGRpdGlvbmFsUGFja2FnZXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBrcyA9IGFzc2lnbih7fSwgcGFja2FnZXMsIGFkZGl0aW9uYWxQYWNrYWdlcyk7XG5cbiAgcmV0dXJuIG5ldyBCcG1uTW9kZGxlKHBrcywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNpbXBsZTtcbiIsIi8qISBodHRwczovL210aHMuYmUvY3NzZXNjYXBlIHYxLjUuMSBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZC9ibG9iL21hc3Rlci9yZXR1cm5FeHBvcnRzLmpzXG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0Jykge1xuXHRcdC8vIEZvciBOb2RlLmpzLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyb290KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEZvciBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5LmJpbmQocm9vdCwgcm9vdCkpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciBicm93c2VyIGdsb2JhbHMgKG5vdCBleHBvc2luZyB0aGUgZnVuY3Rpb24gc2VwYXJhdGVseSkuXG5cdFx0ZmFjdG9yeShyb290KTtcblx0fVxufSh0eXBlb2YgZ2xvYmFsICE9ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdGhpcywgZnVuY3Rpb24ocm9vdCkge1xuXG5cdGlmIChyb290LkNTUyAmJiByb290LkNTUy5lc2NhcGUpIHtcblx0XHRyZXR1cm4gcm9vdC5DU1MuZXNjYXBlO1xuXHR9XG5cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNzZXJpYWxpemUtYW4taWRlbnRpZmllclxuXHR2YXIgY3NzRXNjYXBlID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgQ1NTLmVzY2FwZWAgcmVxdWlyZXMgYW4gYXJndW1lbnQuJyk7XG5cdFx0fVxuXHRcdHZhciBzdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuXHRcdHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdHZhciBjb2RlVW5pdDtcblx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0dmFyIGZpcnN0Q29kZVVuaXQgPSBzdHJpbmcuY2hhckNvZGVBdCgwKTtcblx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0Y29kZVVuaXQgPSBzdHJpbmcuY2hhckNvZGVBdChpbmRleCk7XG5cdFx0XHQvLyBOb3RlOiB0aGVyZeKAmXMgbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMsIHN1cnJvZ2F0ZVxuXHRcdFx0Ly8gcGFpcnMsIG9yIGxvbmUgc3Vycm9nYXRlcy5cblxuXHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyBOVUxMIChVKzAwMDApLCB0aGVuIHRoZSBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdC8vIChVK0ZGRkQpLlxuXHRcdFx0aWYgKGNvZGVVbml0ID09IDB4MDAwMCkge1xuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcdUZGRkQnO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIGluIHRoZSByYW5nZSBbXFwxLVxcMUZdIChVKzAwMDEgdG8gVSswMDFGKSBvciBpc1xuXHRcdFx0XHQvLyBVKzAwN0YsIFvigKZdXG5cdFx0XHRcdChjb2RlVW5pdCA+PSAweDAwMDEgJiYgY29kZVVuaXQgPD0gMHgwMDFGKSB8fCBjb2RlVW5pdCA9PSAweDAwN0YgfHxcblx0XHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpcyBpbiB0aGUgcmFuZ2UgWzAtOV1cblx0XHRcdFx0Ly8gKFUrMDAzMCB0byBVKzAwMzkpLCBb4oCmXVxuXHRcdFx0XHQoaW5kZXggPT0gMCAmJiBjb2RlVW5pdCA+PSAweDAwMzAgJiYgY29kZVVuaXQgPD0gMHgwMDM5KSB8fFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBzZWNvbmQgY2hhcmFjdGVyIGFuZCBpcyBpbiB0aGUgcmFuZ2UgWzAtOV1cblx0XHRcdFx0Ly8gKFUrMDAzMCB0byBVKzAwMzkpIGFuZCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEgYC1gIChVKzAwMkQpLCBb4oCmXVxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0aW5kZXggPT0gMSAmJlxuXHRcdFx0XHRcdGNvZGVVbml0ID49IDB4MDAzMCAmJiBjb2RlVW5pdCA8PSAweDAwMzkgJiZcblx0XHRcdFx0XHRmaXJzdENvZGVVbml0ID09IDB4MDAyRFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNlc2NhcGUtYS1jaGFyYWN0ZXItYXMtY29kZS1wb2ludFxuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcXFwnICsgY29kZVVuaXQudG9TdHJpbmcoMTYpICsgJyAnO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGlzIGEgYC1gIChVKzAwMkQpLCBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgbm8gc2Vjb25kIGNoYXJhY3RlciwgW+KApl1cblx0XHRcdFx0aW5kZXggPT0gMCAmJlxuXHRcdFx0XHRsZW5ndGggPT0gMSAmJlxuXHRcdFx0XHRjb2RlVW5pdCA9PSAweDAwMkRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcXFwnICsgc3RyaW5nLmNoYXJBdChpbmRleCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIG5vdCBoYW5kbGVkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgcnVsZXMgYW5kIGlzXG5cdFx0XHQvLyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVSswMDgwLCBpcyBgLWAgKFUrMDAyRCkgb3IgYF9gIChVKzAwNUYpLCBvclxuXHRcdFx0Ly8gaXMgaW4gb25lIG9mIHRoZSByYW5nZXMgWzAtOV0gKFUrMDAzMCB0byBVKzAwMzkpLCBbQS1aXSAoVSswMDQxIHRvXG5cdFx0XHQvLyBVKzAwNUEpLCBvciBbYS16XSAoVSswMDYxIHRvIFUrMDA3QSksIFvigKZdXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvZGVVbml0ID49IDB4MDA4MCB8fFxuXHRcdFx0XHRjb2RlVW5pdCA9PSAweDAwMkQgfHxcblx0XHRcdFx0Y29kZVVuaXQgPT0gMHgwMDVGIHx8XG5cdFx0XHRcdGNvZGVVbml0ID49IDB4MDAzMCAmJiBjb2RlVW5pdCA8PSAweDAwMzkgfHxcblx0XHRcdFx0Y29kZVVuaXQgPj0gMHgwMDQxICYmIGNvZGVVbml0IDw9IDB4MDA1QSB8fFxuXHRcdFx0XHRjb2RlVW5pdCA+PSAweDAwNjEgJiYgY29kZVVuaXQgPD0gMHgwMDdBXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gdGhlIGNoYXJhY3RlciBpdHNlbGZcblx0XHRcdFx0cmVzdWx0ICs9IHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG5cdFx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2VzY2FwZS1hLWNoYXJhY3RlclxuXHRcdFx0cmVzdWx0ICs9ICdcXFxcJyArIHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0aWYgKCFyb290LkNTUykge1xuXHRcdHJvb3QuQ1NTID0ge307XG5cdH1cblxuXHRyb290LkNTUy5lc2NhcGUgPSBjc3NFc2NhcGU7XG5cdHJldHVybiBjc3NFc2NhcGU7XG5cbn0pKTtcbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMnO1xuXG5pbXBvcnQgRGlyZWN0RWRpdGluZyBmcm9tICcuL2xpYi9EaXJlY3RFZGl0aW5nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdkaXJlY3RFZGl0aW5nJyBdLFxuICBkaXJlY3RFZGl0aW5nOiBbICd0eXBlJywgRGlyZWN0RWRpdGluZyBdXG59OyIsImltcG9ydCB7XG4gIGJpbmQsXG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgVGV4dEJveCBmcm9tICcuL1RleHRCb3gnO1xuXG5cbi8qKlxuICogQSBkaXJlY3QgZWRpdGluZyBjb21wb25lbnQgdGhhdCBhbGxvd3MgdXNlcnNcbiAqIHRvIGVkaXQgYW4gZWxlbWVudHMgdGV4dCBkaXJlY3RseSBpbiB0aGUgZGlhZ3JhbVxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzIHRoZSBldmVudCBidXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlyZWN0RWRpdGluZyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcblxuICB0aGlzLl9wcm92aWRlcnMgPSBbXTtcbiAgdGhpcy5fdGV4dGJveCA9IG5ldyBUZXh0Qm94KHtcbiAgICBjb250YWluZXI6IGNhbnZhcy5nZXRDb250YWluZXIoKSxcbiAgICBrZXlIYW5kbGVyOiBiaW5kKHRoaXMuX2hhbmRsZUtleSwgdGhpcyksXG4gICAgcmVzaXplSGFuZGxlcjogYmluZCh0aGlzLl9oYW5kbGVSZXNpemUsIHRoaXMpXG4gIH0pO1xufVxuXG5EaXJlY3RFZGl0aW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhIGRpcmVjdCBlZGl0aW5nIHByb3ZpZGVyXG5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm92aWRlciB0aGUgcHJvdmlkZXIsIG11c3QgZXhwb3NlIGFuICNhY3RpdmF0ZShlbGVtZW50KSBtZXRob2QgdGhhdCByZXR1cm5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYWN0aXZhdGlvbiBjb250ZXh0ICh7IGJvdW5kczoge3gsIHksIHdpZHRoLCBoZWlnaHQgfSwgdGV4dCB9KSBpZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdCBlZGl0aW5nIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoZSBwcm92aWRlciBtdXN0IGV4cG9zZSBhICN1cGRhdGUoZWxlbWVudCwgdmFsdWUpIG1ldGhvZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJlY2VpdmUgZGlyZWN0IGVkaXRpbmcgdXBkYXRlcy5cbiAqL1xuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKHByb3ZpZGVyKSB7XG4gIHRoaXMuX3Byb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgZGlyZWN0IGVkaXRpbmcgaXMgY3VycmVudGx5IGFjdGl2ZVxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbn07XG5cblxuLyoqXG4gKiBDYW5jZWwgZGlyZWN0IGVkaXRpbmcsIGlmIGl0IGlzIGN1cnJlbnRseSBhY3RpdmVcbiAqL1xuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZmlyZSgnY2FuY2VsJyk7XG4gIHRoaXMuY2xvc2UoKTtcbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihldmVudCwgY29udGV4dCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdkaXJlY3RFZGl0aW5nLicgKyBldmVudCwgY29udGV4dCB8fCB7IGFjdGl2ZTogdGhpcy5fYWN0aXZlIH0pO1xufTtcblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdGV4dGJveC5kZXN0cm95KCk7XG5cbiAgdGhpcy5fZmlyZSgnZGVhY3RpdmF0ZScpO1xuXG4gIHRoaXMuX2FjdGl2ZSA9IG51bGw7XG5cbiAgdGhpcy5yZXNpemFibGUgPSB1bmRlZmluZWQ7XG59O1xuXG5cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZTtcblxuICBpZiAoIWFjdGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb250YWluZXJCb3VuZHMsXG4gICAgICBwcmV2aW91c0JvdW5kcyA9IGFjdGl2ZS5jb250ZXh0LmJvdW5kcyxcbiAgICAgIG5ld0JvdW5kcyA9IHRoaXMuJHRleHRib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBuZXdUZXh0ID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgcHJldmlvdXNUZXh0ID0gYWN0aXZlLmNvbnRleHQudGV4dDtcblxuICBpZiAoXG4gICAgbmV3VGV4dCAhPT0gcHJldmlvdXNUZXh0IHx8XG4gICAgbmV3Qm91bmRzLmhlaWdodCAhPT0gcHJldmlvdXNCb3VuZHMuaGVpZ2h0IHx8XG4gICAgbmV3Qm91bmRzLndpZHRoICE9PSBwcmV2aW91c0JvdW5kcy53aWR0aFxuICApIHtcbiAgICBjb250YWluZXJCb3VuZHMgPSB0aGlzLl90ZXh0Ym94LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGFjdGl2ZS5wcm92aWRlci51cGRhdGUoYWN0aXZlLmVsZW1lbnQsIG5ld1RleHQsIGFjdGl2ZS5jb250ZXh0LnRleHQsIHtcbiAgICAgIHg6IG5ld0JvdW5kcy5sZWZ0IC0gY29udGFpbmVyQm91bmRzLmxlZnQsXG4gICAgICB5OiBuZXdCb3VuZHMudG9wIC0gY29udGFpbmVyQm91bmRzLnRvcCxcbiAgICAgIHdpZHRoOiBuZXdCb3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IG5ld0JvdW5kcy5oZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX2ZpcmUoJ2NvbXBsZXRlJyk7XG5cbiAgdGhpcy5jbG9zZSgpO1xufTtcblxuXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fdGV4dGJveC5nZXRWYWx1ZSgpO1xufTtcblxuXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZSkge1xuXG4gIC8vIHN0b3AgYnViYmxlXG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgdmFyIGtleSA9IGUua2V5Q29kZSB8fCBlLmNoYXJDb2RlO1xuXG4gIC8vIEVTQ1xuICBpZiAoa2V5ID09PSAyNykge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWwoKTtcbiAgfVxuXG4gIC8vIEVudGVyXG4gIGlmIChrZXkgPT09IDEzICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKCk7XG4gIH1cbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuX2hhbmRsZVJlc2l6ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2ZpcmUoJ3Jlc2l6ZScsIGV2ZW50KTtcbn07XG5cblxuLyoqXG4gKiBBY3RpdmF0ZSBkaXJlY3QgZWRpdGluZyBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBFbGVtZW50RGVzY3JpcHRvciB0aGUgZGVzY3JpcHRvciBmb3IgYSBzaGFwZSBvciBjb25uZWN0aW9uXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhY3RpdmF0aW9uIHdhcyBwb3NzaWJsZVxuICovXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgIHRoaXMuY2FuY2VsKCk7XG4gIH1cblxuICAvLyB0aGUgZGlyZWN0IGVkaXRpbmcgY29udGV4dFxuICB2YXIgY29udGV4dDtcblxuICB2YXIgcHJvdmlkZXIgPSBmaW5kKHRoaXMuX3Byb3ZpZGVycywgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAoY29udGV4dCA9IHAuYWN0aXZhdGUoZWxlbWVudCkpID8gcCA6IG51bGw7XG4gIH0pO1xuXG4gIC8vIGNoZWNrIGlmIGFjdGl2YXRpb24gdG9vayBwbGFjZVxuICBpZiAoY29udGV4dCkge1xuICAgIHRoaXMuJHRleHRib3ggPSB0aGlzLl90ZXh0Ym94LmNyZWF0ZShcbiAgICAgIGNvbnRleHQuYm91bmRzLFxuICAgICAgY29udGV4dC5zdHlsZSxcbiAgICAgIGNvbnRleHQudGV4dCxcbiAgICAgIGNvbnRleHQub3B0aW9uc1xuICAgICk7XG5cbiAgICB0aGlzLl9hY3RpdmUgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIHByb3ZpZGVyOiBwcm92aWRlclxuICAgIH07XG5cbiAgICBpZiAoY29udGV4dC5vcHRpb25zICYmIGNvbnRleHQub3B0aW9ucy5yZXNpemFibGUpIHtcbiAgICAgIHRoaXMucmVzaXphYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9maXJlKCdhY3RpdmF0ZScpO1xuICB9XG5cbiAgcmV0dXJuICEhY29udGV4dDtcbn07XG4iLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGJpbmQsXG4gIHBpY2tcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBldmVudCBhcyBkb21FdmVudCxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZVxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIG1pbiA9IE1hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4O1xuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChlKSB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGUpIHtcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheShub2RlTGlzdCkge1xuICByZXR1cm4gW10uc2xpY2UuY2FsbChub2RlTGlzdCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYSBjb250YWluZXIgZm9yIGEgY29udGVudCBlZGl0YWJsZSBkaXYuXG4gKlxuICogU3RydWN0dXJlOlxuICpcbiAqIGNvbnRhaW5lclxuICogICBwYXJlbnRcbiAqICAgICBjb250ZW50XG4gKiAgICAgcmVzaXplLWhhbmRsZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG9wdGlvbnMuY29udGFpbmVyIFRoZSBET00gZWxlbWVudCB0byBhcHBlbmQgdGhlIGNvbnRlbnRDb250YWluZXIgdG9cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMua2V5SGFuZGxlciBIYW5kbGVyIGZvciBrZXkgZXZlbnRzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnJlc2l6ZUhhbmRsZXIgSGFuZGxlciBmb3IgcmVzaXplIGV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXh0Qm94KG9wdGlvbnMpIHtcbiAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcblxuICB0aGlzLnBhcmVudCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1kaXJlY3QtZWRpdGluZy1wYXJlbnRcIj4nICtcbiAgICAgICc8ZGl2IGNsYXNzPVwiZGpzLWRpcmVjdC1lZGl0aW5nLWNvbnRlbnRcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+PC9kaXY+JyArXG4gICAgJzwvZGl2PidcbiAgKTtcblxuICB0aGlzLmNvbnRlbnQgPSBkb21RdWVyeSgnW2NvbnRlbnRlZGl0YWJsZV0nLCB0aGlzLnBhcmVudCk7XG5cbiAgdGhpcy5rZXlIYW5kbGVyID0gb3B0aW9ucy5rZXlIYW5kbGVyIHx8IGZ1bmN0aW9uKCkge307XG4gIHRoaXMucmVzaXplSGFuZGxlciA9IG9wdGlvbnMucmVzaXplSGFuZGxlciB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIHRoaXMuYXV0b1Jlc2l6ZSA9IGJpbmQodGhpcy5hdXRvUmVzaXplLCB0aGlzKTtcbiAgdGhpcy5oYW5kbGVQYXN0ZSA9IGJpbmQodGhpcy5oYW5kbGVQYXN0ZSwgdGhpcyk7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYSB0ZXh0IGJveCB3aXRoIHRoZSBnaXZlbiBwb3NpdGlvbiwgc2l6ZSwgc3R5bGUgYW5kIHRleHQgY29udGVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBib3VuZHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3VuZHMueCBhYnNvbHV0ZSB4IHBvc2l0aW9uXG4gKiBAcGFyYW0ge051bWJlcn0gYm91bmRzLnkgYWJzb2x1dGUgeSBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMud2lkdGhdIGZpeGVkIHdpZHRoIHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5oZWlnaHRdIGZpeGVkIGhlaWdodCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMubWF4V2lkdGhdIG1heGltdW0gd2lkdGggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLm1heEhlaWdodF0gbWF4aW11bSBoZWlnaHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLm1pbldpZHRoXSBtaW5pbXVtIHdpZHRoIHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5taW5IZWlnaHRdIG1pbmltdW0gaGVpZ2h0IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0eWxlXVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIHRleHQgY29udGVudFxuICpcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSBjcmVhdGVkIGNvbnRlbnQgRE9NIGVsZW1lbnRcbiAqL1xuVGV4dEJveC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oYm91bmRzLCBzdHlsZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQsXG4gICAgICBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjtcblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBzdHlsZSA9IHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICB2YXIgcGFyZW50U3R5bGUgPSBwaWNrKHN0eWxlLCBbXG4gICAgJ3dpZHRoJyxcbiAgICAnaGVpZ2h0JyxcbiAgICAnbWF4V2lkdGgnLFxuICAgICdtYXhIZWlnaHQnLFxuICAgICdtaW5XaWR0aCcsXG4gICAgJ21pbkhlaWdodCcsXG4gICAgJ2xlZnQnLFxuICAgICd0b3AnLFxuICAgICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICdwb3NpdGlvbicsXG4gICAgJ292ZXJmbG93JyxcbiAgICAnYm9yZGVyJyxcbiAgICAnd29yZFdyYXAnLFxuICAgICd0ZXh0QWxpZ24nLFxuICAgICdvdXRsaW5lJyxcbiAgICAndHJhbnNmb3JtJ1xuICBdKTtcblxuICBhc3NpZ24ocGFyZW50LnN0eWxlLCB7XG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCArICdweCcsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0ICsgJ3B4JyxcbiAgICBtYXhXaWR0aDogYm91bmRzLm1heFdpZHRoICsgJ3B4JyxcbiAgICBtYXhIZWlnaHQ6IGJvdW5kcy5tYXhIZWlnaHQgKyAncHgnLFxuICAgIG1pbldpZHRoOiBib3VuZHMubWluV2lkdGggKyAncHgnLFxuICAgIG1pbkhlaWdodDogYm91bmRzLm1pbkhlaWdodCArICdweCcsXG4gICAgbGVmdDogYm91bmRzLnggKyAncHgnLFxuICAgIHRvcDogYm91bmRzLnkgKyAncHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNjY2MnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHdvcmRXcmFwOiAnbm9ybWFsJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJ1xuICB9LCBwYXJlbnRTdHlsZSk7XG5cbiAgdmFyIGNvbnRlbnRTdHlsZSA9IHBpY2soc3R5bGUsIFtcbiAgICAnZm9udEZhbWlseScsXG4gICAgJ2ZvbnRTaXplJyxcbiAgICAnZm9udFdlaWdodCcsXG4gICAgJ2xpbmVIZWlnaHQnLFxuICAgICdwYWRkaW5nJyxcbiAgICAncGFkZGluZ1RvcCcsXG4gICAgJ3BhZGRpbmdSaWdodCcsXG4gICAgJ3BhZGRpbmdCb3R0b20nLFxuICAgICdwYWRkaW5nTGVmdCdcbiAgXSk7XG5cbiAgYXNzaWduKGNvbnRlbnQuc3R5bGUsIHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICB3b3JkV3JhcDogJ2JyZWFrLXdvcmQnXG4gIH0sIGNvbnRlbnRTdHlsZSk7XG5cbiAgaWYgKG9wdGlvbnMuY2VudGVyVmVydGljYWxseSkge1xuICAgIGFzc2lnbihjb250ZW50LnN0eWxlLCB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRvcDogJzUwJScsXG4gICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgLTUwJSknXG4gICAgfSwgY29udGVudFN0eWxlKTtcbiAgfVxuXG4gIGNvbnRlbnQuaW5uZXJUZXh0ID0gdmFsdWU7XG5cbiAgZG9tRXZlbnQuYmluZChjb250ZW50LCAna2V5ZG93bicsIHRoaXMua2V5SGFuZGxlcik7XG4gIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ21vdXNlZG93bicsIHN0b3BQcm9wYWdhdGlvbik7XG4gIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ3Bhc3RlJywgc2VsZi5oYW5kbGVQYXN0ZSk7XG5cbiAgaWYgKG9wdGlvbnMuYXV0b1Jlc2l6ZSkge1xuICAgIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ2lucHV0JywgdGhpcy5hdXRvUmVzaXplKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlc2l6YWJsZSkge1xuICAgIHRoaXMucmVzaXphYmxlKHN0eWxlKTtcbiAgfVxuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwYXJlbnQpO1xuXG4gIC8vIHNldCBzZWxlY3Rpb24gdG8gZW5kIG9mIHRleHRcbiAgdGhpcy5zZXRTZWxlY3Rpb24oY29udGVudC5sYXN0Q2hpbGQsIGNvbnRlbnQubGFzdENoaWxkICYmIGNvbnRlbnQubGFzdENoaWxkLmxlbmd0aCk7XG5cbiAgcmV0dXJuIHBhcmVudDtcbn07XG5cbi8qKlxuICogSW50ZXJjZXB0IHBhc3RlIGV2ZW50cyB0byByZW1vdmUgZm9ybWF0dGluZyBmcm9tIHBhc3RlZCB0ZXh0LlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5oYW5kbGVQYXN0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGU7XG5cbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIHZhciB0ZXh0O1xuXG4gIGlmIChlLmNsaXBib2FyZERhdGEpIHtcblxuICAgIC8vIENocm9tZSwgRmlyZWZveCwgU2FmYXJpXG4gICAgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gIH0gZWxzZSB7XG5cbiAgICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuICAgIHRleHQgPSB3aW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG4gIH1cblxuICB0aGlzLmluc2VydFRleHQodGV4dCk7XG5cbiAgaWYgKG9wdGlvbnMuYXV0b1Jlc2l6ZSkge1xuICAgIHZhciBoYXNSZXNpemVkID0gdGhpcy5hdXRvUmVzaXplKHN0eWxlKTtcblxuICAgIGlmIChoYXNSZXNpemVkKSB7XG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZXIoaGFzUmVzaXplZCk7XG4gICAgfVxuICB9XG59O1xuXG5UZXh0Qm94LnByb3RvdHlwZS5pbnNlcnRUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIC8vIGluc2VydFRleHQgY29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IEludGVybmV0IEV4cGxvcmVyXG4gIHZhciBzdWNjZXNzID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgdGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9pbnNlcnRUZXh0SUUodGV4dCk7XG59O1xuXG5UZXh0Qm94LnByb3RvdHlwZS5faW5zZXJ0VGV4dElFID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyXG4gIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgIGVuZE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldCxcbiAgICAgIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG5cbiAgdmFyIGNoaWxkTm9kZXNBcnJheSA9IHRvQXJyYXkoY29tbW9uQW5jZXN0b3JDb250YWluZXIuY2hpbGROb2Rlcyk7XG5cbiAgdmFyIGNvbnRhaW5lcixcbiAgICAgIG9mZnNldDtcblxuICBpZiAoaXNUZXh0Tm9kZShjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICB2YXIgY29udGFpbmVyVGV4dENvbnRlbnQgPSBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudDtcblxuICAgIHN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50ID1cbiAgICAgIGNvbnRhaW5lclRleHRDb250ZW50LnN1YnN0cmluZygwLCBzdGFydE9mZnNldClcbiAgICAgICsgdGV4dFxuICAgICAgKyBjb250YWluZXJUZXh0Q29udGVudC5zdWJzdHJpbmcoZW5kT2Zmc2V0KTtcblxuICAgIGNvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyO1xuICAgIG9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgdGV4dC5sZW5ndGg7XG5cbiAgfSBlbHNlIGlmIChzdGFydENvbnRhaW5lciA9PT0gdGhpcy5jb250ZW50ICYmIGVuZENvbnRhaW5lciA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cbiAgICB0aGlzLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBjaGlsZE5vZGVzQXJyYXlbc3RhcnRPZmZzZXRdKTtcblxuICAgIGNvbnRhaW5lciA9IHRleHROb2RlO1xuICAgIG9mZnNldCA9IHRleHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3RhcnRDb250YWluZXJDaGlsZEluZGV4ID0gY2hpbGROb2Rlc0FycmF5LmluZGV4T2Yoc3RhcnRDb250YWluZXIpLFxuICAgICAgICBlbmRDb250YWluZXJDaGlsZEluZGV4ID0gY2hpbGROb2Rlc0FycmF5LmluZGV4T2YoZW5kQ29udGFpbmVyKTtcblxuICAgIGNoaWxkTm9kZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkTm9kZSwgaW5kZXgpIHtcblxuICAgICAgaWYgKGluZGV4ID09PSBzdGFydENvbnRhaW5lckNoaWxkSW5kZXgpIHtcbiAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQpICtcbiAgICAgICAgICB0ZXh0ICtcbiAgICAgICAgICBlbmRDb250YWluZXIudGV4dENvbnRlbnQuc3Vic3RyaW5nKGVuZE9mZnNldCk7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4ID4gc3RhcnRDb250YWluZXJDaGlsZEluZGV4ICYmIGluZGV4IDw9IGVuZENvbnRhaW5lckNoaWxkSW5kZXgpIHtcbiAgICAgICAgZG9tUmVtb3ZlKGNoaWxkTm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIgPSBzdGFydENvbnRhaW5lcjtcbiAgICBvZmZzZXQgPSBzdGFydE9mZnNldCArIHRleHQubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lciAmJiBvZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgLy8gaXMgbmVjZXNzYXJ5IGluIEludGVybmV0IEV4cGxvcmVyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2V0U2VsZWN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHJlc2l6ZSBlbGVtZW50IHZlcnRpY2FsbHkgdG8gZml0IGl0cyBjb250ZW50LlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5hdXRvUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cbiAgdmFyIGZvbnRTaXplID0gcGFyc2VJbnQodGhpcy5zdHlsZS5mb250U2l6ZSkgfHwgMTI7XG5cbiAgaWYgKGNvbnRlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50Lm9mZnNldEhlaWdodCB8fFxuICAgICAgY29udGVudC5zY3JvbGxIZWlnaHQgPCBwYXJlbnQub2Zmc2V0SGVpZ2h0IC0gZm9udFNpemUpIHtcbiAgICB2YXIgYm91bmRzID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhlaWdodCA9IGNvbnRlbnQuc2Nyb2xsSGVpZ2h0O1xuICAgIHBhcmVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuXG4gICAgdGhpcy5yZXNpemVIYW5kbGVyKHtcbiAgICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQsXG4gICAgICBkeDogMCxcbiAgICAgIGR5OiBoZWlnaHQgLSBib3VuZHMuaGVpZ2h0XG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogTWFrZSBhbiBlbGVtZW50IHJlc2l6YWJsZSBieSBhZGRpbmcgYSByZXNpemUgaGFuZGxlLlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5yZXNpemFibGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIHJlc2l6ZUhhbmRsZSA9IHRoaXMucmVzaXplSGFuZGxlO1xuXG4gIHZhciBtaW5XaWR0aCA9IHBhcnNlSW50KHRoaXMuc3R5bGUubWluV2lkdGgpIHx8IDAsXG4gICAgICBtaW5IZWlnaHQgPSBwYXJzZUludCh0aGlzLnN0eWxlLm1pbkhlaWdodCkgfHwgMCxcbiAgICAgIG1heFdpZHRoID0gcGFyc2VJbnQodGhpcy5zdHlsZS5tYXhXaWR0aCkgfHwgSW5maW5pdHksXG4gICAgICBtYXhIZWlnaHQgPSBwYXJzZUludCh0aGlzLnN0eWxlLm1heEhlaWdodCkgfHwgSW5maW5pdHk7XG5cbiAgaWYgKCFyZXNpemVIYW5kbGUpIHtcbiAgICByZXNpemVIYW5kbGUgPSB0aGlzLnJlc2l6ZUhhbmRsZSA9IGRvbWlmeShcbiAgICAgICc8ZGl2IGNsYXNzPVwiZGpzLWRpcmVjdC1lZGl0aW5nLXJlc2l6ZS1oYW5kbGVcIj48L2Rpdj4nXG4gICAgKTtcblxuICAgIHZhciBzdGFydFgsIHN0YXJ0WSwgc3RhcnRXaWR0aCwgc3RhcnRIZWlnaHQ7XG5cbiAgICB2YXIgb25Nb3VzZURvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcblxuICAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuXG4gICAgICB2YXIgYm91bmRzID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBzdGFydFdpZHRoID0gYm91bmRzLndpZHRoO1xuICAgICAgc3RhcnRIZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xuXG4gICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB2YXIgb25Nb3VzZU1vdmUgPSBmdW5jdGlvbihlKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcblxuICAgICAgdmFyIG5ld1dpZHRoID0gbWluKG1heChzdGFydFdpZHRoICsgZS5jbGllbnRYIC0gc3RhcnRYLCBtaW5XaWR0aCksIG1heFdpZHRoKTtcbiAgICAgIHZhciBuZXdIZWlnaHQgPSBtaW4obWF4KHN0YXJ0SGVpZ2h0ICsgZS5jbGllbnRZIC0gc3RhcnRZLCBtaW5IZWlnaHQpLCBtYXhIZWlnaHQpO1xuXG4gICAgICBwYXJlbnQuc3R5bGUud2lkdGggPSBuZXdXaWR0aCArICdweCc7XG4gICAgICBwYXJlbnQuc3R5bGUuaGVpZ2h0ID0gbmV3SGVpZ2h0ICsgJ3B4JztcblxuICAgICAgc2VsZi5yZXNpemVIYW5kbGVyKHtcbiAgICAgICAgd2lkdGg6IHN0YXJ0V2lkdGgsXG4gICAgICAgIGhlaWdodDogc3RhcnRIZWlnaHQsXG4gICAgICAgIGR4OiBlLmNsaWVudFggLSBzdGFydFgsXG4gICAgICAgIGR5OiBlLmNsaWVudFkgLSBzdGFydFlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgb25Nb3VzZVVwID0gZnVuY3Rpb24oZSkge1xuICAgICAgcHJldmVudERlZmF1bHQoZSk7XG4gICAgICBzdG9wUHJvcGFnYXRpb24oZSk7XG5cbiAgICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBvbk1vdXNlVXAsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgZG9tRXZlbnQuYmluZChyZXNpemVIYW5kbGUsICdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gIH1cblxuICBhc3NpZ24ocmVzaXplSGFuZGxlLnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYm90dG9tOiAnMHB4JyxcbiAgICByaWdodDogJzBweCcsXG4gICAgY3Vyc29yOiAnbndzZS1yZXNpemUnLFxuICAgIHdpZHRoOiAnMCcsXG4gICAgaGVpZ2h0OiAnMCcsXG4gICAgYm9yZGVyVG9wOiAocGFyc2VJbnQodGhpcy5zdHlsZS5mb250U2l6ZSkgLyA0IHx8IDMpICsgJ3B4IHNvbGlkIHRyYW5zcGFyZW50JyxcbiAgICBib3JkZXJSaWdodDogKHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIC8gNCB8fCAzKSArICdweCBzb2xpZCAjY2NjJyxcbiAgICBib3JkZXJCb3R0b206IChwYXJzZUludCh0aGlzLnN0eWxlLmZvbnRTaXplKSAvIDQgfHwgMykgKyAncHggc29saWQgI2NjYycsXG4gICAgYm9yZGVyTGVmdDogKHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIC8gNCB8fCAzKSArICdweCBzb2xpZCB0cmFuc3BhcmVudCdcbiAgfSk7XG5cbiAgcGFyZW50LmFwcGVuZENoaWxkKHJlc2l6ZUhhbmRsZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXIgY29udGVudCBhbmQgc3R5bGUgb2YgdGhlIHRleHRib3gsIHVuYmluZCBsaXN0ZW5lcnMgYW5kXG4gKiByZXNldCBDU1Mgc3R5bGUuXG4gKi9cblRleHRCb3gucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50LFxuICAgICAgY29udGVudCA9IHRoaXMuY29udGVudCxcbiAgICAgIHJlc2l6ZUhhbmRsZSA9IHRoaXMucmVzaXplSGFuZGxlO1xuXG4gIC8vIGNsZWFyIGNvbnRlbnRcbiAgY29udGVudC5pbm5lclRleHQgPSAnJztcblxuICAvLyBjbGVhciBzdHlsZXNcbiAgcGFyZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgY29udGVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdrZXlkb3duJywgdGhpcy5rZXlIYW5kbGVyKTtcbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdtb3VzZWRvd24nLCBzdG9wUHJvcGFnYXRpb24pO1xuICBkb21FdmVudC51bmJpbmQoY29udGVudCwgJ2lucHV0JywgdGhpcy5hdXRvUmVzaXplKTtcbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdwYXN0ZScsIHRoaXMuaGFuZGxlUGFzdGUpO1xuXG4gIGlmIChyZXNpemVIYW5kbGUpIHtcbiAgICByZXNpemVIYW5kbGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgZG9tUmVtb3ZlKHJlc2l6ZUhhbmRsZSk7XG4gIH1cblxuICBkb21SZW1vdmUocGFyZW50KTtcbn07XG5cblxuVGV4dEJveC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY29udGVudC5pbm5lclRleHQudHJpbSgpO1xufTtcblxuXG5UZXh0Qm94LnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgcmV0dXJuIHJhbmdlO1xufTtcblxuXG5UZXh0Qm94LnByb3RvdHlwZS5zZXRTZWxlY3Rpb24gPSBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkge1xuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gIGlmIChjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5jb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByYW5nZS5zZXRTdGFydChjb250YWluZXIsIG9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGRlbGVnYXRlIGFzIGRvbURlbGVnYXRlLFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgcXVlcnlBbGwgYXMgZG9tUXVlcnlBbGxcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7IGlzUHJpbWFyeUJ1dHRvbiB9IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVMaW5lLFxuICB1cGRhdGVMaW5lXG59IGZyb20gJy4uLy4uL3V0aWwvUmVuZGVyVXRpbCc7XG5cbmZ1bmN0aW9uIGFsbG93QWxsKGUpIHsgcmV0dXJuIHRydWU7IH1cblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIEEgcGx1Z2luIHRoYXQgcHJvdmlkZXMgaW50ZXJhY3Rpb24gZXZlbnRzIGZvciBkaWFncmFtIGVsZW1lbnRzLlxuICpcbiAqIEl0IGVtaXRzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICpcbiAqICAgKiBlbGVtZW50LmNsaWNrXG4gKiAgICogZWxlbWVudC5jb250ZXh0bWVudVxuICogICAqIGVsZW1lbnQuZGJsY2xpY2tcbiAqICAgKiBlbGVtZW50LmhvdmVyXG4gKiAgICogZWxlbWVudC5tb3VzZWRvd25cbiAqICAgKiBlbGVtZW50Lm1vdXNlbW92ZVxuICogICAqIGVsZW1lbnQubW91c2V1cFxuICogICAqIGVsZW1lbnQub3V0XG4gKlxuICogRWFjaCBldmVudCBpcyBhIHR1cGxlIHsgZWxlbWVudCwgZ2Z4LCBvcmlnaW5hbEV2ZW50IH0uXG4gKlxuICogQ2FuY2VsaW5nIHRoZSBldmVudCB2aWEgRXZlbnQjcHJldmVudERlZmF1bHQoKVxuICogcHJldmVudHMgdGhlIG9yaWdpbmFsIERPTSBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSW50ZXJhY3Rpb25FdmVudHMoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgc3R5bGVzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8qKlxuICAgKiBGaXJlIGFuIGludGVyYWN0aW9uIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBsb2NhbCBldmVudCBuYW1lLCBlLmcuIGVsZW1lbnQuY2xpY2suXG4gICAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50IG5hdGl2ZSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbZWxlbWVudF0gdGhlIGRpYWdyYW0gZWxlbWVudCB0byBlbWl0IHRoZSBldmVudCBvbjtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBldmVudCB0YXJnZXRcbiAgICovXG4gIGZ1bmN0aW9uIGZpcmUodHlwZSwgZXZlbnQsIGVsZW1lbnQpIHtcblxuICAgIGlmIChpc0lnbm9yZWQodHlwZSwgZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldCwgZ2Z4LCByZXR1cm5WYWx1ZTtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgdGFyZ2V0ID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGdmeCA9IHRhcmdldDtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICghZ2Z4IHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuVmFsdWUgPSBldmVudEJ1cy5maXJlKHR5cGUsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBnZng6IGdmeCxcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgfSk7XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyhuaWtrdSk6IGRvY3VtZW50IHRoaXNcbiAgdmFyIGhhbmRsZXJzID0ge307XG5cbiAgZnVuY3Rpb24gbW91c2VIYW5kbGVyKGxvY2FsRXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIGhhbmRsZXJzW2xvY2FsRXZlbnROYW1lXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSWdub3JlZChsb2NhbEV2ZW50TmFtZSwgZXZlbnQpIHtcblxuICAgIHZhciBmaWx0ZXIgPSBpZ25vcmVkRmlsdGVyc1tsb2NhbEV2ZW50TmFtZV0gfHwgaXNQcmltYXJ5QnV0dG9uO1xuXG4gICAgLy8gb25seSByZWFjdCBvbiBsZWZ0IG1vdXNlIGJ1dHRvbiBpbnRlcmFjdGlvbnNcbiAgICAvLyBleGNlcHQgZm9yIGludGVyYWN0aW9uIGV2ZW50cyB0aGF0IGFyZSBlbmFibGVkXG4gICAgLy8gZm9yIHNlY3VuZGFyeSBtb3VzZSBidXR0b25cbiAgICByZXR1cm4gIWZpbHRlcihldmVudCk7XG4gIH1cblxuICB2YXIgYmluZGluZ3MgPSB7XG4gICAgY2xpY2s6ICdlbGVtZW50LmNsaWNrJyxcbiAgICBjb250ZXh0bWVudTogJ2VsZW1lbnQuY29udGV4dG1lbnUnLFxuICAgIGRibGNsaWNrOiAnZWxlbWVudC5kYmxjbGljaycsXG4gICAgbW91c2Vkb3duOiAnZWxlbWVudC5tb3VzZWRvd24nLFxuICAgIG1vdXNlbW92ZTogJ2VsZW1lbnQubW91c2Vtb3ZlJyxcbiAgICBtb3VzZW92ZXI6ICdlbGVtZW50LmhvdmVyJyxcbiAgICBtb3VzZW91dDogJ2VsZW1lbnQub3V0JyxcbiAgICBtb3VzZXVwOiAnZWxlbWVudC5tb3VzZXVwJyxcbiAgfTtcblxuICB2YXIgaWdub3JlZEZpbHRlcnMgPSB7XG4gICAgJ2VsZW1lbnQuY29udGV4dG1lbnUnOiBhbGxvd0FsbFxuICB9O1xuXG5cbiAgLy8gbWFudWFsIGV2ZW50IHRyaWdnZXIgLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGludGVyYWN0aW9uIGV2ZW50IChiYXNlZCBvbiBhIG5hdGl2ZSBkb20gZXZlbnQpXG4gICAqIG9uIHRoZSB0YXJnZXQgc2hhcGUgb3IgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgdHJpZ2dlcmVkIERPTSBldmVudFxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHRhcmdldEVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHRyaWdnZXJNb3VzZUV2ZW50KGV2ZW50TmFtZSwgZXZlbnQsIHRhcmdldEVsZW1lbnQpIHtcblxuICAgIC8vIGkuZS4gZWxlbWVudC5tb3VzZWRvd24uLi5cbiAgICB2YXIgbG9jYWxFdmVudE5hbWUgPSBiaW5kaW5nc1tldmVudE5hbWVdO1xuXG4gICAgaWYgKCFsb2NhbEV2ZW50TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bm1hcHBlZCBET00gZXZlbnQgbmFtZSA8JyArIGV2ZW50TmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcmUobG9jYWxFdmVudE5hbWUsIGV2ZW50LCB0YXJnZXRFbGVtZW50KTtcbiAgfVxuXG5cbiAgdmFyIEVMRU1FTlRfU0VMRUNUT1IgPSAnc3ZnLCAuZGpzLWVsZW1lbnQnO1xuXG4gIC8vIGV2ZW50IGhhbmRsaW5nIC8vLy8vLy9cblxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50KG5vZGUsIGV2ZW50LCBsb2NhbEV2ZW50LCBpZ25vcmVkRmlsdGVyKSB7XG5cbiAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2xvY2FsRXZlbnRdID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGZpcmUobG9jYWxFdmVudCwgZXZlbnQpO1xuICAgIH07XG5cbiAgICBpZiAoaWdub3JlZEZpbHRlcikge1xuICAgICAgaWdub3JlZEZpbHRlcnNbbG9jYWxFdmVudF0gPSBpZ25vcmVkRmlsdGVyO1xuICAgIH1cblxuICAgIGhhbmRsZXIuJGRlbGVnYXRlID0gZG9tRGVsZWdhdGUuYmluZChub2RlLCBFTEVNRU5UX1NFTEVDVE9SLCBldmVudCwgaGFuZGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyRXZlbnQobm9kZSwgZXZlbnQsIGxvY2FsRXZlbnQpIHtcblxuICAgIHZhciBoYW5kbGVyID0gbW91c2VIYW5kbGVyKGxvY2FsRXZlbnQpO1xuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZG9tRGVsZWdhdGUudW5iaW5kKG5vZGUsIGV2ZW50LCBoYW5kbGVyLiRkZWxlZ2F0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50cyhzdmcpIHtcbiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgcmVnaXN0ZXJFdmVudChzdmcsIGtleSwgdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJFdmVudHMoc3ZnKSB7XG4gICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHVucmVnaXN0ZXJFdmVudChzdmcsIGtleSwgdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuZGVzdHJveScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdW5yZWdpc3RlckV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHJlZ2lzdGVyRXZlbnRzKGV2ZW50LnN2Zyk7XG4gIH0pO1xuXG5cbiAgLy8gaGl0IGJveCB1cGRhdGluZyAvLy8vLy8vLy8vLy8vLy8vXG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAnY29ubmVjdGlvbi5hZGRlZCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZUhpdCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG4gIH0pO1xuXG4gIC8vIFVwZGF0ZSBkanMtaGl0IG9uIGNoYW5nZS5cbiAgLy8gQSBsb3cgcHJpb3J0aXR5IGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSBkanMtaGl0IG9mIGxhYmVscyBoYXMgdG8gYmUgdXBkYXRlZFxuICAvLyBhZnRlciB0aGUgbGFiZWwgYm91bmRzIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSByZW5kZXJlci5cbiAgZXZlbnRCdXMub24oW1xuICAgICdzaGFwZS5jaGFuZ2VkJyxcbiAgICAnY29ubmVjdGlvbi5jaGFuZ2VkJ1xuICBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2ludGVyYWN0aW9uRXZlbnRzLnVwZGF0ZUhpdCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBzZWxmLmNyZWF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2ludGVyYWN0aW9uRXZlbnRzLnVwZGF0ZUhpdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBzZWxmLnVwZGF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgfSk7XG5cblxuICAvLyBoaXQgc3R5bGVzIC8vLy8vLy8vLy8vL1xuXG4gIHZhciBTVFJPS0VfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1zdHJva2UnKTtcblxuICB2YXIgQ0xJQ0tfU1RST0tFX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtY2xpY2stc3Ryb2tlJyk7XG5cbiAgdmFyIEFMTF9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LWFsbCcpO1xuXG4gIHZhciBISVRfVFlQRVMgPSB7XG4gICAgJ2FsbCc6IEFMTF9ISVRfU1RZTEUsXG4gICAgJ2NsaWNrLXN0cm9rZSc6IENMSUNLX1NUUk9LRV9ISVRfU1RZTEUsXG4gICAgJ3N0cm9rZSc6IFNUUk9LRV9ISVRfU1RZTEVcbiAgfTtcblxuICBmdW5jdGlvbiBjcmVhdGVIaXRTdHlsZShjbGFzc05hbWVzLCBhdHRycykge1xuXG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgc3Ryb2tlV2lkdGg6IDE1XG4gICAgfSwgYXR0cnMgfHwge30pO1xuXG4gICAgcmV0dXJuIHN0eWxlcy5jbHMoY2xhc3NOYW1lcywgWyAnbm8tZmlsbCcsICduby1ib3JkZXInIF0sIGF0dHJzKTtcbiAgfVxuXG5cbiAgLy8gc3R5bGUgaGVscGVycyAvLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBhcHBseVN0eWxlKGhpdCwgdHlwZSkge1xuXG4gICAgdmFyIGF0dHJzID0gSElUX1RZUEVTW3R5cGVdO1xuXG4gICAgaWYgKCFhdHRycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGhpdCB0eXBlIDwnICsgdHlwZSArICc+Jyk7XG4gICAgfVxuXG4gICAgc3ZnQXR0cihoaXQsIGF0dHJzKTtcblxuICAgIHJldHVybiBoaXQ7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRIaXQoZ2Z4LCBoaXQpIHtcbiAgICBzdmdBcHBlbmQoZ2Z4LCBoaXQpO1xuICB9XG5cblxuICAvLyBBUElcblxuICAvKipcbiAgICogUmVtb3ZlIGhpbnRzIG9uIHRoZSBnaXZlbiBncmFwaGljcy5cbiAgICpcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICovXG4gIHRoaXMucmVtb3ZlSGl0cyA9IGZ1bmN0aW9uKGdmeCkge1xuICAgIHZhciBoaXRzID0gZG9tUXVlcnlBbGwoJy5kanMtaGl0JywgZ2Z4KTtcblxuICAgIGZvckVhY2goaGl0cywgc3ZnUmVtb3ZlKTtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGRlZmF1bHQgaGl0IGZvciB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fSBjcmVhdGVkIGhpdFxuICAgKi9cbiAgdGhpcy5jcmVhdGVEZWZhdWx0SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGVsZW1lbnQud2F5cG9pbnRzLFxuICAgICAgICBpc0ZyYW1lID0gZWxlbWVudC5pc0ZyYW1lLFxuICAgICAgICBib3hUeXBlO1xuXG4gICAgaWYgKHdheXBvaW50cykge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2F5cG9pbnRzSGl0KGdmeCwgd2F5cG9pbnRzKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBib3hUeXBlID0gaXNGcmFtZSA/ICdzdHJva2UnIDogJ2FsbCc7XG5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUJveEhpdChnZngsIGJveFR5cGUsIHtcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGhpdHMgZm9yIHRoZSBnaXZlbiB3YXlwb2ludHMuXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAgICovXG4gIHRoaXMuY3JlYXRlV2F5cG9pbnRzSGl0ID0gZnVuY3Rpb24oZ2Z4LCB3YXlwb2ludHMpIHtcblxuICAgIHZhciBoaXQgPSBjcmVhdGVMaW5lKHdheXBvaW50cyk7XG5cbiAgICBhcHBseVN0eWxlKGhpdCwgJ3N0cm9rZScpO1xuXG4gICAgYXBwZW5kSGl0KGdmeCwgaGl0KTtcblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBoaXRzIGZvciBhIGJveC5cbiAgICpcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGhpdFR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJzXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gICAqL1xuICB0aGlzLmNyZWF0ZUJveEhpdCA9IGZ1bmN0aW9uKGdmeCwgdHlwZSwgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSwgYXR0cnMpO1xuXG4gICAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuXG4gICAgYXBwbHlTdHlsZShoaXQsIHR5cGUpO1xuXG4gICAgc3ZnQXR0cihoaXQsIGF0dHJzKTtcblxuICAgIGFwcGVuZEhpdChnZngsIGhpdCk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgZGVmYXVsdCBoaXQgb2YgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IGdmeFxuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB1cGRhdGVkIGhpdFxuICAgKi9cbiAgdGhpcy51cGRhdGVEZWZhdWx0SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG5cbiAgICB2YXIgaGl0ID0gZG9tUXVlcnkoJy5kanMtaGl0JywgZ2Z4KTtcblxuICAgIGlmICghaGl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICB1cGRhdGVMaW5lKGhpdCwgZWxlbWVudC53YXlwb2ludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmdBdHRyKGhpdCwge1xuICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICB0aGlzLmZpcmUgPSBmaXJlO1xuXG4gIHRoaXMudHJpZ2dlck1vdXNlRXZlbnQgPSB0cmlnZ2VyTW91c2VFdmVudDtcblxuICB0aGlzLm1vdXNlSGFuZGxlciA9IG1vdXNlSGFuZGxlcjtcblxuICB0aGlzLnJlZ2lzdGVyRXZlbnQgPSByZWdpc3RlckV2ZW50O1xuICB0aGlzLnVucmVnaXN0ZXJFdmVudCA9IHVucmVnaXN0ZXJFdmVudDtcbn1cblxuXG5JbnRlcmFjdGlvbkV2ZW50cy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ3N0eWxlcydcbl07XG5cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhvdmVyZWQgb3ZlciBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuaG92ZXJcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGxlZnQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50Lm91dFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgY2xpY2tlZCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuY2xpY2tcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGRvdWJsZSBjbGlja2VkIGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5kYmxjbGlja1xuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZ29uZSBkb3duIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogQGV2ZW50IGVsZW1lbnQubW91c2Vkb3duXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBnb25lIHVwIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogQGV2ZW50IGVsZW1lbnQubW91c2V1cFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgYWN0aW9uIGlzIHRyaWdnZXJlZFxuICogdmlhIG1vdXNlIG9yIHRvdWNoIGNvbnRyb2xzLlxuICpcbiAqIEBldmVudCBlbGVtZW50LmNvbnRleHRtZW51XG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi8iLCIvKipcbiAqIEEgc2ltcGxlIHRyYW5zbGF0aW9uIHN0dWIgdG8gYmUgdXNlZCBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogaW4gZGlhZ3JhbXMuIENhbiBiZSBlYXNpbHkgcmVwbGFjZWQgd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZFxuICogc29sdXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyB1c2UgaXQgaW5zaWRlIGFueSBkaWFncmFtIGNvbXBvbmVudCBieSBpbmplY3RpbmcgYHRyYW5zbGF0ZWAuXG4gKlxuICogZnVuY3Rpb24gTXlTZXJ2aWNlKHRyYW5zbGF0ZSkge1xuICogICBhbGVydCh0cmFuc2xhdGUoJ0hFTExPIHt5b3V9JywgeyB5b3U6ICdZb3UhJyB9KSk7XG4gKiB9XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlIHRvIGludGVycG9sYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcGxhY2VtZW50c10gYSBtYXAgd2l0aCBzdWJzdGl0dXRlc1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zbGF0ZSh0ZW1wbGF0ZSwgcmVwbGFjZW1lbnRzKSB7XG5cbiAgcmVwbGFjZW1lbnRzID0gcmVwbGFjZW1lbnRzIHx8IHt9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC97KFtefV0rKX0vZywgZnVuY3Rpb24oXywga2V5KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50c1trZXldIHx8ICd7JyArIGtleSArICd9JztcbiAgfSk7XG59IiwiLyoqXG4gKiBGYWlsc2FmZSByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGEgY29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IFtjb2xsZWN0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSBbZWxlbWVudF1cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBwcmV2aW91cyBpbmRleCBvZiB0aGUgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlKGNvbGxlY3Rpb24sIGVsZW1lbnQpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChpZHggIT09IC0xKSB7XG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuXG4gIHJldHVybiBpZHg7XG59XG5cbi8qKlxuICogRmFpbCBzYXZlIGFkZCBhbiBlbGVtZW50IHRvIHRoZSBnaXZlbiBjb25uZWN0aW9uLCBlbnN1cmluZ1xuICogaXQgZG9lcyBub3QgeWV0IGV4aXN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChjb2xsZWN0aW9uLCBlbGVtZW50LCBpZHgpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGlkeCAhPT0gJ251bWJlcicpIHtcbiAgICBpZHggPSAtMTtcbiAgfVxuXG4gIHZhciBjdXJyZW50SWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChjdXJyZW50SWR4ICE9PSAtMSkge1xuXG4gICAgaWYgKGN1cnJlbnRJZHggPT09IGlkeCkge1xuXG4gICAgICAvLyBub3RoaW5nIHRvIGRvLCBwb3NpdGlvbiBoYXMgbm90IGNoYW5nZWRcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgY29sbGVjdGlvbi5zcGxpY2UoY3VycmVudElkeCwgMSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIGFscmVhZHkgZXhpc3RzIGluIGNvbGxlY3Rpb25cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChpZHggIT09IC0xKSB7XG5cbiAgICAvLyBpbnNlcnQgYXQgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIHB1c2ggdG8gZW5kXG4gICAgY29sbGVjdGlvbi5wdXNoKGVsZW1lbnQpO1xuICB9XG59XG5cblxuLyoqXG4gKiBGYWlsIHNhdmUgZ2V0IHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TnVtYmVyfSB0aGUgaW5kZXggb3IgLTEgaWYgY29sbGVjdGlvbiBvciBlbGVtZW50IGRvXG4gKiAgICAgICAgICAgICAgICAgIG5vdCBleGlzdCBvciB0aGUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbGVtZW50KSB7XG5cbiAgaWYgKCFjb2xsZWN0aW9uIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbGVtZW50KTtcbn1cbiIsInZhciBDTEFTU19QQVRURVJOID0gL15jbGFzcyAvO1xuXG5mdW5jdGlvbiBpc0NsYXNzKGZuKSB7XG4gIHJldHVybiBDTEFTU19QQVRURVJOLnRlc3QoZm4udG9TdHJpbmcoKSk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGUoKSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShhcmdzWzBdKSkge1xuICAgIGFyZ3MgPSBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIGZuID0gYXJncy5wb3AoKTtcblxuICBmbi4kaW5qZWN0ID0gYXJncztcblxuICByZXR1cm4gZm47XG59XG5cbi8vIEN1cnJlbnQgbGltaXRhdGlvbnM6XG4vLyAtIGNhbid0IHB1dCBpbnRvIFwiZnVuY3Rpb24gYXJnXCIgY29tbWVudHNcbi8vIGZ1bmN0aW9uIC8qIChubyBwYXJlbnRoZXNpcyBsaWtlIHRoaXMpICovICgpe31cbi8vIGZ1bmN0aW9uIGFiYyggLyogeHggKG5vIHBhcmVudGhlc2lzIGxpa2UgdGhpcykgKi8gYSwgYikge31cbi8vXG4vLyBKdXN0IHB1dCB0aGUgY29tbWVudCBiZWZvcmUgZnVuY3Rpb24gb3IgaW5zaWRlOlxuLy8gLyogKCgodGhpcyBpcyBmaW5lKSkpICovIGZ1bmN0aW9uKGEsIGIpIHt9XG4vLyBmdW5jdGlvbiBhYmMoYSkgeyAvKiAoKCh0aGlzIGlzIGZpbmUpKSkgKi99XG4vL1xuLy8gLSBjYW4ndCByZWxpYWJseSBhdXRvLWFubm90YXRlIGNvbnN0cnVjdG9yOyB3ZSdsbCBtYXRjaCB0aGVcbi8vIGZpcnN0IGNvbnN0cnVjdG9yKC4uLikgcGF0dGVybiBmb3VuZCB3aGljaCBtYXkgYmUgdGhlIG9uZVxuLy8gb2YgYSBuZXN0ZWQgY2xhc3MsIHRvby5cblxudmFyIENPTlNUUlVDVE9SX0FSR1MgPSAvY29uc3RydWN0b3JcXHMqW14oXSpcXChcXHMqKFteKV0qKVxcKS9tO1xudmFyIEZOX0FSR1MgPSAvXmZ1bmN0aW9uXFxzKlteKF0qXFwoXFxzKihbXildKilcXCkvbTtcbnZhciBGTl9BUkcgPSAvXFwvXFwqKFteKl0qKVxcKlxcLy9tO1xuXG5mdW5jdGlvbiBwYXJzZShmbikge1xuXG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhbm5vdGF0ZSBcIicgKyBmbiArICdcIi4gRXhwZWN0ZWQgYSBmdW5jdGlvbiEnKTtcbiAgfVxuXG4gIHZhciBtYXRjaCA9IGZuLnRvU3RyaW5nKCkubWF0Y2goaXNDbGFzcyhmbikgPyBDT05TVFJVQ1RPUl9BUkdTIDogRk5fQVJHUyk7XG5cbiAgLy8gbWF5IHBhcnNlIGNsYXNzIHdpdGhvdXQgY29uc3RydWN0b3JcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaFsxXSAmJiBtYXRjaFsxXS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgbWF0Y2ggPSBhcmcubWF0Y2goRk5fQVJHKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBhcmcudHJpbSgpO1xuICB9KSB8fCBbXTtcbn1cblxuZnVuY3Rpb24gTW9kdWxlKCkge1xuICB2YXIgcHJvdmlkZXJzID0gW107XG5cbiAgdGhpcy5mYWN0b3J5ID0gZnVuY3Rpb24gKG5hbWUsIGZhY3RvcnkpIHtcbiAgICBwcm92aWRlcnMucHVzaChbbmFtZSwgJ2ZhY3RvcnknLCBmYWN0b3J5XSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy52YWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKFtuYW1lLCAndmFsdWUnLCB2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMudHlwZSA9IGZ1bmN0aW9uIChuYW1lLCB0eXBlKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goW25hbWUsICd0eXBlJywgdHlwZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMuZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgIHByb3ZpZGVycy5mb3JFYWNoKGl0ZXJhdG9yKTtcbiAgfTtcbn1cblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxuZnVuY3Rpb24gSW5qZWN0b3IobW9kdWxlcywgcGFyZW50KSB7XG4gIHBhcmVudCA9IHBhcmVudCB8fCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQobmFtZSwgc3RyaWN0KSB7XG4gICAgICBjdXJyZW50bHlSZXNvbHZpbmcucHVzaChuYW1lKTtcblxuICAgICAgaWYgKHN0cmljdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcignTm8gcHJvdmlkZXIgZm9yIFwiJyArIG5hbWUgKyAnXCIhJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBjdXJyZW50bHlSZXNvbHZpbmcgPSBbXTtcbiAgdmFyIHByb3ZpZGVycyA9IHRoaXMuX3Byb3ZpZGVycyA9IE9iamVjdC5jcmVhdGUocGFyZW50Ll9wcm92aWRlcnMgfHwgbnVsbCk7XG4gIHZhciBpbnN0YW5jZXMgPSB0aGlzLl9pbnN0YW5jZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHZhciBzZWxmID0gaW5zdGFuY2VzLmluamVjdG9yID0gdGhpcztcblxuICB2YXIgZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgICB2YXIgc3RhY2sgPSBjdXJyZW50bHlSZXNvbHZpbmcuam9pbignIC0+ICcpO1xuICAgIGN1cnJlbnRseVJlc29sdmluZy5sZW5ndGggPSAwO1xuICAgIHJldHVybiBuZXcgRXJyb3Ioc3RhY2sgPyBtc2cgKyAnIChSZXNvbHZpbmc6ICcgKyBzdGFjayArICcpJyA6IG1zZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG5hbWVkIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3N0cmljdD10cnVlXSBpZiBmYWxzZSwgcmVzb2x2ZSBtaXNzaW5nIHNlcnZpY2VzIHRvIG51bGxcbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChuYW1lLCBzdHJpY3QpIHtcbiAgICBpZiAoIXByb3ZpZGVyc1tuYW1lXSAmJiBuYW1lLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcbiAgICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgIHZhciBwaXZvdCA9IGdldChwYXJ0cy5zaGlmdCgpKTtcblxuICAgICAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgICAgICBwaXZvdCA9IHBpdm90W3BhcnRzLnNoaWZ0KCldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGl2b3Q7XG4gICAgfVxuXG4gICAgaWYgKGhhc1Byb3AoaW5zdGFuY2VzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlc1tuYW1lXTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUHJvcChwcm92aWRlcnMsIG5hbWUpKSB7XG4gICAgICBpZiAoY3VycmVudGx5UmVzb2x2aW5nLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgIGN1cnJlbnRseVJlc29sdmluZy5wdXNoKG5hbWUpO1xuICAgICAgICB0aHJvdyBlcnJvcignQ2Fubm90IHJlc29sdmUgY2lyY3VsYXIgZGVwZW5kZW5jeSEnKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudGx5UmVzb2x2aW5nLnB1c2gobmFtZSk7XG4gICAgICBpbnN0YW5jZXNbbmFtZV0gPSBwcm92aWRlcnNbbmFtZV1bMF0ocHJvdmlkZXJzW25hbWVdWzFdKTtcbiAgICAgIGN1cnJlbnRseVJlc29sdmluZy5wb3AoKTtcblxuICAgICAgcmV0dXJuIGluc3RhbmNlc1tuYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50LmdldChuYW1lLCBzdHJpY3QpO1xuICB9O1xuXG4gIHZhciBmbkRlZiA9IGZ1bmN0aW9uIGZuRGVmKGZuKSB7XG4gICAgdmFyIGxvY2FscyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoaXNBcnJheShmbikpIHtcbiAgICAgICAgZm4gPSBhbm5vdGF0ZShmbi5zbGljZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBcIicgKyBmbiArICdcIi4gRXhwZWN0ZWQgYSBmdW5jdGlvbiEnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaW5qZWN0ID0gZm4uJGluamVjdCB8fCBwYXJzZShmbik7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IGluamVjdC5tYXAoZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKGhhc1Byb3AobG9jYWxzLCBkZXApKSB7XG4gICAgICAgIHJldHVybiBsb2NhbHNbZGVwXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXQoZGVwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBmbjogZm4sXG4gICAgICBkZXBlbmRlbmNpZXM6IGRlcGVuZGVuY2llc1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGluc3RhbnRpYXRlID0gZnVuY3Rpb24gaW5zdGFudGlhdGUoVHlwZSkge1xuICAgIHZhciBfZm5EZWYgPSBmbkRlZihUeXBlKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gX2ZuRGVmLmRlcGVuZGVuY2llcyxcbiAgICAgICAgZm4gPSBfZm5EZWYuZm47XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShmbiwgW251bGxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGVwZW5kZW5jaWVzKSkpKSgpO1xuICB9O1xuXG4gIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UoZnVuYywgY29udGV4dCwgbG9jYWxzKSB7XG4gICAgdmFyIF9mbkRlZjIgPSBmbkRlZihmdW5jLCBsb2NhbHMpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSBfZm5EZWYyLmRlcGVuZGVuY2llcyxcbiAgICAgICAgZm4gPSBfZm5EZWYyLmZuO1xuXG4gICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIFtjb250ZXh0XS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGRlcGVuZGVuY2llcykpKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlUHJpdmF0ZUluamVjdG9yRmFjdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZVByaXZhdGVJbmplY3RvckZhY3RvcnkocHJpdmF0ZUNoaWxkSW5qZWN0b3IpIHtcbiAgICByZXR1cm4gYW5ub3RhdGUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHByaXZhdGVDaGlsZEluamVjdG9yLmdldChrZXkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBjcmVhdGVDaGlsZCA9IGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKG1vZHVsZXMsIGZvcmNlTmV3SW5zdGFuY2VzKSB7XG4gICAgaWYgKGZvcmNlTmV3SW5zdGFuY2VzICYmIGZvcmNlTmV3SW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgdmFyIGZyb21QYXJlbnRNb2R1bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdmFyIG1hdGNoZWRTY29wZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICB2YXIgcHJpdmF0ZUluamVjdG9yc0NhY2hlID0gW107XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzID0gW107XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkRmFjdG9yaWVzID0gW107XG5cbiAgICAgIHZhciBwcm92aWRlcjtcbiAgICAgIHZhciBjYWNoZUlkeDtcbiAgICAgIHZhciBwcml2YXRlQ2hpbGRJbmplY3RvcjtcbiAgICAgIHZhciBwcml2YXRlQ2hpbGRJbmplY3RvckZhY3Rvcnk7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIHByb3ZpZGVycykge1xuICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVyc1tuYW1lXTtcblxuICAgICAgICBpZiAoZm9yY2VOZXdJbnN0YW5jZXMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAocHJvdmlkZXJbMl0gPT09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgY2FjaGVJZHggPSBwcml2YXRlSW5qZWN0b3JzQ2FjaGUuaW5kZXhPZihwcm92aWRlclszXSk7XG4gICAgICAgICAgICBpZiAoY2FjaGVJZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHByaXZhdGVDaGlsZEluamVjdG9yID0gcHJvdmlkZXJbM10uY3JlYXRlQ2hpbGQoW10sIGZvcmNlTmV3SW5zdGFuY2VzKTtcbiAgICAgICAgICAgICAgcHJpdmF0ZUNoaWxkSW5qZWN0b3JGYWN0b3J5ID0gY3JlYXRlUHJpdmF0ZUluamVjdG9yRmFjdG9yeShwcml2YXRlQ2hpbGRJbmplY3Rvcik7XG4gICAgICAgICAgICAgIHByaXZhdGVJbmplY3RvcnNDYWNoZS5wdXNoKHByb3ZpZGVyWzNdKTtcbiAgICAgICAgICAgICAgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzLnB1c2gocHJpdmF0ZUNoaWxkSW5qZWN0b3IpO1xuICAgICAgICAgICAgICBwcml2YXRlQ2hpbGRGYWN0b3JpZXMucHVzaChwcml2YXRlQ2hpbGRJbmplY3RvckZhY3RvcnkpO1xuICAgICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3ByaXZhdGVDaGlsZEluamVjdG9yRmFjdG9yeSwgbmFtZSwgJ3ByaXZhdGUnLCBwcml2YXRlQ2hpbGRJbmplY3Rvcl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3ByaXZhdGVDaGlsZEZhY3Rvcmllc1tjYWNoZUlkeF0sIG5hbWUsICdwcml2YXRlJywgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzW2NhY2hlSWR4XV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21QYXJlbnRNb2R1bGVbbmFtZV0gPSBbcHJvdmlkZXJbMl0sIHByb3ZpZGVyWzFdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF0Y2hlZFNjb3Blc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHByb3ZpZGVyWzJdID09PSAnZmFjdG9yeScgfHwgcHJvdmlkZXJbMl0gPT09ICd0eXBlJykgJiYgcHJvdmlkZXJbMV0uJHNjb3BlKSB7XG4gICAgICAgICAgLyoganNoaW50IC1XMDgzICovXG4gICAgICAgICAgZm9yY2VOZXdJbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlclsxXS4kc2NvcGUuaW5kZXhPZihzY29wZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIGZyb21QYXJlbnRNb2R1bGVbbmFtZV0gPSBbcHJvdmlkZXJbMl0sIHByb3ZpZGVyWzFdXTtcbiAgICAgICAgICAgICAgbWF0Y2hlZFNjb3Blc1tzY29wZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcmNlTmV3SW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgIGlmICghbWF0Y2hlZFNjb3Blc1tzY29wZV0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHByb3ZpZGVyIGZvciBcIicgKyBzY29wZSArICdcIi4gQ2Fubm90IHVzZSBwcm92aWRlciBmcm9tIHRoZSBwYXJlbnQhJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBtb2R1bGVzLnVuc2hpZnQoZnJvbVBhcmVudE1vZHVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbmplY3Rvcihtb2R1bGVzLCBzZWxmKTtcbiAgfTtcblxuICB2YXIgZmFjdG9yeU1hcCA9IHtcbiAgICBmYWN0b3J5OiBpbnZva2UsXG4gICAgdHlwZTogaW5zdGFudGlhdGUsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgbW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGUpIHtcblxuICAgIGZ1bmN0aW9uIGFycmF5VW53cmFwKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZSAhPT0gJ3ZhbHVlJyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IGFubm90YXRlKHZhbHVlLnNsaWNlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVE9ETyh2b2p0YSk6IGhhbmRsZSB3cm9uZyBpbnB1dHMgKG1vZHVsZXMpXG4gICAgaWYgKG1vZHVsZSBpbnN0YW5jZW9mIE1vZHVsZSkge1xuICAgICAgbW9kdWxlLmZvckVhY2goZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBuYW1lID0gcHJvdmlkZXJbMF07XG4gICAgICAgIHZhciB0eXBlID0gcHJvdmlkZXJbMV07XG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3ZpZGVyWzJdO1xuXG4gICAgICAgIHByb3ZpZGVyc1tuYW1lXSA9IFtmYWN0b3J5TWFwW3R5cGVdLCBhcnJheVVud3JhcCh0eXBlLCB2YWx1ZSksIHR5cGVdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YobW9kdWxlKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAobW9kdWxlLl9fZXhwb3J0c19fKSB7XG4gICAgICAgIHZhciBjbG9uZWRNb2R1bGUgPSBPYmplY3Qua2V5cyhtb2R1bGUpLnJlZHVjZShmdW5jdGlvbiAobSwga2V5KSB7XG4gICAgICAgICAgaWYgKGtleS5zdWJzdHJpbmcoMCwgMikgIT09ICdfXycpIHtcbiAgICAgICAgICAgIG1ba2V5XSA9IG1vZHVsZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbiAgICAgICAgdmFyIHByaXZhdGVJbmplY3RvciA9IG5ldyBJbmplY3RvcigobW9kdWxlLl9fbW9kdWxlc19fIHx8IFtdKS5jb25jYXQoW2Nsb25lZE1vZHVsZV0pLCBzZWxmKTtcbiAgICAgICAgdmFyIGdldEZyb21Qcml2YXRlSW5qZWN0b3IgPSBhbm5vdGF0ZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHByaXZhdGVJbmplY3Rvci5nZXQoa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZHVsZS5fX2V4cG9ydHNfXy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBwcm92aWRlcnNba2V5XSA9IFtnZXRGcm9tUHJpdmF0ZUluamVjdG9yLCBrZXksICdwcml2YXRlJywgcHJpdmF0ZUluamVjdG9yXTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyhtb2R1bGUpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICBpZiAobW9kdWxlW25hbWVdWzJdID09PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyc1tuYW1lXSA9IG1vZHVsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgdHlwZSA9IG1vZHVsZVtuYW1lXVswXTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBtb2R1bGVbbmFtZV1bMV07XG5cbiAgICAgICAgICBwcm92aWRlcnNbbmFtZV0gPSBbZmFjdG9yeU1hcFt0eXBlXSwgYXJyYXlVbndyYXAodHlwZSwgdmFsdWUpLCB0eXBlXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBwdWJsaWMgQVBJXG4gIHRoaXMuZ2V0ID0gZ2V0O1xuICB0aGlzLmludm9rZSA9IGludm9rZTtcbiAgdGhpcy5pbnN0YW50aWF0ZSA9IGluc3RhbnRpYXRlO1xuICB0aGlzLmNyZWF0ZUNoaWxkID0gY3JlYXRlQ2hpbGQ7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbmV4cG9ydCB7IGFubm90YXRlLCBNb2R1bGUsIEluamVjdG9yIH07XG4iLCIvKiEgSGFtbWVyLkpTIC0gdjIuMC43IC0gMjAxNi0wNC0yMlxuICogaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSm9yaWsgVGFuZ2VsZGVyO1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgZXhwb3J0TmFtZSwgdW5kZWZpbmVkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogc2V0IGEgdGltZW91dCB3aXRoIGEgZ2l2ZW4gc2NvcGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gdGltZW91dFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNldFRpbWVvdXRDb250ZXh0KGZuLCB0aW1lb3V0LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYmluZEZuKGZuLCBjb250ZXh0KSwgdGltZW91dCk7XG59XG5cbi8qKlxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciBpO1xuXG4gICAgaWYgKCFvYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvYmouZm9yRWFjaCkge1xuICAgICAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gJ0RFUFJFQ0FURUQgTUVUSE9EOiAnICsgbmFtZSArICdcXG4nICsgbWVzc2FnZSArICcgQVQgXFxuJztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICAgICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG5cbiAgICAgICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG59IGVsc2Uge1xuICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbi8qKlxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbWVyZ2UgfHwgKG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIG1lcmdlKGRlc3QsIHNyYykge1xuICAgIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGUsXG4gICAgICAgIGNoaWxkUDtcblxuICAgIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICAgIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICAgIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGFzc2lnbihjaGlsZFAsIHByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiB1c2UgdGhlIHZhbDIgd2hlbiB2YWwxIGlzIHVuZGVmaW5lZFxuICogQHBhcmFtIHsqfSB2YWwxXG4gKiBAcGFyYW0geyp9IHZhbDJcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBpZlVuZGVmaW5lZCh2YWwxLCB2YWwyKSB7XG4gICAgcmV0dXJuICh2YWwxID09PSB1bmRlZmluZWQpID8gdmFsMiA6IHZhbDE7XG59XG5cbi8qKlxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICAgIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICAgIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCkgfHwgKCFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5cbi8qKlxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG4gICAgICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIHNvcnRVbmlxdWVBcnJheShhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICAgIHZhciBwcmVmaXgsIHByb3A7XG4gICAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgICAgICBwcm9wID0gKHByZWZpeCkgPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgICAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICAgIHJldHVybiAoZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93KTtcbn1cblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcblxudmFyIFNVUFBPUlRfVE9VQ0ggPSAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KTtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luZG93LCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xuXG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xuXG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcblxudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG5cbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcblxudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0O1xuXG4gICAgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuXG59XG5cbklucHV0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gICAgdmFyIFR5cGU7XG4gICAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICAgIGlmIChpbnB1dENsYXNzKSB7XG4gICAgICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICAgIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgICAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gICAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICAgICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gICAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgICAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IChUeXBlKShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gICAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBpc0ZpcnN0ID0gKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuICAgIHZhciBpc0ZpbmFsID0gKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuXG4gICAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gICAgfVxuXG4gICAgLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcbiAgICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7XG5cbiAgICAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcbiAgICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTtcblxuICAgIC8vIGVtaXQgc2VjcmV0IGV2ZW50XG4gICAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG5cbiAgICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gICAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICAgIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICAgIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cbiAgICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfVxuXG4gICAgLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuICAgIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dDtcbiAgICB2YXIgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG5cbiAgICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcblxuICAgIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuXG4gICAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICAgIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG5cbiAgICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gICAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICAgIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSAoYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcblxuICAgIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gICAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcblxuICAgIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogKChpbnB1dC5wb2ludGVycy5sZW5ndGggPlxuICAgICAgICBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycykgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyk7XG5cbiAgICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpO1xuXG4gICAgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIGlmIChoYXNQYXJlbnQoaW5wdXQuc3JjRXZlbnQudGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgICAgIHRhcmdldCA9IGlucHV0LnNyY0V2ZW50LnRhcmdldDtcbiAgICB9XG4gICAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG4gICAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gICAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICAgIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgICAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgICAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgICAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgICAgICB9O1xuXG4gICAgICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICAgICAgICB4OiBjZW50ZXIueCxcbiAgICAgICAgICAgIHk6IGNlbnRlci55XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gICAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQsXG4gICAgICAgIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wLFxuICAgICAgICB2ZWxvY2l0eSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVksIGRpcmVjdGlvbjtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgICAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG5cbiAgICAgICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgICAgdmVsb2NpdHlYID0gdi54O1xuICAgICAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgICAgIHZlbG9jaXR5ID0gKGFicyh2LngpID4gYWJzKHYueSkpID8gdi54IDogdi55O1xuICAgICAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuXG4gICAgICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgICAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgICAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICAgICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gICAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAgIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAgIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICAgIHZhciBwb2ludGVycyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgICAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICAgICAgfTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICAgICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgICAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICAgICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgICB9O1xufVxuXG4vKipcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG4gICAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgICAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHggPSAwLCB5ID0gMCwgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgICAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgICB9O1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICAgIH07XG59XG5cbi8qKlxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICAgIH1cblxuICAgIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cbiAgICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBwcm9wcyA9IFBST1BTX1hZO1xuICAgIH1cbiAgICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXSxcbiAgICAgICAgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQoKHggKiB4KSArICh5ICogeSkpO1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgIHByb3BzID0gUFJPUFNfWFk7XG4gICAgfVxuICAgIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dLFxuICAgICAgICB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICAgIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gICAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gICAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xuXG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcblxuLyoqXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB0aGlzLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcblxuICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoTW91c2VJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTUVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gICAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gICAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gICAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICAgIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTtcblxuLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAgIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgMzogSU5QVVRfVFlQRV9QRU4sXG4gICAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcbn07XG5cbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnO1xuXG4vLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcbmlmICh3aW5kb3cuTVNQb2ludGVyRXZlbnQgJiYgIXdpbmRvdy5Qb2ludGVyRXZlbnQpIHtcbiAgICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICAgIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG5cbi8qKlxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc3RvcmUgPSAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdKTtcbn1cblxuaW5oZXJpdChQb2ludGVyRXZlbnRJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gUEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICAgICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG5cbiAgICAgICAgdmFyIGlzVG91Y2ggPSAocG9pbnRlclR5cGUgPT0gSU5QVVRfVFlQRV9UT1VDSCk7XG5cbiAgICAgICAgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcbiAgICAgICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTtcblxuICAgICAgICAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICAgICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcbiAgICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuICAgICAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICAgICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcblxuLyoqXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB0aGlzLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTaW5nbGVUb3VjaElucHV0LCBJbnB1dCwge1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRFaGFuZGxlcihldikge1xuICAgICAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuICAgICAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgICAgIC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcbiAgICAgICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEB0aGlzIHtUb3VjaElucHV0fVxuICogQHBhcmFtIHtPYmplY3R9IGV2XG4gKiBAcGFyYW0ge051bWJlcn0gdHlwZSBmbGFnXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfEFycmF5fSBbYWxsLCBjaGFuZ2VkXVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gICAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuXG4vKipcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cbmZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy50YXJnZXRJZHMgPSB7fTtcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoVG91Y2hJbnB1dCwgSW5wdXQsIHtcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBNVEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG4gICAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQHRoaXMge1RvdWNoSW5wdXR9XG4gKiBAcGFyYW0ge09iamVjdH0gZXZcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8QXJyYXl9IFthbGwsIGNoYW5nZWRdXG4gKi9cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzO1xuXG4gICAgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcbiAgICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgICB9XG5cbiAgICB2YXIgaSxcbiAgICAgICAgdGFyZ2V0VG91Y2hlcyxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXSxcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG5cbiAgICAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG4gICAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uKHRvdWNoKSB7XG4gICAgICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICAgIH0pO1xuXG4gICAgLy8gY29sbGVjdCB0b3VjaGVzXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICAgIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuICAgICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gICAgICAgIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXNcbiAgICBdO1xufVxuXG4vKipcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KCkge1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgaGFuZGxlciA9IGJpbmRGbih0aGlzLmhhbmRsZXIsIHRoaXMpO1xuICAgIHRoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuICAgIHRoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuXG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFRvdWNoZXMgPSBbXTtcbn1cblxuaW5oZXJpdChUb3VjaE1vdXNlSW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRNRWhhbmRsZXIobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gKGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PSBJTlBVVF9UWVBFX1RPVUNIKSxcbiAgICAgICAgICAgIGlzTW91c2UgPSAoaW5wdXREYXRhLnBvaW50ZXJUeXBlID09IElOUFVUX1RZUEVfTU9VU0UpO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKHRoaXMsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgaW5wdXREYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gICAgdmFyIHRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXTtcblxuICAgIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgICAgICB2YXIgbGFzdFRvdWNoID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuICAgICAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcbiAgICAgICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICAgIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFgsIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgICAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KSwgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcbiAgICAgICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcblxuLy8gbWFnaWNhbCB0b3VjaEFjdGlvbiB2YWx1ZVxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbi8qKlxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xufVxuXG5Ub3VjaEFjdGlvbi5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgICBpZiAodmFsdWUgPT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgY29tcHV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgICAgICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHRzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjtcblxuICAgICAgICAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cbiAgICAgICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgICAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgICAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgICAgICAgLy9kbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcblxuICAgICAgICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICAgICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAgICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTm9uZSB8fFxuICAgICAgICAgICAgKGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHx8XG4gICAgICAgICAgICAoaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICAgKi9cbiAgICBwcmV2ZW50U3JjOiBmdW5jdGlvbihzcmNFdmVudCkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICAvLyBub25lXG4gICAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcblxuICAgIC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAgIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAgIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAgIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgLy8gcGFuLXggT1IgcGFuLXlcbiAgICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICAgIH1cblxuICAgIC8vIG1hbmlwdWxhdGlvblxuICAgIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgICB9XG5cbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gICAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHRvdWNoTWFwID0ge307XG4gICAgdmFyIGNzc1N1cHBvcnRzID0gd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLnN1cHBvcnRzO1xuICAgIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24odmFsKSB7XG5cbiAgICAgICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICAgICAgdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luZG93LkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG4vKipcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG5cbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xuXG4gICAgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuICAgIHRoaXMub3B0aW9ucy5lbmFibGUgPSBpZlVuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW5hYmxlLCB0cnVlKTtcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcblxuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xufVxuXG5SZWNvZ25pemVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAdmlydHVhbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgZGVmYXVsdHM6IHt9LFxuXG4gICAgLyoqXG4gICAgICogc2V0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG4gICAgICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgICAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBkcm9wUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVxdWlyZUZhaWx1cmU6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIGRyb3BSZXF1aXJlRmFpbHVyZTogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGhhc1JlcXVpcmVGYWlsdXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgICAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcbiAgICAgICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHsgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICAgICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuICAgICAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKi9cbiAgICB0cnlFbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2FuIHdlIGVtaXQ/XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuRW1pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAgICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICAgICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduKHt9LCBpbnB1dERhdGEpO1xuXG4gICAgICAgIC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuICAgICAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpO1xuXG4gICAgICAgIC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgICAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICogQHJldHVybnMge0NvbnN0fSBTVEFURVxuICAgICAqL1xuICAgIHByb2Nlc3M6IGZ1bmN0aW9uKGlucHV0RGF0YSkgeyB9LCAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgICAqIEB2aXJ0dWFsXG4gICAgICogQHJldHVybnMge0FycmF5fVxuICAgICAqL1xuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgICAqIEB2aXJ0dWFsXG4gICAgICovXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkgeyB9XG59O1xuXG4vKipcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtDb25zdH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgcmV0dXJuICdlbmQnO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgICAgIHJldHVybiAnbW92ZSc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgICAgIHJldHVybiAnc3RhcnQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge0NvbnN0fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgICBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgICAgIHJldHVybiAnZG93bic7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1VQKSB7XG4gICAgICAgIHJldHVybiAndXAnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICAgIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBBdHRyUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoQXR0clJlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICAgICAqIEBkZWZhdWx0IDFcbiAgICAgICAgICovXG4gICAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgICAqL1xuICAgIGF0dHJUZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICAgKi9cbiAgICBwcm9jZXNzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuXG4gICAgICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgICAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpO1xuXG4gICAgICAgIC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcbiAgICAgICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfVxufSk7XG5cbi8qKlxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQYW5SZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnBYID0gbnVsbDtcbiAgICB0aGlzLnBZID0gbnVsbDtcbn1cblxuaW5oZXJpdChQYW5SZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGFuUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH0sXG5cbiAgICBkaXJlY3Rpb25UZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTtcblxuICAgICAgICAvLyBsb2NrIHRvIGF4aXM/XG4gICAgICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAoeCA9PT0gMCkgPyBESVJFQ1RJT05fTk9ORSA6ICh4IDwgMCkgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgICAgICAgICBoYXNNb3ZlZCA9IHggIT0gdGhpcy5wWDtcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICh5ID09PSAwKSA/IERJUkVDVElPTl9OT05FIDogKHkgPCAwKSA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICAgICAgICAgIGhhc01vdmVkID0geSAhPSB0aGlzLnBZO1xuICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJlxuICAgICAgICAgICAgKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAoISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcblxuICAgICAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VwZXIuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChQaW5jaFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICAgICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdXBlci5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbn1cblxuaW5oZXJpdChQcmVzc1JlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFByZXNzUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgICBwb2ludGVyczogMSxcbiAgICAgICAgdGltZTogMjUxLCAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgICB0aHJlc2hvbGQ6IDkgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgICAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCAoaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0Q29udGV4dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZSwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH0sXG5cbiAgICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgfSxcblxuICAgIGVtaXQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5wdXQgJiYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArICd1cCcsIGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cbmZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChSb3RhdGVSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUm90YXRlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTd2lwZVJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBTd2lwZVJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICB9LFxuXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgICAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiZcbiAgICAgICAgICAgIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJlxuICAgICAgICAgICAgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmXG4gICAgICAgICAgICBpbnB1dC5tYXhQb2ludGVycyA9PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiZcbiAgICAgICAgICAgIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG4gICAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQSB0YXAgaXMgZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gVGFwUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG4gICAgdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIHRoaXMucENlbnRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbn1cblxuaW5oZXJpdChUYXBSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3RhcCcsXG4gICAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgICB0YXBzOiAxLFxuICAgICAgICBpbnRlcnZhbDogMzAwLCAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgICB0aW1lOiAyNTAsIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICAgIHRocmVzaG9sZDogOSwgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgICAgcG9zVGhyZXNob2xkOiAxMCAvLyBhIG11bHRpLXRhcCBjYW4gYmUgYSBiaXQgb2ZmIHRoZSBpbml0aWFsIHBvc2l0aW9uXG4gICAgfSxcblxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICAgICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICBpZiAoKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSAmJiAodGhpcy5jb3VudCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gKGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsKSA6IHRydWU7XG4gICAgICAgICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG5cbiAgICAgICAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICAgICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgICAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgICAgIC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgICAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG4gICAgICAgICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuICAgICAgICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAgICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgZmFpbFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5yZWNvZ25pemVycyA9IGlmVW5kZWZpbmVkKG9wdGlvbnMucmVjb2duaXplcnMsIEhhbW1lci5kZWZhdWx0cy5wcmVzZXQpO1xuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAY29uc3Qge3N0cmluZ31cbiAqL1xuSGFtbWVyLlZFUlNJT04gPSAnMi4wLjcnO1xuXG4vKipcbiAqIGRlZmF1bHQgc2V0dGluZ3NcbiAqIEBuYW1lc3BhY2VcbiAqL1xuSGFtbWVyLmRlZmF1bHRzID0ge1xuICAgIC8qKlxuICAgICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICAgKi9cbiAgICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgaW5wdXRDbGFzczogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICAgICAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIHByZXNldDogW1xuICAgICAgICAvLyBSZWNvZ25pemVyQ2xhc3MsIG9wdGlvbnMsIFtyZWNvZ25pemVXaXRoLCAuLi5dLCBbcmVxdWlyZUZhaWx1cmUsIC4uLl1cbiAgICAgICAgW1JvdGF0ZVJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfV0sXG4gICAgICAgIFtQaW5jaFJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfSwgWydyb3RhdGUnXV0sXG4gICAgICAgIFtTd2lwZVJlY29nbml6ZXIsIHtkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMfV0sXG4gICAgICAgIFtQYW5SZWNvZ25pemVyLCB7ZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTH0sIFsnc3dpcGUnXV0sXG4gICAgICAgIFtUYXBSZWNvZ25pemVyXSxcbiAgICAgICAgW1RhcFJlY29nbml6ZXIsIHtldmVudDogJ2RvdWJsZXRhcCcsIHRhcHM6IDJ9LCBbJ3RhcCddXSxcbiAgICAgICAgW1ByZXNzUmVjb2duaXplcl1cbiAgICBdLFxuXG4gICAgLyoqXG4gICAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqL1xuICAgIGNzc1Byb3BzOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgdXNlclNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaFNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaENhbGxvdXQ6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgY29udGVudFpvb21pbmc6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAgICovXG4gICAgICAgIHVzZXJEcmFnOiAnbm9uZScsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICAgICAqL1xuICAgICAgICB0YXBIaWdobGlnaHRDb2xvcjogJ3JnYmEoMCwwLDAsMCknXG4gICAgfVxufTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcblxuLyoqXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduKHt9LCBIYW1tZXIuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuXG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG5cbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICB2YXIgcmVjb2duaXplciA9IHRoaXMuYWRkKG5ldyAoaXRlbVswXSkoaXRlbVsxXSkpO1xuICAgICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xufVxuXG5NYW5hZ2VyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzZXQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcbiAgICAgICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICAgICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXI7XG4gICAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICAgICAgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAgICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuICAgICAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjtcblxuICAgICAgICAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgICAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cbiAgICAgICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IChjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSkge1xuICAgICAgICAgICAgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07XG5cbiAgICAgICAgICAgIC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgICAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAgICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgICAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICAgICAgICAgICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkgeyAvLyAzXG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG4gICAgICAgICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgICAgICAgICBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT0gcmVjb2duaXplcikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgICAqL1xuICAgIGFkZDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ2FkZCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlbW92ZSBleGlzdGluZ1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICAgICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcblxuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ3JlbW92ZScsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTtcblxuICAgICAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuICAgICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHJlY29nbml6ZXIpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgZXZlbnRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvZmY6IGZ1bmN0aW9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbihldmVudCwgZGF0YSkge1xuICAgICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG4gICAgICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS50eXBlID0gZXZlbnQ7XG4gICAgICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHByb3A7XG4gICAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcbiAgICAgICAgaWYgKGFkZCkge1xuICAgICAgICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCAnJztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghYWRkKSB7XG4gICAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB9XG59XG5cbi8qKlxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICAgIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG5cbmFzc2lnbihIYW1tZXIsIHtcbiAgICBJTlBVVF9TVEFSVDogSU5QVVRfU1RBUlQsXG4gICAgSU5QVVRfTU9WRTogSU5QVVRfTU9WRSxcbiAgICBJTlBVVF9FTkQ6IElOUFVUX0VORCxcbiAgICBJTlBVVF9DQU5DRUw6IElOUFVUX0NBTkNFTCxcblxuICAgIFNUQVRFX1BPU1NJQkxFOiBTVEFURV9QT1NTSUJMRSxcbiAgICBTVEFURV9CRUdBTjogU1RBVEVfQkVHQU4sXG4gICAgU1RBVEVfQ0hBTkdFRDogU1RBVEVfQ0hBTkdFRCxcbiAgICBTVEFURV9FTkRFRDogU1RBVEVfRU5ERUQsXG4gICAgU1RBVEVfUkVDT0dOSVpFRDogU1RBVEVfUkVDT0dOSVpFRCxcbiAgICBTVEFURV9DQU5DRUxMRUQ6IFNUQVRFX0NBTkNFTExFRCxcbiAgICBTVEFURV9GQUlMRUQ6IFNUQVRFX0ZBSUxFRCxcblxuICAgIERJUkVDVElPTl9OT05FOiBESVJFQ1RJT05fTk9ORSxcbiAgICBESVJFQ1RJT05fTEVGVDogRElSRUNUSU9OX0xFRlQsXG4gICAgRElSRUNUSU9OX1JJR0hUOiBESVJFQ1RJT05fUklHSFQsXG4gICAgRElSRUNUSU9OX1VQOiBESVJFQ1RJT05fVVAsXG4gICAgRElSRUNUSU9OX0RPV046IERJUkVDVElPTl9ET1dOLFxuICAgIERJUkVDVElPTl9IT1JJWk9OVEFMOiBESVJFQ1RJT05fSE9SSVpPTlRBTCxcbiAgICBESVJFQ1RJT05fVkVSVElDQUw6IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICBESVJFQ1RJT05fQUxMOiBESVJFQ1RJT05fQUxMLFxuXG4gICAgTWFuYWdlcjogTWFuYWdlcixcbiAgICBJbnB1dDogSW5wdXQsXG4gICAgVG91Y2hBY3Rpb246IFRvdWNoQWN0aW9uLFxuXG4gICAgVG91Y2hJbnB1dDogVG91Y2hJbnB1dCxcbiAgICBNb3VzZUlucHV0OiBNb3VzZUlucHV0LFxuICAgIFBvaW50ZXJFdmVudElucHV0OiBQb2ludGVyRXZlbnRJbnB1dCxcbiAgICBUb3VjaE1vdXNlSW5wdXQ6IFRvdWNoTW91c2VJbnB1dCxcbiAgICBTaW5nbGVUb3VjaElucHV0OiBTaW5nbGVUb3VjaElucHV0LFxuXG4gICAgUmVjb2duaXplcjogUmVjb2duaXplcixcbiAgICBBdHRyUmVjb2duaXplcjogQXR0clJlY29nbml6ZXIsXG4gICAgVGFwOiBUYXBSZWNvZ25pemVyLFxuICAgIFBhbjogUGFuUmVjb2duaXplcixcbiAgICBTd2lwZTogU3dpcGVSZWNvZ25pemVyLFxuICAgIFBpbmNoOiBQaW5jaFJlY29nbml6ZXIsXG4gICAgUm90YXRlOiBSb3RhdGVSZWNvZ25pemVyLFxuICAgIFByZXNzOiBQcmVzc1JlY29nbml6ZXIsXG5cbiAgICBvbjogYWRkRXZlbnRMaXN0ZW5lcnMsXG4gICAgb2ZmOiByZW1vdmVFdmVudExpc3RlbmVycyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIG1lcmdlOiBtZXJnZSxcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBpbmhlcml0OiBpbmhlcml0LFxuICAgIGJpbmRGbjogYmluZEZuLFxuICAgIHByZWZpeGVkOiBwcmVmaXhlZFxufSk7XG5cbi8vIHRoaXMgcHJldmVudHMgZXJyb3JzIHdoZW4gSGFtbWVyIGlzIGxvYWRlZCBpbiB0aGUgcHJlc2VuY2Ugb2YgYW4gQU1EXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cbnZhciBmcmVlR2xvYmFsID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmZyZWVHbG9iYWwuSGFtbWVyID0gSGFtbWVyO1xuXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSGFtbWVyO1xuICAgIH0pO1xufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBIYW1tZXI7XG59IGVsc2Uge1xuICAgIHdpbmRvd1tleHBvcnROYW1lXSA9IEhhbW1lcjtcbn1cblxufSkod2luZG93LCBkb2N1bWVudCwgJ0hhbW1lcicpO1xuIiwidmFyIGhhdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdHMsIGJhc2UpIHtcbiAgICBpZiAoIWJhc2UpIGJhc2UgPSAxNjtcbiAgICBpZiAoYml0cyA9PT0gdW5kZWZpbmVkKSBiaXRzID0gMTI4O1xuICAgIGlmIChiaXRzIDw9IDApIHJldHVybiAnMCc7XG4gICAgXG4gICAgdmFyIGRpZ2l0cyA9IE1hdGgubG9nKE1hdGgucG93KDIsIGJpdHMpKSAvIE1hdGgubG9nKGJhc2UpO1xuICAgIGZvciAodmFyIGkgPSAyOyBkaWdpdHMgPT09IEluZmluaXR5OyBpICo9IDIpIHtcbiAgICAgICAgZGlnaXRzID0gTWF0aC5sb2coTWF0aC5wb3coMiwgYml0cyAvIGkpKSAvIE1hdGgubG9nKGJhc2UpICogaTtcbiAgICB9XG4gICAgXG4gICAgdmFyIHJlbSA9IGRpZ2l0cyAtIE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgICBcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBNYXRoLmZsb29yKGRpZ2l0cyk7IGkrKykge1xuICAgICAgICB2YXIgeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJhc2UpLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICByZXMgPSB4ICsgcmVzO1xuICAgIH1cbiAgICBcbiAgICBpZiAocmVtKSB7XG4gICAgICAgIHZhciBiID0gTWF0aC5wb3coYmFzZSwgcmVtKTtcbiAgICAgICAgdmFyIHggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBiKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgcmVzID0geCArIHJlcztcbiAgICB9XG4gICAgXG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHJlcywgYmFzZSk7XG4gICAgaWYgKHBhcnNlZCAhPT0gSW5maW5pdHkgJiYgcGFyc2VkID49IE1hdGgucG93KDIsIGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBoYXQoYml0cywgYmFzZSlcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gcmVzO1xufTtcblxuaGF0LnJhY2sgPSBmdW5jdGlvbiAoYml0cywgYmFzZSwgZXhwYW5kQnkpIHtcbiAgICB2YXIgZm4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgaXRlcnMgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoaXRlcnMgKysgPiAxMCkge1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRCeSkgYml0cyArPSBleHBhbmRCeTtcbiAgICAgICAgICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkgSUQgY29sbGlzaW9ucywgdXNlIG1vcmUgYml0cycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGhhdChiaXRzLCBiYXNlKTtcbiAgICAgICAgfSB3aGlsZSAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoaGF0cywgaWQpKTtcbiAgICAgICAgXG4gICAgICAgIGhhdHNbaWRdID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG4gICAgdmFyIGhhdHMgPSBmbi5oYXRzID0ge307XG4gICAgXG4gICAgZm4uZ2V0ID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHJldHVybiBmbi5oYXRzW2lkXTtcbiAgICB9O1xuICAgIFxuICAgIGZuLnNldCA9IGZ1bmN0aW9uIChpZCwgdmFsdWUpIHtcbiAgICAgICAgZm4uaGF0c1tpZF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgXG4gICAgZm4uYml0cyA9IGJpdHMgfHwgMTI4O1xuICAgIGZuLmJhc2UgPSBiYXNlIHx8IDE2O1xuICAgIHJldHVybiBmbjtcbn07XG4iLCJpbXBvcnQgaGF0IGZyb20gJ2hhdCc7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaWQgZ2VuZXJhdG9yIC8gY2FjaGUgaW5zdGFuY2UuXG4gKlxuICogWW91IG1heSBvcHRpb25hbGx5IHByb3ZpZGUgYSBzZWVkIHRoYXQgaXMgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBwYXJhbSB7U2VlZH0gc2VlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJZHMoc2VlZCkge1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJZHMpKSB7XG4gICAgcmV0dXJuIG5ldyBJZHMoc2VlZCk7XG4gIH1cblxuICBzZWVkID0gc2VlZCB8fCBbIDEyOCwgMzYsIDEgXTtcbiAgdGhpcy5fc2VlZCA9IHNlZWQubGVuZ3RoID8gaGF0LnJhY2soc2VlZFswXSwgc2VlZFsxXSwgc2VlZFsyXSkgOiBzZWVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV4dCBpZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2VsZW1lbnRdIGVsZW1lbnQgdG8gYmluZCB0aGUgaWQgdG9cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGlkXG4gKi9cbklkcy5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuX3NlZWQoZWxlbWVudCB8fCB0cnVlKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYSBuZXh0IGlkIHdpdGggYSBnaXZlbiBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtlbGVtZW50XSBlbGVtZW50IHRvIGJpbmQgdGhlIGlkIHRvXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBpZFxuICovXG5JZHMucHJvdG90eXBlLm5leHRQcmVmaXhlZCA9IGZ1bmN0aW9uKHByZWZpeCwgZWxlbWVudCkge1xuICB2YXIgaWQ7XG5cbiAgZG8ge1xuICAgIGlkID0gcHJlZml4ICsgdGhpcy5uZXh0KHRydWUpO1xuICB9IHdoaWxlICh0aGlzLmFzc2lnbmVkKGlkKSk7XG5cbiAgLy8gY2xhaW0ge3ByZWZpeH17cmFuZG9tfVxuICB0aGlzLmNsYWltKGlkLCBlbGVtZW50KTtcblxuICAvLyByZXR1cm5cbiAgcmV0dXJuIGlkO1xufTtcblxuLyoqXG4gKiBNYW51YWxseSBjbGFpbSBhbiBleGlzdGluZyBpZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZWxlbWVudF0gZWxlbWVudCB0aGUgaWQgaXMgY2xhaW1lZCBieVxuICovXG5JZHMucHJvdG90eXBlLmNsYWltID0gZnVuY3Rpb24oaWQsIGVsZW1lbnQpIHtcbiAgdGhpcy5fc2VlZC5zZXQoaWQsIGVsZW1lbnQgfHwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGlkXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5JZHMucHJvdG90eXBlLmFzc2lnbmVkID0gZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHRoaXMuX3NlZWQuZ2V0KGlkKSB8fCBmYWxzZTtcbn07XG5cbi8qKlxuICogVW5jbGFpbSBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGlkIHRoZSBpZCB0byB1bmNsYWltXG4gKi9cbklkcy5wcm90b3R5cGUudW5jbGFpbSA9IGZ1bmN0aW9uKGlkKSB7XG4gIGRlbGV0ZSB0aGlzLl9zZWVkLmhhdHNbaWRdO1xufTtcblxuXG4vKipcbiAqIENsZWFyIGFsbCBjbGFpbWVkIGlkcy5cbiAqL1xuSWRzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBoYXRzID0gdGhpcy5fc2VlZC5oYXRzLFxuICAgICAgaWQ7XG5cbiAgZm9yIChpZCBpbiBoYXRzKSB7XG4gICAgdGhpcy51bmNsYWltKGlkKTtcbiAgfVxufTsiLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNS4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMC0wNS0wNFQyMjo0OVpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuICAgICAgLy8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG4gICAgICAvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiO1xuICB9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy41LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjVcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMjAtMDMtMTRcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93ICkge1xudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKCB7fSApLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaE5hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFsgaSBdID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58XCIgK1xuXHRcdFwiaXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV1cblx0XHQvLyBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdHJldHVybiBub25IZXggP1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdG5vbkhleCA6XG5cblx0XHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICtcblx0XHRcdFx0Y2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAoIHRhcmdldFsgaisrIF0gPSBlbHNbIGkrKyBdICkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQoIG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmNvbWJpbmF0b3JzLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT09IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KCBcInxcIiApLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyWyBpIF0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIubmV4dFNpYmxpbmcgKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAoIG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBtYXN0ZXIudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXN0ZXIucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSwgZG9jICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4XCI7XG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0ICkgPiAzO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgIzEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRyY3VzdG9tUHJvcCA9IC9eLS0vLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveC5cblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDEwIC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBpbiBzb21lIGNhc2VzIElFIDkgZG9lc24ndCBzdWZmZXIgZnJvbSB0aGlzIGlzc3VlLlxuXHRcdCFzdXBwb3J0LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkgJiYgbm9kZU5hbWUoIGVsZW0sIFwidHJcIiApIHx8XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0XHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdFx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cblx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZFxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBfaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IChcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBIYW5kbGU6IHJlZ3VsYXIgbm9kZXMgKHZpYSBgdGhpcy5vd25lckRvY3VtZW50YCksIHdpbmRvd1xuXHRcdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSB7IGd1aWQ6IERhdGUubm93KCkgfTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHRcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJiBqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMudG9wID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRwcm9wcy50b3AgKz0gXCJweFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMubGVmdCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0cHJvcHMubGVmdCArPSBcInB4XCI7XG5cdFx0XHR9XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblxuXHRcdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdFx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdFx0fTtcblx0fSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fZGlyX18gPSAxO1xuICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICB0aGlzLl9faXRlcmF0ZWVzX18gPSBbXTtcbiAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbn1cblxuLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXp5V3JhcHBlcjtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvZGFzaFdyYXBwZXI7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQWdncmVnYXRvcmAgZm9yIGFycmF5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlBZ2dyZWdhdG9yKGFycmF5LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUFnZ3JlZ2F0b3I7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFnZ3JlZ2F0b3I7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iLCJ2YXIgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbHRlcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCJ2YXIgY3JlYXRlQmFzZUZvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VGb3InKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGb3I7XG4iLCJ2YXIgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yT3duO1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlTWF0Y2hlcyA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzJyksXG4gICAgYmFzZU1hdGNoZXNQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgcHJvcGVydHkgPSByZXF1aXJlKCcuL3Byb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUl0ZXJhdGVlO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKipcbiAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUxvZGFzaDtcbiIsInZhciBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hcDtcbiIsInZhciBiYXNlSXNNYXRjaCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hdGNoJyksXG4gICAgZ2V0TWF0Y2hEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWF0Y2hEYXRhJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlcztcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnLi9nZXQnKSxcbiAgICBoYXNJbiA9IHJlcXVpcmUoJy4vaGFzSW4nKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzUHJvcGVydHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldERhdGFgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0RGF0YSA9ICFtZXRhTWFwID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBkYXRhKSB7XG4gIG1ldGFNYXAuc2V0KGZ1bmMsIGRhdGEpO1xuICByZXR1cm4gZnVuYztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldERhdGE7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVZhbHVlcztcbiIsInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VVbmlxID0gcmVxdWlyZSgnLi9fYmFzZVVuaXEnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgYXJyYXkgPSBhcnJheXNbaW5kZXhdLFxuICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChvdGhJbmRleCAhPSBpbmRleCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VYb3I7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGBpZGVudGl0eWAgaWYgaXQncyBub3QgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBjYXN0IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nID8gdmFsdWUgOiBpZGVudGl0eTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0RnVuY3Rpb247XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJncztcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5T2JqZWN0O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsIi8qKlxuICogR2V0cyB0aGUgbnVtYmVyIG9mIGBwbGFjZWhvbGRlcmAgb2NjdXJyZW5jZXMgaW4gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgY291bnQuXG4gKi9cbmZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IDA7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGFycmF5W2xlbmd0aF0gPT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICArK3Jlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3VudEhvbGRlcnM7XG4iLCJ2YXIgYXJyYXlBZ2dyZWdhdG9yID0gcmVxdWlyZSgnLi9fYXJyYXlBZ2dyZWdhdG9yJyksXG4gICAgYmFzZUFnZ3JlZ2F0b3IgPSByZXF1aXJlKCcuL19iYXNlQWdncmVnYXRvcicpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWdncmVnYXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgc2V0dGVyLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQWdncmVnYXRvcjtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VFYWNoO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCaW5kO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3RvcjtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwidmFyIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYF8uZmluZGAgb3IgYF8uZmluZExhc3RgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5kSW5kZXhGdW5jIFRoZSBmdW5jdGlvbiB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGluZGV4LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmluZChmaW5kSW5kZXhGdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgIGNvbGxlY3Rpb24gPSBrZXlzKGNvbGxlY3Rpb24pO1xuICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCk7XG4gICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUZpbmQ7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgY291bnRIb2xkZXJzID0gcmVxdWlyZSgnLi9fY291bnRIb2xkZXJzJyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlb3JkZXIgPSByZXF1aXJlKCcuL19yZW9yZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUh5YnJpZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZ1xuICogb2YgYHRoaXNBcmdgIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZWZ0TGVuZ3RoICsgYXJnc0xlbmd0aCksXG4gICAgICAgIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcblxuICAgIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICAgIGFyZ3NbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgfVxuICAgIHdoaWxlIChhcmdzTGVuZ3RoLS0pIHtcbiAgICAgIGFyZ3NbbGVmdEluZGV4KytdID0gYXJndW1lbnRzWysrYXJnc0luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5KGZuLCBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUGFydGlhbDtcbiIsInZhciBpc0xhemlhYmxlID0gcmVxdWlyZSgnLi9faXNMYXppYWJsZScpLFxuICAgIHNldERhdGEgPSByZXF1aXJlKCcuL19zZXREYXRhJyksXG4gICAgc2V0V3JhcFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0V3JhcFRvU3RyaW5nJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGBmdW5jYCB3cmFwcGVyLlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQ3VycnkgPSBiaXRtYXNrICYgV1JBUF9DVVJSWV9GTEFHLFxuICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICBuZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBwYXJ0aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICBiaXRtYXNrICY9IH4oaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHIDogV1JBUF9QQVJUSUFMX0ZMQUcpO1xuXG4gIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgfVxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICBuZXdIb2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgfVxuICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlY3Vycnk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBjcmVhdGVCaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlQmluZCcpLFxuICAgIGNyZWF0ZUN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3VycnknKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVQYXJ0aWFsID0gcmVxdWlyZSgnLi9fY3JlYXRlUGFydGlhbCcpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgbWVyZ2VEYXRhID0gcmVxdWlyZSgnLi9fbWVyZ2VEYXRhJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgICAxIC0gYF8uYmluZGBcbiAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gKiAgICA4IC0gYF8uY3VycnlgXG4gKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAqICAxMjggLSBgXy5yZWFyZ2BcbiAqICAyNTYgLSBgXy5hcnlgXG4gKiAgNTEyIC0gYF8uZmxpcGBcbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICBpZiAoZGF0YSkge1xuICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgfVxuICBmdW5jID0gbmV3RGF0YVswXTtcbiAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgfVxuICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgfVxuICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlV3JhcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKTtcblxuLyoqXG4gKiBHZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKi9cbnZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykge1xuICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldERhdGE7XG4iLCJ2YXIgcmVhbE5hbWVzID0gcmVxdWlyZSgnLi9fcmVhbE5hbWVzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gKGZ1bmMubmFtZSArICcnKSxcbiAgICAgIGFycmF5ID0gcmVhbE5hbWVzW3Jlc3VsdF0sXG4gICAgICBsZW5ndGggPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcywgcmVzdWx0KSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGRhdGEgPSBhcnJheVtsZW5ndGhdLFxuICAgICAgICBvdGhlckZ1bmMgPSBkYXRhLmZ1bmM7XG4gICAgaWYgKG90aGVyRnVuYyA9PSBudWxsIHx8IG90aGVyRnVuYyA9PSBmdW5jKSB7XG4gICAgICByZXR1cm4gZGF0YS5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEZ1bmNOYW1lO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRIb2xkZXIoZnVuYykge1xuICB2YXIgb2JqZWN0ID0gZnVuYztcbiAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRIb2xkZXI7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWF0Y2hEYXRhO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbi8qKlxuICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0V3JhcERldGFpbHM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LztcblxuLyoqXG4gKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRXcmFwRGV0YWlscztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIGdldEZ1bmNOYW1lID0gcmVxdWlyZSgnLi9fZ2V0RnVuY05hbWUnKSxcbiAgICBsb2Rhc2ggPSByZXF1aXJlKCcuL3dyYXBwZXJMb2Rhc2gnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGF6aWFibGU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAqXG4gKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICB2YXIgaXNDb21ibyA9XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgdmFsdWUgPSBzb3VyY2VbNV07XG4gIGlmICh2YWx1ZSkge1xuICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgdmFsdWUgPSBzb3VyY2VbN107XG4gIGlmICh2YWx1ZSkge1xuICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlRGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogUmVvcmRlciBgYXJyYXlgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGVsZW1lbnQgYXRcbiAqIHRoZSBmaXJzdCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIGVsZW1lbnQgYXRcbiAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJyYXkgaW5kZXhlcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiByZW9yZGVyKGFycmF5LCBpbmRleGVzKSB7XG4gIHZhciBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICBvbGRBcnJheSA9IGNvcHlBcnJheShhcnJheSk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgIGFycmF5W2xlbmd0aF0gPSBpc0luZGV4KGluZGV4LCBhcnJMZW5ndGgpID8gb2xkQXJyYXlbaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW9yZGVyO1xuIiwiLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXBsYWNlSG9sZGVycztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICpcbiAqICoqTm90ZToqKiBJZiB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgaG90LCBpLmUuIGlzIGludm9rZWQgYSBsb3QgaW4gYSBzaG9ydFxuICogcGVyaW9kIG9mIHRpbWUsIGl0IHdpbGwgdHJpcCBpdHMgYnJlYWtlciBhbmQgdHJhbnNpdGlvbiB0byBhbiBpZGVudGl0eVxuICogZnVuY3Rpb24gdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlXG4gKiBbVjggaXNzdWUgMjA3MF0oaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXREYXRhID0gc2hvcnRPdXQoYmFzZVNldERhdGEpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldERhdGE7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGdldFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fZ2V0V3JhcERldGFpbHMnKSxcbiAgICBpbnNlcnRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2luc2VydFdyYXBEZXRhaWxzJyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpLFxuICAgIHVwZGF0ZVdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fdXBkYXRlV3JhcERldGFpbHMnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICovXG5mdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFdyYXBUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB3cmFwcGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZXIgVGhlIHdyYXBwZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci5cbiAqL1xuZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpIHtcbiAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgIHJldHVybiB3cmFwcGVyLmNsb25lKCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZXIuX19jaGFpbl9fKTtcbiAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHdyYXBwZXIuX19hY3Rpb25zX18pO1xuICByZXN1bHQuX19pbmRleF9fICA9IHdyYXBwZXIuX19pbmRleF9fO1xuICByZXN1bHQuX192YWx1ZXNfXyA9IHdyYXBwZXIuX192YWx1ZXNfXztcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyQ2xvbmU7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3JlYXRlQXNzaWduZXIgPSByZXF1aXJlKCcuL19jcmVhdGVBc3NpZ25lcicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH1cbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIG5vdyA9IHJlcXVpcmUoJy4vbm93JyksXG4gICAgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIGJhc2VGaWx0ZXIgPSByZXF1aXJlKCcuL19iYXNlRmlsdGVyJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgYWxsIGVsZW1lbnRzXG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnJlbW92ZWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICogQHNlZSBfLnJlamVjdFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAqIF07XG4gKlxuICogXy5maWx0ZXIodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBDb21iaW5pbmcgc2V2ZXJhbCBwcmVkaWNhdGVzIHVzaW5nIGBfLm92ZXJFdmVyeWAgb3IgYF8ub3ZlclNvbWVgLlxuICogXy5maWx0ZXIodXNlcnMsIF8ub3ZlclNvbWUoW3sgJ2FnZSc6IDM2IH0sIFsnYWdlJywgNDBdXSkpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ2Jhcm5leSddXG4gKi9cbmZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyO1xuIiwidmFyIGNyZWF0ZUZpbmQgPSByZXF1aXJlKCcuL19jcmVhdGVGaW5kJyksXG4gICAgZmluZEluZGV4ID0gcmVxdWlyZSgnLi9maW5kSW5kZXgnKTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ3BlYmJsZXMnXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKi9cbnZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmQ7XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IDJcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRJbmRleDtcbiIsInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW5EZWVwKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgMywgNCwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIElORklOSVRZKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5EZWVwO1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKSxcbiAgICBjYXN0RnVuY3Rpb24gPSByZXF1aXJlKCcuL19jYXN0RnVuY3Rpb24nKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBlbGVtZW50LlxuICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiAqKk5vdGU6KiogQXMgd2l0aCBvdGhlciBcIkNvbGxlY3Rpb25zXCIgbWV0aG9kcywgb2JqZWN0cyB3aXRoIGEgXCJsZW5ndGhcIlxuICogcHJvcGVydHkgYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzZSBgXy5mb3JJbmBcbiAqIG9yIGBfLmZvck93bmAgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGFsaWFzIGVhY2hcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICogQHNlZSBfLmZvckVhY2hSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZvckVhY2goWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgYDFgIHRoZW4gYDJgLlxuICpcbiAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoIDogYmFzZUVhY2g7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGNhc3RGdW5jdGlvbihpdGVyYXRlZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBjcmVhdGVBZ2dyZWdhdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQWdncmVnYXRvcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFtcbiAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gKiAgIHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH1cbiAqIF07XG4gKlxuICogXy5rZXlCeShhcnJheSwgZnVuY3Rpb24obykge1xuICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICogfSk7XG4gKiAvLyA9PiB7ICdhJzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdkJzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gKlxuICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICogLy8gPT4geyAnbGVmdCc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAncmlnaHQnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAqL1xudmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCB2YWx1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlCeTtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgYmFzZU1hcCA9IHJlcXVpcmUoJy4vX2Jhc2VNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gKlxuICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gKiBgc2FtcGxlU2l6ZWAsIGBzbGljZWAsIGBzb21lYCwgYHNvcnRCeWAsIGBzcGxpdGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF1cbiAqXG4gKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gKi9cbmZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbm93O1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKlxuICogQW4gYWx0ZXJuYXRpdmUgdG8gYF8ucmVkdWNlYDsgdGhpcyBtZXRob2QgdHJhbnNmb3JtcyBgb2JqZWN0YCB0byBhIG5ld1xuICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gKiBwb3RlbnRpYWxseSBtdXRhdGluZyB0aGUgYGFjY3VtdWxhdG9yYCBvYmplY3QuIElmIGBhY2N1bXVsYXRvcmAgaXMgbm90XG4gKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50cmFuc2Zvcm0oWzIsIDMsIDRdLCBmdW5jdGlvbihyZXN1bHQsIG4pIHtcbiAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9LCBbXSk7XG4gKiAvLyA9PiBbNCwgOV1cbiAqXG4gKiBfLnRyYW5zZm9ybSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHtcbiAgICB2YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpc0FyciA/IG5ldyBDdG9yIDogW107XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXNGdW5jdGlvbihDdG9yKSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICB9XG4gIH1cbiAgKGlzQXJyTGlrZSA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmFuc2Zvcm07XG4iLCJ2YXIgYmFzZVZhbHVlcyA9IHJlcXVpcmUoJy4vX2Jhc2VWYWx1ZXMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy52YWx1ZXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLnZhbHVlcygnaGknKTtcbiAqIC8vID0+IFsnaCcsICdpJ11cbiAqL1xuZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGJhc2VYb3IgPSByZXF1aXJlKCcuL19iYXNlWG9yJyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgaXMgdGhlXG4gKiBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKVxuICogb2YgdGhlIGdpdmVuIGFycmF5cy4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXJcbiAqIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLndpdGhvdXRcbiAqIEBleGFtcGxlXG4gKlxuICogXy54b3IoWzIsIDFdLCBbMiwgM10pO1xuICogLy8gPT4gWzEsIDNdXG4gKi9cbnZhciB4b3IgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCkpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0geG9yO1xuIiwiLyoqXG4gKiBGbGF0dGVuIGFycmF5LCBvbmUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PD8+fSBhcnJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTw/Pn1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycik7XG59XG5cbnZhciBuYXRpdmVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgbmF0aXZlSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXNOaWwob2JqKSB7XG4gIHJldHVybiBvYmogPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBpc051bWJlcihvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICB2YXIgdGFnID0gbmF0aXZlVG9TdHJpbmcuY2FsbChvYmopO1xuICByZXR1cm4gdGFnID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8IHRhZyA9PT0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nIHx8IHRhZyA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IFByb3h5XSc7XG59XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG4vKipcbiAqIEVuc3VyZSBjb2xsZWN0aW9uIGlzIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5mdW5jdGlvbiBlbnN1cmVBcnJheShvYmopIHtcbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignbXVzdCBzdXBwbHkgYXJyYXknKTtcbn1cbi8qKlxuICogUmV0dXJuIHRydWUsIGlmIHRhcmdldCBvd25zIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGhhcyh0YXJnZXQsIGtleSkge1xuICByZXR1cm4gbmF0aXZlSGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSk7XG59XG5cbi8qKlxuICogRmluZCBlbGVtZW50IGluIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbnxPYmplY3R9IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZmluZChjb2xsZWN0aW9uLCBtYXRjaGVyKSB7XG4gIG1hdGNoZXIgPSB0b01hdGNoZXIobWF0Y2hlcik7XG4gIHZhciBtYXRjaDtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICBpZiAobWF0Y2hlcih2YWwsIGtleSkpIHtcbiAgICAgIG1hdGNoID0gdmFsO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogRmluZCBlbGVtZW50IGluZGV4IGluIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBmaW5kSW5kZXgoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuICBtYXRjaGVyID0gdG9NYXRjaGVyKG1hdGNoZXIpO1xuICB2YXIgaWR4ID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IC0xIDogdW5kZWZpbmVkO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgIGlmIChtYXRjaGVyKHZhbCwga2V5KSkge1xuICAgICAgaWR4ID0ga2V5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG4vKipcbiAqIEZpbmQgZWxlbWVudCBpbiBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdH0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheX0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgIGlmIChtYXRjaGVyKHZhbCwga2V5KSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgY29sbGVjdGlvbjsgcmV0dXJuaW5nIHNvbWV0aGluZ1xuICogKG5vbi11bmRlZmluZWQpIHdpbGwgc3RvcCBpdGVyYXRpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJldHVybiByZXN1bHQgdGhhdCBzdG9wcGVkIHRoZSBpdGVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdG9yKSB7XG4gIHZhciB2YWwsIHJlc3VsdDtcblxuICBpZiAoaXNVbmRlZmluZWQoY29sbGVjdGlvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udmVydEtleSA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyB0b051bSA6IGlkZW50aXR5O1xuXG4gIGZvciAodmFyIGtleSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgaWYgKGhhcyhjb2xsZWN0aW9uLCBrZXkpKSB7XG4gICAgICB2YWwgPSBjb2xsZWN0aW9uW2tleV07XG4gICAgICByZXN1bHQgPSBpdGVyYXRvcih2YWwsIGNvbnZlcnRLZXkoa2V5KSk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFJldHVybiBjb2xsZWN0aW9uIHdpdGhvdXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gYXJyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIHdpdGhvdXQoYXJyLCBtYXRjaGVyKSB7XG4gIGlmIChpc1VuZGVmaW5lZChhcnIpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZW5zdXJlQXJyYXkoYXJyKTtcbiAgbWF0Y2hlciA9IHRvTWF0Y2hlcihtYXRjaGVyKTtcbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGVsLCBpZHgpIHtcbiAgICByZXR1cm4gIW1hdGNoZXIoZWwsIGlkeCk7XG4gIH0pO1xufVxuLyoqXG4gKiBSZWR1Y2UgY29sbGVjdGlvbiwgcmV0dXJuaW5nIGEgc2luZ2xlIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtICB7QW55fSByZXN1bHRcbiAqXG4gKiBAcmV0dXJuIHtBbnl9IHJlc3VsdCByZXR1cm5lZCBmcm9tIGxhc3QgaXRlcmF0b3JcbiAqL1xuXG5mdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0b3IsIHJlc3VsdCkge1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWx1ZSwgaWR4KSB7XG4gICAgcmVzdWx0ID0gaXRlcmF0b3IocmVzdWx0LCB2YWx1ZSwgaWR4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb25cbiAqIG1hdGNoZXMgdGhlIGNyaXRlcmlhLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGV2ZXJ5KGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgcmV0dXJuICEhcmVkdWNlKGNvbGxlY3Rpb24sIGZ1bmN0aW9uIChtYXRjaGVzLCB2YWwsIGtleSkge1xuICAgIHJldHVybiBtYXRjaGVzICYmIG1hdGNoZXIodmFsLCBrZXkpO1xuICB9LCB0cnVlKTtcbn1cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgc29tZSBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvblxuICogbWF0Y2ggdGhlIGNyaXRlcmlhLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuICByZXR1cm4gISFmaW5kKGNvbGxlY3Rpb24sIG1hdGNoZXIpO1xufVxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBjb2xsZWN0aW9uIGludG8gYW5vdGhlciBjb2xsZWN0aW9uXG4gKiBieSBwaXBpbmcgZWFjaCBtZW1iZXIgdGhyb3VnaCB0aGUgZ2l2ZW4gZm4uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICpcbiAqIEByZXR1cm4ge0FycmF5fSB0cmFuc2Zvcm1lZCBjb2xsZWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGZuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICByZXN1bHQucHVzaChmbih2YWwsIGtleSkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogR2V0IHRoZSBjb2xsZWN0aW9ucyBrZXlzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIGtleXMoY29sbGVjdGlvbikge1xuICByZXR1cm4gY29sbGVjdGlvbiAmJiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKSB8fCBbXTtcbn1cbi8qKlxuICogU2hvcnRoYW5kIGZvciBga2V5cyhvKS5sZW5ndGhgLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIGtleXMoY29sbGVjdGlvbikubGVuZ3RoO1xufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlcyBpbiB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiB2YWx1ZXMoY29sbGVjdGlvbikge1xuICByZXR1cm4gbWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9KTtcbn1cbi8qKlxuICogR3JvdXAgY29sbGVjdGlvbiBtZW1iZXJzIGJ5IGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBleHRyYWN0b3JcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG1hcCB3aXRoIHsgYXR0clZhbHVlID0+IFsgYSwgYiwgYyBdIH1cbiAqL1xuXG5mdW5jdGlvbiBncm91cEJ5KGNvbGxlY3Rpb24sIGV4dHJhY3Rvcikge1xuICB2YXIgZ3JvdXBlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIGV4dHJhY3RvciA9IHRvRXh0cmFjdG9yKGV4dHJhY3Rvcik7XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBkaXNjcmltaW5hdG9yID0gZXh0cmFjdG9yKHZhbCkgfHwgJ18nO1xuICAgIHZhciBncm91cCA9IGdyb3VwZWRbZGlzY3JpbWluYXRvcl07XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICBncm91cCA9IGdyb3VwZWRbZGlzY3JpbWluYXRvcl0gPSBbXTtcbiAgICB9XG5cbiAgICBncm91cC5wdXNoKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gZ3JvdXBlZDtcbn1cbmZ1bmN0aW9uIHVuaXF1ZUJ5KGV4dHJhY3Rvcikge1xuICBleHRyYWN0b3IgPSB0b0V4dHJhY3RvcihleHRyYWN0b3IpO1xuICB2YXIgZ3JvdXBlZCA9IHt9O1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBjb2xsZWN0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY29sbGVjdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgZm9yRWFjaChjb2xsZWN0aW9ucywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gZ3JvdXBCeShjLCBleHRyYWN0b3IsIGdyb3VwZWQpO1xuICB9KTtcbiAgdmFyIHJlc3VsdCA9IG1hcChncm91cGVkLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICByZXR1cm4gdmFsWzBdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbnZhciB1bmlvbkJ5ID0gdW5pcXVlQnk7XG4vKipcbiAqIFNvcnQgY29sbGVjdGlvbiBieSBjcml0ZXJpYS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge1N0cmluZ3xGdW5jdGlvbn0gZXh0cmFjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cblxuZnVuY3Rpb24gc29ydEJ5KGNvbGxlY3Rpb24sIGV4dHJhY3Rvcikge1xuICBleHRyYWN0b3IgPSB0b0V4dHJhY3RvcihleHRyYWN0b3IpO1xuICB2YXIgc29ydGVkID0gW107XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICB2YXIgZGlzYyA9IGV4dHJhY3Rvcih2YWx1ZSwga2V5KTtcbiAgICB2YXIgZW50cnkgPSB7XG4gICAgICBkOiBkaXNjLFxuICAgICAgdjogdmFsdWVcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgc29ydGVkLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIHZhciBkID0gc29ydGVkW2lkeF0uZDtcblxuICAgICAgaWYgKGRpc2MgPCBkKSB7XG4gICAgICAgIHNvcnRlZC5zcGxpY2UoaWR4LCAwLCBlbnRyeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IC8vIG5vdCBpbnNlcnRlZCwgYXBwZW5kICghKVxuXG5cbiAgICBzb3J0ZWQucHVzaChlbnRyeSk7XG4gIH0pO1xuICByZXR1cm4gbWFwKHNvcnRlZCwgZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZS52O1xuICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBwYXR0ZXJuIG1hdGNoZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBtYXRjaGVyID0gbWF0Y2hQYXR0ZXJuKHsgaWQ6IDEgfSk7XG4gKlxuICogdmFyIGVsZW1lbnQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaGVyKTtcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBhdHRlcm5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gbWF0Y2hlckZuXG4gKi9cblxuZnVuY3Rpb24gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBldmVyeShwYXR0ZXJuLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICAgIHJldHVybiBlbFtrZXldID09PSB2YWw7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvRXh0cmFjdG9yKGV4dHJhY3Rvcikge1xuICByZXR1cm4gaXNGdW5jdGlvbihleHRyYWN0b3IpID8gZXh0cmFjdG9yIDogZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZVtleHRyYWN0b3JdO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0b01hdGNoZXIobWF0Y2hlcikge1xuICByZXR1cm4gaXNGdW5jdGlvbihtYXRjaGVyKSA/IG1hdGNoZXIgOiBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBlID09PSBtYXRjaGVyO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eShhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn1cblxuZnVuY3Rpb24gdG9OdW0oYXJnKSB7XG4gIHJldHVybiBOdW1iZXIoYXJnKTtcbn1cblxuLyoqXG4gKiBEZWJvdW5jZSBmbiwgY2FsbGluZyBpdCBvbmx5IG9uY2UgaWZcbiAqIHRoZSBnaXZlbiB0aW1lIGVsYXBzZWQgYmV0d2VlbiBjYWxscy5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSAge051bWJlcn0gdGltZW91dFxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZm4sIHRpbWVvdXQpIHtcbiAgdmFyIHRpbWVyO1xuICB2YXIgbGFzdEFyZ3M7XG4gIHZhciBsYXN0VGhpcztcbiAgdmFyIGxhc3ROb3c7XG5cbiAgZnVuY3Rpb24gZmlyZSgpIHtcbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgc2NoZWR1bGVkRGlmZiA9IGxhc3ROb3cgKyB0aW1lb3V0IC0gbm93O1xuXG4gICAgaWYgKHNjaGVkdWxlZERpZmYgPiAwKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGUoc2NoZWR1bGVkRGlmZik7XG4gICAgfVxuXG4gICAgZm4uYXBwbHkobGFzdFRoaXMsIGxhc3RBcmdzKTtcbiAgICB0aW1lciA9IGxhc3ROb3cgPSBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUodGltZW91dCkge1xuICAgIHRpbWVyID0gc2V0VGltZW91dChmaXJlLCB0aW1lb3V0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbGFzdE5vdyA9IERhdGUubm93KCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGxhc3RUaGlzID0gdGhpczsgLy8gZW5zdXJlIGFuIGV4ZWN1dGlvbiBpcyBzY2hlZHVsZWRcblxuICAgIGlmICghdGltZXIpIHtcbiAgICAgIHNjaGVkdWxlKHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogVGhyb3R0bGUgZm4sIGNhbGxpbmcgYXQgbW9zdCBvbmNlXG4gKiBpbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGludGVydmFsXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IHRocm90dGxlZCBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBpbnRlcnZhbCkge1xuICB2YXIgdGhyb3R0bGluZyA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aHJvdHRsaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgIHRocm90dGxpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3R0bGluZyA9IGZhbHNlO1xuICAgIH0sIGludGVydmFsKTtcbiAgfTtcbn1cbi8qKlxuICogQmluZCBmdW5jdGlvbiBhZ2FpbnN0IHRhcmdldCA8dGhpcz4uXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgdGFyZ2V0XG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IGJvdW5kIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gYmluZChmbiwgdGFyZ2V0KSB7XG4gIHJldHVybiBmbi5iaW5kKHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYE9iamVjdC5hc3NpZ25gLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBvdGhlcnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvdGhlcnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG90aGVyc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodm9pZCAwLCBbdGFyZ2V0XS5jb25jYXQob3RoZXJzKSk7XG59XG4vKipcbiAqIFBpY2sgZ2l2ZW4gcHJvcGVydGllcyBmcm9tIHRoZSB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BlcnRpZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRhcmdldFxuICovXG5cbmZ1bmN0aW9uIHBpY2sodGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIG9iaiA9IE9iamVjdCh0YXJnZXQpO1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSB0YXJnZXRbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUGljayBhbGwgdGFyZ2V0IHByb3BlcnRpZXMsIGV4Y2x1ZGluZyB0aGUgZ2l2ZW4gb25lcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wZXJ0aWVzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBvbWl0KHRhcmdldCwgcHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciBvYmogPSBPYmplY3QodGFyZ2V0KTtcbiAgZm9yRWFjaChvYmosIGZ1bmN0aW9uIChwcm9wLCBrZXkpIHtcbiAgICBpZiAocHJvcGVydGllcy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHByb3A7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgbWVyZ2UgYC4uLnNvdXJjZXNgIGludG8gZ2l2ZW4gdGFyZ2V0LlxuICpcbiAqIERvZXMgc3VwcG9ydCBtZXJnaW5nIG9iamVjdHM7IGRvZXMgbm90IHN1cHBvcnQgbWVyZ2luZyBhcnJheXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBtZXJnZSh0YXJnZXQpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBzb3VyY2VzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBzb3VyY2VzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgaWYgKCFzb3VyY2VzLmxlbmd0aCkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmb3JFYWNoKHNvdXJjZXMsIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAvLyBza2lwIG5vbi1vYmogc291cmNlcywgaS5lLiBudWxsXG4gICAgaWYgKCFzb3VyY2UgfHwgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHNvdXJjZSwgZnVuY3Rpb24gKHNvdXJjZVZhbCwga2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XTtcblxuICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVZhbCkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRWYWwpKSB7XG4gICAgICAgICAgLy8gb3ZlcnJpZGUgdGFyZ2V0W2tleV0gd2l0aCBvYmplY3RcbiAgICAgICAgICB0YXJnZXRWYWwgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2UodGFyZ2V0VmFsLCBzb3VyY2VWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2VWYWw7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgeyBmbGF0dGVuLCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlciwgZm9yRWFjaCwgd2l0aG91dCwgcmVkdWNlLCBldmVyeSwgc29tZSwgbWFwLCBrZXlzLCBzaXplLCB2YWx1ZXMsIGdyb3VwQnksIHVuaXF1ZUJ5LCB1bmlvbkJ5LCBzb3J0QnksIG1hdGNoUGF0dGVybiwgZGVib3VuY2UsIHRocm90dGxlLCBiaW5kLCBpc1VuZGVmaW5lZCwgaXNEZWZpbmVkLCBpc05pbCwgaXNBcnJheSwgaXNPYmplY3QsIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgZW5zdXJlQXJyYXksIGhhcywgYXNzaWduLCBwaWNrLCBvbWl0LCBtZXJnZSB9O1xuIiwiLyoqXG4gKiBTZXQgYXR0cmlidXRlIGBuYW1lYCB0byBgdmFsYCwgb3IgZ2V0IGF0dHIgYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gW3ZhbF1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbCkge1xuICAvLyBnZXRcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xuICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIH1cblxuICAvLyByZW1vdmVcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH1cblxuICAvLyBzZXRcbiAgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbCk7XG5cbiAgcmV0dXJuIGVsO1xufVxuXG52YXIgaW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbnZhciBpbmRleG9mID0gZnVuY3Rpb24oYXJyLCBvYmope1xuICBpZiAoaW5kZXhPZikgcmV0dXJuIGFyci5pbmRleE9mKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFycltpXSA9PT0gb2JqKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59O1xuXG4vKipcbiAqIFRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2NvbXBvbmVudC9jbGFzc2VzXG4gKlxuICogV2l0aG91dCB0aGUgY29tcG9uZW50IGJpdHMuXG4gKi9cblxuLyoqXG4gKiBXaGl0ZXNwYWNlIHJlZ2V4cC5cbiAqL1xuXG52YXIgcmUgPSAvXFxzKy87XG5cbi8qKlxuICogdG9TdHJpbmcgcmVmZXJlbmNlLlxuICovXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogV3JhcCBgZWxgIGluIGEgYENsYXNzTGlzdGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjbGFzc2VzKGVsKSB7XG4gIHJldHVybiBuZXcgQ2xhc3NMaXN0KGVsKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IENsYXNzTGlzdCBmb3IgYGVsYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBDbGFzc0xpc3QoZWwpIHtcbiAgaWYgKCFlbCB8fCAhZWwubm9kZVR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgRE9NIGVsZW1lbnQgcmVmZXJlbmNlIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgdGhpcy5lbCA9IGVsO1xuICB0aGlzLmxpc3QgPSBlbC5jbGFzc0xpc3Q7XG59XG5cbi8qKlxuICogQWRkIGNsYXNzIGBuYW1lYCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgLy8gY2xhc3NMaXN0XG4gIGlmICh0aGlzLmxpc3QpIHtcbiAgICB0aGlzLmxpc3QuYWRkKG5hbWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgdmFyIGFyciA9IHRoaXMuYXJyYXkoKTtcbiAgdmFyIGkgPSBpbmRleG9mKGFyciwgbmFtZSk7XG4gIGlmICghfmkpIGFyci5wdXNoKG5hbWUpO1xuICB0aGlzLmVsLmNsYXNzTmFtZSA9IGFyci5qb2luKCcgJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgY2xhc3MgYG5hbWVgIHdoZW4gcHJlc2VudCwgb3JcbiAqIHBhc3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVtb3ZlXG4gKiBhbnkgd2hpY2ggbWF0Y2guXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBuYW1lXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCdbb2JqZWN0IFJlZ0V4cF0nID09IHRvU3RyaW5nLmNhbGwobmFtZSkpIHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVNYXRjaGluZyhuYW1lKTtcbiAgfVxuXG4gIC8vIGNsYXNzTGlzdFxuICBpZiAodGhpcy5saXN0KSB7XG4gICAgdGhpcy5saXN0LnJlbW92ZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGZhbGxiYWNrXG4gIHZhciBhcnIgPSB0aGlzLmFycmF5KCk7XG4gIHZhciBpID0gaW5kZXhvZihhcnIsIG5hbWUpO1xuICBpZiAofmkpIGFyci5zcGxpY2UoaSwgMSk7XG4gIHRoaXMuZWwuY2xhc3NOYW1lID0gYXJyLmpvaW4oJyAnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgY2xhc3NlcyBtYXRjaGluZyBgcmVgLlxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSByZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5yZW1vdmVNYXRjaGluZyA9IGZ1bmN0aW9uIChyZSkge1xuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZS50ZXN0KGFycltpXSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUb2dnbGUgY2xhc3MgYG5hbWVgLCBjYW4gZm9yY2Ugc3RhdGUgdmlhIGBmb3JjZWAuXG4gKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBjbGFzc0xpc3QsIGJ1dCBkbyBub3Qgc3VwcG9ydCBgZm9yY2VgIHlldCxcbiAqIHRoZSBtaXN0YWtlIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kIGNvcnJlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtCb29sZWFufSBmb3JjZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5DbGFzc0xpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lLCBmb3JjZSkge1xuICAvLyBjbGFzc0xpc3RcbiAgaWYgKHRoaXMubGlzdCkge1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZvcmNlKSB7XG4gICAgICBpZiAoZm9yY2UgIT09IHRoaXMubGlzdC50b2dnbGUobmFtZSwgZm9yY2UpKSB7XG4gICAgICAgIHRoaXMubGlzdC50b2dnbGUobmFtZSk7IC8vIHRvZ2dsZSBhZ2FpbiB0byBjb3JyZWN0XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdC50b2dnbGUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgZm9yY2UpIHtcbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICB0aGlzLnJlbW92ZShuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGQobmFtZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5hcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnO1xuICB2YXIgc3RyID0gY2xhc3NOYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgdmFyIGFyciA9IHN0ci5zcGxpdChyZSk7XG4gIGlmICgnJyA9PT0gYXJyWzBdKSBhcnIuc2hpZnQoKTtcbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgY2xhc3MgYG5hbWVgIGlzIHByZXNlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5oYXMgPSBDbGFzc0xpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubGlzdCA/IHRoaXMubGlzdC5jb250YWlucyhuYW1lKSA6ICEhfmluZGV4b2YodGhpcy5hcnJheSgpLCBuYW1lKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBnaXZlbiBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBjbGVhcihlbCkge1xuXG4gIHZhciBjO1xuXG4gIHdoaWxlIChlbC5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgIGMgPSBlbC5jaGlsZE5vZGVzWzBdO1xuICAgIGVsLnJlbW92ZUNoaWxkKGMpO1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufVxuXG52YXIgcHJvdG8gPSB0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBFbGVtZW50LnByb3RvdHlwZSA6IHt9O1xudmFyIHZlbmRvciA9IHByb3RvLm1hdGNoZXNcbiAgfHwgcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLndlYmtpdE1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ub01hdGNoZXNTZWxlY3RvcjtcblxudmFyIG1hdGNoZXNTZWxlY3RvciA9IG1hdGNoO1xuXG4vKipcbiAqIE1hdGNoIGBlbGAgdG8gYHNlbGVjdG9yYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2ZW5kb3IpIHJldHVybiB2ZW5kb3IuY2FsbChlbCwgc2VsZWN0b3IpO1xuICB2YXIgbm9kZXMgPSBlbC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldID09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2xvc2VzdFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtCb29sZWFufSBjaGVja1lvdXJTZWxmIChvcHRpb25hbClcbiAqL1xuZnVuY3Rpb24gY2xvc2VzdCAoZWxlbWVudCwgc2VsZWN0b3IsIGNoZWNrWW91clNlbGYpIHtcbiAgdmFyIGN1cnJlbnRFbGVtID0gY2hlY2tZb3VyU2VsZiA/IGVsZW1lbnQgOiBlbGVtZW50LnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKGN1cnJlbnRFbGVtICYmIGN1cnJlbnRFbGVtLm5vZGVUeXBlICE9PSBkb2N1bWVudC5ET0NVTUVOVF9OT0RFICYmIGN1cnJlbnRFbGVtLm5vZGVUeXBlICE9PSBkb2N1bWVudC5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG5cbiAgICBpZiAobWF0Y2hlc1NlbGVjdG9yKGN1cnJlbnRFbGVtLCBzZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RWxlbTtcbiAgICB9XG5cbiAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlc1NlbGVjdG9yKGN1cnJlbnRFbGVtLCBzZWxlY3RvcikgPyBjdXJyZW50RWxlbSA6IG51bGw7XG59XG5cbnZhciBiaW5kID0gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPyAnYWRkRXZlbnRMaXN0ZW5lcicgOiAnYXR0YWNoRXZlbnQnLFxuICAgIHVuYmluZCA9IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyID8gJ3JlbW92ZUV2ZW50TGlzdGVuZXInIDogJ2RldGFjaEV2ZW50JyxcbiAgICBwcmVmaXggPSBiaW5kICE9PSAnYWRkRXZlbnRMaXN0ZW5lcicgPyAnb24nIDogJyc7XG5cbi8qKlxuICogQmluZCBgZWxgIGV2ZW50IGB0eXBlYCB0byBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIGJpbmRfMSA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW2JpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYGVsYCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIHVuYmluZF8xID0gZnVuY3Rpb24oZWwsIHR5cGUsIGZuLCBjYXB0dXJlKXtcbiAgZWxbdW5iaW5kXShwcmVmaXggKyB0eXBlLCBmbiwgY2FwdHVyZSB8fCBmYWxzZSk7XG4gIHJldHVybiBmbjtcbn07XG5cbnZhciBjb21wb25lbnRFdmVudCA9IHtcblx0YmluZDogYmluZF8xLFxuXHR1bmJpbmQ6IHVuYmluZF8xXG59O1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuLyoqXG4gKiBEZWxlZ2F0ZSBldmVudCBgdHlwZWAgdG8gYHNlbGVjdG9yYFxuICogYW5kIGludm9rZSBgZm4oZSlgLiBBIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBpcyByZXR1cm5lZCB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIGAudW5iaW5kKClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUsIHNvIHdlIHdhbnQgdG8gYmluZCB0byB0aGUgY2FwdHVyZSBwaGFzZSBpbnN0ZWFkXG4vLyB3aGVuIGRlbGVnYXRpbmcuXG52YXIgZm9yY2VDYXB0dXJlRXZlbnRzID0gWydmb2N1cycsICdibHVyJ107XG5cbmZ1bmN0aW9uIGJpbmQkMShlbCwgc2VsZWN0b3IsIHR5cGUsIGZuLCBjYXB0dXJlKSB7XG4gIGlmIChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZih0eXBlKSAhPT0gLTEpIHtcbiAgICBjYXB0dXJlID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRFdmVudC5iaW5kKGVsLCB0eXBlLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgZS5kZWxlZ2F0ZVRhcmdldCA9IGNsb3Nlc3QodGFyZ2V0LCBzZWxlY3RvciwgdHJ1ZSwgZWwpO1xuICAgIGlmIChlLmRlbGVnYXRlVGFyZ2V0KSB7XG4gICAgICBmbi5jYWxsKGVsLCBlKTtcbiAgICB9XG4gIH0sIGNhcHR1cmUpO1xufVxuXG4vKipcbiAqIFVuYmluZCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiB1bmJpbmQkMShlbCwgdHlwZSwgZm4sIGNhcHR1cmUpIHtcbiAgaWYgKGZvcmNlQ2FwdHVyZUV2ZW50cy5pbmRleE9mKHR5cGUpICE9PSAtMSkge1xuICAgIGNhcHR1cmUgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudEV2ZW50LnVuYmluZChlbCwgdHlwZSwgZm4sIGNhcHR1cmUpO1xufVxuXG52YXIgZGVsZWdhdGUgPSB7XG4gIGJpbmQ6IGJpbmQkMSxcbiAgdW5iaW5kOiB1bmJpbmQkMVxufTtcblxuLyoqXG4gKiBFeHBvc2UgYHBhcnNlYC5cbiAqL1xuXG52YXIgZG9taWZ5ID0gcGFyc2U7XG5cbi8qKlxuICogVGVzdHMgZm9yIGJyb3dzZXIgc3VwcG9ydC5cbiAqL1xuXG52YXIgaW5uZXJIVE1MQnVnID0gZmFsc2U7XG52YXIgYnVnVGVzdERpdjtcbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIGJ1Z1Rlc3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgLy8gU2V0dXBcbiAgYnVnVGVzdERpdi5pbm5lckhUTUwgPSAnICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj1cIi9hXCI+YTwvYT48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIvPic7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTFxuICAvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFXG4gIGlubmVySFRNTEJ1ZyA9ICFidWdUZXN0RGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJykubGVuZ3RoO1xuICBidWdUZXN0RGl2ID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyYXAgbWFwIGZyb20ganF1ZXJ5LlxuICovXG5cbnZhciBtYXAgPSB7XG4gIGxlZ2VuZDogWzEsICc8ZmllbGRzZXQ+JywgJzwvZmllbGRzZXQ+J10sXG4gIHRyOiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcbiAgY29sOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgLy8gZm9yIHNjcmlwdC9saW5rL3N0eWxlIHRhZ3MgdG8gd29yayBpbiBJRTYtOCwgeW91IGhhdmUgdG8gd3JhcFxuICAvLyBpbiBhIGRpdiB3aXRoIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIGZyb250LCBoYSFcbiAgX2RlZmF1bHQ6IGlubmVySFRNTEJ1ZyA/IFsxLCAnWDxkaXY+JywgJzwvZGl2PiddIDogWzAsICcnLCAnJ11cbn07XG5cbm1hcC50ZCA9XG5tYXAudGggPSBbMywgJzx0YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXTtcblxubWFwLm9wdGlvbiA9XG5tYXAub3B0Z3JvdXAgPSBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJtdWx0aXBsZVwiPicsICc8L3NlbGVjdD4nXTtcblxubWFwLnRoZWFkID1cbm1hcC50Ym9keSA9XG5tYXAuY29sZ3JvdXAgPVxubWFwLmNhcHRpb24gPVxubWFwLnRmb290ID0gWzEsICc8dGFibGU+JywgJzwvdGFibGU+J107XG5cbm1hcC5wb2x5bGluZSA9XG5tYXAuZWxsaXBzZSA9XG5tYXAucG9seWdvbiA9XG5tYXAuY2lyY2xlID1cbm1hcC50ZXh0ID1cbm1hcC5saW5lID1cbm1hcC5wYXRoID1cbm1hcC5yZWN0ID1cbm1hcC5nID0gWzEsICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2ZXJzaW9uPVwiMS4xXCI+JywnPC9zdmc+J107XG5cbi8qKlxuICogUGFyc2UgYGh0bWxgIGFuZCByZXR1cm4gYSBET00gTm9kZSBpbnN0YW5jZSwgd2hpY2ggY291bGQgYmUgYSBUZXh0Tm9kZSxcbiAqIEhUTUwgRE9NIE5vZGUgb2Ygc29tZSBraW5kICg8ZGl2PiBmb3IgZXhhbXBsZSksIG9yIGEgRG9jdW1lbnRGcmFnbWVudFxuICogaW5zdGFuY2UsIGRlcGVuZGluZyBvbiB0aGUgY29udGVudHMgb2YgdGhlIGBodG1sYCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBIVE1MIHN0cmluZyB0byBcImRvbWlmeVwiXG4gKiBAcGFyYW0ge0RvY3VtZW50fSBkb2MgLSBUaGUgYGRvY3VtZW50YCBpbnN0YW5jZSB0byBjcmVhdGUgdGhlIE5vZGUgZm9yXG4gKiBAcmV0dXJuIHtET01Ob2RlfSB0aGUgVGV4dE5vZGUsIERPTSBOb2RlLCBvciBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShodG1sLCBkb2MpIHtcbiAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiBodG1sKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQnKTtcblxuICAvLyBkZWZhdWx0IHRvIHRoZSBnbG9iYWwgYGRvY3VtZW50YCBvYmplY3RcbiAgaWYgKCFkb2MpIGRvYyA9IGRvY3VtZW50O1xuXG4gIC8vIHRhZyBuYW1lXG4gIHZhciBtID0gLzwoW1xcdzpdKykvLmV4ZWMoaHRtbCk7XG4gIGlmICghbSkgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShodG1sKTtcblxuICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7IC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcblxuICB2YXIgdGFnID0gbVsxXTtcblxuICAvLyBib2R5IHN1cHBvcnRcbiAgaWYgKHRhZyA9PSAnYm9keScpIHtcbiAgICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnaHRtbCcpO1xuICAgIGVsLmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIGVsLnJlbW92ZUNoaWxkKGVsLmxhc3RDaGlsZCk7XG4gIH1cblxuICAvLyB3cmFwIG1hcFxuICB2YXIgd3JhcCA9IG1hcFt0YWddIHx8IG1hcC5fZGVmYXVsdDtcbiAgdmFyIGRlcHRoID0gd3JhcFswXTtcbiAgdmFyIHByZWZpeCA9IHdyYXBbMV07XG4gIHZhciBzdWZmaXggPSB3cmFwWzJdO1xuICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGVsLmlubmVySFRNTCA9IHByZWZpeCArIGh0bWwgKyBzdWZmaXg7XG4gIHdoaWxlIChkZXB0aC0tKSBlbCA9IGVsLmxhc3RDaGlsZDtcblxuICAvLyBvbmUgZWxlbWVudFxuICBpZiAoZWwuZmlyc3RDaGlsZCA9PSBlbC5sYXN0Q2hpbGQpIHtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7XG4gIH1cblxuICAvLyBzZXZlcmFsIGVsZW1lbnRzXG4gIHZhciBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIHdoaWxlIChlbC5maXJzdENoaWxkKSB7XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCkpO1xuICB9XG5cbiAgcmV0dXJuIGZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBxdWVyeShzZWxlY3RvciwgZWwpIHtcbiAgZWwgPSBlbCB8fCBkb2N1bWVudDtcblxuICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIGFsbChzZWxlY3RvciwgZWwpIHtcbiAgZWwgPSBlbCB8fCBkb2N1bWVudDtcblxuICByZXR1cm4gZWwucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShlbCkge1xuICBlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xufVxuXG5leHBvcnQgeyBhdHRyLCBjbGFzc2VzLCBjbGVhciwgY2xvc2VzdCwgZGVsZWdhdGUsIGRvbWlmeSwgY29tcG9uZW50RXZlbnQgYXMgZXZlbnQsIG1hdGNoZXNTZWxlY3RvciBhcyBtYXRjaGVzLCBxdWVyeSwgYWxsIGFzIHF1ZXJ5QWxsLCByZW1vdmUgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vLyAgICAgIFxuLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdGFrZSBhbiBvcHRpb25hbCBldmVudCBhcmd1bWVudFxuLy8gYW5kIHNob3VsZCBub3QgcmV0dXJuIGEgdmFsdWVcbi8vIEFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBldmVudCBoYW5kbGVycyBmb3IgYSB0eXBlXG4vLyBBIG1hcCBvZiBldmVudCB0eXBlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBldmVudCBoYW5kbGVycy5cblxuLyoqIE1pdHQ6IFRpbnkgKH4yMDBiKSBmdW5jdGlvbmFsIGV2ZW50IGVtaXR0ZXIgLyBwdWJzdWIuXG4gKiAgQG5hbWUgbWl0dFxuICogIEByZXR1cm5zIHtNaXR0fVxuICovXG5mdW5jdGlvbiBtaXR0KGFsbCkge1xuICBhbGwgPSBhbGwgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gdHlwZVx0VHlwZSBvZiBldmVudCB0byBsaXN0ZW4gZm9yLCBvciBgXCIqXCJgIGZvciBhbGwgZXZlbnRzXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGhhbmRsZXIgRnVuY3Rpb24gdG8gY2FsbCBpbiByZXNwb25zZSB0byBnaXZlbiBldmVudFxuICAgICAqIEBtZW1iZXJPZiBtaXR0XG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uIG9uKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIChhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIHVucmVnaXN0ZXIgYGhhbmRsZXJgIGZyb20sIG9yIGBcIipcImBcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlbW92ZVxuICAgICAqIEBtZW1iZXJPZiBtaXR0XG4gICAgICovXG4gICAgb2ZmOiBmdW5jdGlvbiBvZmYodHlwZSwgaGFuZGxlcikge1xuICAgICAgaWYgKGFsbFt0eXBlXSkge1xuICAgICAgICBhbGxbdHlwZV0uc3BsaWNlKGFsbFt0eXBlXS5pbmRleE9mKGhhbmRsZXIpID4+PiAwLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52b2tlIGFsbCBoYW5kbGVycyBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gICAgICogSWYgcHJlc2VudCwgYFwiKlwiYCBoYW5kbGVycyBhcmUgaW52b2tlZCBhZnRlciB0eXBlLW1hdGNoZWQgaGFuZGxlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAgVGhlIGV2ZW50IHR5cGUgdG8gaW52b2tlXG4gICAgICogQHBhcmFtIHtBbnl9IFtldnRdICBBbnkgdmFsdWUgKG9iamVjdCBpcyByZWNvbW1lbmRlZCBhbmQgcG93ZXJmdWwpLCBwYXNzZWQgdG8gZWFjaCBoYW5kbGVyXG4gICAgICogQG1lbWJlck9mIG1pdHRcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KHR5cGUsIGV2dCkge1xuICAgICAgKGFsbFt0eXBlXSB8fCBbXSkuc2xpY2UoKS5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcihldnQpO1xuICAgICAgfSk7XG4gICAgICAoYWxsWycqJ10gfHwgW10pLnNsaWNlKCkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIodHlwZSwgZXZ0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWl0dDtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJaUo5IiwiaW1wb3J0IHsgZm9yRWFjaCwgYXNzaWduLCBmaW5kLCBmaWx0ZXIsIGlzU3RyaW5nLCBtYXAgfSBmcm9tICdtaW4tZGFzaCc7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdzYXhlbic7XG5pbXBvcnQgeyBjb2VyY2VUeXBlLCBwYXJzZU5hbWVOUywgaXNTaW1wbGVUeXBlLCBNb2RkbGUgfSBmcm9tICdtb2RkbGUnO1xuXG5mdW5jdGlvbiBoYXNMb3dlckNhc2VBbGlhcyhwa2cpIHtcbiAgcmV0dXJuIHBrZy54bWwgJiYgcGtnLnhtbC50YWdBbGlhcyA9PT0gJ2xvd2VyQ2FzZSc7XG59XG5cbnZhciBERUZBVUxUX05TX01BUCA9IHtcbiAgJ3hzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG4gICd4bWwnOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xufTtcblxudmFyIFhTSV9UWVBFID0gJ3hzaTp0eXBlJztcblxuZnVuY3Rpb24gc2VyaWFsaXplRm9ybWF0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQueG1sICYmIGVsZW1lbnQueG1sLnNlcmlhbGl6ZTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplQXNUeXBlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1hdChlbGVtZW50KSA9PT0gWFNJX1RZUEU7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFzUHJvcGVydHkoZWxlbWVudCkge1xuICByZXR1cm4gc2VyaWFsaXplRm9ybWF0KGVsZW1lbnQpID09PSAncHJvcGVydHknO1xufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiBhbGlhc1RvTmFtZShhbGlhc05zLCBwa2cpIHtcblxuICBpZiAoIWhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcbiAgICByZXR1cm4gYWxpYXNOcy5uYW1lO1xuICB9XG5cbiAgcmV0dXJuIGFsaWFzTnMucHJlZml4ICsgJzonICsgY2FwaXRhbGl6ZShhbGlhc05zLmxvY2FsTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKSB7XG5cbiAgdmFyIG5hbWUgPSBuYW1lTnMubmFtZSxcbiAgICAgIGxvY2FsTmFtZSA9IG5hbWVOcy5sb2NhbE5hbWU7XG5cbiAgdmFyIHR5cGVQcmVmaXggPSBwa2cueG1sICYmIHBrZy54bWwudHlwZVByZWZpeDtcblxuICBpZiAodHlwZVByZWZpeCAmJiBsb2NhbE5hbWUuaW5kZXhPZih0eXBlUHJlZml4KSA9PT0gMCkge1xuICAgIHJldHVybiBuYW1lTnMucHJlZml4ICsgJzonICsgbG9jYWxOYW1lLnNsaWNlKHR5cGVQcmVmaXgubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVYc2lUeXBlTmFtZShuYW1lLCBtb2RlbCkge1xuXG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcbiAgdmFyIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCk7XG5cbiAgcmV0dXJuIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKTtcbn1cblxuZnVuY3Rpb24gZXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbW9kZGxlIGRlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gaW5zdGFuY2Ugb3IgdHlwZS5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fEZ1bmN0aW9ufSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgbW9kZGxlIGRlc2NyaXB0b3JcbiAqL1xuZnVuY3Rpb24gZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LiRkZXNjcmlwdG9yO1xufVxuXG5cbi8qKlxuICogQSBwYXJzZSBjb250ZXh0LlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0VsZW1lbnRIYW5kbGVyfSBvcHRpb25zLnJvb3RIYW5kbGVyIHRoZSByb290IGhhbmRsZXIgZm9yIHBhcnNpbmcgYSBkb2N1bWVudFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sYXg9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSBpbnZhbGlkIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHQob3B0aW9ucykge1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0VsZW1lbnRIYW5kbGVyfSByb290SGFuZGxlclxuICAgKi9cblxuICAvKipcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBsYXhcbiAgICovXG5cbiAgYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuZWxlbWVudHNCeUlkID0ge307XG4gIHRoaXMucmVmZXJlbmNlcyA9IFtdO1xuICB0aGlzLndhcm5pbmdzID0gW107XG5cbiAgLyoqXG4gICAqIEFkZCBhbiB1bnJlc29sdmVkIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZVxuICAgKi9cbiAgdGhpcy5hZGRSZWZlcmVuY2UgPSBmdW5jdGlvbihyZWZlcmVuY2UpIHtcbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9jZXNzZWQgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICB0aGlzLmFkZEVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHRocm93IGVycm9yKCdleHBlY3RlZCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IHRoaXMuZWxlbWVudHNCeUlkO1xuXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpO1xuXG4gICAgdmFyIGlkUHJvcGVydHkgPSBkZXNjcmlwdG9yLmlkUHJvcGVydHksXG4gICAgICAgIGlkO1xuXG4gICAgaWYgKGlkUHJvcGVydHkpIHtcbiAgICAgIGlkID0gZWxlbWVudC5nZXQoaWRQcm9wZXJ0eS5uYW1lKTtcblxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIC8vIGZvciBRTmFtZSB2YWxpZGF0aW9uIGFzIHBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lQ2hhclxuICAgICAgICBpZiAoIS9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaS50ZXN0KGlkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50c0J5SWRbaWRdKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3IoJ2R1cGxpY2F0ZSBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnRzQnlJZFtpZF0gPSBlbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIGltcG9ydCB3YXJuaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gd2FybmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gd2FybmluZy5tZXNzYWdlXG4gICAqIEBwYXJhbSB7RXJyb3J9IFt3YXJuaW5nLmVycm9yXVxuICAgKi9cbiAgdGhpcy5hZGRXYXJuaW5nID0gZnVuY3Rpb24od2FybmluZykge1xuICAgIHRoaXMud2FybmluZ3MucHVzaCh3YXJuaW5nKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gQmFzZUhhbmRsZXIoKSB7fVxuXG5CYXNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24oKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7fTtcblxuXG4vKipcbiAqIEEgc2ltcGxlIHBhc3MgdGhyb3VnaCBoYW5kbGVyIHRoYXQgZG9lcyBub3RoaW5nIGV4Y2VwdCBmb3JcbiAqIGlnbm9yaW5nIGFsbCBpbnB1dCBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgdG8gaWdub3JlIHVua25vd24gZWxlbWVudHMgYW5kXG4gKiBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiBOb29wSGFuZGxlcigpIHsgfVxuXG5Ob29wSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5cbk5vb3BIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gQm9keUhhbmRsZXIoKSB7fVxuXG5Cb2R5SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5cbkJvZHlIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuICB0aGlzLmJvZHkgPSAodGhpcy5ib2R5IHx8ICcnKSArIHRleHQ7XG59O1xuXG5mdW5jdGlvbiBSZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5LCBjb250ZXh0KSB7XG4gIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJvZHlIYW5kbGVyLnByb3RvdHlwZSk7XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgIHRocm93IGVycm9yKCdleHBlY3RlZCBubyBzdWIgbm9kZXMnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmNyZWF0ZVJlZmVyZW5jZShub2RlKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZWxlbWVudC5pZCA9IHRoaXMuYm9keTtcbn07XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZVJlZmVyZW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0eTogdGhpcy5wcm9wZXJ0eS5ucy5uYW1lLFxuICAgIGlkOiAnJ1xuICB9O1xufTtcblxuZnVuY3Rpb24gVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICB0aGlzLnByb3BlcnR5RGVzYyA9IHByb3BlcnR5RGVzYztcbn1cblxuVmFsdWVIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQm9keUhhbmRsZXIucHJvdG90eXBlKTtcblxuVmFsdWVIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgdmFsdWUgPSB0aGlzLmJvZHkgfHwgJycsXG4gICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgcHJvcGVydHlEZXNjID0gdGhpcy5wcm9wZXJ0eURlc2M7XG5cbiAgdmFsdWUgPSBjb2VyY2VUeXBlKHByb3BlcnR5RGVzYy50eXBlLCB2YWx1ZSk7XG5cbiAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICBlbGVtZW50LmdldChwcm9wZXJ0eURlc2MubmFtZSkucHVzaCh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXQocHJvcGVydHlEZXNjLm5hbWUsIHZhbHVlKTtcbiAgfVxufTtcblxuXG5mdW5jdGlvbiBCYXNlRWxlbWVudEhhbmRsZXIoKSB7fVxuXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBwYXJzZXIgPSB0aGlzLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KG5vZGUpO1xuXG4gICAgdGhpcy5jb250ZXh0LmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VyID0gdGhpcy5oYW5kbGVDaGlsZChub2RlKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZXI7XG59O1xuXG4vKipcbiAqIEBjbGFzcyBSZWFkZXIuRWxlbWVudEhhbmRsZXJcbiAqXG4gKi9cbmZ1bmN0aW9uIEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMudHlwZSA9IG1vZGVsLmdldFR5cGUodHlwZU5hbWUpO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuYWRkUmVmZXJlbmNlID0gZnVuY3Rpb24ocmVmZXJlbmNlKSB7XG4gIHRoaXMuY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgICBib2R5UHJvcGVydHkgPSBkZXNjcmlwdG9yLmJvZHlQcm9wZXJ0eTtcblxuICBpZiAoIWJvZHlQcm9wZXJ0eSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGJvZHkgdGV4dCA8JyArIHRleHQgKyAnPicpO1xuICB9XG5cbiAgQm9keUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZVRleHQuY2FsbCh0aGlzLCB0ZXh0KTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgdmFsdWUgPSB0aGlzLmJvZHksXG4gICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgICBib2R5UHJvcGVydHkgPSBkZXNjcmlwdG9yLmJvZHlQcm9wZXJ0eTtcblxuICBpZiAoYm9keVByb3BlcnR5ICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGNvZXJjZVR5cGUoYm9keVByb3BlcnR5LnR5cGUsIHZhbHVlKTtcbiAgICBlbGVtZW50LnNldChib2R5UHJvcGVydHkubmFtZSwgdmFsdWUpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZnJvbSB0aGUgZ2l2ZW4gbm9kZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlIHRoZSB4bWwgbm9kZVxuICovXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXMsXG4gICAgICBUeXBlID0gdGhpcy50eXBlLFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoVHlwZSksXG4gICAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgaW5zdGFuY2UgPSBuZXcgVHlwZSh7fSksXG4gICAgICBtb2RlbCA9IHRoaXMubW9kZWwsXG4gICAgICBwcm9wTmFtZU5zO1xuXG4gIGZvckVhY2goYXR0cmlidXRlcywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcblxuICAgIHZhciBwcm9wID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdLFxuICAgICAgICB2YWx1ZXM7XG5cbiAgICBpZiAocHJvcCAmJiBwcm9wLmlzUmVmZXJlbmNlKSB7XG5cbiAgICAgIGlmICghcHJvcC5pc01hbnkpIHtcbiAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2Uoe1xuICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXG4gICAgICAgICAgaWQ6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSURSRUZTOiBwYXJzZSByZWZlcmVuY2VzIGFzIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3RcbiAgICAgICAgdmFsdWVzID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICBmb3JFYWNoKHZhbHVlcywgZnVuY3Rpb24odikge1xuICAgICAgICAgIGNvbnRleHQuYWRkUmVmZXJlbmNlKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3AubnMubmFtZSxcbiAgICAgICAgICAgIGlkOiB2XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHZhbHVlID0gY29lcmNlVHlwZShwcm9wLnR5cGUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZVxuICAgICAgaWYgKG5hbWUgIT09ICd4bWxucycpIHtcbiAgICAgICAgcHJvcE5hbWVOcyA9IHBhcnNlTmFtZU5TKG5hbWUsIGRlc2NyaXB0b3IubnMucHJlZml4KTtcblxuICAgICAgICAvLyBjaGVjayB3aGV0aGVyIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGluIGEgd2VsbC1rbm93biBuYW1lc3BhY2VcbiAgICAgICAgLy8gaWYgdGhhdCBpcyB0aGUgY2FzZSB3ZSBlbWl0IGEgd2FybmluZyB0byBpbmRpY2F0ZSBwb3RlbnRpYWwgbWlzdXNlXG4gICAgICAgIGlmIChtb2RlbC5nZXRQYWNrYWdlKHByb3BOYW1lTnMucHJlZml4KSkge1xuXG4gICAgICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICd1bmtub3duIGF0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPicsXG4gICAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcbiAgICAgICAgICAgIHByb3BlcnR5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2Uuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUZvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcblxuICB2YXIgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKHR5cGUpO1xuXG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBuYW1lTnMubmFtZSxcbiAgICAgIHByb3BlcnR5ID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5TmFtZV0sXG4gICAgICBlbGVtZW50VHlwZU5hbWUsXG4gICAgICBlbGVtZW50VHlwZTtcblxuICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuXG4gIGlmIChwcm9wZXJ0eSAmJiAhcHJvcGVydHkuaXNBdHRyKSB7XG5cbiAgICBpZiAoc2VyaWFsaXplQXNUeXBlKHByb3BlcnR5KSkge1xuICAgICAgZWxlbWVudFR5cGVOYW1lID0gbm9kZS5hdHRyaWJ1dGVzW1hTSV9UWVBFXTtcblxuICAgICAgLy8geHNpIHR5cGUgaXMgb3B0aW9uYWwsIGlmIGl0IGRvZXMgbm90IGV4aXN0cyB0aGVcbiAgICAgIC8vIGRlZmF1bHQgdHlwZSBpcyBhc3N1bWVkXG4gICAgICBpZiAoZWxlbWVudFR5cGVOYW1lKSB7XG5cbiAgICAgICAgLy8gdGFrZSBwb3NzaWJsZSB0eXBlIHByZWZpeGVzIGZyb20gWE1MXG4gICAgICAgIC8vIGludG8gYWNjb3VudCwgaS5lLjogeHNpOnR5cGU9XCJ0e0FjdHVhbFR5cGV9XCJcbiAgICAgICAgZWxlbWVudFR5cGVOYW1lID0gbm9ybWFsaXplWHNpVHlwZU5hbWUoZWxlbWVudFR5cGVOYW1lLCBtb2RlbCk7XG5cbiAgICAgICAgZWxlbWVudFR5cGUgPSBtb2RlbC5nZXRUeXBlKGVsZW1lbnRUeXBlTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcbiAgICAgICAgICBlZmZlY3RpdmVUeXBlOiBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnRUeXBlKS5uYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNlYXJjaCBmb3IgcHJvcGVydGllcyBieSBuYW1lIGZpcnN0XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgdmFyIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCk7XG5cbiAgaWYgKHBrZykge1xuICAgIGVsZW1lbnRUeXBlTmFtZSA9IGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKTtcbiAgICBlbGVtZW50VHlwZSA9IG1vZGVsLmdldFR5cGUoZWxlbWVudFR5cGVOYW1lKTtcblxuICAgIC8vIHNlYXJjaCBmb3IgY29sbGVjdGlvbiBtZW1iZXJzIGxhdGVyXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuICFwLmlzVmlydHVhbCAmJiAhcC5pc1JlZmVyZW5jZSAmJiAhcC5pc0F0dHJpYnV0ZSAmJiBlbGVtZW50VHlwZS5oYXNUeXBlKHAudHlwZSk7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oe30sIHByb3BlcnR5LCB7XG4gICAgICAgIGVmZmVjdGl2ZVR5cGU6IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudFR5cGUpLm5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJzZSB1bmtub3duIGVsZW1lbnQgKG1heWJlIGV4dGVuc2lvbilcbiAgICBwcm9wZXJ0eSA9IGZpbmQoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgcC50eXBlID09PSAnRWxlbWVudCc7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBlcnJvcigndW5yZWNvZ25pemVkIGVsZW1lbnQgPCcgKyBuYW1lTnMubmFtZSArICc+Jyk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdFbGVtZW50RGVzY3JpcHRvclsnICsgZ2V0TW9kZGxlRGVzY3JpcHRvcih0aGlzLnR5cGUpLm5hbWUgKyAnXSc7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudmFsdWVIYW5kbGVyID0gZnVuY3Rpb24ocHJvcGVydHlEZXNjLCBlbGVtZW50KSB7XG4gIHJldHVybiBuZXcgVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUucmVmZXJlbmNlSGFuZGxlciA9IGZ1bmN0aW9uKHByb3BlcnR5RGVzYykge1xuICByZXR1cm4gbmV3IFJlZmVyZW5jZUhhbmRsZXIocHJvcGVydHlEZXNjLCB0aGlzLmNvbnRleHQpO1xufTtcblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbih0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnRWxlbWVudCcpIHtcbiAgICByZXR1cm4gbmV3IEdlbmVyaWNFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCB0eXBlLCB0aGlzLmNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRWxlbWVudEhhbmRsZXIodGhpcy5tb2RlbCwgdHlwZSwgdGhpcy5jb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGUgdGhlIGNoaWxkIGVsZW1lbnQgcGFyc2luZ1xuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IG5vZGUgdGhlIHhtbCBub2RlXG4gKi9cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVDaGlsZCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHByb3BlcnR5RGVzYywgdHlwZSwgZWxlbWVudCwgY2hpbGRIYW5kbGVyO1xuXG4gIHByb3BlcnR5RGVzYyA9IHRoaXMuZ2V0UHJvcGVydHlGb3JOb2RlKG5vZGUpO1xuICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuXG4gIHR5cGUgPSBwcm9wZXJ0eURlc2MuZWZmZWN0aXZlVHlwZSB8fCBwcm9wZXJ0eURlc2MudHlwZTtcblxuICBpZiAoaXNTaW1wbGVUeXBlKHR5cGUpKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG4gIH1cblxuICBpZiAocHJvcGVydHlEZXNjLmlzUmVmZXJlbmNlKSB7XG4gICAgY2hpbGRIYW5kbGVyID0gdGhpcy5yZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5RGVzYykuaGFuZGxlTm9kZShub2RlKTtcbiAgfSBlbHNlIHtcbiAgICBjaGlsZEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIodHlwZSkuaGFuZGxlTm9kZShub2RlKTtcbiAgfVxuXG4gIHZhciBuZXdFbGVtZW50ID0gY2hpbGRIYW5kbGVyLmVsZW1lbnQ7XG5cbiAgLy8gY2hpbGQgaGFuZGxlcyBtYXkgZGVjaWRlIHRvIHNraXAgZWxlbWVudHNcbiAgLy8gYnkgbm90IHJldHVybmluZyBhbnl0aGluZ1xuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICBpZiAocHJvcGVydHlEZXNjLmlzTWFueSkge1xuICAgICAgZWxlbWVudC5nZXQocHJvcGVydHlEZXNjLm5hbWUpLnB1c2gobmV3RWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5RGVzYy5uYW1lLCBuZXdFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlEZXNjLmlzUmVmZXJlbmNlKSB7XG4gICAgICBhc3NpZ24obmV3RWxlbWVudCwge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0LmFkZFJlZmVyZW5jZShuZXdFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXN0YWJsaXNoIGNoaWxkIC0+IHBhcmVudCByZWxhdGlvbnNoaXBcbiAgICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkSGFuZGxlcjtcbn07XG5cbi8qKlxuICogQW4gZWxlbWVudCBoYW5kbGVyIHRoYXQgcGVyZm9ybXMgc3BlY2lhbCB2YWxpZGF0aW9uXG4gKiB0byBlbnN1cmUgdGhlIG5vZGUgaXQgZ2V0cyBpbml0aWFsaXplZCB3aXRoIG1hdGNoZXNcbiAqIHRoZSBoYW5kbGVycyB0eXBlIChuYW1lc3BhY2Ugd2lzZSkuXG4gKlxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZU5hbWVcbiAqIEBwYXJhbSB7Q29udGV4dH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBSb290RWxlbWVudEhhbmRsZXIobW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KSB7XG4gIEVsZW1lbnRIYW5kbGVyLmNhbGwodGhpcywgbW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KTtcbn1cblxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKTtcblxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lLFxuICAgICAgbmFtZU5zID0gcGFyc2VOYW1lTlMobmFtZSksXG4gICAgICBtb2RlbCA9IHRoaXMubW9kZWwsXG4gICAgICB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgcGtnID0gbW9kZWwuZ2V0UGFja2FnZShuYW1lTnMucHJlZml4KSxcbiAgICAgIHR5cGVOYW1lID0gcGtnICYmIGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKSB8fCBuYW1lO1xuXG4gIC8vIHZlcmlmeSB0aGUgY29ycmVjdCBuYW1lc3BhY2UgaWYgd2UgcGFyc2VcbiAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGhhbmRsZXIgdHJlZVxuICAvL1xuICAvLyB0aGlzIGVuc3VyZXMgd2UgZG9uJ3QgbWlzdGFrZW5seSBpbXBvcnQgd3JvbmcgbmFtZXNwYWNlIGVsZW1lbnRzXG4gIGlmICghdHlwZS5oYXNUeXBlKHR5cGVOYW1lKSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGVsZW1lbnQgPCcgKyBub2RlLm9yaWdpbmFsTmFtZSArICc+Jyk7XG4gIH1cblxuICByZXR1cm4gRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlKTtcbn07XG5cblxuZnVuY3Rpb24gR2VuZXJpY0VsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWUsXG4gICAgICBucyA9IHBhcnNlTmFtZU5TKG5hbWUpLFxuICAgICAgcHJlZml4ID0gbnMucHJlZml4LFxuICAgICAgdXJpID0gbm9kZS5uc1twcmVmaXggKyAnJHVyaSddLFxuICAgICAgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcztcblxuICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdGVBbnkobmFtZSwgdXJpLCBhdHRyaWJ1dGVzKTtcbn07XG5cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlQ2hpbGQgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIGhhbmRsZXIgPSBuZXcgR2VuZXJpY0VsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsICdFbGVtZW50JywgdGhpcy5jb250ZXh0KS5oYW5kbGVOb2RlKG5vZGUpLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICB2YXIgbmV3RWxlbWVudCA9IGhhbmRsZXIuZWxlbWVudCxcbiAgICAgIGNoaWxkcmVuO1xuXG4gIGlmIChuZXdFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuID0gZWxlbWVudC4kY2hpbGRyZW4gfHwgW107XG4gICAgY2hpbGRyZW4ucHVzaChuZXdFbGVtZW50KTtcblxuICAgIC8vIGVzdGFibGlzaCBjaGlsZCAtPiBwYXJlbnQgcmVsYXRpb25zaGlwXG4gICAgbmV3RWxlbWVudC4kcGFyZW50ID0gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVyO1xufTtcblxuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuYm9keSkge1xuICAgIHRoaXMuZWxlbWVudC4kYm9keSA9IHRoaXMuYm9keTtcbiAgfVxufTtcblxuLyoqXG4gKiBBIHJlYWRlciBmb3IgYSBtZXRhLW1vZGVsXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7TW9kZWx9IG9wdGlvbnMubW9kZWwgdXNlZCB0byByZWFkIHhtbCBmaWxlc1xuICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25zLmxheCB3aGV0aGVyIHRvIG1ha2UgcGFyc2UgZXJyb3JzIHdhcm5pbmdzXG4gKi9cbmZ1bmN0aW9uIFJlYWRlcihvcHRpb25zKSB7XG5cbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBNb2RkbGUpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbW9kZWw6IG9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgYXNzaWduKHRoaXMsIHsgbGF4OiBmYWxzZSB9LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBUaGUgZnJvbVhNTCByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFyc2VSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge01vZGRsZUVsZW1lbnR9IHJvb3RFbGVtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PE9iamVjdD59IHJlZmVyZW5jZXNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGVsZW1lbnRzQnlJZCAtIGEgbWFwcGluZyBjb250YWluaW5nIGVhY2ggSUQgLT4gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIFhNTCBpbnRvIGEgbW9kZGxlIGRvY3VtZW50IHRyZWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHhtbFxuICogQHBhcmFtIHtFbGVtZW50SGFuZGxlcnxPYmplY3R9IG9wdGlvbnMgb3Igcm9vdEhhbmRsZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cblJlYWRlci5wcm90b3R5cGUuZnJvbVhNTCA9IGZ1bmN0aW9uKHhtbCwgb3B0aW9ucywgZG9uZSkge1xuXG4gIHZhciByb290SGFuZGxlciA9IG9wdGlvbnMucm9vdEhhbmRsZXI7XG5cbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBFbGVtZW50SGFuZGxlcikge1xuICAgIC8vIHJvb3QgaGFuZGxlciBwYXNzZWQgdmlhICh4bWwsIHsgcm9vdEhhbmRsZXI6IEVsZW1lbnRIYW5kbGVyIH0sIC4uLilcbiAgICByb290SGFuZGxlciA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHJvb3RIYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgJ3NvbWVTdHJpbmcnLCAuLi4pXG4gICAgICByb290SGFuZGxlciA9IHRoaXMuaGFuZGxlcihvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByb290SGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHJvb3RIYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgeyByb290SGFuZGxlcjogJ3NvbWVTdHJpbmcnIH0sIC4uLilcbiAgICAgIHJvb3RIYW5kbGVyID0gdGhpcy5oYW5kbGVyKHJvb3RIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgICAgbGF4ID0gdGhpcy5sYXg7XG5cbiAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dChhc3NpZ24oe30sIG9wdGlvbnMsIHsgcm9vdEhhbmRsZXI6IHJvb3RIYW5kbGVyIH0pKSxcbiAgICAgIHBhcnNlciA9IG5ldyBQYXJzZXIoeyBwcm94eTogdHJ1ZSB9KSxcbiAgICAgIHN0YWNrID0gY3JlYXRlU3RhY2soKTtcblxuICByb290SGFuZGxlci5jb250ZXh0ID0gY29udGV4dDtcblxuICAvLyBwdXNoIHJvb3QgaGFuZGxlclxuICBzdGFjay5wdXNoKHJvb3RIYW5kbGVyKTtcblxuXG4gIC8qKlxuICAgKiBIYW5kbGUgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGdldENvbnRleHRcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gbGF4XG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgaGFuZGxlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCBnZXRDb250ZXh0LCBsYXgpIHtcblxuICAgIHZhciBjdHggPSBnZXRDb250ZXh0KCk7XG5cbiAgICB2YXIgbGluZSA9IGN0eC5saW5lLFxuICAgICAgICBjb2x1bW4gPSBjdHguY29sdW1uLFxuICAgICAgICBkYXRhID0gY3R4LmRhdGE7XG5cbiAgICAvLyB3ZSByZWNlaXZlIHRoZSBmdWxsIGNvbnRleHQgZGF0YSBoZXJlLFxuICAgIC8vIGZvciBlbGVtZW50cyB0cmltIGRvd24gdGhlIGluZm9ybWF0aW9uXG4gICAgLy8gdG8gdGhlIHRhZyBuYW1lLCBvbmx5XG4gICAgaWYgKGRhdGEuY2hhckF0KDApID09PSAnPCcgJiYgZGF0YS5pbmRleE9mKCcgJykgIT09IC0xKSB7XG4gICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCBkYXRhLmluZGV4T2YoJyAnKSkgKyAnPic7XG4gICAgfVxuXG4gICAgdmFyIG1lc3NhZ2UgPVxuICAgICAgJ3VucGFyc2FibGUgY29udGVudCAnICsgKGRhdGEgPyBkYXRhICsgJyAnIDogJycpICsgJ2RldGVjdGVkXFxuXFx0JyArXG4gICAgICAgICdsaW5lOiAnICsgbGluZSArICdcXG5cXHQnICtcbiAgICAgICAgJ2NvbHVtbjogJyArIGNvbHVtbiArICdcXG5cXHQnICtcbiAgICAgICAgJ25lc3RlZCBlcnJvcjogJyArIGVyci5tZXNzYWdlO1xuXG4gICAgaWYgKGxheCkge1xuICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVXYXJuaW5nKGVyciwgZ2V0Q29udGV4dCkge1xuICAgIC8vIGp1c3QgbGlrZSBoYW5kbGluZyBlcnJvcnMgaW4gPGxheD10cnVlPiBtb2RlXG4gICAgcmV0dXJuIGhhbmRsZUVycm9yKGVyciwgZ2V0Q29udGV4dCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBjb2xsZWN0ZWQgcmVmZXJlbmNlcyBvbiBwYXJzZSBlbmQuXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlcygpIHtcblxuICAgIHZhciBlbGVtZW50c0J5SWQgPSBjb250ZXh0LmVsZW1lbnRzQnlJZDtcbiAgICB2YXIgcmVmZXJlbmNlcyA9IGNvbnRleHQucmVmZXJlbmNlcztcblxuICAgIHZhciBpLCByO1xuXG4gICAgZm9yIChpID0gMDsgKHIgPSByZWZlcmVuY2VzW2ldKTsgaSsrKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHIuZWxlbWVudDtcbiAgICAgIHZhciByZWZlcmVuY2UgPSBlbGVtZW50c0J5SWRbci5pZF07XG4gICAgICB2YXIgcHJvcGVydHkgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpLnByb3BlcnRpZXNCeU5hbWVbci5wcm9wZXJ0eV07XG5cbiAgICAgIGlmICghcmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnRleHQuYWRkV2FybmluZyh7XG4gICAgICAgICAgbWVzc2FnZTogJ3VucmVzb2x2ZWQgcmVmZXJlbmNlIDwnICsgci5pZCArICc+JyxcbiAgICAgICAgICBlbGVtZW50OiByLmVsZW1lbnQsXG4gICAgICAgICAgcHJvcGVydHk6IHIucHJvcGVydHksXG4gICAgICAgICAgdmFsdWU6IHIuaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eS5pc01hbnkpIHtcbiAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBlbGVtZW50LmdldChwcm9wZXJ0eS5uYW1lKSxcbiAgICAgICAgICAgIGlkeCA9IGNvbGxlY3Rpb24uaW5kZXhPZihyKTtcblxuICAgICAgICAvLyB3ZSByZXBsYWNlIGFuIGV4aXN0aW5nIHBsYWNlIGhvbGRlciAoaWR4ICE9IC0xKSBvclxuICAgICAgICAvLyBhcHBlbmQgdG8gdGhlIGNvbGxlY3Rpb24gaW5zdGVhZFxuICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgIGlkeCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdW5yZXNvbHZhYmxlIHJlZmVyZW5jZVxuICAgICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIG9yIHVwZGF0ZSByZWZlcmVuY2UgaW4gY29sbGVjdGlvblxuICAgICAgICAgIGNvbGxlY3Rpb25baWR4XSA9IHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXQocHJvcGVydHkubmFtZSwgcmVmZXJlbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICBzdGFjay5wb3AoKS5oYW5kbGVFbmQoKTtcbiAgfVxuXG4gIHZhciBQUkVBTUJMRV9TVEFSVF9QQVRURVJOID0gL148XFw/eG1sIC9pO1xuXG4gIHZhciBFTkNPRElOR19QQVRURVJOID0gLyBlbmNvZGluZz1cIihbXlwiXSspXCIvaTtcblxuICB2YXIgVVRGXzhfUEFUVEVSTiA9IC9edXRmLTgkL2k7XG5cbiAgZnVuY3Rpb24gaGFuZGxlUXVlc3Rpb24ocXVlc3Rpb24pIHtcblxuICAgIGlmICghUFJFQU1CTEVfU1RBUlRfUEFUVEVSTi50ZXN0KHF1ZXN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IEVOQ09ESU5HX1BBVFRFUk4uZXhlYyhxdWVzdGlvbik7XG4gICAgdmFyIGVuY29kaW5nID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG5cbiAgICBpZiAoIWVuY29kaW5nIHx8IFVURl84X1BBVFRFUk4udGVzdChlbmNvZGluZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ3Vuc3VwcG9ydGVkIGRvY3VtZW50IGVuY29kaW5nIDwnICsgZW5jb2RpbmcgKyAnPiwgJyArXG4gICAgICAgICdmYWxsaW5nIGJhY2sgdG8gVVRGLTgnXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpIHtcbiAgICB2YXIgaGFuZGxlciA9IHN0YWNrLnBlZWsoKTtcblxuICAgIHRyeSB7XG4gICAgICBzdGFjay5wdXNoKGhhbmRsZXIuaGFuZGxlTm9kZShub2RlKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG5cbiAgICAgIGlmIChoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIGxheCkpIHtcbiAgICAgICAgc3RhY2sucHVzaChuZXcgTm9vcEhhbmRsZXIoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ0RhdGEodGV4dCwgZ2V0Q29udGV4dCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIHN0YWNrLnBlZWsoKS5oYW5kbGVUZXh0KHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFuZGxlV2FybmluZyhlcnIsIGdldENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVRleHQodGV4dCwgZ2V0Q29udGV4dCkge1xuICAgIC8vIHN0cmlwIHdoaXRlc3BhY2Ugb25seSBub2RlcywgaS5lLiBiZWZvcmVcbiAgICAvLyA8IUNEQVRBWyAuLi4gXT4gc2VjdGlvbnMgYW5kIGluIGJldHdlZW4gdGFnc1xuICAgIHRleHQgPSB0ZXh0LnRyaW0oKTtcblxuICAgIGlmICghdGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGhhbmRsZUNEYXRhKHRleHQsIGdldENvbnRleHQpO1xuICB9XG5cbiAgdmFyIHVyaU1hcCA9IG1vZGVsLmdldFBhY2thZ2VzKCkucmVkdWNlKGZ1bmN0aW9uKHVyaU1hcCwgcCkge1xuICAgIHVyaU1hcFtwLnVyaV0gPSBwLnByZWZpeDtcblxuICAgIHJldHVybiB1cmlNYXA7XG4gIH0sIHtcbiAgICAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJzogJ3htbCcgLy8gYWRkIGRlZmF1bHQgeG1sIG5zXG4gIH0pO1xuICBwYXJzZXJcbiAgICAubnModXJpTWFwKVxuICAgIC5vbignb3BlblRhZycsIGZ1bmN0aW9uKG9iaiwgZGVjb2RlU3RyLCBzZWxmQ2xvc2luZywgZ2V0Q29udGV4dCkge1xuXG4gICAgICAvLyBncmFjZWZ1bGx5IGhhbmRsZSB1bnBhcnNhYmxlIGF0dHJpYnV0ZXMgKGF0dHJzPWZhbHNlKVxuICAgICAgdmFyIGF0dHJzID0gb2JqLmF0dHJzIHx8IHt9O1xuXG4gICAgICB2YXIgZGVjb2RlZEF0dHJzID0gT2JqZWN0LmtleXMoYXR0cnMpLnJlZHVjZShmdW5jdGlvbihkLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZGVjb2RlU3RyKGF0dHJzW2tleV0pO1xuXG4gICAgICAgIGRba2V5XSA9IHZhbHVlO1xuXG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSwge30pO1xuXG4gICAgICB2YXIgbm9kZSA9IHtcbiAgICAgICAgbmFtZTogb2JqLm5hbWUsXG4gICAgICAgIG9yaWdpbmFsTmFtZTogb2JqLm9yaWdpbmFsTmFtZSxcbiAgICAgICAgYXR0cmlidXRlczogZGVjb2RlZEF0dHJzLFxuICAgICAgICBuczogb2JqLm5zXG4gICAgICB9O1xuXG4gICAgICBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpO1xuICAgIH0pXG4gICAgLm9uKCdxdWVzdGlvbicsIGhhbmRsZVF1ZXN0aW9uKVxuICAgIC5vbignY2xvc2VUYWcnLCBoYW5kbGVDbG9zZSlcbiAgICAub24oJ2NkYXRhJywgaGFuZGxlQ0RhdGEpXG4gICAgLm9uKCd0ZXh0JywgZnVuY3Rpb24odGV4dCwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpIHtcbiAgICAgIGhhbmRsZVRleHQoZGVjb2RlRW50aXRpZXModGV4dCksIGdldENvbnRleHQpO1xuICAgIH0pXG4gICAgLm9uKCdlcnJvcicsIGhhbmRsZUVycm9yKVxuICAgIC5vbignd2FybicsIGhhbmRsZVdhcm5pbmcpO1xuXG4gIC8vIGFzeW5jIFhNTCBwYXJzaW5nIHRvIG1ha2Ugc3VyZSB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50XG4gIC8vIChub2RlIG9yIGJyb3dlcikgaXMga2VwdCByZXNwb25zaXZlIGFuZCB0aGF0IGNlcnRhaW4gb3B0aW1pemF0aW9uXG4gIC8vIHN0cmF0ZWdpZXMgY2FuIGtpY2sgaW4uXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgIHZhciBlcnI7XG5cbiAgICB0cnkge1xuICAgICAgcGFyc2VyLnBhcnNlKHhtbCk7XG5cbiAgICAgIHJlc29sdmVSZWZlcmVuY2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyID0gZTtcbiAgICB9XG5cbiAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290SGFuZGxlci5lbGVtZW50O1xuXG4gICAgaWYgKCFlcnIgJiYgIXJvb3RFbGVtZW50KSB7XG4gICAgICBlcnIgPSBlcnJvcignZmFpbGVkIHRvIHBhcnNlIGRvY3VtZW50IGFzIDwnICsgcm9vdEhhbmRsZXIudHlwZS4kZGVzY3JpcHRvci5uYW1lICsgJz4nKTtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3MgPSBjb250ZXh0Lndhcm5pbmdzO1xuICAgIHZhciByZWZlcmVuY2VzID0gY29udGV4dC5yZWZlcmVuY2VzO1xuICAgIHZhciBlbGVtZW50c0J5SWQgPSBjb250ZXh0LmVsZW1lbnRzQnlJZDtcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci53YXJuaW5ncyA9IHdhcm5pbmdzO1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgcm9vdEVsZW1lbnQ6IHJvb3RFbGVtZW50LFxuICAgICAgICBlbGVtZW50c0J5SWQ6IGVsZW1lbnRzQnlJZCxcbiAgICAgICAgcmVmZXJlbmNlczogcmVmZXJlbmNlcyxcbiAgICAgICAgd2FybmluZ3M6IHdhcm5pbmdzXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuUmVhZGVyLnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gbmV3IFJvb3RFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCBuYW1lKTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVTdGFjaygpIHtcbiAgdmFyIHN0YWNrID0gW107XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0YWNrLCAncGVlaycsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG52YXIgWE1MX1BSRUFNQkxFID0gJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/Plxcbic7XG5cbnZhciBFU0NBUEVfQVRUUl9DSEFSUyA9IC88fD58J3xcInwmfFxcblxccnxcXG4vZztcbnZhciBFU0NBUEVfQ0hBUlMgPSAvPHw+fCYvZztcblxuXG5mdW5jdGlvbiBOYW1lc3BhY2VzKHBhcmVudCkge1xuXG4gIHZhciBwcmVmaXhNYXAgPSB7fTtcbiAgdmFyIHVyaU1hcCA9IHt9O1xuICB2YXIgdXNlZCA9IHt9O1xuXG4gIHZhciB3ZWxsa25vd24gPSBbXTtcbiAgdmFyIGN1c3RvbSA9IFtdO1xuXG4gIC8vIEFQSVxuXG4gIHRoaXMuYnlVcmkgPSBmdW5jdGlvbih1cmkpIHtcbiAgICByZXR1cm4gdXJpTWFwW3VyaV0gfHwgKFxuICAgICAgcGFyZW50ICYmIHBhcmVudC5ieVVyaSh1cmkpXG4gICAgKTtcbiAgfTtcblxuICB0aGlzLmFkZCA9IGZ1bmN0aW9uKG5zLCBpc1dlbGxrbm93bikge1xuXG4gICAgdXJpTWFwW25zLnVyaV0gPSBucztcblxuICAgIGlmIChpc1dlbGxrbm93bikge1xuICAgICAgd2VsbGtub3duLnB1c2gobnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXN0b20ucHVzaChucyk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXBQcmVmaXgobnMucHJlZml4LCBucy51cmkpO1xuICB9O1xuXG4gIHRoaXMudXJpQnlQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICByZXR1cm4gcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXTtcbiAgfTtcblxuICB0aGlzLm1hcFByZWZpeCA9IGZ1bmN0aW9uKHByZWZpeCwgdXJpKSB7XG4gICAgcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXSA9IHVyaTtcbiAgfTtcblxuICB0aGlzLmdldE5TS2V5ID0gZnVuY3Rpb24obnMpIHtcbiAgICByZXR1cm4gKG5zLnByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IChucy51cmkgKyAnfCcgKyBucy5wcmVmaXgpIDogbnMudXJpO1xuICB9O1xuXG4gIHRoaXMubG9nVXNlZCA9IGZ1bmN0aW9uKG5zKSB7XG5cbiAgICB2YXIgdXJpID0gbnMudXJpO1xuICAgIHZhciBuc0tleSA9IHRoaXMuZ2V0TlNLZXkobnMpO1xuXG4gICAgdXNlZFtuc0tleV0gPSB0aGlzLmJ5VXJpKHVyaSk7XG5cbiAgICAvLyBJbmZvcm0gcGFyZW50IHJlY3Vyc2l2ZWx5IGFib3V0IHRoZSB1c2FnZSBvZiB0aGlzIE5TXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LmxvZ1VzZWQobnMpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmdldFVzZWQgPSBmdW5jdGlvbihucykge1xuXG4gICAgZnVuY3Rpb24gaXNVc2VkKG5zKSB7XG4gICAgICB2YXIgbnNLZXkgPSBzZWxmLmdldE5TS2V5KG5zKTtcblxuICAgICAgcmV0dXJuIHVzZWRbbnNLZXldO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBhbGxOcyA9IFtdLmNvbmNhdCh3ZWxsa25vd24sIGN1c3RvbSk7XG5cbiAgICByZXR1cm4gYWxsTnMuZmlsdGVyKGlzVXNlZCk7XG4gIH07XG5cbn1cblxuZnVuY3Rpb24gbG93ZXIoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5cbmZ1bmN0aW9uIG5hbWVUb0FsaWFzKG5hbWUsIHBrZykge1xuICBpZiAoaGFzTG93ZXJDYXNlQWxpYXMocGtnKSkge1xuICAgIHJldHVybiBsb3dlcihuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5zTmFtZShucykge1xuICBpZiAoaXNTdHJpbmcobnMpKSB7XG4gICAgcmV0dXJuIG5zO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAobnMucHJlZml4ID8gbnMucHJlZml4ICsgJzonIDogJycpICsgbnMubG9jYWxOYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5zQXR0cnMobmFtZXNwYWNlcykge1xuXG4gIHJldHVybiBtYXAobmFtZXNwYWNlcy5nZXRVc2VkKCksIGZ1bmN0aW9uKG5zKSB7XG4gICAgdmFyIG5hbWUgPSAneG1sbnMnICsgKG5zLnByZWZpeCA/ICc6JyArIG5zLnByZWZpeCA6ICcnKTtcbiAgICByZXR1cm4geyBuYW1lOiBuYW1lLCB2YWx1ZTogbnMudXJpIH07XG4gIH0pO1xuXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnROcyhucywgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWMpIHtcbiAgICByZXR1cm4gYXNzaWduKHsgbG9jYWxOYW1lOiBkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSB9LCBucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogbmFtZVRvQWxpYXMoZGVzY3JpcHRvci5ucy5sb2NhbE5hbWUsIGRlc2NyaXB0b3IuJHBrZykgfSwgbnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TnMobnMsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogZGVzY3JpcHRvci5ucy5sb2NhbE5hbWUgfSwgbnMpO1xufVxuXG5mdW5jdGlvbiBnZXRTZXJpYWxpemFibGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRkZXNjcmlwdG9yO1xuXG4gIHJldHVybiBmaWx0ZXIoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgdmFyIG5hbWUgPSBwLm5hbWU7XG5cbiAgICBpZiAocC5pc1ZpcnR1YWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIGRlZmF1bHRzXG4gICAgaWYgKCFlbGVtZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gZWxlbWVudFtuYW1lXTtcblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgZGVmYXVsdCBlcXVhbHNcbiAgICBpZiAodmFsdWUgPT09IHAuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgbnVsbCBwcm9wZXJ0aWVzXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAuaXNNYW55ID8gdmFsdWUubGVuZ3RoIDogdHJ1ZTtcbiAgfSk7XG59XG5cbnZhciBFU0NBUEVfQVRUUl9NQVAgPSB7XG4gICdcXG4nOiAnIzEwJyxcbiAgJ1xcblxccic6ICcjMTAnLFxuICAnXCInOiAnIzM0JyxcbiAgJ1xcJyc6ICcjMzknLFxuICAnPCc6ICcjNjAnLFxuICAnPic6ICcjNjInLFxuICAnJic6ICcjMzgnXG59O1xuXG52YXIgRVNDQVBFX01BUCA9IHtcbiAgJzwnOiAnbHQnLFxuICAnPic6ICdndCcsXG4gICcmJzogJ2FtcCdcbn07XG5cbmZ1bmN0aW9uIGVzY2FwZShzdHIsIGNoYXJQYXR0ZXJuLCByZXBsYWNlTWFwKSB7XG5cbiAgLy8gZW5zdXJlIHdlIGFyZSBoYW5kbGluZyBzdHJpbmdzIGhlcmVcbiAgc3RyID0gaXNTdHJpbmcoc3RyKSA/IHN0ciA6ICcnICsgc3RyO1xuXG4gIHJldHVybiBzdHIucmVwbGFjZShjaGFyUGF0dGVybiwgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiAnJicgKyByZXBsYWNlTWFwW3NdICsgJzsnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgYXR0cmlidXRlIHRvIG5vdCBjb250YWluIGFueSBiYWQgdmFsdWVzIChsaW5lIGJyZWFrcywgJ1wiJywgLi4uKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBlc2NhcGVcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUF0dHIoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQVRUUl9DSEFSUywgRVNDQVBFX0FUVFJfTUFQKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQm9keShzdHIpIHtcbiAgcmV0dXJuIGVzY2FwZShzdHIsIEVTQ0FQRV9DSEFSUywgRVNDQVBFX01BUCk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckF0dHJpYnV0ZXMocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkgeyByZXR1cm4gcC5pc0F0dHI7IH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250YWluZWQocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkgeyByZXR1cm4gIXAuaXNBdHRyOyB9KTtcbn1cblxuXG5mdW5jdGlvbiBSZWZlcmVuY2VTZXJpYWxpemVyKHRhZ05hbWUpIHtcbiAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTtcbn1cblxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG8gPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicgKyB0aGlzLmVsZW1lbnQuaWQgKyAnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKVxuICAgIC5hcHBlbmROZXdMaW5lKCk7XG59O1xuXG5mdW5jdGlvbiBCb2R5U2VyaWFsaXplcigpIHt9XG5cbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVWYWx1ZSA9XG5Cb2R5U2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG8gPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgd3JpdGVyLmFwcGVuZChcbiAgICB0aGlzLmVzY2FwZVxuICAgICAgPyBlc2NhcGVCb2R5KHRoaXMudmFsdWUpXG4gICAgICA6IHRoaXMudmFsdWVcbiAgKTtcbn07XG5cbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICBpZiAocHJvcC50eXBlID09PSAnU3RyaW5nJyAmJiB2YWx1ZS5zZWFyY2goRVNDQVBFX0NIQVJTKSAhPT0gLTEpIHtcbiAgICB0aGlzLmVzY2FwZSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIFZhbHVlU2VyaWFsaXplcih0YWdOYW1lKSB7XG4gIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7XG59XG5cbmluaGVyaXRzKFZhbHVlU2VyaWFsaXplciwgQm9keVNlcmlhbGl6ZXIpO1xuXG5WYWx1ZVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24od3JpdGVyKSB7XG5cbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicpO1xuXG4gIHRoaXMuc2VyaWFsaXplVmFsdWUod3JpdGVyKTtcblxuICB3cml0ZXJcbiAgICAuYXBwZW5kKCc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPicpXG4gICAgLmFwcGVuZE5ld0xpbmUoKTtcbn07XG5cbmZ1bmN0aW9uIEVsZW1lbnRTZXJpYWxpemVyKHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIHRoaXMuYm9keSA9IFtdO1xuICB0aGlzLmF0dHJzID0gW107XG5cbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMucHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yO1xufVxuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgdmFyIGVsZW1lbnREZXNjcmlwdG9yID0gZWxlbWVudC4kZGVzY3JpcHRvcixcbiAgICAgIHByb3BlcnR5RGVzY3JpcHRvciA9IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yO1xuXG4gIHZhciBvdGhlckF0dHJzLFxuICAgICAgcHJvcGVydGllcztcblxuICB2YXIgaXNHZW5lcmljID0gZWxlbWVudERlc2NyaXB0b3IuaXNHZW5lcmljO1xuXG4gIGlmIChpc0dlbmVyaWMpIHtcbiAgICBvdGhlckF0dHJzID0gdGhpcy5wYXJzZUdlbmVyaWMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgb3RoZXJBdHRycyA9IHRoaXMucGFyc2VOc0F0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH1cblxuICBpZiAocHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5ucyA9IHRoaXMubnNQcm9wZXJ0eVRhZ05hbWUocHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5zID0gdGhpcy5uc1RhZ05hbWUoZWxlbWVudERlc2NyaXB0b3IpO1xuICB9XG5cbiAgLy8gY29tcHV0ZSB0YWcgbmFtZVxuICB0aGlzLnRhZ05hbWUgPSB0aGlzLmFkZFRhZ05hbWUodGhpcy5ucyk7XG5cbiAgaWYgKCFpc0dlbmVyaWMpIHtcbiAgICBwcm9wZXJ0aWVzID0gZ2V0U2VyaWFsaXphYmxlUHJvcGVydGllcyhlbGVtZW50KTtcblxuICAgIHRoaXMucGFyc2VBdHRyaWJ1dGVzKGZpbHRlckF0dHJpYnV0ZXMocHJvcGVydGllcykpO1xuICAgIHRoaXMucGFyc2VDb250YWlubWVudHMoZmlsdGVyQ29udGFpbmVkKHByb3BlcnRpZXMpKTtcbiAgfVxuXG4gIHRoaXMucGFyc2VHZW5lcmljQXR0cmlidXRlcyhlbGVtZW50LCBvdGhlckF0dHJzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc1RhZ05hbWUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldEVsZW1lbnROcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcik7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubnNQcm9wZXJ0eVRhZ05hbWUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldFByb3BlcnR5TnMoZWZmZWN0aXZlTnMsIGRlc2NyaXB0b3IpO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmlzTG9jYWxOcyA9IGZ1bmN0aW9uKG5zKSB7XG4gIHJldHVybiBucy51cmkgPT09IHRoaXMubnMudXJpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGFjdHVhbCBucyBhdHRyaWJ1dGUgbmFtZSBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2VsZW1lbnQuaW5oZXJpdGVkPWZhbHNlXVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gbnNOYW1lXG4gKi9cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc0F0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIG5zO1xuXG4gIGlmIChpc1N0cmluZyhlbGVtZW50KSkge1xuICAgIG5zID0gcGFyc2VOYW1lTlMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgbnMgPSBlbGVtZW50Lm5zO1xuICB9XG5cbiAgLy8gcmV0dXJuIGp1c3QgbG9jYWwgbmFtZSBmb3IgaW5oZXJpdGVkIGF0dHJpYnV0ZXNcbiAgaWYgKGVsZW1lbnQuaW5oZXJpdGVkKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfTtcbiAgfVxuXG4gIC8vIHBhcnNlICsgbG9nIGVmZmVjdGl2ZSBuc1xuICB2YXIgZWZmZWN0aXZlTnMgPSB0aGlzLmxvZ05hbWVzcGFjZVVzZWQobnMpO1xuXG4gIC8vIExPRyBBQ1RVQUwgbmFtZXNwYWNlIHVzZVxuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGVmZmVjdGl2ZU5zKTtcblxuICAvLyBzdHJpcCBwcmVmaXggaWYgc2FtZSBuYW1lc3BhY2UgbGlrZSBwYXJlbnRcbiAgaWYgKHRoaXMuaXNMb2NhbE5zKGVmZmVjdGl2ZU5zKSkge1xuICAgIHJldHVybiB7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH0sIGVmZmVjdGl2ZU5zKTtcbiAgfVxufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlR2VuZXJpYyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBib2R5ID0gdGhpcy5ib2R5O1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gW107XG5cbiAgZm9yRWFjaChlbGVtZW50LCBmdW5jdGlvbih2YWwsIGtleSkge1xuXG4gICAgdmFyIG5vbk5zQXR0cjtcblxuICAgIGlmIChrZXkgPT09ICckYm9keScpIHtcbiAgICAgIGJvZHkucHVzaChuZXcgQm9keVNlcmlhbGl6ZXIoKS5idWlsZCh7IHR5cGU6ICdTdHJpbmcnIH0sIHZhbCkpO1xuICAgIH0gZWxzZVxuICAgIGlmIChrZXkgPT09ICckY2hpbGRyZW4nKSB7XG4gICAgICBmb3JFYWNoKHZhbCwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgYm9keS5wdXNoKG5ldyBFbGVtZW50U2VyaWFsaXplcihzZWxmKS5idWlsZChjaGlsZCkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlXG4gICAgaWYgKGtleS5pbmRleE9mKCckJykgIT09IDApIHtcbiAgICAgIG5vbk5zQXR0ciA9IHNlbGYucGFyc2VOc0F0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbCk7XG5cbiAgICAgIGlmIChub25Oc0F0dHIpIHtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBtb2RlbCA9IGVsZW1lbnQuJG1vZGVsO1xuXG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcblxuICB2YXIgbnM7XG5cbiAgLy8gcGFyc2UgeG1sbnM6Zm9vPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAobmFtZU5zLnByZWZpeCA9PT0gJ3htbG5zJykge1xuICAgIG5zID0geyBwcmVmaXg6IG5hbWVOcy5sb2NhbE5hbWUsIHVyaTogdmFsdWUgfTtcbiAgfVxuXG4gIC8vIHBhcnNlIHhtbG5zPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAoIW5hbWVOcy5wcmVmaXggJiYgbmFtZU5zLmxvY2FsTmFtZSA9PT0gJ3htbG5zJykge1xuICAgIG5zID0geyB1cmk6IHZhbHVlIH07XG4gIH1cblxuICBpZiAoIW5zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9O1xuICB9XG5cbiAgaWYgKG1vZGVsICYmIG1vZGVsLmdldFBhY2thZ2UodmFsdWUpKSB7XG4gICAgLy8gcmVnaXN0ZXIgd2VsbCBrbm93biBuYW1lc3BhY2VcbiAgICB0aGlzLmxvZ05hbWVzcGFjZShucywgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbG9nIGN1c3RvbSBuYW1lc3BhY2UgZGlyZWN0bHkgYXMgdXNlZFxuICAgIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucywgdHJ1ZSk7XG5cbiAgICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGFjdHVhbE5zKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFBhcnNlIG5hbWVzcGFjZXMgYW5kIHJldHVybiBhIGxpc3Qgb2YgbGVmdCBvdmVyIGdlbmVyaWMgYXR0cmlidXRlc1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn1cbiAqL1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBnZW5lcmljQXR0cnMgPSBlbGVtZW50LiRhdHRycztcblxuICB2YXIgYXR0cmlidXRlcyA9IFtdO1xuXG4gIC8vIHBhcnNlIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGZpcnN0XG4gIC8vIGFuZCBsb2cgdGhlbS4gcHVzaCBub24gbmFtZXNwYWNlIGF0dHJpYnV0ZXMgdG8gYSBsaXN0XG4gIC8vIGFuZCBwcm9jZXNzIHRoZW0gbGF0ZXJcbiAgZm9yRWFjaChnZW5lcmljQXR0cnMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG5cbiAgICB2YXIgbm9uTnNBdHRyID0gc2VsZi5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcblxuICAgIGlmIChub25Oc0F0dHIpIHtcbiAgICAgIGF0dHJpYnV0ZXMucHVzaChub25Oc0F0dHIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VHZW5lcmljQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChhdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHhzaTp0eXBlIGF0dHJpYnV0ZVxuICAgIC8vIGl0IGlzIHNldCBtYW51YWxseSBiYXNlZCBvbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHR5cGVcbiAgICBpZiAoYXR0ci5uYW1lID09PSBYU0lfVFlQRSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzZWxmLmFkZEF0dHJpYnV0ZShzZWxmLm5zQXR0cmlidXRlTmFtZShhdHRyLm5hbWUpLCBhdHRyLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdtaXNzaW5nIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBmb3IgJyxcbiAgICAgICAgYXR0ci5uYW1lLCAnPScsIGF0dHIudmFsdWUsICdvbicsIGVsZW1lbnQsXG4gICAgICAgIGUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VDb250YWlubWVudHMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYm9keSA9IHRoaXMuYm9keSxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKSxcbiAgICAgICAgaXNSZWZlcmVuY2UgPSBwLmlzUmVmZXJlbmNlLFxuICAgICAgICBpc01hbnkgPSBwLmlzTWFueTtcblxuICAgIGlmICghaXNNYW55KSB7XG4gICAgICB2YWx1ZSA9IFsgdmFsdWUgXTtcbiAgICB9XG5cbiAgICBpZiAocC5pc0JvZHkpIHtcbiAgICAgIGJvZHkucHVzaChuZXcgQm9keVNlcmlhbGl6ZXIoKS5idWlsZChwLCB2YWx1ZVswXSkpO1xuICAgIH0gZWxzZVxuICAgIGlmIChpc1NpbXBsZVR5cGUocC50eXBlKSkge1xuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFZhbHVlU2VyaWFsaXplcihzZWxmLmFkZFRhZ05hbWUoc2VsZi5uc1Byb3BlcnR5VGFnTmFtZShwKSkpLmJ1aWxkKHAsIHYpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZVxuICAgIGlmIChpc1JlZmVyZW5jZSkge1xuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFJlZmVyZW5jZVNlcmlhbGl6ZXIoc2VsZi5hZGRUYWdOYW1lKHNlbGYubnNQcm9wZXJ0eVRhZ05hbWUocCkpKS5idWlsZCh2KSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWxsb3cgc2VyaWFsaXphdGlvbiB2aWEgdHlwZVxuICAgICAgLy8gcmF0aGVyIHRoYW4gZWxlbWVudCBuYW1lXG4gICAgICB2YXIgYXNUeXBlID0gc2VyaWFsaXplQXNUeXBlKHApLFxuICAgICAgICAgIGFzUHJvcGVydHkgPSBzZXJpYWxpemVBc1Byb3BlcnR5KHApO1xuXG4gICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgIHZhciBzZXJpYWxpemVyO1xuXG4gICAgICAgIGlmIChhc1R5cGUpIHtcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IFR5cGVTZXJpYWxpemVyKHNlbGYsIHApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgaWYgKGFzUHJvcGVydHkpIHtcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IEVsZW1lbnRTZXJpYWxpemVyKHNlbGYsIHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZik7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5LnB1c2goc2VyaWFsaXplci5idWlsZCh2KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmdldE5hbWVzcGFjZXMgPSBmdW5jdGlvbihsb2NhbCkge1xuXG4gIHZhciBuYW1lc3BhY2VzID0gdGhpcy5uYW1lc3BhY2VzLFxuICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICBwYXJlbnROYW1lc3BhY2VzO1xuXG4gIGlmICghbmFtZXNwYWNlcykge1xuICAgIHBhcmVudE5hbWVzcGFjZXMgPSBwYXJlbnQgJiYgcGFyZW50LmdldE5hbWVzcGFjZXMoKTtcblxuICAgIGlmIChsb2NhbCB8fCAhcGFyZW50TmFtZXNwYWNlcykge1xuICAgICAgdGhpcy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcyA9IG5ldyBOYW1lc3BhY2VzKHBhcmVudE5hbWVzcGFjZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lc3BhY2VzID0gcGFyZW50TmFtZXNwYWNlcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZXNwYWNlcztcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5sb2dOYW1lc3BhY2UgPSBmdW5jdGlvbihucywgd2VsbGtub3duLCBsb2NhbCkge1xuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMuZ2V0TmFtZXNwYWNlcyhsb2NhbCk7XG5cbiAgdmFyIG5zVXJpID0gbnMudXJpLFxuICAgICAgbnNQcmVmaXggPSBucy5wcmVmaXg7XG5cbiAgdmFyIGV4aXN0aW5nID0gbmFtZXNwYWNlcy5ieVVyaShuc1VyaSk7XG5cbiAgaWYgKG5zUHJlZml4ICE9PSAneG1sJyAmJiAoIWV4aXN0aW5nIHx8IGxvY2FsKSkge1xuICAgIG5hbWVzcGFjZXMuYWRkKG5zLCB3ZWxsa25vd24pO1xuICB9XG5cbiAgbmFtZXNwYWNlcy5tYXBQcmVmaXgobnNQcmVmaXgsIG5zVXJpKTtcblxuICByZXR1cm4gbnM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlVXNlZCA9IGZ1bmN0aW9uKG5zLCBsb2NhbCkge1xuICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCxcbiAgICAgIG1vZGVsID0gZWxlbWVudC4kbW9kZWwsXG4gICAgICBuYW1lc3BhY2VzID0gdGhpcy5nZXROYW1lc3BhY2VzKGxvY2FsKTtcblxuICAvLyBucyBtYXkgYmVcbiAgLy9cbiAgLy8gICAqIHByZWZpeCBvbmx5XG4gIC8vICAgKiBwcmVmaXg6dXJpXG4gIC8vICAgKiBsb2NhbE5hbWUgb25seVxuXG4gIHZhciBwcmVmaXggPSBucy5wcmVmaXgsXG4gICAgICB1cmkgPSBucy51cmksXG4gICAgICBuZXdQcmVmaXgsIGlkeCxcbiAgICAgIHdlbGxrbm93blVyaTtcblxuICAvLyBoYW5kbGUgYW5vbnltb3VzIG5hbWVzcGFjZXMgKGVsZW1lbnRGb3JtPXVucXVhbGlmaWVkKSwgY2YuICMyM1xuICBpZiAoIXByZWZpeCAmJiAhdXJpKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfTtcbiAgfVxuXG4gIHdlbGxrbm93blVyaSA9IERFRkFVTFRfTlNfTUFQW3ByZWZpeF0gfHwgbW9kZWwgJiYgKG1vZGVsLmdldFBhY2thZ2UocHJlZml4KSB8fCB7fSkudXJpO1xuXG4gIHVyaSA9IHVyaSB8fCB3ZWxsa25vd25VcmkgfHwgbmFtZXNwYWNlcy51cmlCeVByZWZpeChwcmVmaXgpO1xuXG4gIGlmICghdXJpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBuYW1lc3BhY2UgdXJpIGdpdmVuIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPicpO1xuICB9XG5cbiAgbnMgPSBuYW1lc3BhY2VzLmJ5VXJpKHVyaSk7XG5cbiAgaWYgKCFucykge1xuICAgIG5ld1ByZWZpeCA9IHByZWZpeDtcbiAgICBpZHggPSAxO1xuXG4gICAgLy8gZmluZCBhIHByZWZpeCB0aGF0IGlzIG5vdCBtYXBwZWQgeWV0XG4gICAgd2hpbGUgKG5hbWVzcGFjZXMudXJpQnlQcmVmaXgobmV3UHJlZml4KSkge1xuICAgICAgbmV3UHJlZml4ID0gcHJlZml4ICsgJ18nICsgaWR4Kys7XG4gICAgfVxuXG4gICAgbnMgPSB0aGlzLmxvZ05hbWVzcGFjZSh7IHByZWZpeDogbmV3UHJlZml4LCB1cmk6IHVyaSB9LCB3ZWxsa25vd25VcmkgPT09IHVyaSk7XG4gIH1cblxuICBpZiAocHJlZml4KSB7XG4gICAgbmFtZXNwYWNlcy5tYXBQcmVmaXgocHJlZml4LCB1cmkpO1xuICB9XG5cbiAgcmV0dXJuIG5zO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlQXR0cmlidXRlcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHApIHtcblxuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0KHAubmFtZSk7XG5cbiAgICBpZiAocC5pc1JlZmVyZW5jZSkge1xuXG4gICAgICBpZiAoIXAuaXNNYW55KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuaWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2godi5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJRFJFRlMgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHJlZmVyZW5jZXMuXG4gICAgICAgIHZhbHVlID0gdmFsdWVzLmpvaW4oJyAnKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHNlbGYuYWRkQXR0cmlidXRlKHNlbGYubnNBdHRyaWJ1dGVOYW1lKHApLCB2YWx1ZSk7XG4gIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZFRhZ05hbWUgPSBmdW5jdGlvbihuc1RhZ05hbWUpIHtcbiAgdmFyIGFjdHVhbE5zID0gdGhpcy5sb2dOYW1lc3BhY2VVc2VkKG5zVGFnTmFtZSk7XG5cbiAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChhY3R1YWxOcyk7XG5cbiAgcmV0dXJuIG5zTmFtZShuc1RhZ05hbWUpO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBhdHRycyA9IHRoaXMuYXR0cnM7XG5cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZXNjYXBlQXR0cih2YWx1ZSk7XG4gIH1cblxuICBhdHRycy5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgdmFyIGF0dHJzID0gdGhpcy5hdHRycyxcbiAgICAgIG5hbWVzcGFjZXMgPSB0aGlzLm5hbWVzcGFjZXM7XG5cbiAgaWYgKG5hbWVzcGFjZXMpIHtcbiAgICBhdHRycyA9IGdldE5zQXR0cnMobmFtZXNwYWNlcykuY29uY2F0KGF0dHJzKTtcbiAgfVxuXG4gIGZvckVhY2goYXR0cnMsIGZ1bmN0aW9uKGEpIHtcbiAgICB3cml0ZXJcbiAgICAgIC5hcHBlbmQoJyAnKVxuICAgICAgLmFwcGVuZChuc05hbWUoYS5uYW1lKSkuYXBwZW5kKCc9XCInKS5hcHBlbmQoYS52YWx1ZSkuYXBwZW5kKCdcIicpO1xuICB9KTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uKHdyaXRlcikge1xuICB2YXIgZmlyc3RCb2R5ID0gdGhpcy5ib2R5WzBdLFxuICAgICAgaW5kZW50ID0gZmlyc3RCb2R5ICYmIGZpcnN0Qm9keS5jb25zdHJ1Y3RvciAhPT0gQm9keVNlcmlhbGl6ZXI7XG5cbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUpO1xuXG4gIHRoaXMuc2VyaWFsaXplQXR0cmlidXRlcyh3cml0ZXIpO1xuXG4gIHdyaXRlci5hcHBlbmQoZmlyc3RCb2R5ID8gJz4nIDogJyAvPicpO1xuXG4gIGlmIChmaXJzdEJvZHkpIHtcblxuICAgIGlmIChpbmRlbnQpIHtcbiAgICAgIHdyaXRlclxuICAgICAgICAuYXBwZW5kTmV3TGluZSgpXG4gICAgICAgIC5pbmRlbnQoKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHRoaXMuYm9keSwgZnVuY3Rpb24oYikge1xuICAgICAgYi5zZXJpYWxpemVUbyh3cml0ZXIpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluZGVudCkge1xuICAgICAgd3JpdGVyXG4gICAgICAgIC51bmluZGVudCgpXG4gICAgICAgIC5hcHBlbmRJbmRlbnQoKTtcbiAgICB9XG5cbiAgICB3cml0ZXIuYXBwZW5kKCc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPicpO1xuICB9XG5cbiAgd3JpdGVyLmFwcGVuZE5ld0xpbmUoKTtcbn07XG5cbi8qKlxuICogQSBzZXJpYWxpemVyIGZvciB0eXBlcyB0aGF0IGhhbmRsZXMgc2VyaWFsaXphdGlvbiBvZiBkYXRhIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIFR5cGVTZXJpYWxpemVyKHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIEVsZW1lbnRTZXJpYWxpemVyLmNhbGwodGhpcywgcGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IpO1xufVxuXG5pbmhlcml0cyhUeXBlU2VyaWFsaXplciwgRWxlbWVudFNlcmlhbGl6ZXIpO1xuXG5UeXBlU2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgLy8gZXh0cmFjdGVkIGF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZXMgPSBFbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMuY2FsbCh0aGlzLCBlbGVtZW50KTtcblxuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3I7XG5cbiAgLy8gb25seSBzZXJpYWxpemUgeHNpOnR5cGUgaWYgbmVjZXNzYXJ5XG4gIGlmIChkZXNjcmlwdG9yLm5hbWUgPT09IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yLnR5cGUpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfVxuXG4gIHZhciB0eXBlTnMgPSB0aGlzLnR5cGVOcyA9IHRoaXMubnNUYWdOYW1lKGRlc2NyaXB0b3IpO1xuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKHRoaXMudHlwZU5zKTtcblxuICAvLyBhZGQgeHNpOnR5cGUgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgZWxlbWVudHNcbiAgLy8gYWN0dWFsIHR5cGVcblxuICB2YXIgcGtnID0gZWxlbWVudC4kbW9kZWwuZ2V0UGFja2FnZSh0eXBlTnMudXJpKSxcbiAgICAgIHR5cGVQcmVmaXggPSAocGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXgpIHx8ICcnO1xuXG4gIHRoaXMuYWRkQXR0cmlidXRlKFxuICAgIHRoaXMubnNBdHRyaWJ1dGVOYW1lKFhTSV9UWVBFKSxcbiAgICAodHlwZU5zLnByZWZpeCA/IHR5cGVOcy5wcmVmaXggKyAnOicgOiAnJykgKyB0eXBlUHJlZml4ICsgZGVzY3JpcHRvci5ucy5sb2NhbE5hbWVcbiAgKTtcblxuICByZXR1cm4gYXR0cmlidXRlcztcbn07XG5cblR5cGVTZXJpYWxpemVyLnByb3RvdHlwZS5pc0xvY2FsTnMgPSBmdW5jdGlvbihucykge1xuICByZXR1cm4gbnMudXJpID09PSAodGhpcy50eXBlTnMgfHwgdGhpcy5ucykudXJpO1xufTtcblxuZnVuY3Rpb24gU2F2aW5nV3JpdGVyKCkge1xuICB0aGlzLnZhbHVlID0gJyc7XG5cbiAgdGhpcy53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHRoaXMudmFsdWUgKz0gc3RyO1xuICB9O1xufVxuXG5mdW5jdGlvbiBGb3JtYXRpbmdXcml0ZXIob3V0LCBmb3JtYXQpIHtcblxuICB2YXIgaW5kZW50ID0gWycnXTtcblxuICB0aGlzLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIG91dC53cml0ZShzdHIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy5hcHBlbmROZXdMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgb3V0LndyaXRlKCdcXG4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB0aGlzLmFwcGVuZEluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIG91dC53cml0ZShpbmRlbnQuam9pbignICAnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy5pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgICBpbmRlbnQucHVzaCgnJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy51bmluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGluZGVudC5wb3AoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHdyaXRlciBmb3IgbWV0YS1tb2RlbCBiYWNrZWQgZG9jdW1lbnQgdHJlZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvdXRwdXQgb3B0aW9ucyB0byBwYXNzIGludG8gdGhlIHdyaXRlclxuICovXG5mdW5jdGlvbiBXcml0ZXIob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBhc3NpZ24oeyBmb3JtYXQ6IGZhbHNlLCBwcmVhbWJsZTogdHJ1ZSB9LCBvcHRpb25zIHx8IHt9KTtcblxuICBmdW5jdGlvbiB0b1hNTCh0cmVlLCB3cml0ZXIpIHtcbiAgICB2YXIgaW50ZXJuYWxXcml0ZXIgPSB3cml0ZXIgfHwgbmV3IFNhdmluZ1dyaXRlcigpO1xuICAgIHZhciBmb3JtYXRpbmdXcml0ZXIgPSBuZXcgRm9ybWF0aW5nV3JpdGVyKGludGVybmFsV3JpdGVyLCBvcHRpb25zLmZvcm1hdCk7XG5cbiAgICBpZiAob3B0aW9ucy5wcmVhbWJsZSkge1xuICAgICAgZm9ybWF0aW5nV3JpdGVyLmFwcGVuZChYTUxfUFJFQU1CTEUpO1xuICAgIH1cblxuICAgIG5ldyBFbGVtZW50U2VyaWFsaXplcigpLmJ1aWxkKHRyZWUpLnNlcmlhbGl6ZVRvKGZvcm1hdGluZ1dyaXRlcik7XG5cbiAgICBpZiAoIXdyaXRlcikge1xuICAgICAgcmV0dXJuIGludGVybmFsV3JpdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9YTUw6IHRvWE1MXG4gIH07XG59XG5cbmV4cG9ydCB7IFJlYWRlciwgV3JpdGVyIH07XG4iLCJpbXBvcnQgeyBmb3JFYWNoLCBiaW5kLCBwaWNrLCBhc3NpZ24sIGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBNb2RkbGUgYmFzZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBCYXNlKCkgeyB9XG5cbkJhc2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuJG1vZGVsLnByb3BlcnRpZXMuZ2V0KHRoaXMsIG5hbWUpO1xufTtcblxuQmFzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy4kbW9kZWwucHJvcGVydGllcy5zZXQodGhpcywgbmFtZSwgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBBIG1vZGVsIGVsZW1lbnQgZmFjdG9yeS5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZX0gbW9kZWxcbiAqIEBwYXJhbSB7UHJvcGVydGllc30gcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBGYWN0b3J5KG1vZGVsLCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbn1cblxuXG5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVUeXBlID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG5cbiAgdmFyIHByb3BzID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlLnByb3RvdHlwZSk7XG5cbiAgLy8gaW5pdGlhbGl6ZSBkZWZhdWx0IHZhbHVlc1xuICBmb3JFYWNoKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgIGlmICghcC5pc01hbnkgJiYgcC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3RvdHlwZVtwLm5hbWVdID0gcC5kZWZhdWx0O1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvcHMuZGVmaW5lTW9kZWwocHJvdG90eXBlLCBtb2RlbCk7XG4gIHByb3BzLmRlZmluZURlc2NyaXB0b3IocHJvdG90eXBlLCBkZXNjcmlwdG9yKTtcblxuICB2YXIgbmFtZSA9IGRlc2NyaXB0b3IubnMubmFtZTtcblxuICAvKipcbiAgICogVGhlIG5ldyB0eXBlIGNvbnN0cnVjdG9yXG4gICAqL1xuICBmdW5jdGlvbiBNb2RkbGVFbGVtZW50KGF0dHJzKSB7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckdHlwZScsIHsgdmFsdWU6IG5hbWUsIGVudW1lcmFibGU6IHRydWUgfSk7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckYXR0cnMnLCB7IHZhbHVlOiB7fSB9KTtcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyRwYXJlbnQnLCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXG4gICAgZm9yRWFjaChhdHRycywgYmluZChmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgdGhpcy5zZXQoa2V5LCB2YWwpO1xuICAgIH0sIHRoaXMpKTtcbiAgfVxuXG4gIE1vZGRsZUVsZW1lbnQucHJvdG90eXBlID0gcHJvdG90eXBlO1xuXG4gIE1vZGRsZUVsZW1lbnQuaGFzVHlwZSA9IHByb3RvdHlwZS4kaW5zdGFuY2VPZiA9IHRoaXMubW9kZWwuaGFzVHlwZTtcblxuICAvLyBzdGF0aWMgbGlua3NcbiAgcHJvcHMuZGVmaW5lTW9kZWwoTW9kZGxlRWxlbWVudCwgbW9kZWwpO1xuICBwcm9wcy5kZWZpbmVEZXNjcmlwdG9yKE1vZGRsZUVsZW1lbnQsIGRlc2NyaXB0b3IpO1xuXG4gIHJldHVybiBNb2RkbGVFbGVtZW50O1xufTtcblxuLyoqXG4gKiBCdWlsdC1pbiBtb2RkbGUgdHlwZXNcbiAqL1xudmFyIEJVSUxUSU5TID0ge1xuICBTdHJpbmc6IHRydWUsXG4gIEJvb2xlYW46IHRydWUsXG4gIEludGVnZXI6IHRydWUsXG4gIFJlYWw6IHRydWUsXG4gIEVsZW1lbnQ6IHRydWVcbn07XG5cbi8qKlxuICogQ29udmVydGVycyBmb3IgYnVpbHQgaW4gdHlwZXMgZnJvbSBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4gKi9cbnZhciBUWVBFX0NPTlZFUlRFUlMgPSB7XG4gIFN0cmluZzogZnVuY3Rpb24ocykgeyByZXR1cm4gczsgfSxcbiAgQm9vbGVhbjogZnVuY3Rpb24ocykgeyByZXR1cm4gcyA9PT0gJ3RydWUnOyB9LFxuICBJbnRlZ2VyOiBmdW5jdGlvbihzKSB7IHJldHVybiBwYXJzZUludChzLCAxMCk7IH0sXG4gIFJlYWw6IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHBhcnNlRmxvYXQocywgMTApOyB9XG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSB0eXBlIHRvIGl0cyByZWFsIHJlcHJlc2VudGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVR5cGUodHlwZSwgdmFsdWUpIHtcblxuICB2YXIgY29udmVydGVyID0gVFlQRV9DT05WRVJURVJTW3R5cGVdO1xuXG4gIGlmIChjb252ZXJ0ZXIpIHtcbiAgICByZXR1cm4gY29udmVydGVyKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBidWlsdC1pblxuICovXG5mdW5jdGlvbiBpc0J1aWx0SW4odHlwZSkge1xuICByZXR1cm4gISFCVUlMVElOU1t0eXBlXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBzaW1wbGVcbiAqL1xuZnVuY3Rpb24gaXNTaW1wbGUodHlwZSkge1xuICByZXR1cm4gISFUWVBFX0NPTlZFUlRFUlNbdHlwZV07XG59XG5cbi8qKlxuICogUGFyc2VzIGEgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgZm9ybSAobnM6KWxvY2FsTmFtZSB0byBhbiBvYmplY3QsXG4gKiBnaXZlbiBhIGRlZmF1bHQgcHJlZml4IHRvIGFzc3VtZSBpbiBjYXNlIG5vIGV4cGxpY2l0IG5hbWVzcGFjZSBpcyBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IFtkZWZhdWx0UHJlZml4XSB0aGUgZGVmYXVsdCBwcmVmaXggdG8gdGFrZSwgaWYgbm9uZSBpcyBwcmVzZW50LlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhcnNlZCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTmFtZShuYW1lLCBkZWZhdWx0UHJlZml4KSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoLzovKSxcbiAgICAgIGxvY2FsTmFtZSwgcHJlZml4O1xuXG4gIC8vIG5vIHByZWZpeCAoaS5lLiBvbmx5IGxvY2FsIG5hbWUpXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBsb2NhbE5hbWUgPSBuYW1lO1xuICAgIHByZWZpeCA9IGRlZmF1bHRQcmVmaXg7XG4gIH0gZWxzZVxuICAvLyBwcmVmaXggKyBsb2NhbCBuYW1lXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICBsb2NhbE5hbWUgPSBwYXJ0c1sxXTtcbiAgICBwcmVmaXggPSBwYXJ0c1swXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDxwcmVmaXg6bG9jYWxOYW1lPiBvciA8bG9jYWxOYW1lPiwgZ290ICcgKyBuYW1lKTtcbiAgfVxuXG4gIG5hbWUgPSAocHJlZml4ID8gcHJlZml4ICsgJzonIDogJycpICsgbG9jYWxOYW1lO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBsb2NhbE5hbWU6IGxvY2FsTmFtZVxuICB9O1xufVxuXG4vKipcbiAqIEEgdXRpbGl0eSB0byBidWlsZCBlbGVtZW50IGRlc2NyaXB0b3JzLlxuICovXG5mdW5jdGlvbiBEZXNjcmlwdG9yQnVpbGRlcihuYW1lTnMpIHtcbiAgdGhpcy5ucyA9IG5hbWVOcztcbiAgdGhpcy5uYW1lID0gbmFtZU5zLm5hbWU7XG4gIHRoaXMuYWxsVHlwZXMgPSBbXTtcbiAgdGhpcy5hbGxUeXBlc0J5TmFtZSA9IHt9O1xuICB0aGlzLnByb3BlcnRpZXMgPSBbXTtcbiAgdGhpcy5wcm9wZXJ0aWVzQnlOYW1lID0ge307XG59XG5cblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwaWNrKHRoaXMsIFtcbiAgICAnbnMnLFxuICAgICduYW1lJyxcbiAgICAnYWxsVHlwZXMnLFxuICAgICdhbGxUeXBlc0J5TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMnLFxuICAgICdwcm9wZXJ0aWVzQnlOYW1lJyxcbiAgICAnYm9keVByb3BlcnR5JyxcbiAgICAnaWRQcm9wZXJ0eSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIEFkZCBwcm9wZXJ0eSBhdCBnaXZlbiBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcFxuICogQHBhcmFtIHtOdW1iZXJ9IFtpZHhdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt2YWxpZGF0ZT10cnVlXVxuICovXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkUHJvcGVydHkgPSBmdW5jdGlvbihwLCBpZHgsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHR5cGVvZiBpZHggPT09ICdib29sZWFuJykge1xuICAgIHZhbGlkYXRlID0gaWR4O1xuICAgIGlkeCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRoaXMuYWRkTmFtZWRQcm9wZXJ0eShwLCB2YWxpZGF0ZSAhPT0gZmFsc2UpO1xuXG4gIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpZHggIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMuc3BsaWNlKGlkeCwgMCwgcCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy5wdXNoKHApO1xuICB9XG59O1xuXG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZXBsYWNlUHJvcGVydHkgPSBmdW5jdGlvbihvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHksIHJlcGxhY2UpIHtcbiAgdmFyIG9sZE5hbWVOcyA9IG9sZFByb3BlcnR5Lm5zO1xuXG4gIHZhciBwcm9wcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgIHByb3BlcnRpZXNCeU5hbWUgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWUsXG4gICAgICByZW5hbWUgPSBvbGRQcm9wZXJ0eS5uYW1lICE9PSBuZXdQcm9wZXJ0eS5uYW1lO1xuXG4gIGlmIChvbGRQcm9wZXJ0eS5pc0lkKSB7XG4gICAgaWYgKCFuZXdQcm9wZXJ0eS5pc0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdwcm9wZXJ0eSA8JyArIG5ld1Byb3BlcnR5Lm5zLm5hbWUgKyAnPiBtdXN0IGJlIGlkIHByb3BlcnR5ICcgK1xuICAgICAgICAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJZFByb3BlcnR5KG5ld1Byb3BlcnR5LCBmYWxzZSk7XG4gIH1cblxuICBpZiAob2xkUHJvcGVydHkuaXNCb2R5KSB7XG5cbiAgICBpZiAoIW5ld1Byb3BlcnR5LmlzQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAncHJvcGVydHkgPCcgKyBuZXdQcm9wZXJ0eS5ucy5uYW1lICsgJz4gbXVzdCBiZSBib2R5IHByb3BlcnR5ICcgK1xuICAgICAgICAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuc2V0Qm9keVByb3BlcnR5KG5ld1Byb3BlcnR5LCBmYWxzZSk7XG4gIH1cblxuICAvLyB2YWxpZGF0ZSBleGlzdGVuY2UgYW5kIGdldCBsb2NhdGlvbiBvZiBvbGQgcHJvcGVydHlcbiAgdmFyIGlkeCA9IHByb3BzLmluZGV4T2Yob2xkUHJvcGVydHkpO1xuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvcGVydHkgPCcgKyBvbGROYW1lTnMubmFtZSArICc+IG5vdCBmb3VuZCBpbiBwcm9wZXJ0eSBsaXN0Jyk7XG4gIH1cblxuICAvLyByZW1vdmUgb2xkIHByb3BlcnR5XG4gIHByb3BzLnNwbGljZShpZHgsIDEpO1xuXG4gIC8vIHJlcGxhY2luZyB0aGUgbmFtZWQgcHJvcGVydHkgaXMgaW50ZW50aW9uYWxcbiAgLy9cbiAgLy8gICogdmFsaWRhdGUgb25seSBpZiB0aGlzIGlzIGEgXCJyZW5hbWVcIiBvcGVyYXRpb25cbiAgLy8gICogYWRkIGF0IHNwZWNpZmljIGluZGV4IHVubGVzcyB3ZSBcInJlcGxhY2VcIlxuICAvL1xuICB0aGlzLmFkZFByb3BlcnR5KG5ld1Byb3BlcnR5LCByZXBsYWNlID8gdW5kZWZpbmVkIDogaWR4LCByZW5hbWUpO1xuXG4gIC8vIG1ha2UgbmV3IHByb3BlcnR5IGF2YWlsYWJsZSB1bmRlciBvbGQgbmFtZVxuICBwcm9wZXJ0aWVzQnlOYW1lW29sZE5hbWVOcy5uYW1lXSA9IHByb3BlcnRpZXNCeU5hbWVbb2xkTmFtZU5zLmxvY2FsTmFtZV0gPSBuZXdQcm9wZXJ0eTtcbn07XG5cblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbihwLCB0YXJnZXRQcm9wZXJ0eU5hbWUsIHJlcGxhY2UpIHtcblxuICB2YXIgbnNQcmVmaXggPSBwLm5zLnByZWZpeDtcbiAgdmFyIHBhcnRzID0gdGFyZ2V0UHJvcGVydHlOYW1lLnNwbGl0KCcjJyk7XG5cbiAgdmFyIG5hbWUgPSBwYXJzZU5hbWUocGFydHNbMF0sIG5zUHJlZml4KTtcbiAgdmFyIGF0dHJOYW1lID0gcGFyc2VOYW1lKHBhcnRzWzFdLCBuYW1lLnByZWZpeCkubmFtZTtcblxuICB2YXIgcmVkZWZpbmVkUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVbYXR0ck5hbWVdO1xuICBpZiAoIXJlZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWZpbmVkIHByb3BlcnR5IDwnICsgYXR0ck5hbWUgKyAnPiBub3QgZm91bmQnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlcGxhY2VQcm9wZXJ0eShyZWRlZmluZWRQcm9wZXJ0eSwgcCwgcmVwbGFjZSk7XG4gIH1cblxuICBkZWxldGUgcC5yZWRlZmluZXM7XG59O1xuXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkTmFtZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG4gIHZhciBucyA9IHAubnMsXG4gICAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aGlzLmFzc2VydE5vdERlZmluZWQocCwgbnMubmFtZSk7XG4gICAgdGhpcy5hc3NlcnROb3REZWZpbmVkKHAsIG5zLmxvY2FsTmFtZSk7XG4gIH1cblxuICBwcm9wc0J5TmFtZVtucy5uYW1lXSA9IHByb3BzQnlOYW1lW25zLmxvY2FsTmFtZV0gPSBwO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlbW92ZU5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbihwKSB7XG4gIHZhciBucyA9IHAubnMsXG4gICAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcblxuICBkZWxldGUgcHJvcHNCeU5hbWVbbnMubmFtZV07XG4gIGRlbGV0ZSBwcm9wc0J5TmFtZVtucy5sb2NhbE5hbWVdO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnNldEJvZHlQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuYm9keVByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2JvZHkgcHJvcGVydHkgZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyAnICtcbiAgICAgICcoPCcgKyB0aGlzLmJvZHlQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cblxuICB0aGlzLmJvZHlQcm9wZXJ0eSA9IHA7XG59O1xuXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuc2V0SWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuaWRQcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdpZCBwcm9wZXJ0eSBkZWZpbmVkIG11bHRpcGxlIHRpbWVzICcgK1xuICAgICAgJyg8JyArIHRoaXMuaWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cblxuICB0aGlzLmlkUHJvcGVydHkgPSBwO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFzc2VydE5vdERlZmluZWQgPSBmdW5jdGlvbihwLCBuYW1lKSB7XG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwLm5hbWUsXG4gICAgICBkZWZpbmVkUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHlOYW1lXTtcblxuICBpZiAoZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3Byb3BlcnR5IDwnICsgcHJvcGVydHlOYW1lICsgJz4gYWxyZWFkeSBkZWZpbmVkOyAnICtcbiAgICAgICdvdmVycmlkZSBvZiA8JyArIGRlZmluZWRQcm9wZXJ0eS5kZWZpbmVkQnkubnMubmFtZSArICcjJyArIGRlZmluZWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4gYnkgJyArXG4gICAgICAnPCcgKyBwLmRlZmluZWRCeS5ucy5uYW1lICsgJyMnICsgcC5ucy5uYW1lICsgJz4gbm90IGFsbG93ZWQgd2l0aG91dCByZWRlZmluZXMnKTtcbiAgfVxufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmhhc1Byb3BlcnR5ID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZFRyYWl0ID0gZnVuY3Rpb24odCwgaW5oZXJpdGVkKSB7XG5cbiAgdmFyIHR5cGVzQnlOYW1lID0gdGhpcy5hbGxUeXBlc0J5TmFtZSxcbiAgICAgIHR5cGVzID0gdGhpcy5hbGxUeXBlcztcblxuICB2YXIgdHlwZU5hbWUgPSB0Lm5hbWU7XG5cbiAgaWYgKHR5cGVOYW1lIGluIHR5cGVzQnlOYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaCh0LnByb3BlcnRpZXMsIGJpbmQoZnVuY3Rpb24ocCkge1xuXG4gICAgLy8gY2xvbmUgcHJvcGVydHkgdG8gYWxsb3cgZXh0ZW5zaW9uc1xuICAgIHAgPSBhc3NpZ24oe30sIHAsIHtcbiAgICAgIG5hbWU6IHAubnMubG9jYWxOYW1lLFxuICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWRcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCAnZGVmaW5lZEJ5Jywge1xuICAgICAgdmFsdWU6IHRcbiAgICB9KTtcblxuICAgIHZhciByZXBsYWNlcyA9IHAucmVwbGFjZXMsXG4gICAgICAgIHJlZGVmaW5lcyA9IHAucmVkZWZpbmVzO1xuXG4gICAgLy8gYWRkIHJlcGxhY2UvcmVkZWZpbmUgc3VwcG9ydFxuICAgIGlmIChyZXBsYWNlcyB8fCByZWRlZmluZXMpIHtcbiAgICAgIHRoaXMucmVkZWZpbmVQcm9wZXJ0eShwLCByZXBsYWNlcyB8fCByZWRlZmluZXMsIHJlcGxhY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHAuaXNCb2R5KSB7XG4gICAgICAgIHRoaXMuc2V0Qm9keVByb3BlcnR5KHApO1xuICAgICAgfVxuICAgICAgaWYgKHAuaXNJZCkge1xuICAgICAgICB0aGlzLnNldElkUHJvcGVydHkocCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZFByb3BlcnR5KHApO1xuICAgIH1cbiAgfSwgdGhpcykpO1xuXG4gIHR5cGVzLnB1c2godCk7XG4gIHR5cGVzQnlOYW1lW3R5cGVOYW1lXSA9IHQ7XG59O1xuXG4vKipcbiAqIEEgcmVnaXN0cnkgb2YgTW9kZGxlIHBhY2thZ2VzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8UGFja2FnZT59IHBhY2thZ2VzXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXN9IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gUmVnaXN0cnkocGFja2FnZXMsIHByb3BlcnRpZXMpIHtcbiAgdGhpcy5wYWNrYWdlTWFwID0ge307XG4gIHRoaXMudHlwZU1hcCA9IHt9O1xuXG4gIHRoaXMucGFja2FnZXMgPSBbXTtcblxuICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuXG4gIGZvckVhY2gocGFja2FnZXMsIGJpbmQodGhpcy5yZWdpc3RlclBhY2thZ2UsIHRoaXMpKTtcbn1cblxuXG5SZWdpc3RyeS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uKHVyaU9yUHJlZml4KSB7XG4gIHJldHVybiB0aGlzLnBhY2thZ2VNYXBbdXJpT3JQcmVmaXhdO1xufTtcblxuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnBhY2thZ2VzO1xufTtcblxuXG5SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJQYWNrYWdlID0gZnVuY3Rpb24ocGtnKSB7XG5cbiAgLy8gY29weSBwYWNrYWdlXG4gIHBrZyA9IGFzc2lnbih7fSwgcGtnKTtcblxuICB2YXIgcGtnTWFwID0gdGhpcy5wYWNrYWdlTWFwO1xuXG4gIGVuc3VyZUF2YWlsYWJsZShwa2dNYXAsIHBrZywgJ3ByZWZpeCcpO1xuICBlbnN1cmVBdmFpbGFibGUocGtnTWFwLCBwa2csICd1cmknKTtcblxuICAvLyByZWdpc3RlciB0eXBlc1xuICBmb3JFYWNoKHBrZy50eXBlcywgYmluZChmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5yZWdpc3RlclR5cGUoZGVzY3JpcHRvciwgcGtnKTtcbiAgfSwgdGhpcykpO1xuXG4gIHBrZ01hcFtwa2cudXJpXSA9IHBrZ01hcFtwa2cucHJlZml4XSA9IHBrZztcbiAgdGhpcy5wYWNrYWdlcy5wdXNoKHBrZyk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSB0eXBlIGZyb20gYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGggdXNcbiAqL1xuUmVnaXN0cnkucHJvdG90eXBlLnJlZ2lzdGVyVHlwZSA9IGZ1bmN0aW9uKHR5cGUsIHBrZykge1xuXG4gIHR5cGUgPSBhc3NpZ24oe30sIHR5cGUsIHtcbiAgICBzdXBlckNsYXNzOiAodHlwZS5zdXBlckNsYXNzIHx8IFtdKS5zbGljZSgpLFxuICAgIGV4dGVuZHM6ICh0eXBlLmV4dGVuZHMgfHwgW10pLnNsaWNlKCksXG4gICAgcHJvcGVydGllczogKHR5cGUucHJvcGVydGllcyB8fCBbXSkuc2xpY2UoKSxcbiAgICBtZXRhOiBhc3NpZ24oKHR5cGUubWV0YSB8fCB7fSkpXG4gIH0pO1xuXG4gIHZhciBucyA9IHBhcnNlTmFtZSh0eXBlLm5hbWUsIHBrZy5wcmVmaXgpLFxuICAgICAgbmFtZSA9IG5zLm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzQnlOYW1lID0ge307XG5cbiAgLy8gcGFyc2UgcHJvcGVydGllc1xuICBmb3JFYWNoKHR5cGUucHJvcGVydGllcywgYmluZChmdW5jdGlvbihwKSB7XG5cbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgbmFtZXNcbiAgICB2YXIgcHJvcGVydHlOcyA9IHBhcnNlTmFtZShwLm5hbWUsIG5zLnByZWZpeCksXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TnMubmFtZTtcblxuICAgIC8vIG5hbWVzcGFjZSBwcm9wZXJ0eSB0eXBlc1xuICAgIGlmICghaXNCdWlsdEluKHAudHlwZSkpIHtcbiAgICAgIHAudHlwZSA9IHBhcnNlTmFtZShwLnR5cGUsIHByb3BlcnR5TnMucHJlZml4KS5uYW1lO1xuICAgIH1cblxuICAgIGFzc2lnbihwLCB7XG4gICAgICBuczogcHJvcGVydHlOcyxcbiAgICAgIG5hbWU6IHByb3BlcnR5TmFtZVxuICAgIH0pO1xuXG4gICAgcHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdID0gcDtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIHVwZGF0ZSBucyArIG5hbWVcbiAgYXNzaWduKHR5cGUsIHtcbiAgICBuczogbnMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwcm9wZXJ0aWVzQnlOYW1lOiBwcm9wZXJ0aWVzQnlOYW1lXG4gIH0pO1xuXG4gIGZvckVhY2godHlwZS5leHRlbmRzLCBiaW5kKGZ1bmN0aW9uKGV4dGVuZHNOYW1lKSB7XG4gICAgdmFyIGV4dGVuZGVkID0gdGhpcy50eXBlTWFwW2V4dGVuZHNOYW1lXTtcblxuICAgIGV4dGVuZGVkLnRyYWl0cyA9IGV4dGVuZGVkLnRyYWl0cyB8fCBbXTtcbiAgICBleHRlbmRlZC50cmFpdHMucHVzaChuYW1lKTtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIGxpbmsgdG8gcGFja2FnZVxuICB0aGlzLmRlZmluZVBhY2thZ2UodHlwZSwgcGtnKTtcblxuICAvLyByZWdpc3RlclxuICB0aGlzLnR5cGVNYXBbbmFtZV0gPSB0eXBlO1xufTtcblxuXG4vKipcbiAqIFRyYXZlcnNlIHRoZSB0eXBlIGhpZXJhcmNoeSBmcm9tIGJvdHRvbSB0byB0b3AsXG4gKiBjYWxsaW5nIGl0ZXJhdG9yIHdpdGggKHR5cGUsIGluaGVyaXRlZCkgZm9yIGFsbCBlbGVtZW50cyBpblxuICogdGhlIGluaGVyaXRhbmNlIGNoYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBuc05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt0cmFpdD1mYWxzZV1cbiAqL1xuUmVnaXN0cnkucHJvdG90eXBlLm1hcFR5cGVzID0gZnVuY3Rpb24obnNOYW1lLCBpdGVyYXRvciwgdHJhaXQpIHtcblxuICB2YXIgdHlwZSA9IGlzQnVpbHRJbihuc05hbWUubmFtZSkgPyB7IG5hbWU6IG5zTmFtZS5uYW1lIH0gOiB0aGlzLnR5cGVNYXBbbnNOYW1lLm5hbWVdO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHRyYWl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2xzXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZVRyYWl0KGNscykge1xuICAgIHJldHVybiB0cmF2ZXJzZVN1cGVyKGNscywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHN1cGVyIHR5cGUgb3IgdHJhaXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNsc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFt0cmFpdD1mYWxzZV1cbiAgICovXG4gIGZ1bmN0aW9uIHRyYXZlcnNlU3VwZXIoY2xzLCB0cmFpdCkge1xuICAgIHZhciBwYXJlbnROcyA9IHBhcnNlTmFtZShjbHMsIGlzQnVpbHRJbihjbHMpID8gJycgOiBuc05hbWUucHJlZml4KTtcbiAgICBzZWxmLm1hcFR5cGVzKHBhcmVudE5zLCBpdGVyYXRvciwgdHJhaXQpO1xuICB9XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGUgPCcgKyBuc05hbWUubmFtZSArICc+Jyk7XG4gIH1cblxuICBmb3JFYWNoKHR5cGUuc3VwZXJDbGFzcywgdHJhaXQgPyB0cmF2ZXJzZVRyYWl0IDogdHJhdmVyc2VTdXBlcik7XG5cbiAgLy8gY2FsbCBpdGVyYXRvciB3aXRoICh0eXBlLCBpbmhlcml0ZWQ9IXRyYWl0KVxuICBpdGVyYXRvcih0eXBlLCAhdHJhaXQpO1xuXG4gIGZvckVhY2godHlwZS50cmFpdHMsIHRyYXZlcnNlVHJhaXQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVmZmVjdGl2ZSBkZXNjcmlwdG9yIGZvciBhIHR5cGUuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSB0eXBlIHRoZSBuYW1lc3BhY2VkIG5hbWUgKG5zOmxvY2FsTmFtZSkgb2YgdGhlIHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtEZXNjcmlwdG9yfSB0aGUgcmVzdWx0aW5nIGVmZmVjdGl2ZSBkZXNjcmlwdG9yXG4gKi9cblJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRFZmZlY3RpdmVEZXNjcmlwdG9yID0gZnVuY3Rpb24obmFtZSkge1xuXG4gIHZhciBuc05hbWUgPSBwYXJzZU5hbWUobmFtZSk7XG5cbiAgdmFyIGJ1aWxkZXIgPSBuZXcgRGVzY3JpcHRvckJ1aWxkZXIobnNOYW1lKTtcblxuICB0aGlzLm1hcFR5cGVzKG5zTmFtZSwgZnVuY3Rpb24odHlwZSwgaW5oZXJpdGVkKSB7XG4gICAgYnVpbGRlci5hZGRUcmFpdCh0eXBlLCBpbmhlcml0ZWQpO1xuICB9KTtcblxuICB2YXIgZGVzY3JpcHRvciA9IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAvLyBkZWZpbmUgcGFja2FnZSBsaW5rXG4gIHRoaXMuZGVmaW5lUGFja2FnZShkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmFsbFR5cGVzW2Rlc2NyaXB0b3IuYWxsVHlwZXMubGVuZ3RoIC0gMV0uJHBrZyk7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG5cblJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmVQYWNrYWdlID0gZnVuY3Rpb24odGFyZ2V0LCBwa2cpIHtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZSh0YXJnZXQsICckcGtnJywgeyB2YWx1ZTogcGtnIH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlQXZhaWxhYmxlKHBhY2thZ2VNYXAsIHBrZywgaWRlbnRpZmllcktleSkge1xuXG4gIHZhciB2YWx1ZSA9IHBrZ1tpZGVudGlmaWVyS2V5XTtcblxuICBpZiAodmFsdWUgaW4gcGFja2FnZU1hcCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFja2FnZSB3aXRoICcgKyBpZGVudGlmaWVyS2V5ICsgJyA8JyArIHZhbHVlICsgJz4gYWxyZWFkeSBkZWZpbmVkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgdGhhdCBnZXRzIGFuZCBzZXRzIHByb3BlcnRpZXMgb2YgbW9kZWwgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtNb2RlbH0gbW9kZWxcbiAqL1xuZnVuY3Rpb24gUHJvcGVydGllcyhtb2RlbCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG59XG5cblxuLyoqXG4gKiBTZXRzIGEgbmFtZWQgcHJvcGVydHkgb24gdGhlIHRhcmdldCBlbGVtZW50LlxuICogSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlIHByb3BlcnR5IGdldHMgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcblxuICB2YXIgcHJvcGVydHkgPSB0aGlzLm1vZGVsLmdldFByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIG5hbWUpO1xuXG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5uYW1lO1xuXG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAvLyB1bnNldCB0aGUgcHJvcGVydHksIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgdW5kZWZpbmVkO1xuICAgIC8vIGRlbGV0ZSBmcm9tICRhdHRycyAoZm9yIGV4dGVuc2lvbnMpIG9yIHRoZSB0YXJnZXQgaXRzZWxmXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXQuJGF0dHJzW25hbWVdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBzZXQgdGhlIHByb3BlcnR5LCBkZWZpbmluZyB3ZWxsIGRlZmluZWQgcHJvcGVydGllcyBvbiB0aGUgZmx5XG4gICAgLy8gb3Igc2ltcGx5IHVwZGF0aW5nIHRoZW0gaW4gdGFyZ2V0LiRhdHRycyAoZm9yIGV4dGVuc2lvbnMpXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXRbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuJGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVkIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lKSB7XG5cbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5tb2RlbC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBuYW1lKTtcblxuICBpZiAoIXByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHRhcmdldC4kYXR0cnNbbmFtZV07XG4gIH1cblxuICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkubmFtZTtcblxuICAvLyBjaGVjayBpZiBhY2Nlc3MgdG8gY29sbGVjdGlvbiBwcm9wZXJ0eSBhbmQgbGF6aWx5IGluaXRpYWxpemUgaXRcbiAgaWYgKCF0YXJnZXRbcHJvcGVydHlOYW1lXSAmJiBwcm9wZXJ0eS5pc01hbnkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBbXSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG59O1xuXG5cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkgb24gdGhlIHRhcmdldCBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgb3B0aW9ucykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCBvcHRpb25zKTtcbn07XG5cblxuLyoqXG4gKiBEZWZpbmUgdGhlIGRlc2NyaXB0b3IgZm9yIGFuIGVsZW1lbnRcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lRGVzY3JpcHRvciA9IGZ1bmN0aW9uKHRhcmdldCwgZGVzY3JpcHRvcikge1xuICB0aGlzLmRlZmluZSh0YXJnZXQsICckZGVzY3JpcHRvcicsIHsgdmFsdWU6IGRlc2NyaXB0b3IgfSk7XG59O1xuXG4vKipcbiAqIERlZmluZSB0aGUgbW9kZWwgZm9yIGFuIGVsZW1lbnRcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lTW9kZWwgPSBmdW5jdGlvbih0YXJnZXQsIG1vZGVsKSB7XG4gIHRoaXMuZGVmaW5lKHRhcmdldCwgJyRtb2RlbCcsIHsgdmFsdWU6IG1vZGVsIH0pO1xufTtcblxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eS5uYW1lLCB7XG4gICAgZW51bWVyYWJsZTogIXByb3BlcnR5LmlzUmVmZXJlbmNlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8vLy8gTW9kZGxlIGltcGxlbWVudGF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBAY2xhc3MgTW9kZGxlXG4gKlxuICogQSBtb2RlbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBlbGVtZW50cyBvZiBhIHNwZWNpZmljIHR5cGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgTW9kZGxlID0gcmVxdWlyZSgnbW9kZGxlJyk7XG4gKlxuICogdmFyIHBrZyA9IHtcbiAqICAgbmFtZTogJ215cGFja2FnZScsXG4gKiAgIHByZWZpeDogJ215JyxcbiAqICAgdHlwZXM6IFtcbiAqICAgICB7IG5hbWU6ICdSb290JyB9XG4gKiAgIF1cbiAqIH07XG4gKlxuICogdmFyIG1vZGRsZSA9IG5ldyBNb2RkbGUoW3BrZ10pO1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8UGFja2FnZT59IHBhY2thZ2VzIHRoZSBwYWNrYWdlcyB0byBjb250YWluXG4gKi9cbmZ1bmN0aW9uIE1vZGRsZShwYWNrYWdlcykge1xuXG4gIHRoaXMucHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKHRoaXMpO1xuXG4gIHRoaXMuZmFjdG9yeSA9IG5ldyBGYWN0b3J5KHRoaXMsIHRoaXMucHJvcGVydGllcyk7XG4gIHRoaXMucmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkocGFja2FnZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgdGhpcy50eXBlQ2FjaGUgPSB7fTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjY3JlYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgZm9vID0gbW9kZGxlLmNyZWF0ZSgnbXk6Rm9vJyk7XG4gKiB2YXIgYmFyID0gbW9kZGxlLmNyZWF0ZSgnbXk6QmFyJywgeyBpZDogJ0JBUl8xJyB9KTtcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fSBkZXNjcmlwdG9yIHRoZSB0eXBlIGRlc2NyaXB0b3Igb3IgbmFtZSBrbm93IHRvIHRoZSBtb2RlbFxuICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyAgIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kZWwgaW5zdGFuY2Ugd2l0aFxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgIG1vZGVsIGluc3RhbmNlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oZGVzY3JpcHRvciwgYXR0cnMpIHtcbiAgdmFyIFR5cGUgPSB0aGlzLmdldFR5cGUoZGVzY3JpcHRvcik7XG5cbiAgaWYgKCFUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGUgPCcgKyBkZXNjcmlwdG9yICsgJz4nKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShhdHRycyk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHlwZSByZXByZXNlbnRpbmcgYSBnaXZlbiBkZXNjcmlwdG9yXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjZ2V0VHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIEZvbyA9IG1vZGRsZS5nZXRUeXBlKCdteTpGb28nKTtcbiAqIHZhciBmb28gPSBuZXcgRm9vKHsgJ2lkJyA6ICdGT09fMScgfSk7XG4gKlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICB0aGUgdHlwZSByZXByZXNlbnRpbmcgdGhlIGRlc2NyaXB0b3JcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gIHZhciBjYWNoZSA9IHRoaXMudHlwZUNhY2hlO1xuXG4gIHZhciBuYW1lID0gaXNTdHJpbmcoZGVzY3JpcHRvcikgPyBkZXNjcmlwdG9yIDogZGVzY3JpcHRvci5ucy5uYW1lO1xuXG4gIHZhciB0eXBlID0gY2FjaGVbbmFtZV07XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgZGVzY3JpcHRvciA9IHRoaXMucmVnaXN0cnkuZ2V0RWZmZWN0aXZlRGVzY3JpcHRvcihuYW1lKTtcbiAgICB0eXBlID0gY2FjaGVbbmFtZV0gPSB0aGlzLmZhY3RvcnkuY3JlYXRlVHlwZShkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYW55LWVsZW1lbnQgdHlwZSB0byBiZSB1c2VkIHdpdGhpbiBtb2RlbCBpbnN0YW5jZXMuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgY3VzdG9tIGVsZW1lbnRzIHRoYXQgbGllIG91dHNpZGUgdGhlIG1ldGEtbW9kZWwuXG4gKiBUaGUgY3JlYXRlZCBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgbWV0YS1kYXRhIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBpdFxuICogYXMgcGFydCBvZiBtZXRhLW1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEBtZXRob2QgTW9kZGxlI2NyZWF0ZUFueVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZvbyA9IG1vZGRsZS5jcmVhdGVBbnkoJ3ZlbmRvcjpGb28nLCAnaHR0cDovL3ZlbmRvcicsIHtcbiAqICAgdmFsdWU6ICdiYXInXG4gKiB9KTtcbiAqXG4gKiB2YXIgY29udGFpbmVyID0gbW9kZGxlLmNyZWF0ZSgnbXk6Q29udGFpbmVyJywgJ2h0dHA6Ly9teScsIHtcbiAqICAgYW55OiBbIGZvbyBdXG4gKiB9KTtcbiAqXG4gKiAvLyBnbyBhaGVhZCBhbmQgc2VyaWFsaXplIHRoZSBzdHVmZlxuICpcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5zVXJpIHRoZSBuYW1lc3BhY2UgdXJpIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgdGhlIGluc3RhbmNlIHdpdGhcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGFueSB0eXBlIGluc3RhbmNlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuY3JlYXRlQW55ID0gZnVuY3Rpb24obmFtZSwgbnNVcmksIHByb3BlcnRpZXMpIHtcblxuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpO1xuXG4gIHZhciBlbGVtZW50ID0ge1xuICAgICR0eXBlOiBuYW1lLFxuICAgICRpbnN0YW5jZU9mOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gdGhpcy4kdHlwZTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpc0dlbmVyaWM6IHRydWUsXG4gICAgbnM6IHtcbiAgICAgIHByZWZpeDogbmFtZU5zLnByZWZpeCxcbiAgICAgIGxvY2FsTmFtZTogbmFtZU5zLmxvY2FsTmFtZSxcbiAgICAgIHVyaTogbnNVcmlcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZURlc2NyaXB0b3IoZWxlbWVudCwgZGVzY3JpcHRvcik7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmVNb2RlbChlbGVtZW50LCB0aGlzKTtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZShlbGVtZW50LCAnJHBhcmVudCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlIH0pO1xuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24oYSwga2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGEpICYmIGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxlbWVudFthLm5hbWVdID0gYS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudFtrZXldID0gYTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcmVnaXN0ZXJlZCBwYWNrYWdlIGJ5IHVyaSBvciBwcmVmaXhcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYWNrYWdlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uKHVyaU9yUHJlZml4KSB7XG4gIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldFBhY2thZ2UodXJpT3JQcmVmaXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc25hcHNob3Qgb2YgYWxsIGtub3duIHBhY2thZ2VzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgcGFja2FnZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldFBhY2thZ2VzKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIGFuIGVsZW1lbnRcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRFbGVtZW50RGVzY3JpcHRvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3I7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBvciBpbnN0YW5jZVxuICogcmVwcmVzZW50cyB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBNYXkgYmUgYXBwbGllZCB0byB0aGlzLCBpZiBlbGVtZW50IGlzIG9taXR0ZWQuXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuaGFzVHlwZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHR5cGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnQgPSB0aGlzO1xuICB9XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRtb2RlbC5nZXRFbGVtZW50RGVzY3JpcHRvcihlbGVtZW50KTtcblxuICByZXR1cm4gKHR5cGUgaW4gZGVzY3JpcHRvci5hbGxUeXBlc0J5TmFtZSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3Igb2YgYW4gZWxlbWVudHMgbmFtZWQgcHJvcGVydHlcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSkge1xuICByZXR1cm4gdGhpcy5nZXRFbGVtZW50RGVzY3JpcHRvcihlbGVtZW50KS5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5XTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIG1hcHBlZCB0eXBlJ3MgZGVzY3JpcHRvclxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldFR5cGVEZXNjcmlwdG9yID0gZnVuY3Rpb24odHlwZSkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS50eXBlTWFwW3R5cGVdO1xufTtcblxuZXhwb3J0IHsgTW9kZGxlLCBjb2VyY2VUeXBlLCBpc0J1aWx0SW4gYXMgaXNCdWlsdEluVHlwZSwgaXNTaW1wbGUgYXMgaXNTaW1wbGVUeXBlLCBwYXJzZU5hbWUgYXMgcGFyc2VOYW1lTlMgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvcmVmcycpO1xuXG5tb2R1bGUuZXhwb3J0cy5Db2xsZWN0aW9uID0gcmVxdWlyZSgnLi9saWIvY29sbGVjdGlvbicpOyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBbiBlbXB0eSBjb2xsZWN0aW9uIHN0dWIuIFVzZSB7QGxpbmsgUmVmc0NvbGxlY3Rpb24uZXh0ZW5kfSB0byBleHRlbmQgYVxuICogY29sbGVjdGlvbiB3aXRoIHJlZiBzZW1hbnRpY3MuXG4gKlxuICogQGNsYXNzIFJlZnNDb2xsZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBFeHRlbmRzIGEgY29sbGVjdGlvbiB3aXRoIHtAbGluayBSZWZzfSBhd2FyZSBtZXRob2RzXG4gKlxuICogQG1lbWJlcm9mIFJlZnNDb2xsZWN0aW9uXG4gKiBAc3RhdGljXG4gKlxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtICB7UmVmc30gcmVmcyBpbnN0YW5jZVxuICogQHBhcmFtICB7T2JqZWN0fSBwcm9wZXJ0eSByZXByZXNlbnRlZCBieSB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXQgb2JqZWN0IHRoZSBjb2xsZWN0aW9uIGlzIGF0dGFjaGVkIHRvXG4gKlxuICogQHJldHVybiB7UmVmc0NvbGxlY3Rpb248T2JqZWN0Pn0gdGhlIGV4dGVuZGVkIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChjb2xsZWN0aW9uLCByZWZzLCBwcm9wZXJ0eSwgdGFyZ2V0KSB7XG5cbiAgdmFyIGludmVyc2VQcm9wZXJ0eSA9IHByb3BlcnR5LmludmVyc2U7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdpdmVuIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybnMgaXQuXG4gICAqXG4gICAqIEBtZXRob2QgUmVmc0NvbGxlY3Rpb24jcmVtb3ZlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHJlbW92ZVxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbGxlY3Rpb24sICdyZW1vdmUnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBpZHggPSB0aGlzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnNwbGljZShpZHgsIDEpO1xuXG4gICAgICAgIC8vIHVuc2V0IGludmVyc2VcbiAgICAgICAgcmVmcy51bnNldChlbGVtZW50LCBpbnZlcnNlUHJvcGVydHksIHRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sbGVjdGlvbiBjb250YWlucyB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgKlxuICAgKiBAbWV0aG9kIFJlZnNDb2xsZWN0aW9uI2NvbnRhaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGNoZWNrIGZvclxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbGxlY3Rpb24sICdjb250YWlucycsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBhcnJheSwgdW5sZXNzIGl0IGV4aXN0cyBhbHJlYWR5IChzZXQgc2VtYW50aWNzKS5cbiAgICpcbiAgICogQG1ldGhvZCBSZWZzQ29sbGVjdGlvbiNhZGRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gYWRkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25hbCBpbmRleCB0byBhZGQgZWxlbWVudCB0b1xuICAgKiAgICAgICAgICAgICAgICAgKHBvc3NpYmx5IG1vdmluZyBvdGhlciBlbGVtZW50cyBhcm91bmQpXG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29sbGVjdGlvbiwgJ2FkZCcsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgaWR4KSB7XG5cbiAgICAgIHZhciBjdXJyZW50SWR4ID0gdGhpcy5pbmRleE9mKGVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIGlkeCA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICBpZiAoY3VycmVudElkeCAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBlbGVtZW50IGFscmVhZHkgaW4gY29sbGVjdGlvbiAoISlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgdG8gZW5kIG9mIGFycmF5LCBhcyBubyBpZHggaXMgc3BlY2lmaWVkXG4gICAgICAgIGlkeCA9IHRoaXMubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgYWxyZWFkeSBpbiBjb2xsZWN0aW9uXG4gICAgICBpZiAoY3VycmVudElkeCAhPT0gLTEpIHtcblxuICAgICAgICAvLyByZW1vdmUgZWxlbWVudCBmcm9tIGN1cnJlbnRJZHhcbiAgICAgICAgdGhpcy5zcGxpY2UoY3VycmVudElkeCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBlbGVtZW50IGF0IGlkeFxuICAgICAgdGhpcy5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcblxuICAgICAgaWYgKGN1cnJlbnRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIHNldCBpbnZlcnNlLCB1bmxlc3MgZWxlbWVudCB3YXNcbiAgICAgICAgLy8gaW4gY29sbGVjdGlvbiBhbHJlYWR5XG4gICAgICAgIHJlZnMuc2V0KGVsZW1lbnQsIGludmVyc2VQcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIGEgc2ltcGxlIG1hcmtlciwgaWRlbnRpZnlpbmcgdGhpcyBlbGVtZW50XG4gIC8vIGFzIGJlaW5nIGEgcmVmcyBjb2xsZWN0aW9uXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb2xsZWN0aW9uLCAnX19yZWZzX2NvbGxlY3Rpb24nLCB7XG4gICAgdmFsdWU6IHRydWVcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cblxuZnVuY3Rpb24gaXNFeHRlbmRlZChjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBjb2xsZWN0aW9uLl9fcmVmc19jb2xsZWN0aW9uID09PSB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5leHRlbmQgPSBleHRlbmQ7XG5cbm1vZHVsZS5leHBvcnRzLmlzRXh0ZW5kZWQgPSBpc0V4dGVuZGVkOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCcuL2NvbGxlY3Rpb24nKTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkoZSwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCBwcm9wZXJ0eS5uYW1lIHx8IHByb3BlcnR5KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29sbGVjdGlvblByb3BlcnR5KHJlZiwgcHJvcGVydHksIHRhcmdldCkge1xuXG4gIHZhciBjb2xsZWN0aW9uID0gQ29sbGVjdGlvbi5leHRlbmQodGFyZ2V0W3Byb3BlcnR5Lm5hbWVdIHx8IFtdLCByZWYsIHByb3BlcnR5LCB0YXJnZXQpO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5Lm5hbWUsIHtcbiAgICBlbnVtZXJhYmxlOiBwcm9wZXJ0eS5lbnVtZXJhYmxlLFxuICAgIHZhbHVlOiBjb2xsZWN0aW9uXG4gIH0pO1xuXG4gIGlmIChjb2xsZWN0aW9uLmxlbmd0aCkge1xuXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJlZi5zZXQobywgcHJvcGVydHkuaW52ZXJzZSwgdGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHJlZiwgcHJvcGVydHksIHRhcmdldCkge1xuXG4gIHZhciBpbnZlcnNlUHJvcGVydHkgPSBwcm9wZXJ0eS5pbnZlcnNlO1xuXG4gIHZhciBfdmFsdWUgPSB0YXJnZXRbcHJvcGVydHkubmFtZV07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkubmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogcHJvcGVydHkuY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGU6IHByb3BlcnR5LmVudW1lcmFibGUsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuXG4gICAgICAvLyByZXR1cm4gaWYgd2UgYWxyZWFkeSBwZXJmb3JtZWQgYWxsIGNoYW5nZXNcbiAgICAgIGlmICh2YWx1ZSA9PT0gX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9sZCA9IF92YWx1ZTtcblxuICAgICAgLy8gdGVtcG9yYXJ5IHNldCBudWxsXG4gICAgICBfdmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAob2xkKSB7XG4gICAgICAgIHJlZi51bnNldChvbGQsIGludmVyc2VQcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgIC8vIHNldCBpbnZlcnNlIHZhbHVlXG4gICAgICByZWYuc2V0KF92YWx1ZSwgaW52ZXJzZVByb3BlcnR5LCB0YXJnZXQpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJlZmVyZW5jZXMgb2JqZWN0IGRlZmluaW5nIHR3byBpbnZlcnNseSByZWxhdGVkXG4gKiBhdHRyaWJ1dGUgZGVzY3JpcHRvcnMgYSBhbmQgYi5cbiAqXG4gKiA8cD5cbiAqICAgV2hlbiBib3VuZCB0byBhbiBvYmplY3QgdXNpbmcge0BsaW5rIFJlZnMjYmluZH0gdGhlIHJlZmVyZW5jZXNcbiAqICAgZ2V0IGFjdGl2YXRlZCBhbmQgZW5zdXJlIHRoYXQgYWRkIGFuZCByZW1vdmUgb3BlcmF0aW9ucyBhcmUgYXBwbGllZFxuICogICByZXZlcnNlbHksIHRvby5cbiAqIDwvcD5cbiAqXG4gKiA8cD5cbiAqICAgRm9yIGF0dHJpYnV0ZXMgcmVwcmVzZW50ZWQgYXMgY29sbGVjdGlvbnMge0BsaW5rIFJlZnN9IHByb3ZpZGVzIHRoZVxuICogICB7QGxpbmsgUmVmc0NvbGxlY3Rpb24jYWRkfSwge0BsaW5rIFJlZnNDb2xsZWN0aW9uI3JlbW92ZX0gYW5kIHtAbGluayBSZWZzQ29sbGVjdGlvbiNjb250YWluc30gZXh0ZW5zaW9uc1xuICogICB0aGF0IG11c3QgYmUgdXNlZCB0byBwcm9wZXJseSBob29rIGludG8gdGhlIGludmVyc2UgY2hhbmdlIG1lY2hhbmlzbS5cbiAqIDwvcD5cbiAqXG4gKiBAY2xhc3MgUmVmc1xuICpcbiAqIEBjbGFzc2Rlc2MgQSBiaS1kaXJlY3Rpb25hbCByZWZlcmVuY2UgYmV0d2VlbiB0d28gYXR0cmlidXRlcy5cbiAqXG4gKiBAcGFyYW0ge1JlZnMuQXR0cmlidXRlRGVzY3JpcHRvcn0gYSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKiBAcGFyYW0ge1JlZnMuQXR0cmlidXRlRGVzY3JpcHRvcn0gYiBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgcmVmcyA9IFJlZnMoeyBuYW1lOiAnd2hlZWxzJywgY29sbGVjdGlvbjogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9LCB7IG5hbWU6ICdjYXInIH0pO1xuICpcbiAqIHZhciBjYXIgPSB7IG5hbWU6ICd0b3lvdGEnIH07XG4gKiB2YXIgd2hlZWxzID0gW3sgcG9zOiAnZnJvbnQtbGVmdCcgfSwgeyBwb3M6ICdmcm9udC1yaWdodCcgfV07XG4gKlxuICogcmVmcy5iaW5kKGNhciwgJ3doZWVscycpO1xuICpcbiAqIGNhci53aGVlbHMgLy8gW11cbiAqIGNhci53aGVlbHMuYWRkKHdoZWVsc1swXSk7XG4gKiBjYXIud2hlZWxzLmFkZCh3aGVlbHNbMV0pO1xuICpcbiAqIGNhci53aGVlbHMgLy8gW3sgcG9zOiAnZnJvbnQtbGVmdCcgfSwgeyBwb3M6ICdmcm9udC1yaWdodCcgfV1cbiAqXG4gKiB3aGVlbHNbMF0uY2FyIC8vIHsgbmFtZTogJ3RveW90YScgfTtcbiAqIGNhci53aGVlbHMucmVtb3ZlKHdoZWVsc1swXSk7XG4gKlxuICogd2hlZWxzWzBdLmNhciAvLyB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gUmVmcyhhLCBiKSB7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlZnMpKSB7XG4gICAgcmV0dXJuIG5ldyBSZWZzKGEsIGIpO1xuICB9XG5cbiAgLy8gbGlua1xuICBhLmludmVyc2UgPSBiO1xuICBiLmludmVyc2UgPSBhO1xuXG4gIHRoaXMucHJvcHMgPSB7fTtcbiAgdGhpcy5wcm9wc1thLm5hbWVdID0gYTtcbiAgdGhpcy5wcm9wc1tiLm5hbWVdID0gYjtcbn1cblxuLyoqXG4gKiBCaW5kcyBvbmUgc2lkZSBvZiBhIGJpLWRpcmVjdGlvbmFsIHJlZmVyZW5jZSB0byBhXG4gKiB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJPZiBSZWZzXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuUmVmcy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXRoaXMucHJvcHNbcHJvcGVydHldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByb3BlcnR5IDwnICsgcHJvcGVydHkgKyAnPiBpbiByZWYnKTtcbiAgICB9XG4gICAgcHJvcGVydHkgPSB0aGlzLnByb3BzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eS5jb2xsZWN0aW9uKSB7XG4gICAgZGVmaW5lQ29sbGVjdGlvblByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB0YXJnZXQpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB0YXJnZXQpO1xuICB9XG59O1xuXG5SZWZzLnByb3RvdHlwZS5lbnN1cmVSZWZzQ29sbGVjdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHkpIHtcblxuICB2YXIgY29sbGVjdGlvbiA9IHRhcmdldFtwcm9wZXJ0eS5uYW1lXTtcblxuICBpZiAoIUNvbGxlY3Rpb24uaXNFeHRlbmRlZChjb2xsZWN0aW9uKSkge1xuICAgIGRlZmluZUNvbGxlY3Rpb25Qcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uO1xufTtcblxuUmVmcy5wcm90b3R5cGUuZW5zdXJlQm91bmQgPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5KSB7XG4gIGlmICghaGFzT3duUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSkpIHtcbiAgICB0aGlzLmJpbmQodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIH1cbn07XG5cblJlZnMucHJvdG90eXBlLnVuc2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcblxuICBpZiAodGFyZ2V0KSB7XG4gICAgdGhpcy5lbnN1cmVCb3VuZCh0YXJnZXQsIHByb3BlcnR5KTtcblxuICAgIGlmIChwcm9wZXJ0eS5jb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLmVuc3VyZVJlZnNDb2xsZWN0aW9uKHRhcmdldCwgcHJvcGVydHkpLnJlbW92ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtwcm9wZXJ0eS5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn07XG5cblJlZnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG5cbiAgaWYgKHRhcmdldCkge1xuICAgIHRoaXMuZW5zdXJlQm91bmQodGFyZ2V0LCBwcm9wZXJ0eSk7XG5cbiAgICBpZiAocHJvcGVydHkuY29sbGVjdGlvbikge1xuICAgICAgdGhpcy5lbnN1cmVSZWZzQ29sbGVjdGlvbih0YXJnZXQsIHByb3BlcnR5KS5hZGQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVmcztcblxuXG4vKipcbiAqIEFuIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIHRvIGJlIHVzZWQgc3BlY2lmeSBhbiBhdHRyaWJ1dGUgaW4gYSB7QGxpbmsgUmVmc30gaW5zdGFuY2VcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWZzLkF0dHJpYnV0ZURlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb2xsZWN0aW9uPWZhbHNlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW51bWVyYWJsZT1mYWxzZV1cbiAqLyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgc291cmNlIGNvZGUgYWRhcHRlZCBmcm9tIFNuYXAuc3ZnIChsaWNlbnNlZCBBcGFjaGUtMi4wKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hZG9iZS13ZWJwbGF0Zm9ybS9TbmFwLnN2Zy9ibG9iL21hc3Rlci9zcmMvcGF0aC5qc1xuICovXG5cbi8qIGVzbGludCBuby1mYWxsdGhyb3VnaDogXCJvZmZcIiAqL1xuXG52YXIgcDJzID0gLyw/KFthLXpdKSw/L2dpLFxuICAgIHRvRmxvYXQgPSBwYXJzZUZsb2F0LFxuICAgIG1hdGggPSBNYXRoLFxuICAgIFBJID0gbWF0aC5QSSxcbiAgICBtbWluID0gbWF0aC5taW4sXG4gICAgbW1heCA9IG1hdGgubWF4LFxuICAgIHBvdyA9IG1hdGgucG93LFxuICAgIGFicyA9IG1hdGguYWJzLFxuICAgIHBhdGhDb21tYW5kID0gLyhbYS16XSlbXFxzLF0qKCgtP1xcZCpcXC4/XFxkKig/OmVbLStdP1xcZCspP1tcXHNdKiw/W1xcc10qKSspL2lnLFxuICAgIHBhdGhWYWx1ZXMgPSAvKC0/XFxkKlxcLj9cXGQqKD86ZVstK10/XFxcXGQrKT8pW1xcc10qLD9bXFxzXSovaWc7XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihvKSB7IHJldHVybiBvIGluc3RhbmNlb2YgQXJyYXk7IH07XG5cbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iaiwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BlcnR5KTtcbn1cblxuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cbiAgaWYgKHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBPYmplY3Qob2JqKSAhPT0gb2JqKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZXMgPSBuZXcgb2JqLmNvbnN0cnVjdG9yO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzUHJvcGVydHkob2JqLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGNsb25lKG9ialtrZXldKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiByZXB1c2goYXJyYXksIGl0ZW0pIHtcbiAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKGFycmF5W2ldID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGFycmF5LnB1c2goYXJyYXkuc3BsaWNlKGksIDEpWzBdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZXIoZikge1xuXG4gIGZ1bmN0aW9uIG5ld2YoKSB7XG5cbiAgICB2YXIgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSxcbiAgICAgICAgYXJncyA9IGFyZy5qb2luKCdcXHUyNDAwJyksXG4gICAgICAgIGNhY2hlID0gbmV3Zi5jYWNoZSA9IG5ld2YuY2FjaGUgfHwge30sXG4gICAgICAgIGNvdW50ID0gbmV3Zi5jb3VudCA9IG5ld2YuY291bnQgfHwgW107XG5cbiAgICBpZiAoaGFzUHJvcGVydHkoY2FjaGUsIGFyZ3MpKSB7XG4gICAgICByZXB1c2goY291bnQsIGFyZ3MpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FyZ3NdO1xuICAgIH1cblxuICAgIGNvdW50Lmxlbmd0aCA+PSAxZTMgJiYgZGVsZXRlIGNhY2hlW2NvdW50LnNoaWZ0KCldO1xuICAgIGNvdW50LnB1c2goYXJncyk7XG4gICAgY2FjaGVbYXJnc10gPSBmLmFwcGx5KDAsIGFyZyk7XG5cbiAgICByZXR1cm4gY2FjaGVbYXJnc107XG4gIH1cbiAgcmV0dXJuIG5ld2Y7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aFN0cmluZyhwYXRoU3RyaW5nKSB7XG5cbiAgaWYgKCFwYXRoU3RyaW5nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcHRoID0gcGF0aHMocGF0aFN0cmluZyk7XG5cbiAgaWYgKHB0aC5hcnIpIHtcbiAgICByZXR1cm4gY2xvbmUocHRoLmFycik7XG4gIH1cblxuICB2YXIgcGFyYW1Db3VudHMgPSB7IGE6IDcsIGM6IDYsIGg6IDEsIGw6IDIsIG06IDIsIHE6IDQsIHM6IDQsIHQ6IDIsIHY6IDEsIHo6IDAgfSxcbiAgICAgIGRhdGEgPSBbXTtcblxuICBpZiAoaXNBcnJheShwYXRoU3RyaW5nKSAmJiBpc0FycmF5KHBhdGhTdHJpbmdbMF0pKSB7IC8vIHJvdWdoIGFzc3VtcHRpb25cbiAgICBkYXRhID0gY2xvbmUocGF0aFN0cmluZyk7XG4gIH1cblxuICBpZiAoIWRhdGEubGVuZ3RoKSB7XG5cbiAgICBTdHJpbmcocGF0aFN0cmluZykucmVwbGFjZShwYXRoQ29tbWFuZCwgZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdLFxuICAgICAgICAgIG5hbWUgPSBiLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGMucmVwbGFjZShwYXRoVmFsdWVzLCBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIGIgJiYgcGFyYW1zLnB1c2goK2IpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChuYW1lID09ICdtJyAmJiBwYXJhbXMubGVuZ3RoID4gMikge1xuICAgICAgICBkYXRhLnB1c2goW2JdLmNvbmNhdChwYXJhbXMuc3BsaWNlKDAsIDIpKSk7XG4gICAgICAgIG5hbWUgPSAnbCc7XG4gICAgICAgIGIgPSBiID09ICdtJyA/ICdsJyA6ICdMJztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHBhcmFtcy5sZW5ndGggPj0gcGFyYW1Db3VudHNbbmFtZV0pIHtcbiAgICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zLnNwbGljZSgwLCBwYXJhbUNvdW50c1tuYW1lXSkpKTtcbiAgICAgICAgaWYgKCFwYXJhbUNvdW50c1tuYW1lXSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBkYXRhLnRvU3RyaW5nID0gcGF0aHMudG9TdHJpbmc7XG4gIHB0aC5hcnIgPSBjbG9uZShkYXRhKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gcGF0aHMocHMpIHtcbiAgdmFyIHAgPSBwYXRocy5wcyA9IHBhdGhzLnBzIHx8IHt9O1xuXG4gIGlmIChwW3BzXSkge1xuICAgIHBbcHNdLnNsZWVwID0gMTAwO1xuICB9IGVsc2Uge1xuICAgIHBbcHNdID0ge1xuICAgICAgc2xlZXA6IDEwMFxuICAgIH07XG4gIH1cblxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGtleSBpbiBwKSB7XG4gICAgICBpZiAoaGFzUHJvcGVydHkocCwga2V5KSAmJiBrZXkgIT0gcHMpIHtcbiAgICAgICAgcFtrZXldLnNsZWVwLS07XG4gICAgICAgICFwW2tleV0uc2xlZXAgJiYgZGVsZXRlIHBba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwW3BzXTtcbn1cblxuZnVuY3Rpb24gcmVjdEJCb3goeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgeSA9IHgueTtcbiAgICB3aWR0aCA9IHgud2lkdGg7XG4gICAgaGVpZ2h0ID0geC5oZWlnaHQ7XG4gICAgeCA9IHgueDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogeCxcbiAgICB5OiB5LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4MjogeCArIHdpZHRoLFxuICAgIHkyOiB5ICsgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhdGhUb1N0cmluZygpIHtcbiAgcmV0dXJuIHRoaXMuam9pbignLCcpLnJlcGxhY2UocDJzLCAnJDEnKTtcbn1cblxuZnVuY3Rpb24gcGF0aENsb25lKHBhdGhBcnJheSkge1xuICB2YXIgcmVzID0gY2xvbmUocGF0aEFycmF5KTtcbiAgcmVzLnRvU3RyaW5nID0gcGF0aFRvU3RyaW5nO1xuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmaW5kRG90c0F0U2VnbWVudChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeSwgdCkge1xuICB2YXIgdDEgPSAxIC0gdCxcbiAgICAgIHQxMyA9IHBvdyh0MSwgMyksXG4gICAgICB0MTIgPSBwb3codDEsIDIpLFxuICAgICAgdDIgPSB0ICogdCxcbiAgICAgIHQzID0gdDIgKiB0LFxuICAgICAgeCA9IHQxMyAqIHAxeCArIHQxMiAqIDMgKiB0ICogYzF4ICsgdDEgKiAzICogdCAqIHQgKiBjMnggKyB0MyAqIHAyeCxcbiAgICAgIHkgPSB0MTMgKiBwMXkgKyB0MTIgKiAzICogdCAqIGMxeSArIHQxICogMyAqIHQgKiB0ICogYzJ5ICsgdDMgKiBwMnk7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBmaXhFcnJvcih4KSxcbiAgICB5OiBmaXhFcnJvcih5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBiZXppZXJCQm94KHBvaW50cykge1xuXG4gIHZhciBiYm94ID0gY3VydmVCQm94LmFwcGx5KG51bGwsIHBvaW50cyk7XG5cbiAgcmV0dXJuIHJlY3RCQm94KFxuICAgIGJib3gueDAsXG4gICAgYmJveC55MCxcbiAgICBiYm94LngxIC0gYmJveC54MCxcbiAgICBiYm94LnkxIC0gYmJveC55MFxuICApO1xufVxuXG5mdW5jdGlvbiBpc1BvaW50SW5zaWRlQkJveChiYm94LCB4LCB5KSB7XG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gaXNCQm94SW50ZXJzZWN0KGJib3gxLCBiYm94Mikge1xuICBiYm94MSA9IHJlY3RCQm94KGJib3gxKTtcbiAgYmJveDIgPSByZWN0QkJveChiYm94Mik7XG4gIHJldHVybiBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueCwgYmJveDEueSlcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueDIsIGJib3gxLnkpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJib3gxLngsIGJib3gxLnkyKVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54MiwgYmJveDEueTIpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngsIGJib3gyLnkpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngyLCBiYm94Mi55KVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54LCBiYm94Mi55MilcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIueDIsIGJib3gyLnkyKVxuICAgIHx8IChiYm94MS54IDwgYmJveDIueDIgJiYgYmJveDEueCA+IGJib3gyLnhcbiAgICAgICAgfHwgYmJveDIueCA8IGJib3gxLngyICYmIGJib3gyLnggPiBiYm94MS54KVxuICAgICYmIChiYm94MS55IDwgYmJveDIueTIgJiYgYmJveDEueSA+IGJib3gyLnlcbiAgICAgICAgfHwgYmJveDIueSA8IGJib3gxLnkyICYmIGJib3gyLnkgPiBiYm94MS55KTtcbn1cblxuZnVuY3Rpb24gYmFzZTModCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgdmFyIHQxID0gLTMgKiBwMSArIDkgKiBwMiAtIDkgKiBwMyArIDMgKiBwNCxcbiAgICAgIHQyID0gdCAqIHQxICsgNiAqIHAxIC0gMTIgKiBwMiArIDYgKiBwMztcbiAgcmV0dXJuIHQgKiB0MiAtIDMgKiBwMSArIDMgKiBwMjtcbn1cblxuZnVuY3Rpb24gYmV6bGVuKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgeikge1xuXG4gIGlmICh6ID09IG51bGwpIHtcbiAgICB6ID0gMTtcbiAgfVxuXG4gIHogPSB6ID4gMSA/IDEgOiB6IDwgMCA/IDAgOiB6O1xuXG4gIHZhciB6MiA9IHogLyAyLFxuICAgICAgbiA9IDEyLFxuICAgICAgVHZhbHVlcyA9IFstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3MywtLjc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sXG4gICAgICBDdmFsdWVzID0gWzAuMjQ5MSwwLjI0OTEsMC4yMzM1LDAuMjMzNSwwLjIwMzIsMC4yMDMyLDAuMTYwMSwwLjE2MDEsMC4xMDY5LDAuMTA2OSwwLjA0NzIsMC4wNDcyXSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICB2YXIgY3QgPSB6MiAqIFR2YWx1ZXNbaV0gKyB6MixcbiAgICAgICAgeGJhc2UgPSBiYXNlMyhjdCwgeDEsIHgyLCB4MywgeDQpLFxuICAgICAgICB5YmFzZSA9IGJhc2UzKGN0LCB5MSwgeTIsIHkzLCB5NCksXG4gICAgICAgIGNvbWIgPSB4YmFzZSAqIHhiYXNlICsgeWJhc2UgKiB5YmFzZTtcblxuICAgIHN1bSArPSBDdmFsdWVzW2ldICogbWF0aC5zcXJ0KGNvbWIpO1xuICB9XG5cbiAgcmV0dXJuIHoyICogc3VtO1xufVxuXG5cbmZ1bmN0aW9uIGludGVyc2VjdExpbmVzKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCkge1xuXG4gIGlmIChcbiAgICBtbWF4KHgxLCB4MikgPCBtbWluKHgzLCB4NCkgfHxcbiAgICAgIG1taW4oeDEsIHgyKSA+IG1tYXgoeDMsIHg0KSB8fFxuICAgICAgbW1heCh5MSwgeTIpIDwgbW1pbih5MywgeTQpIHx8XG4gICAgICBtbWluKHkxLCB5MikgPiBtbWF4KHkzLCB5NClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG54ID0gKHgxICogeTIgLSB5MSAqIHgyKSAqICh4MyAtIHg0KSAtICh4MSAtIHgyKSAqICh4MyAqIHk0IC0geTMgKiB4NCksXG4gICAgICBueSA9ICh4MSAqIHkyIC0geTEgKiB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgKiB5NCAtIHkzICogeDQpLFxuICAgICAgZGVub21pbmF0b3IgPSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4NCk7XG5cbiAgaWYgKCFkZW5vbWluYXRvcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBweCA9IGZpeEVycm9yKG54IC8gZGVub21pbmF0b3IpLFxuICAgICAgcHkgPSBmaXhFcnJvcihueSAvIGRlbm9taW5hdG9yKSxcbiAgICAgIHB4MiA9ICtweC50b0ZpeGVkKDIpLFxuICAgICAgcHkyID0gK3B5LnRvRml4ZWQoMik7XG5cbiAgaWYgKFxuICAgIHB4MiA8ICttbWluKHgxLCB4MikudG9GaXhlZCgyKSB8fFxuICAgICAgcHgyID4gK21tYXgoeDEsIHgyKS50b0ZpeGVkKDIpIHx8XG4gICAgICBweDIgPCArbW1pbih4MywgeDQpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB4MiA+ICttbWF4KHgzLCB4NCkudG9GaXhlZCgyKSB8fFxuICAgICAgcHkyIDwgK21taW4oeTEsIHkyKS50b0ZpeGVkKDIpIHx8XG4gICAgICBweTIgPiArbW1heCh5MSwgeTIpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB5MiA8ICttbWluKHkzLCB5NCkudG9GaXhlZCgyKSB8fFxuICAgICAgcHkyID4gK21tYXgoeTMsIHk0KS50b0ZpeGVkKDIpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHB4LCB5OiBweSB9O1xufVxuXG5mdW5jdGlvbiBmaXhFcnJvcihudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogMTAwMDAwMDAwMDAwKSAvIDEwMDAwMDAwMDAwMDtcbn1cblxuZnVuY3Rpb24gZmluZEJlemllckludGVyc2VjdGlvbnMoYmV6MSwgYmV6MiwganVzdENvdW50KSB7XG4gIHZhciBiYm94MSA9IGJlemllckJCb3goYmV6MSksXG4gICAgICBiYm94MiA9IGJlemllckJCb3goYmV6Mik7XG5cbiAgaWYgKCFpc0JCb3hJbnRlcnNlY3QoYmJveDEsIGJib3gyKSkge1xuICAgIHJldHVybiBqdXN0Q291bnQgPyAwIDogW107XG4gIH1cblxuICAvLyBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmVzIHdpbGwgaGF2ZSBvbmx5IDEgc2VnbWVudFxuXG4gIHZhciBsMSA9IGJlemxlbi5hcHBseSgwLCBiZXoxKSxcbiAgICAgIGwyID0gYmV6bGVuLmFwcGx5KDAsIGJlejIpLFxuICAgICAgbjEgPSBpc0xpbmUoYmV6MSkgPyAxIDogfn4obDEgLyA1KSB8fCAxLFxuICAgICAgbjIgPSBpc0xpbmUoYmV6MikgPyAxIDogfn4obDIgLyA1KSB8fCAxLFxuICAgICAgZG90czEgPSBbXSxcbiAgICAgIGRvdHMyID0gW10sXG4gICAgICB4eSA9IHt9LFxuICAgICAgcmVzID0ganVzdENvdW50ID8gMCA6IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjEgKyAxOyBpKyspIHtcbiAgICB2YXIgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejEuY29uY2F0KGkgLyBuMSkpO1xuICAgIGRvdHMxLnB1c2goeyB4OiBwLngsIHk6IHAueSwgdDogaSAvIG4xIH0pO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG4yICsgMTsgaSsrKSB7XG4gICAgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejIuY29uY2F0KGkgLyBuMikpO1xuICAgIGRvdHMyLnB1c2goeyB4OiBwLngsIHk6IHAueSwgdDogaSAvIG4yIH0pO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG4xOyBpKyspIHtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjI7IGorKykge1xuICAgICAgdmFyIGRpID0gZG90czFbaV0sXG4gICAgICAgICAgZGkxID0gZG90czFbaSArIDFdLFxuICAgICAgICAgIGRqID0gZG90czJbal0sXG4gICAgICAgICAgZGoxID0gZG90czJbaiArIDFdLFxuICAgICAgICAgIGNpID0gYWJzKGRpMS54IC0gZGkueCkgPCAuMDEgPyAneScgOiAneCcsXG4gICAgICAgICAgY2ogPSBhYnMoZGoxLnggLSBkai54KSA8IC4wMSA/ICd5JyA6ICd4JyxcbiAgICAgICAgICBpcyA9IGludGVyc2VjdExpbmVzKGRpLngsIGRpLnksIGRpMS54LCBkaTEueSwgZGoueCwgZGoueSwgZGoxLngsIGRqMS55KSxcbiAgICAgICAgICBrZXk7XG5cbiAgICAgIGlmIChpcykge1xuICAgICAgICBrZXkgPSBpcy54LnRvRml4ZWQoOSkgKyAnIycgKyBpcy55LnRvRml4ZWQoOSk7XG5cbiAgICAgICAgaWYgKHh5W2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHh5W2tleV0gPSB0cnVlO1xuXG4gICAgICAgIHZhciB0MSA9IGRpLnQgKyBhYnMoKGlzW2NpXSAtIGRpW2NpXSkgLyAoZGkxW2NpXSAtIGRpW2NpXSkpICogKGRpMS50IC0gZGkudCksXG4gICAgICAgICAgICB0MiA9IGRqLnQgKyBhYnMoKGlzW2NqXSAtIGRqW2NqXSkgLyAoZGoxW2NqXSAtIGRqW2NqXSkpICogKGRqMS50IC0gZGoudCk7XG5cbiAgICAgICAgaWYgKHQxID49IDAgJiYgdDEgPD0gMSAmJiB0MiA+PSAwICYmIHQyIDw9IDEpIHtcblxuICAgICAgICAgIGlmIChqdXN0Q291bnQpIHtcbiAgICAgICAgICAgIHJlcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgIHg6IGlzLngsXG4gICAgICAgICAgICAgIHk6IGlzLnksXG4gICAgICAgICAgICAgIHQxOiB0MSxcbiAgICAgICAgICAgICAgdDI6IHQyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5cbi8qKlxuICogRmluZCBvciBjb3VudHMgdGhlIGludGVyc2VjdGlvbnMgYmV0d2VlbiB0d28gU1ZHIHBhdGhzLlxuICpcbiAqIFJldHVybnMgYSBudW1iZXIgaW4gY291bnRpbmcgbW9kZSBhbmQgYSBsaXN0IG9mIGludGVyc2VjdGlvbnMgb3RoZXJ3aXNlLlxuICpcbiAqIEEgc2luZ2xlIGludGVyc2VjdGlvbiBlbnRyeSBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIGNvb3JkaW5hdGVzICh4LCB5KVxuICogYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgaW50ZXJzZWN0aW5nIHNlZ21lbnRzXG4gKiBvbiBlYWNoIHBhdGggKHNlZ21lbnQxLCBzZWdtZW50MikgYW5kIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiB0aGVcbiAqIGludGVyc2VjdGlvbiBvbiB0aGVzZSBzZWdtZW50cyAodDEsIHQyKS5cbiAqXG4gKiBUaGUgcGF0aCBtYXkgYmUgYW4gU1ZHIHBhdGggc3RyaW5nIG9yIGEgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHNcbiAqIHN1Y2ggYXMgYFsgWyAnTScsIDAsIDEwIF0sIFsgJ0wnLCAyMCwgMCBdIF1gLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGludGVyc2VjdGlvbnMgPSBmaW5kUGF0aEludGVyc2VjdGlvbnMoXG4gKiAgICdNMCwwTDEwMCwxMDAnLFxuICogICBbIFsgJ00nLCAwLCAxMDAgXSwgWyAnTCcsIDEwMCwgMCBdIF1cbiAqICk7XG4gKlxuICogLy8gaW50ZXJzZWN0aW9ucyA9IFtcbiAqIC8vICAgeyB4OiA1MCwgeTogNTAsIHNlZ21lbnQxOiAxLCBzZWdtZW50MjogMSwgdDE6IDAuNSwgdDI6IDAuNSB9XG4gKiAvLyBdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8UGF0aERlZj59IHBhdGgxXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxQYXRoRGVmPn0gcGF0aDJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2p1c3RDb3VudD1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxJbnRlcnNlY3Rpb24+fE51bWJlcn1cbiAqL1xuZnVuY3Rpb24gZmluZFBhdGhJbnRlcnNlY3Rpb25zKHBhdGgxLCBwYXRoMiwganVzdENvdW50KSB7XG4gIHBhdGgxID0gcGF0aFRvQ3VydmUocGF0aDEpO1xuICBwYXRoMiA9IHBhdGhUb0N1cnZlKHBhdGgyKTtcblxuICB2YXIgeDEsIHkxLCB4MiwgeTIsIHgxbSwgeTFtLCB4Mm0sIHkybSwgYmV6MSwgYmV6MixcbiAgICAgIHJlcyA9IGp1c3RDb3VudCA/IDAgOiBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoMS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgdmFyIHBpID0gcGF0aDFbaV07XG5cbiAgICBpZiAocGlbMF0gPT0gJ00nKSB7XG4gICAgICB4MSA9IHgxbSA9IHBpWzFdO1xuICAgICAgeTEgPSB5MW0gPSBwaVsyXTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAocGlbMF0gPT0gJ0MnKSB7XG4gICAgICAgIGJlejEgPSBbeDEsIHkxXS5jb25jYXQocGkuc2xpY2UoMSkpO1xuICAgICAgICB4MSA9IGJlejFbNl07XG4gICAgICAgIHkxID0gYmV6MVs3XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlejEgPSBbeDEsIHkxLCB4MSwgeTEsIHgxbSwgeTFtLCB4MW0sIHkxbV07XG4gICAgICAgIHgxID0geDFtO1xuICAgICAgICB5MSA9IHkxbTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcGF0aDIubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICB2YXIgcGogPSBwYXRoMltqXTtcblxuICAgICAgICBpZiAocGpbMF0gPT0gJ00nKSB7XG4gICAgICAgICAgeDIgPSB4Mm0gPSBwalsxXTtcbiAgICAgICAgICB5MiA9IHkybSA9IHBqWzJdO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgaWYgKHBqWzBdID09ICdDJykge1xuICAgICAgICAgICAgYmV6MiA9IFt4MiwgeTJdLmNvbmNhdChwai5zbGljZSgxKSk7XG4gICAgICAgICAgICB4MiA9IGJlejJbNl07XG4gICAgICAgICAgICB5MiA9IGJlejJbN107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJlejIgPSBbeDIsIHkyLCB4MiwgeTIsIHgybSwgeTJtLCB4Mm0sIHkybV07XG4gICAgICAgICAgICB4MiA9IHgybTtcbiAgICAgICAgICAgIHkyID0geTJtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbnRyID0gZmluZEJlemllckludGVyc2VjdGlvbnMoYmV6MSwgYmV6MiwganVzdENvdW50KTtcblxuICAgICAgICAgIGlmIChqdXN0Q291bnQpIHtcbiAgICAgICAgICAgIHJlcyArPSBpbnRyO1xuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IGludHIubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgICAgICAgICBpbnRyW2tdLnNlZ21lbnQxID0gaTtcbiAgICAgICAgICAgICAgaW50cltrXS5zZWdtZW50MiA9IGo7XG4gICAgICAgICAgICAgIGludHJba10uYmV6MSA9IGJlejE7XG4gICAgICAgICAgICAgIGludHJba10uYmV6MiA9IGJlejI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoaW50cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuXG5mdW5jdGlvbiBwYXRoVG9BYnNvbHV0ZShwYXRoQXJyYXkpIHtcbiAgdmFyIHB0aCA9IHBhdGhzKHBhdGhBcnJheSk7XG5cbiAgaWYgKHB0aC5hYnMpIHtcbiAgICByZXR1cm4gcGF0aENsb25lKHB0aC5hYnMpO1xuICB9XG5cbiAgaWYgKCFpc0FycmF5KHBhdGhBcnJheSkgfHwgIWlzQXJyYXkocGF0aEFycmF5ICYmIHBhdGhBcnJheVswXSkpIHsgLy8gcm91Z2ggYXNzdW1wdGlvblxuICAgIHBhdGhBcnJheSA9IHBhcnNlUGF0aFN0cmluZyhwYXRoQXJyYXkpO1xuICB9XG5cbiAgaWYgKCFwYXRoQXJyYXkgfHwgIXBhdGhBcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW1snTScsIDAsIDBdXTtcbiAgfVxuXG4gIHZhciByZXMgPSBbXSxcbiAgICAgIHggPSAwLFxuICAgICAgeSA9IDAsXG4gICAgICBteCA9IDAsXG4gICAgICBteSA9IDAsXG4gICAgICBzdGFydCA9IDAsXG4gICAgICBwYTA7XG5cbiAgaWYgKHBhdGhBcnJheVswXVswXSA9PSAnTScpIHtcbiAgICB4ID0gK3BhdGhBcnJheVswXVsxXTtcbiAgICB5ID0gK3BhdGhBcnJheVswXVsyXTtcbiAgICBteCA9IHg7XG4gICAgbXkgPSB5O1xuICAgIHN0YXJ0Kys7XG4gICAgcmVzWzBdID0gWydNJywgeCwgeV07XG4gIH1cblxuICBmb3IgKHZhciByLCBwYSwgaSA9IHN0YXJ0LCBpaSA9IHBhdGhBcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcmVzLnB1c2gociA9IFtdKTtcbiAgICBwYSA9IHBhdGhBcnJheVtpXTtcbiAgICBwYTAgPSBwYVswXTtcblxuICAgIGlmIChwYTAgIT0gcGEwLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIHJbMF0gPSBwYTAudG9VcHBlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChyWzBdKSB7XG4gICAgICBjYXNlICdBJzpcbiAgICAgICAgclsxXSA9IHBhWzFdO1xuICAgICAgICByWzJdID0gcGFbMl07XG4gICAgICAgIHJbM10gPSBwYVszXTtcbiAgICAgICAgcls0XSA9IHBhWzRdO1xuICAgICAgICByWzVdID0gcGFbNV07XG4gICAgICAgIHJbNl0gPSArcGFbNl0gKyB4O1xuICAgICAgICByWzddID0gK3BhWzddICsgeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdWJzpcbiAgICAgICAgclsxXSA9ICtwYVsxXSArIHk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSCc6XG4gICAgICAgIHJbMV0gPSArcGFbMV0gKyB4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgICBteCA9ICtwYVsxXSArIHg7XG4gICAgICAgIG15ID0gK3BhWzJdICsgeTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZvciAodmFyIGogPSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICByW2pdID0gK3BhW2pdICsgKChqICUgMikgPyB4IDogeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gcGEubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgICByW2tdID0gcGFba107XG4gICAgICB9XG4gICAgfVxuICAgIHBhMCA9IHBhMC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChyWzBdKSB7XG4gICAgY2FzZSAnWic6XG4gICAgICB4ID0gK214O1xuICAgICAgeSA9ICtteTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0gnOlxuICAgICAgeCA9IHJbMV07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdWJzpcbiAgICAgIHkgPSByWzFdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTSc6XG4gICAgICBteCA9IHJbci5sZW5ndGggLSAyXTtcbiAgICAgIG15ID0gcltyLmxlbmd0aCAtIDFdO1xuICAgIGRlZmF1bHQ6XG4gICAgICB4ID0gcltyLmxlbmd0aCAtIDJdO1xuICAgICAgeSA9IHJbci5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH1cblxuICByZXMudG9TdHJpbmcgPSBwYXRoVG9TdHJpbmc7XG4gIHB0aC5hYnMgPSBwYXRoQ2xvbmUocmVzKTtcblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBpc0xpbmUoYmV6KSB7XG4gIHJldHVybiAoXG4gICAgYmV6WzBdID09PSBiZXpbMl0gJiZcbiAgICBiZXpbMV0gPT09IGJlelszXSAmJlxuICAgIGJlels0XSA9PT0gYmV6WzZdICYmXG4gICAgYmV6WzVdID09PSBiZXpbN11cbiAgKTtcbn1cblxuZnVuY3Rpb24gbGluZVRvQ3VydmUoeDEsIHkxLCB4MiwgeTIpIHtcbiAgcmV0dXJuIFtcbiAgICB4MSwgeTEsIHgyLFxuICAgIHkyLCB4MiwgeTJcbiAgXTtcbn1cblxuZnVuY3Rpb24gcXViaWNUb0N1cnZlKHgxLCB5MSwgYXgsIGF5LCB4MiwgeTIpIHtcbiAgdmFyIF8xMyA9IDEgLyAzLFxuICAgICAgXzIzID0gMiAvIDM7XG5cbiAgcmV0dXJuIFtcbiAgICBfMTMgKiB4MSArIF8yMyAqIGF4LFxuICAgIF8xMyAqIHkxICsgXzIzICogYXksXG4gICAgXzEzICogeDIgKyBfMjMgKiBheCxcbiAgICBfMTMgKiB5MiArIF8yMyAqIGF5LFxuICAgIHgyLFxuICAgIHkyXG4gIF07XG59XG5cbmZ1bmN0aW9uIGFyY1RvQ3VydmUoeDEsIHkxLCByeCwgcnksIGFuZ2xlLCBsYXJnZV9hcmNfZmxhZywgc3dlZXBfZmxhZywgeDIsIHkyLCByZWN1cnNpdmUpIHtcblxuICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvZiB3aGVyZSB0aGlzIG1hdGggY2FtZSBmcm9tIHZpc2l0OlxuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXNcbiAgdmFyIF8xMjAgPSBQSSAqIDEyMCAvIDE4MCxcbiAgICAgIHJhZCA9IFBJIC8gMTgwICogKCthbmdsZSB8fCAwKSxcbiAgICAgIHJlcyA9IFtdLFxuICAgICAgeHksXG4gICAgICByb3RhdGUgPSBjYWNoZXIoZnVuY3Rpb24oeCwgeSwgcmFkKSB7XG4gICAgICAgIHZhciBYID0geCAqIG1hdGguY29zKHJhZCkgLSB5ICogbWF0aC5zaW4ocmFkKSxcbiAgICAgICAgICAgIFkgPSB4ICogbWF0aC5zaW4ocmFkKSArIHkgKiBtYXRoLmNvcyhyYWQpO1xuXG4gICAgICAgIHJldHVybiB7IHg6IFgsIHk6IFkgfTtcbiAgICAgIH0pO1xuXG4gIGlmICghcmVjdXJzaXZlKSB7XG4gICAgeHkgPSByb3RhdGUoeDEsIHkxLCAtcmFkKTtcbiAgICB4MSA9IHh5Lng7XG4gICAgeTEgPSB4eS55O1xuICAgIHh5ID0gcm90YXRlKHgyLCB5MiwgLXJhZCk7XG4gICAgeDIgPSB4eS54O1xuICAgIHkyID0geHkueTtcblxuICAgIHZhciB4ID0gKHgxIC0geDIpIC8gMixcbiAgICAgICAgeSA9ICh5MSAtIHkyKSAvIDI7XG5cbiAgICB2YXIgaCA9ICh4ICogeCkgLyAocnggKiByeCkgKyAoeSAqIHkpIC8gKHJ5ICogcnkpO1xuXG4gICAgaWYgKGggPiAxKSB7XG4gICAgICBoID0gbWF0aC5zcXJ0KGgpO1xuICAgICAgcnggPSBoICogcng7XG4gICAgICByeSA9IGggKiByeTtcbiAgICB9XG5cbiAgICB2YXIgcngyID0gcnggKiByeCxcbiAgICAgICAgcnkyID0gcnkgKiByeSxcbiAgICAgICAgayA9IChsYXJnZV9hcmNfZmxhZyA9PSBzd2VlcF9mbGFnID8gLTEgOiAxKSAqXG4gICAgICAgICAgICBtYXRoLnNxcnQoYWJzKChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAtIHJ5MiAqIHggKiB4KSAvIChyeDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkpLFxuICAgICAgICBjeCA9IGsgKiByeCAqIHkgLyByeSArICh4MSArIHgyKSAvIDIsXG4gICAgICAgIGN5ID0gayAqIC1yeSAqIHggLyByeCArICh5MSArIHkyKSAvIDIsXG4gICAgICAgIGYxID0gbWF0aC5hc2luKCgoeTEgLSBjeSkgLyByeSkudG9GaXhlZCg5KSksXG4gICAgICAgIGYyID0gbWF0aC5hc2luKCgoeTIgLSBjeSkgLyByeSkudG9GaXhlZCg5KSk7XG5cbiAgICBmMSA9IHgxIDwgY3ggPyBQSSAtIGYxIDogZjE7XG4gICAgZjIgPSB4MiA8IGN4ID8gUEkgLSBmMiA6IGYyO1xuICAgIGYxIDwgMCAmJiAoZjEgPSBQSSAqIDIgKyBmMSk7XG4gICAgZjIgPCAwICYmIChmMiA9IFBJICogMiArIGYyKTtcblxuICAgIGlmIChzd2VlcF9mbGFnICYmIGYxID4gZjIpIHtcbiAgICAgIGYxID0gZjEgLSBQSSAqIDI7XG4gICAgfVxuICAgIGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYxKSB7XG4gICAgICBmMiA9IGYyIC0gUEkgKiAyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmMSA9IHJlY3Vyc2l2ZVswXTtcbiAgICBmMiA9IHJlY3Vyc2l2ZVsxXTtcbiAgICBjeCA9IHJlY3Vyc2l2ZVsyXTtcbiAgICBjeSA9IHJlY3Vyc2l2ZVszXTtcbiAgfVxuXG4gIHZhciBkZiA9IGYyIC0gZjE7XG5cbiAgaWYgKGFicyhkZikgPiBfMTIwKSB7XG4gICAgdmFyIGYyb2xkID0gZjIsXG4gICAgICAgIHgyb2xkID0geDIsXG4gICAgICAgIHkyb2xkID0geTI7XG5cbiAgICBmMiA9IGYxICsgXzEyMCAqIChzd2VlcF9mbGFnICYmIGYyID4gZjEgPyAxIDogLTEpO1xuICAgIHgyID0gY3ggKyByeCAqIG1hdGguY29zKGYyKTtcbiAgICB5MiA9IGN5ICsgcnkgKiBtYXRoLnNpbihmMik7XG4gICAgcmVzID0gYXJjVG9DdXJ2ZSh4MiwgeTIsIHJ4LCByeSwgYW5nbGUsIDAsIHN3ZWVwX2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBmMm9sZCwgY3gsIGN5XSk7XG4gIH1cblxuICBkZiA9IGYyIC0gZjE7XG5cbiAgdmFyIGMxID0gbWF0aC5jb3MoZjEpLFxuICAgICAgczEgPSBtYXRoLnNpbihmMSksXG4gICAgICBjMiA9IG1hdGguY29zKGYyKSxcbiAgICAgIHMyID0gbWF0aC5zaW4oZjIpLFxuICAgICAgdCA9IG1hdGgudGFuKGRmIC8gNCksXG4gICAgICBoeCA9IDQgLyAzICogcnggKiB0LFxuICAgICAgaHkgPSA0IC8gMyAqIHJ5ICogdCxcbiAgICAgIG0xID0gW3gxLCB5MV0sXG4gICAgICBtMiA9IFt4MSArIGh4ICogczEsIHkxIC0gaHkgKiBjMV0sXG4gICAgICBtMyA9IFt4MiArIGh4ICogczIsIHkyIC0gaHkgKiBjMl0sXG4gICAgICBtNCA9IFt4MiwgeTJdO1xuXG4gIG0yWzBdID0gMiAqIG0xWzBdIC0gbTJbMF07XG4gIG0yWzFdID0gMiAqIG0xWzFdIC0gbTJbMV07XG5cbiAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgIHJldHVybiBbbTIsIG0zLCBtNF0uY29uY2F0KHJlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzID0gW20yLCBtMywgbTRdLmNvbmNhdChyZXMpLmpvaW4oKS5zcGxpdCgnLCcpO1xuICAgIHZhciBuZXdyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBuZXdyZXNbaV0gPSBpICUgMiA/IHJvdGF0ZShyZXNbaSAtIDFdLCByZXNbaV0sIHJhZCkueSA6IHJvdGF0ZShyZXNbaV0sIHJlc1tpICsgMV0sIHJhZCkueDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3cmVzO1xuICB9XG59XG5cbi8vIFJldHVybnMgYm91bmRpbmcgYm94IG9mIGN1YmljIGJlemllciBjdXJ2ZS5cbi8vIFNvdXJjZTogaHR0cDovL2Jsb2cuaGFja2Vycy1jYWZlLm5ldC8yMDA5LzA2L2hvdy10by1jYWxjdWxhdGUtYmV6aWVyLWN1cnZlcy1ib3VuZGluZy5odG1sXG4vLyBPcmlnaW5hbCB2ZXJzaW9uOiBOSVNISU8gSGlyb2thenVcbi8vIE1vZGlmaWNhdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vMjIzNDVcbmZ1bmN0aW9uIGN1cnZlQkJveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHR2YWx1ZXMgPSBbXSxcbiAgICAgIGJvdW5kcyA9IFtbXSwgW11dLFxuICAgICAgYSwgYiwgYywgdCwgdDEsIHQyLCBiMmFjLCBzcXJ0YjJhYztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkge1xuXG4gICAgaWYgKGkgPT0gMCkge1xuICAgICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7XG4gICAgICBhID0gLTMgKiB4MCArIDkgKiB4MSAtIDkgKiB4MiArIDMgKiB4MztcbiAgICAgIGMgPSAzICogeDEgLSAzICogeDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGIgPSA2ICogeTAgLSAxMiAqIHkxICsgNiAqIHkyO1xuICAgICAgYSA9IC0zICogeTAgKyA5ICogeTEgLSA5ICogeTIgKyAzICogeTM7XG4gICAgICBjID0gMyAqIHkxIC0gMyAqIHkwO1xuICAgIH1cblxuICAgIGlmIChhYnMoYSkgPCAxZS0xMikge1xuXG4gICAgICBpZiAoYWJzKGIpIDwgMWUtMTIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHQgPSAtYyAvIGI7XG5cbiAgICAgIGlmICgwIDwgdCAmJiB0IDwgMSkge1xuICAgICAgICB0dmFsdWVzLnB1c2godCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGIyYWMgPSBiICogYiAtIDQgKiBjICogYTtcbiAgICBzcXJ0YjJhYyA9IG1hdGguc3FydChiMmFjKTtcblxuICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdDEgPSAoLWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgaWYgKDAgPCB0MSAmJiB0MSA8IDEpIHtcbiAgICAgIHR2YWx1ZXMucHVzaCh0MSk7XG4gICAgfVxuXG4gICAgdDIgPSAoLWIgLSBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgaWYgKDAgPCB0MiAmJiB0MiA8IDEpIHtcbiAgICAgIHR2YWx1ZXMucHVzaCh0Mik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGogPSB0dmFsdWVzLmxlbmd0aCxcbiAgICAgIGpsZW4gPSBqLFxuICAgICAgbXQ7XG5cbiAgd2hpbGUgKGotLSkge1xuICAgIHQgPSB0dmFsdWVzW2pdO1xuICAgIG10ID0gMSAtIHQ7XG4gICAgYm91bmRzWzBdW2pdID0gKG10ICogbXQgKiBtdCAqIHgwKSArICgzICogbXQgKiBtdCAqIHQgKiB4MSkgKyAoMyAqIG10ICogdCAqIHQgKiB4MikgKyAodCAqIHQgKiB0ICogeDMpO1xuICAgIGJvdW5kc1sxXVtqXSA9IChtdCAqIG10ICogbXQgKiB5MCkgKyAoMyAqIG10ICogbXQgKiB0ICogeTEpICsgKDMgKiBtdCAqIHQgKiB0ICogeTIpICsgKHQgKiB0ICogdCAqIHkzKTtcbiAgfVxuXG4gIGJvdW5kc1swXVtqbGVuXSA9IHgwO1xuICBib3VuZHNbMV1bamxlbl0gPSB5MDtcbiAgYm91bmRzWzBdW2psZW4gKyAxXSA9IHgzO1xuICBib3VuZHNbMV1bamxlbiArIDFdID0geTM7XG4gIGJvdW5kc1swXS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7XG5cbiAgcmV0dXJuIHtcbiAgICB4MDogbW1pbi5hcHBseSgwLCBib3VuZHNbMF0pLFxuICAgIHkwOiBtbWluLmFwcGx5KDAsIGJvdW5kc1sxXSksXG4gICAgeDE6IG1tYXguYXBwbHkoMCwgYm91bmRzWzBdKSxcbiAgICB5MTogbW1heC5hcHBseSgwLCBib3VuZHNbMV0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhdGhUb0N1cnZlKHBhdGgpIHtcblxuICB2YXIgcHRoID0gcGF0aHMocGF0aCk7XG5cbiAgLy8gcmV0dXJuIGNhY2hlZCBjdXJ2ZSwgaWYgZXhpc3RpbmdcbiAgaWYgKHB0aC5jdXJ2ZSkge1xuICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLmN1cnZlKTtcbiAgfVxuXG4gIHZhciBjdXJ2ZWRQYXRoID0gcGF0aFRvQWJzb2x1dGUocGF0aCksXG4gICAgICBhdHRycyA9IHsgeDogMCwgeTogMCwgYng6IDAsIGJ5OiAwLCBYOiAwLCBZOiAwLCBxeDogbnVsbCwgcXk6IG51bGwgfSxcbiAgICAgIHByb2Nlc3NQYXRoID0gZnVuY3Rpb24ocGF0aCwgZCwgcGF0aENvbW1hbmQpIHtcbiAgICAgICAgdmFyIG54LCBueTtcblxuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gWydDJywgZC54LCBkLnksIGQueCwgZC55LCBkLngsIGQueV07XG4gICAgICAgIH1cblxuICAgICAgICAhKHBhdGhbMF0gaW4geyBUOiAxLCBROiAxIH0pICYmIChkLnF4ID0gZC5xeSA9IG51bGwpO1xuXG4gICAgICAgIHN3aXRjaCAocGF0aFswXSkge1xuICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICBkLlggPSBwYXRoWzFdO1xuICAgICAgICAgIGQuWSA9IHBhdGhbMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQoYXJjVG9DdXJ2ZS5hcHBseSgwLCBbZC54LCBkLnldLmNvbmNhdChwYXRoLnNsaWNlKDEpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICBpZiAocGF0aENvbW1hbmQgPT0gJ0MnIHx8IHBhdGhDb21tYW5kID09ICdTJykge1xuICAgICAgICAgICAgLy8gSW4gJ1MnIGNhc2Ugd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwgaWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgQy9TLlxuICAgICAgICAgICAgbnggPSBkLnggKiAyIC0gZC5ieDtcbiAgICAgICAgICAgIC8vIEFuZCByZWZsZWN0IHRoZSBwcmV2aW91c1xuICAgICAgICAgICAgbnkgPSBkLnkgKiAyIC0gZC5ieTtcbiAgICAgICAgICAgIC8vIGNvbW1hbmQncyBjb250cm9sIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50LlxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG9yIHNvbWUgZWxzZSBvciBub3RoaW5nXG4gICAgICAgICAgICBueCA9IGQueDtcbiAgICAgICAgICAgIG55ID0gZC55O1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoID0gWydDJywgbngsIG55XS5jb25jYXQocGF0aC5zbGljZSgxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgIGlmIChwYXRoQ29tbWFuZCA9PSAnUScgfHwgcGF0aENvbW1hbmQgPT0gJ1QnKSB7XG4gICAgICAgICAgICAvLyBJbiAnVCcgY2FzZSB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50LCBpZiB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBRL1QuXG4gICAgICAgICAgICBkLnF4ID0gZC54ICogMiAtIGQucXg7XG4gICAgICAgICAgICAvLyBBbmQgbWFrZSBhIHJlZmxlY3Rpb24gc2ltaWxhclxuICAgICAgICAgICAgZC5xeSA9IGQueSAqIDIgLSBkLnF5O1xuICAgICAgICAgICAgLy8gdG8gY2FzZSAnUycuXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gb3Igc29tZXRoaW5nIGVsc2Ugb3Igbm90aGluZ1xuICAgICAgICAgICAgZC5xeCA9IGQueDtcbiAgICAgICAgICAgIGQucXkgPSBkLnk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQocXViaWNUb0N1cnZlKGQueCwgZC55LCBkLnF4LCBkLnF5LCBwYXRoWzFdLCBwYXRoWzJdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgIGQucXggPSBwYXRoWzFdO1xuICAgICAgICAgIGQucXkgPSBwYXRoWzJdO1xuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQocXViaWNUb0N1cnZlKGQueCwgZC55LCBwYXRoWzFdLCBwYXRoWzJdLCBwYXRoWzNdLCBwYXRoWzRdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQobGluZVRvQ3VydmUoZC54LCBkLnksIHBhdGhbMV0sIHBhdGhbMl0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSCc6XG4gICAgICAgICAgcGF0aCA9IFsnQyddLmNvbmNhdChsaW5lVG9DdXJ2ZShkLngsIGQueSwgcGF0aFsxXSwgZC55KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1YnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQobGluZVRvQ3VydmUoZC54LCBkLnksIGQueCwgcGF0aFsxXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaJzpcbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KGxpbmVUb0N1cnZlKGQueCwgZC55LCBkLlgsIGQuWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9LFxuXG4gICAgICBmaXhBcmMgPSBmdW5jdGlvbihwcCwgaSkge1xuXG4gICAgICAgIGlmIChwcFtpXS5sZW5ndGggPiA3KSB7XG4gICAgICAgICAgcHBbaV0uc2hpZnQoKTtcbiAgICAgICAgICB2YXIgcGkgPSBwcFtpXTtcblxuICAgICAgICAgIHdoaWxlIChwaS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhdGhDb21tYW5kc1tpXSA9ICdBJzsgLy8gaWYgY3JlYXRlZCBtdWx0aXBsZSBDOnMsIHRoZWlyIG9yaWdpbmFsIHNlZyBpcyBzYXZlZFxuICAgICAgICAgICAgcHAuc3BsaWNlKGkrKywgMCwgWydDJ10uY29uY2F0KHBpLnNwbGljZSgwLCA2KSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBpaSA9IGN1cnZlZFBhdGgubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBwYXRoQ29tbWFuZHMgPSBbXSwgLy8gcGF0aCBjb21tYW5kcyBvZiBvcmlnaW5hbCBwYXRoIHBcbiAgICAgIHBmaXJzdCA9ICcnLCAvLyB0ZW1wb3JhcnkgaG9sZGVyIGZvciBvcmlnaW5hbCBwYXRoIGNvbW1hbmRcbiAgICAgIHBhdGhDb21tYW5kID0gJyc7IC8vIGhvbGRlciBmb3IgcHJldmlvdXMgcGF0aCBjb21tYW5kIG9mIG9yaWdpbmFsIHBhdGhcblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSBjdXJ2ZWRQYXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjdXJ2ZWRQYXRoW2ldICYmIChwZmlyc3QgPSBjdXJ2ZWRQYXRoW2ldWzBdKTsgLy8gc2F2ZSBjdXJyZW50IHBhdGggY29tbWFuZFxuXG4gICAgaWYgKHBmaXJzdCAhPSAnQycpIC8vIEMgaXMgbm90IHNhdmVkIHlldCwgYmVjYXVzZSBpdCBtYXkgYmUgcmVzdWx0IG9mIGNvbnZlcnNpb25cbiAgICB7XG4gICAgICBwYXRoQ29tbWFuZHNbaV0gPSBwZmlyc3Q7IC8vIFNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmRcbiAgICAgIGkgJiYgKHBhdGhDb21tYW5kID0gcGF0aENvbW1hbmRzW2kgLSAxXSk7IC8vIEdldCBwcmV2aW91cyBwYXRoIGNvbW1hbmQgcGF0aENvbW1hbmRcbiAgICB9XG4gICAgY3VydmVkUGF0aFtpXSA9IHByb2Nlc3NQYXRoKGN1cnZlZFBhdGhbaV0sIGF0dHJzLCBwYXRoQ29tbWFuZCk7IC8vIFByZXZpb3VzIHBhdGggY29tbWFuZCBpcyBpbnB1dHRlZCB0byBwcm9jZXNzUGF0aFxuXG4gICAgaWYgKHBhdGhDb21tYW5kc1tpXSAhPSAnQScgJiYgcGZpcnN0ID09ICdDJykgcGF0aENvbW1hbmRzW2ldID0gJ0MnOyAvLyBBIGlzIHRoZSBvbmx5IGNvbW1hbmRcbiAgICAvLyB3aGljaCBtYXkgcHJvZHVjZSBtdWx0aXBsZSBDOnNcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IEMgaXMgYWxzbyBDIGluIG9yaWdpbmFsIHBhdGhcblxuICAgIGZpeEFyYyhjdXJ2ZWRQYXRoLCBpKTsgLy8gZml4QXJjIGFkZHMgYWxzbyB0aGUgcmlnaHQgYW1vdW50IG9mIEE6cyB0byBwYXRoQ29tbWFuZHNcblxuICAgIHZhciBzZWcgPSBjdXJ2ZWRQYXRoW2ldLFxuICAgICAgICBzZWdsZW4gPSBzZWcubGVuZ3RoO1xuXG4gICAgYXR0cnMueCA9IHNlZ1tzZWdsZW4gLSAyXTtcbiAgICBhdHRycy55ID0gc2VnW3NlZ2xlbiAtIDFdO1xuICAgIGF0dHJzLmJ4ID0gdG9GbG9hdChzZWdbc2VnbGVuIC0gNF0pIHx8IGF0dHJzLng7XG4gICAgYXR0cnMuYnkgPSB0b0Zsb2F0KHNlZ1tzZWdsZW4gLSAzXSkgfHwgYXR0cnMueTtcbiAgfVxuXG4gIC8vIGNhY2hlIGN1cnZlXG4gIHB0aC5jdXJ2ZSA9IHBhdGhDbG9uZShjdXJ2ZWRQYXRoKTtcblxuICByZXR1cm4gY3VydmVkUGF0aDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kUGF0aEludGVyc2VjdGlvbnM7XG4iLCJ2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIEVOVElUWV9QQVRURVJOID0gLyYjKFxcZCspO3wmI3goWzAtOWEtZl0rKTt8JihcXHcrKTsvaWc7XG5cbnZhciBFTlRJVFlfTUFQUElORyA9IHtcbiAgJ2FtcCc6ICcmJyxcbiAgJ2Fwb3MnOiAnXFwnJyxcbiAgJ2d0JzogJz4nLFxuICAnbHQnOiAnPCcsXG4gICdxdW90JzogJ1wiJ1xufTtcblxuLy8gbWFwIFVQUEVSQ0FTRSB2YXJpYW50cyBvZiBzdXBwb3J0ZWQgc3BlY2lhbCBjaGFyc1xuT2JqZWN0LmtleXMoRU5USVRZX01BUFBJTkcpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICBFTlRJVFlfTUFQUElOR1trLnRvVXBwZXJDYXNlKCldID0gRU5USVRZX01BUFBJTkdba107XG59KTtcblxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXMoXywgZCwgeCwgeikge1xuXG4gIC8vIHJlc2VydmVkIG5hbWVzLCBpLmUuICZuYnNwO1xuICBpZiAoeikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKEVOVElUWV9NQVBQSU5HLCB6KSkge1xuICAgICAgcmV0dXJuIEVOVElUWV9NQVBQSU5HW3pdO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGZhbGwgYmFjayB0byBvcmlnaW5hbCB2YWx1ZVxuICAgICAgcmV0dXJuICcmJyArIHogKyAnOyc7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVjaW1hbCBlbmNvZGVkIGNoYXJcbiAgaWYgKGQpIHtcbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlKGQpO1xuICB9XG5cbiAgLy8gaGV4IGVuY29kZWQgY2hhclxuICByZXR1cm4gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHgsIDE2KSk7XG59XG5cblxuLyoqXG4gKiBBIGJhc2ljIGVudGl0eSBkZWNvZGVyIHRoYXQgY2FuIGRlY29kZSBhIG1pbmltYWxcbiAqIHN1Yi1zZXQgb2YgcmVzZXJ2ZWQgbmFtZXMgKCZhbXA7KSBhcyB3ZWxsIGFzXG4gKiBoZXggKCYjeGFhZjspIGFuZCBkZWNpbWFsICgmIzEyMzE7KSBlbmNvZGVkIGNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gZGVjb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlRW50aXRpZXMocykge1xuICBpZiAocy5sZW5ndGggPiAzICYmIHMuaW5kZXhPZignJicpICE9PSAtMSkge1xuICAgIHJldHVybiBzLnJlcGxhY2UoRU5USVRZX1BBVFRFUk4sIHJlcGxhY2VFbnRpdGllcyk7XG4gIH1cblxuICByZXR1cm4gcztcbn1cblxudmFyIFhTSV9VUkkgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnO1xudmFyIFhTSV9QUkVGSVggPSAneHNpJztcbnZhciBYU0lfVFlQRSA9ICd4c2k6dHlwZSc7XG5cbnZhciBOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSA9ICdub24td2hpdGVzcGFjZSBvdXRzaWRlIG9mIHJvb3Qgbm9kZSc7XG5cbmZ1bmN0aW9uIGVycm9yKG1zZykge1xuICByZXR1cm4gbmV3IEVycm9yKG1zZyk7XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiAnbWlzc2luZyBuYW1lc3BhY2UgZm9yIHByZWZpeCA8JyArIHByZWZpeCArICc+Jztcbn1cblxuZnVuY3Rpb24gZ2V0dGVyKGdldEZuKSB7XG4gIHJldHVybiB7XG4gICAgJ2dldCc6IGdldEZuLFxuICAgICdlbnVtZXJhYmxlJzogdHJ1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZU5zTWF0cml4KG5zTWF0cml4KSB7XG4gIHZhciBjbG9uZSA9IHt9LCBrZXk7XG4gIGZvciAoa2V5IGluIG5zTWF0cml4KSB7XG4gICAgY2xvbmVba2V5XSA9IG5zTWF0cml4W2tleV07XG4gIH1cbiAgcmV0dXJuIGNsb25lO1xufVxuXG5mdW5jdGlvbiB1cmlQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiBwcmVmaXggKyAnJHVyaSc7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTnNNYXRyaXgobnNVcmlUb1ByZWZpeCkge1xuICB2YXIgbnNNYXRyaXggPSB7fSxcbiAgICAgIHVyaSxcbiAgICAgIHByZWZpeDtcblxuICBmb3IgKHVyaSBpbiBuc1VyaVRvUHJlZml4KSB7XG4gICAgcHJlZml4ID0gbnNVcmlUb1ByZWZpeFt1cmldO1xuICAgIG5zTWF0cml4W3ByZWZpeF0gPSBwcmVmaXg7XG4gICAgbnNNYXRyaXhbdXJpUHJlZml4KHByZWZpeCldID0gdXJpO1xuICB9XG5cbiAgcmV0dXJuIG5zTWF0cml4O1xufVxuXG5mdW5jdGlvbiBub29wR2V0Q29udGV4dCgpIHtcbiAgcmV0dXJuIHsgJ2xpbmUnOiAwLCAnY29sdW1uJzogMCB9O1xufVxuXG5mdW5jdGlvbiB0aHJvd0Z1bmMoZXJyKSB7XG4gIHRocm93IGVycjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHBhcnNlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSAgeyFPYmplY3Q8c3RyaW5nLCA/Pj19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMpIHtcblxuICBpZiAoIXRoaXMpIHtcbiAgICByZXR1cm4gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBwcm94eSA9IG9wdGlvbnMgJiYgb3B0aW9uc1sncHJveHknXTtcblxuICB2YXIgb25UZXh0LFxuICAgICAgb25PcGVuVGFnLFxuICAgICAgb25DbG9zZVRhZyxcbiAgICAgIG9uQ0RBVEEsXG4gICAgICBvbkVycm9yID0gdGhyb3dGdW5jLFxuICAgICAgb25XYXJuaW5nLFxuICAgICAgb25Db21tZW50LFxuICAgICAgb25RdWVzdGlvbixcbiAgICAgIG9uQXR0ZW50aW9uO1xuXG4gIHZhciBnZXRDb250ZXh0ID0gbm9vcEdldENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIERvIHdlIG5lZWQgdG8gcGFyc2UgdGhlIGN1cnJlbnQgZWxlbWVudHMgYXR0cmlidXRlcyBmb3IgbmFtZXNwYWNlcz9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgbWF5YmVOUyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEbyB3ZSBwcm9jZXNzIG5hbWVzcGFjZXMgYXQgYWxsP1xuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHZhciBpc05hbWVzcGFjZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2F1Z2h0IGVycm9yIHJldHVybmVkIG9uIHBhcnNlIGVuZFxuICAgKlxuICAgKiBAdHlwZSB7RXJyb3J9XG4gICAqL1xuICB2YXIgcmV0dXJuRXJyb3IgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgd2Ugc3RvcCBwYXJzaW5nP1xuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHZhciBwYXJzZVN0b3AgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgeyB1cmk6IHByZWZpeCB9IHVzZWQgYnkgdGhlIHBhcnNlci5cbiAgICpcbiAgICogVGhpcyBtYXAgd2lsbCBlbnN1cmUgd2UgY2FuIG5vcm1hbGl6ZSBwcmVmaXhlcyBkdXJpbmcgcHJvY2Vzc2luZztcbiAgICogZm9yIGVhY2ggdXJpLCBvbmx5IG9uZSBwcmVmaXggd2lsbCBiZSBleHBvc2VkIHRvIHRoZSBoYW5kbGVycy5cbiAgICpcbiAgICogQHR5cGUgeyFPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fX1cbiAgICovXG4gIHZhciBuc1VyaVRvUHJlZml4O1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgcGFyc2UgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xFcnJvcn0gZXJyXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIGVyciA9IGVycm9yKGVycik7XG4gICAgfVxuXG4gICAgcmV0dXJuRXJyb3IgPSBlcnI7XG5cbiAgICBvbkVycm9yKGVyciwgZ2V0Q29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8RXJyb3J9IGVyclxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhlcnIpIHtcblxuICAgIGlmICghb25XYXJuaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICBlcnIgPSBlcnJvcihlcnIpO1xuICAgIH1cblxuICAgIG9uV2FybmluZyhlcnIsIGdldENvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHBhcnNlIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgbmFtZVxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2JcbiAgICpcbiAgICogQHJldHVybiB7UGFyc2VyfVxuICAgKi9cbiAgdGhpc1snb24nXSA9IGZ1bmN0aW9uKG5hbWUsIGNiKSB7XG5cbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8bmFtZSwgY2I+Jyk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnb3BlblRhZyc6IG9uT3BlblRhZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICd0ZXh0Jzogb25UZXh0ID0gY2I7IGJyZWFrO1xuICAgIGNhc2UgJ2Nsb3NlVGFnJzogb25DbG9zZVRhZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICdlcnJvcic6IG9uRXJyb3IgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnd2Fybic6IG9uV2FybmluZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICdjZGF0YSc6IG9uQ0RBVEEgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnYXR0ZW50aW9uJzogb25BdHRlbnRpb24gPSBjYjsgYnJlYWs7IC8vIDwhWFhYWFggenp6ej1cImVlZWVcIj5cbiAgICBjYXNlICdxdWVzdGlvbic6IG9uUXVlc3Rpb24gPSBjYjsgYnJlYWs7IC8vIDw/IC4uLi4gID8+XG4gICAgY2FzZSAnY29tbWVudCc6IG9uQ29tbWVudCA9IGNiOyBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgZXJyb3IoJ3Vuc3VwcG9ydGVkIGV2ZW50OiAnICsgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZXNwYWNlIHRvIHByZWZpeCBtYXBwaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBwYXJzZXIubnMoe1xuICAgKiAgICdodHRwOi8vZm9vJzogJ2ZvbycsXG4gICAqICAgJ2h0dHA6Ly9iYXInOiAnYmFyJ1xuICAgKiB9KTtcbiAgICpcbiAgICogQHBhcmFtICB7IU9iamVjdDxzdHJpbmcsIHN0cmluZz59IG5zTWFwXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ25zJ10gPSBmdW5jdGlvbihuc01hcCkge1xuXG4gICAgaWYgKHR5cGVvZiBuc01hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5zTWFwID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuc01hcCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IGVycm9yKCdyZXF1aXJlZCBhcmdzIDxuc01hcD17fT4nKTtcbiAgICB9XG5cbiAgICB2YXIgX25zVXJpVG9QcmVmaXggPSB7fSwgaztcblxuICAgIGZvciAoayBpbiBuc01hcCkge1xuICAgICAgX25zVXJpVG9QcmVmaXhba10gPSBuc01hcFtrXTtcbiAgICB9XG5cbiAgICAvLyBGT1JDRSBkZWZhdWx0IG1hcHBpbmcgZm9yIHNjaGVtYSBpbnN0YW5jZVxuICAgIF9uc1VyaVRvUHJlZml4W1hTSV9VUkldID0gWFNJX1BSRUZJWDtcblxuICAgIGlzTmFtZXNwYWNlID0gdHJ1ZTtcbiAgICBuc1VyaVRvUHJlZml4ID0gX25zVXJpVG9QcmVmaXg7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgeG1sIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB4bWxcbiAgICpcbiAgICogQHJldHVybiB7RXJyb3J9IHJldHVybkVycm9yLCBpZiBub3QgdGhyb3duXG4gICAqL1xuICB0aGlzWydwYXJzZSddID0gZnVuY3Rpb24oeG1sKSB7XG4gICAgaWYgKHR5cGVvZiB4bWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8eG1sPXN0cmluZz4nKTtcbiAgICB9XG5cbiAgICByZXR1cm5FcnJvciA9IG51bGw7XG5cbiAgICBwYXJzZSh4bWwpO1xuXG4gICAgZ2V0Q29udGV4dCA9IG5vb3BHZXRDb250ZXh0O1xuICAgIHBhcnNlU3RvcCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHJldHVybkVycm9yO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdG9wIHBhcnNpbmcuXG4gICAqL1xuICB0aGlzWydzdG9wJ10gPSBmdW5jdGlvbigpIHtcbiAgICBwYXJzZVN0b3AgPSB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBzdHJpbmcsIGludm9raW5nIGNvbmZpZ3VyZWQgbGlzdGVuZXJzIG9uIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30geG1sXG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZSh4bWwpIHtcbiAgICB2YXIgbnNNYXRyaXhTdGFjayA9IGlzTmFtZXNwYWNlID8gW10gOiBudWxsLFxuICAgICAgICBuc01hdHJpeCA9IGlzTmFtZXNwYWNlID8gYnVpbGROc01hdHJpeChuc1VyaVRvUHJlZml4KSA6IG51bGwsXG4gICAgICAgIF9uc01hdHJpeCxcbiAgICAgICAgbm9kZVN0YWNrID0gW10sXG4gICAgICAgIGFub255bW91c05zQ291bnQgPSAwLFxuICAgICAgICB0YWdTdGFydCA9IGZhbHNlLFxuICAgICAgICB0YWdFbmQgPSBmYWxzZSxcbiAgICAgICAgaSA9IDAsIGogPSAwLFxuICAgICAgICB4LCB5LCBxLCB3LCB2LFxuICAgICAgICB4bWxucyxcbiAgICAgICAgZWxlbWVudE5hbWUsXG4gICAgICAgIF9lbGVtZW50TmFtZSxcbiAgICAgICAgZWxlbWVudFByb3h5XG4gICAgICAgIDtcblxuICAgIHZhciBhdHRyc1N0cmluZyA9ICcnLFxuICAgICAgICBhdHRyc1N0YXJ0ID0gMCxcbiAgICAgICAgY2FjaGVkQXR0cnMgLy8gZmFsc2UgPSBwYXJzZWQgd2l0aCBlcnJvcnMsIG51bGwgPSBuZWVkcyBwYXJzaW5nXG4gICAgICAgIDtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlIGF0dHJpYnV0ZXMgb24gZGVtYW5kIGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgYXR0cmlidXRlcy5cbiAgICAgKlxuICAgICAqIFJldHVybiBzZW1hbnRpY3M6ICgxKSBgZmFsc2VgIG9uIGF0dHJpYnV0ZSBwYXJzZSBlcnJvcixcbiAgICAgKiAoMikgb2JqZWN0IGhhc2ggb24gZXh0cmFjdGVkIGF0dHJzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbnxPYmplY3R9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QXR0cnMoKSB7XG4gICAgICBpZiAoY2FjaGVkQXR0cnMgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZEF0dHJzO1xuICAgICAgfVxuXG4gICAgICB2YXIgbnNVcmksXG4gICAgICAgICAgbnNVcmlQcmVmaXgsXG4gICAgICAgICAgbnNOYW1lLFxuICAgICAgICAgIGRlZmF1bHRBbGlhcyA9IGlzTmFtZXNwYWNlICYmIG5zTWF0cml4Wyd4bWxucyddLFxuICAgICAgICAgIGF0dHJMaXN0ID0gaXNOYW1lc3BhY2UgJiYgbWF5YmVOUyA/IFtdIDogbnVsbCxcbiAgICAgICAgICBpID0gYXR0cnNTdGFydCxcbiAgICAgICAgICBzID0gYXR0cnNTdHJpbmcsXG4gICAgICAgICAgbCA9IHMubGVuZ3RoLFxuICAgICAgICAgIGhhc05ld01hdHJpeCxcbiAgICAgICAgICBuZXdhbGlhcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBhbGlhcyxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGF0dHJzID0ge30sXG4gICAgICAgICAgc2VlbkF0dHJzID0ge30sXG4gICAgICAgICAgc2tpcEF0dHIsXG4gICAgICAgICAgdyxcbiAgICAgICAgICBqO1xuXG4gICAgICBwYXJzZUF0dHI6XG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICBza2lwQXR0ciA9IGZhbHNlO1xuICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkgeyAvLyBXSElURVNQQUNFPXsgXFxmXFxuXFxyXFx0XFx2fVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2FpdCBmb3Igbm9uIHdoaXRlc3BhY2UgY2hhcmFjdGVyXG4gICAgICAgIGlmICh3IDwgNjUgfHwgdyA+IDEyMiB8fCAodyA+IDkwICYmIHcgPCA5NykpIHtcbiAgICAgICAgICBpZiAodyAhPT0gOTUgJiYgdyAhPT0gNTgpIHsgLy8gY2hhciA5NVwiX1wiIDU4XCI6XCJcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgZmlyc3QgY2hhciBhdHRyaWJ1dGUgbmFtZScpO1xuICAgICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBhcnNlIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHcgPiA5NiAmJiB3IDwgMTIzIHx8XG4gICAgICAgICAgICB3ID4gNjQgJiYgdyA8IDkxIHx8XG4gICAgICAgICAgICB3ID4gNDcgJiYgdyA8IDU5IHx8XG4gICAgICAgICAgICB3ID09PSA0NiB8fCAvLyAnLidcbiAgICAgICAgICAgIHcgPT09IDQ1IHx8IC8vICctJ1xuICAgICAgICAgICAgdyA9PT0gOTUgLy8gJ18nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHdoaXRlc3BhY2VcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRVxuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUnKTtcbiAgICAgICAgICAgIGkgPSBqO1xuXG4gICAgICAgICAgICBjb250aW51ZSBwYXJzZUF0dHI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZXhwZWN0ZWQgXCI9XCJcbiAgICAgICAgICBpZiAodyA9PT0gNjEpIHsgLy8gXCI9XCIgPT0gNjFcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgYXR0cmlidXRlIG5hbWUgY2hhcicpO1xuICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBzLnN1YnN0cmluZyhpLCBqKTtcblxuICAgICAgICBpZiAobmFtZSA9PT0gJ3htbG5zOnhtbG5zJykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgZGVjbGFyYXRpb24gb2YgeG1sbnMnKTtcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGogKyAxKTtcblxuICAgICAgICBpZiAodyA9PT0gMzQpIHsgLy8gJ1wiJ1xuICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1wiJywgaSA9IGogKyAyKTtcblxuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZignXFwnJywgaSk7XG5cbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICh3ID09PSAzOSkgeyAvLyBcIidcIlxuICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1xcJycsIGkgPSBqICsgMik7XG5cbiAgICAgICAgICBpZiAoaiA9PT0gLTEpIHtcbiAgICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1wiJywgaSk7XG5cbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZSBxdW90ZXMnKTtcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG5cbiAgICAgICAgICAvLyBza2lwIHRvIG5leHQgc3BhY2VcbiAgICAgICAgICBmb3IgKGogPSBqICsgMTsgaiA8IGw7IGorKykge1xuICAgICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSk7XG5cbiAgICAgICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkgeyAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBjbG9zaW5nIHF1b3RlcycpO1xuXG4gICAgICAgICAgaiA9IGw7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFza2lwQXR0cikge1xuICAgICAgICAgIHZhbHVlID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gajtcblxuICAgICAgICAvLyBlbnN1cmUgU1BBQ0UgZm9sbG93cyBhdHRyaWJ1dGVcbiAgICAgICAgLy8gc2tpcCBpbGxlZ2FsIGNvbnRlbnQgb3RoZXJ3aXNlXG4gICAgICAgIC8vIGV4YW1wbGUgYT1cImJcImNcbiAgICAgICAgZm9yICg7IGogKyAxIDwgbDsgaisrKSB7XG4gICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSk7XG5cbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRklSU1QgSUxMRUdBTCBDSEFSXG4gICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIGF0dHJpYnV0ZSBlbmQnKTtcbiAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIGN1cnNvciB0byBuZXh0IGF0dHJpYnV0ZVxuICAgICAgICBpID0gaiArIDE7XG5cbiAgICAgICAgaWYgKHNraXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWUgcGFyc2VBdHRyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlIHJlLWRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChuYW1lIGluIHNlZW5BdHRycykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2F0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPiBhbHJlYWR5IGRlZmluZWQnKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlZW5BdHRyc1tuYW1lXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFpc05hbWVzcGFjZSkge1xuICAgICAgICAgIGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cnkgdG8gZXh0cmFjdCBuYW1lc3BhY2UgaW5mb3JtYXRpb25cbiAgICAgICAgaWYgKG1heWJlTlMpIHtcbiAgICAgICAgICBuZXdhbGlhcyA9IChcbiAgICAgICAgICAgIG5hbWUgPT09ICd4bWxucydcbiAgICAgICAgICAgICAgPyAneG1sbnMnXG4gICAgICAgICAgICAgIDogKG5hbWUuY2hhckNvZGVBdCgwKSA9PT0gMTIwICYmIG5hbWUuc3Vic3RyKDAsIDYpID09PSAneG1sbnM6JylcbiAgICAgICAgICAgICAgICA/IG5hbWUuc3Vic3RyKDYpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGhhbmRsZSB4bWxucyg6YWxpYXMpIGFzc2lnbm1lbnRcbiAgICAgICAgICBpZiAobmV3YWxpYXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5zVXJpID0gZGVjb2RlRW50aXRpZXModmFsdWUpO1xuICAgICAgICAgICAgbnNVcmlQcmVmaXggPSB1cmlQcmVmaXgobmV3YWxpYXMpO1xuXG4gICAgICAgICAgICBhbGlhcyA9IG5zVXJpVG9QcmVmaXhbbnNVcmldO1xuXG4gICAgICAgICAgICBpZiAoIWFsaWFzKSB7XG5cbiAgICAgICAgICAgICAgLy8gbm8gcHJlZml4IGRlZmluZWQgb3IgcHJlZml4IGNvbGxpc2lvblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG5ld2FsaWFzID09PSAneG1sbnMnKSB8fFxuICAgICAgICAgICAgICAgIChuc1VyaVByZWZpeCBpbiBuc01hdHJpeCAmJiBuc01hdHJpeFtuc1VyaVByZWZpeF0gIT09IG5zVXJpKVxuICAgICAgICAgICAgICApIHtcblxuICAgICAgICAgICAgICAgIC8vIGFsb2NhdGUgZnJlZSBucyBwcmVmaXhcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICBhbGlhcyA9ICducycgKyAoYW5vbnltb3VzTnNDb3VudCsrKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlICh0eXBlb2YgbnNNYXRyaXhbYWxpYXNdICE9PSAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBuZXdhbGlhcztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5zVXJpVG9QcmVmaXhbbnNVcmldID0gYWxpYXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuc01hdHJpeFtuZXdhbGlhc10gIT09IGFsaWFzKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTmV3TWF0cml4KSB7XG4gICAgICAgICAgICAgICAgbnNNYXRyaXggPSBjbG9uZU5zTWF0cml4KG5zTWF0cml4KTtcbiAgICAgICAgICAgICAgICBoYXNOZXdNYXRyaXggPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbnNNYXRyaXhbbmV3YWxpYXNdID0gYWxpYXM7XG4gICAgICAgICAgICAgIGlmIChuZXdhbGlhcyA9PT0gJ3htbG5zJykge1xuICAgICAgICAgICAgICAgIG5zTWF0cml4W3VyaVByZWZpeChhbGlhcyldID0gbnNVcmk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEFsaWFzID0gYWxpYXM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBuc01hdHJpeFtuc1VyaVByZWZpeF0gPSBuc1VyaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXhwb3NlIHhtbG5zKDphc2QpPVwiLi4uXCIgaW4gYXR0cmlidXRlc1xuICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbGxlY3QgYXR0cmlidXRlcyB1bnRpbCBhbGwgbmFtZXNwYWNlXG4gICAgICAgICAgLy8gZGVjbGFyYXRpb25zIGFyZSBwcm9jZXNzZWRcbiAgICAgICAgICBhdHRyTGlzdC5wdXNoKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB9IC8qKiBlbmQgaWYgKG1heWJlTnMpICovXG5cbiAgICAgICAgLy8gaGFuZGxlIGF0dHJpYnV0ZXMgb24gZWxlbWVudCB3aXRob3V0XG4gICAgICAgIC8vIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnNcbiAgICAgICAgdyA9IG5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAodyA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgIGlmICghKG5zTmFtZSA9IG5zTWF0cml4W25hbWUuc3Vic3RyaW5nKDAsIHcpXSkpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgobmFtZS5zdWJzdHJpbmcoMCwgdykpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBkZWZhdWx0QWxpYXMgPT09IG5zTmFtZVxuICAgICAgICAgID8gbmFtZS5zdWJzdHIodyArIDEpXG4gICAgICAgICAgOiBuc05hbWUgKyBuYW1lLnN1YnN0cih3KTtcblxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgaWYgKG5hbWUgPT09IFhTSV9UWVBFKSB7XG4gICAgICAgICAgdyA9IHZhbHVlLmluZGV4T2YoJzonKTtcblxuICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgbnNOYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIHcpO1xuXG4gICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCBwcmVmaXhlcywgaS5lLiB4czpTdHJpbmcgZ3JhY2VmdWxseVxuICAgICAgICAgICAgbnNOYW1lID0gbnNNYXRyaXhbbnNOYW1lXSB8fCBuc05hbWU7XG4gICAgICAgICAgICB2YWx1ZSA9IG5zTmFtZSArIHZhbHVlLnN1YnN0cmluZyh3KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0QWxpYXMgKyAnOicgKyB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcblxuICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIGhhbmRsZSBkZWZlcnJlZCwgcG9zc2libHkgbmFtZXNwYWNlZCBhdHRyaWJ1dGVzXG4gICAgICBpZiAobWF5YmVOUykge1xuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjYXB0dXJlZCBhdHRyaWJ1dGVzXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBhdHRyTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblxuICAgICAgICAgIG5hbWUgPSBhdHRyTGlzdFtpKytdO1xuICAgICAgICAgIHZhbHVlID0gYXR0ckxpc3RbaV07XG5cbiAgICAgICAgICB3ID0gbmFtZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgICAgICBpZiAodyAhPT0gLTEpIHtcblxuICAgICAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcobWlzc2luZ05hbWVzcGFjZUZvclByZWZpeChuYW1lLnN1YnN0cmluZygwLCB3KSkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZSA9IGRlZmF1bHRBbGlhcyA9PT0gbnNOYW1lXG4gICAgICAgICAgICAgID8gbmFtZS5zdWJzdHIodyArIDEpXG4gICAgICAgICAgICAgIDogbnNOYW1lICsgbmFtZS5zdWJzdHIodyk7XG5cbiAgICAgICAgICAgIC8vIGVuZDogbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG5cbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBYU0lfVFlQRSkge1xuICAgICAgICAgICAgICB3ID0gdmFsdWUuaW5kZXhPZignOicpO1xuXG4gICAgICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG5zTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCB3KTtcblxuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBkZWZhdWx0IHByZWZpeGVzLCBpLmUuIHhzOlN0cmluZyBncmFjZWZ1bGx5XG4gICAgICAgICAgICAgICAgbnNOYW1lID0gbnNNYXRyaXhbbnNOYW1lXSB8fCBuc05hbWU7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBuc05hbWUgKyB2YWx1ZS5zdWJzdHJpbmcodyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0QWxpYXMgKyAnOicgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgY2FwdHVyZWQgYXR0cmlidXRlc1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FjaGVkQXR0cnMgPSBhdHRycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0IHRoZSBwYXJzZSBjb250ZXh0IHsgbGluZSwgY29sdW1uLCBwYXJ0IH1cbiAgICAgKiBmcm9tIHRoZSBjdXJyZW50IHBhcnNlciBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gcGFyc2UgY29udGV4dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFBhcnNlQ29udGV4dCgpIHtcbiAgICAgIHZhciBzcGxpdHNSZSA9IC8oXFxyXFxufFxccnxcXG4pL2c7XG5cbiAgICAgIHZhciBsaW5lID0gMDtcbiAgICAgIHZhciBjb2x1bW4gPSAwO1xuICAgICAgdmFyIHN0YXJ0T2ZMaW5lID0gMDtcbiAgICAgIHZhciBlbmRPZkxpbmUgPSBqO1xuICAgICAgdmFyIG1hdGNoO1xuICAgICAgdmFyIGRhdGE7XG5cbiAgICAgIHdoaWxlIChpID49IHN0YXJ0T2ZMaW5lKSB7XG5cbiAgICAgICAgbWF0Y2ggPSBzcGxpdHNSZS5leGVjKHhtbCk7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kIG9mIGxpbmUgPSAoYnJlYWsgaWR4ICsgYnJlYWsgY2hhcnMpXG4gICAgICAgIGVuZE9mTGluZSA9IG1hdGNoWzBdLmxlbmd0aCArIG1hdGNoLmluZGV4O1xuXG4gICAgICAgIGlmIChlbmRPZkxpbmUgPiBpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIHRvIG5leHQgbGluZVxuICAgICAgICBsaW5lICs9IDE7XG5cbiAgICAgICAgc3RhcnRPZkxpbmUgPSBlbmRPZkxpbmU7XG4gICAgICB9XG5cbiAgICAgIC8vIEVPRiBlcnJvcnNcbiAgICAgIGlmIChpID09IC0xKSB7XG4gICAgICAgIGNvbHVtbiA9IGVuZE9mTGluZTtcbiAgICAgICAgZGF0YSA9IHhtbC5zdWJzdHJpbmcoaik7XG4gICAgICB9IGVsc2VcblxuICAgICAgLy8gc3RhcnQgZXJyb3JzXG4gICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICBkYXRhID0geG1sLnN1YnN0cmluZyhqLCBpKTtcbiAgICAgIH1cblxuICAgICAgLy8gb3RoZXIgZXJyb3JzXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29sdW1uID0gaSAtIHN0YXJ0T2ZMaW5lO1xuICAgICAgICBkYXRhID0gKGogPT0gLTEgPyB4bWwuc3Vic3RyaW5nKGkpIDogeG1sLnN1YnN0cmluZyhpLCBqICsgMSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGF0YSc6IGRhdGEsXG4gICAgICAgICdsaW5lJzogbGluZSxcbiAgICAgICAgJ2NvbHVtbic6IGNvbHVtblxuICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0ID0gZ2V0UGFyc2VDb250ZXh0O1xuXG5cbiAgICBpZiAocHJveHkpIHtcbiAgICAgIGVsZW1lbnRQcm94eSA9IE9iamVjdC5jcmVhdGUoe30sIHtcbiAgICAgICAgJ25hbWUnOiBnZXR0ZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ29yaWdpbmFsTmFtZSc6IGdldHRlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gX2VsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ2F0dHJzJzogZ2V0dGVyKGdldEF0dHJzKSxcbiAgICAgICAgJ25zJzogZ2V0dGVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuc01hdHJpeDtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFjdHVhbCBwYXJzZSBsb2dpY1xuICAgIHdoaWxlIChqICE9PSAtMSkge1xuXG4gICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaikgPT09IDYwKSB7IC8vIFwiPFwiXG4gICAgICAgIGkgPSBqO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSA9IHhtbC5pbmRleE9mKCc8Jywgaik7XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIGVuZFxuICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBmaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignbWlzc2luZyBzdGFydCB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqIDwgeG1sLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh4bWwuc3Vic3RyaW5nKGopLnRyaW0oKSkge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZyhOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSB0ZXh0XG4gICAgICBpZiAoaiAhPT0gaSkge1xuXG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9uVGV4dCkge1xuICAgICAgICAgICAgb25UZXh0KHhtbC5zdWJzdHJpbmcoaiwgaSksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh4bWwuc3Vic3RyaW5nKGosIGkpLnRyaW0oKSkge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZyhOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3ID0geG1sLmNoYXJDb2RlQXQoaSsxKTtcblxuICAgICAgLy8gcGFyc2UgY29tbWVudHMgKyBDREFUQVxuICAgICAgaWYgKHcgPT09IDMzKSB7IC8vIFwiIVwiXG4gICAgICAgIHEgPSB4bWwuY2hhckNvZGVBdChpKzIpO1xuXG4gICAgICAgIC8vIENEQVRBIHNlY3Rpb25cbiAgICAgICAgaWYgKHEgPT09IDkxICYmIHhtbC5zdWJzdHIoaSArIDMsIDYpID09PSAnQ0RBVEFbJykgeyAvLyA5MSA9PSBcIltcIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignXV0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNkYXRhJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9uQ0RBVEEpIHtcbiAgICAgICAgICAgIG9uQ0RBVEEoeG1sLnN1YnN0cmluZyhpICsgOSwgaiksIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaiArPSAzO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29tbWVudFxuICAgICAgICBpZiAocSA9PT0gNDUgJiYgeG1sLmNoYXJDb2RlQXQoaSArIDMpID09PSA0NSkgeyAvLyA0NSA9PSBcIi1cIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignLS0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNvbW1lbnQnKTtcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIGlmIChvbkNvbW1lbnQpIHtcbiAgICAgICAgICAgIG9uQ29tbWVudCh4bWwuc3Vic3RyaW5nKGkgKyA0LCBqKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaiArPSAzO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIHF1ZXN0aW9uIDw/IC4uLiA/PlxuICAgICAgaWYgKHcgPT09IDYzKSB7IC8vIFwiP1wiXG4gICAgICAgIGogPSB4bWwuaW5kZXhPZignPz4nLCBpKTtcbiAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCBxdWVzdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9uUXVlc3Rpb24pIHtcbiAgICAgICAgICBvblF1ZXN0aW9uKHhtbC5zdWJzdHJpbmcoaSwgaiArIDIpLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCBtYXRjaGluZyBjbG9zaW5nIHRhZyBmb3IgYXR0ZW50aW9uIG9yIHN0YW5kYXJkIHRhZ3NcbiAgICAgIC8vIGZvciB0aGF0IHdlIG11c3Qgc2tpcCB0aHJvdWdoIGF0dHJpYnV0ZSB2YWx1ZXNcbiAgICAgIC8vIChlbmNsb3NlZCBpbiBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcylcbiAgICAgIGZvciAoeCA9IGkgKyAxOyA7IHgrKykge1xuICAgICAgICB2ID0geG1sLmNoYXJDb2RlQXQoeCk7XG4gICAgICAgIGlmIChpc05hTih2KSkge1xuICAgICAgICAgIGogPSAtMTtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIHRhZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWzEwXSBBdHRWYWx1ZSA6Oj0gJ1wiJyAoW148JlwiXSB8IFJlZmVyZW5jZSkqICdcIicgfCBcIidcIiAoW148JiddIHwgUmVmZXJlbmNlKSogXCInXCJcbiAgICAgICAgLy8gc2tpcHMgdGhlIHF1b3RlZCBzdHJpbmdcbiAgICAgICAgLy8gKGRvdWJsZSBxdW90ZXMpIGRvZXMgbm90IGFwcGVhciBpbiBhIGxpdGVyYWwgZW5jbG9zZWQgYnkgKGRvdWJsZSBxdW90ZXMpXG4gICAgICAgIC8vIChzaW5nbGUgcXVvdGUpIGRvZXMgbm90IGFwcGVhciBpbiBhIGxpdGVyYWwgZW5jbG9zZWQgYnkgKHNpbmdsZSBxdW90ZSlcbiAgICAgICAgaWYgKHYgPT09IDM0KSB7IC8vICAnXCInXG4gICAgICAgICAgcSA9IHhtbC5pbmRleE9mKCdcIicsIHggKyAxKTtcbiAgICAgICAgICB4ID0gcSAhPT0gLTEgPyBxIDogeDtcbiAgICAgICAgfSBlbHNlIGlmICh2ID09PSAzOSkgeyAvLyBcIidcIlxuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZihcIidcIiwgeCArIDEpO1xuICAgICAgICAgIHggPSBxICE9PSAtMSA/IHEgOiB4O1xuICAgICAgICB9IGVsc2UgaWYgKHYgPT09IDYyKSB7IC8vICc+J1xuICAgICAgICAgIGogPSB4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgLy8gcGFyc2UgYXR0ZW50aW9uIDwhIC4uLj5cbiAgICAgIC8vIHByZXZpb3VzbHkgY29tbWVudCBhbmQgQ0RBVEEgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkXG4gICAgICBpZiAodyA9PT0gMzMpIHsgLy8gXCIhXCJcblxuICAgICAgICBpZiAob25BdHRlbnRpb24pIHtcbiAgICAgICAgICBvbkF0dGVudGlvbih4bWwuc3Vic3RyaW5nKGksIGogKyAxKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBqICs9IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkb24ndCBwcm9jZXNzIGF0dHJpYnV0ZXM7XG4gICAgICAvLyB0aGVyZSBhcmUgbm9uZVxuICAgICAgY2FjaGVkQXR0cnMgPSB7fTtcblxuICAgICAgLy8gaWYgKHhtbC5jaGFyQ29kZUF0KGkrMSkgPT09IDQ3KSB7IC8vIDwvLi4uXG4gICAgICBpZiAodyA9PT0gNDcpIHsgLy8gPC8uLi5cbiAgICAgICAgdGFnU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgdGFnRW5kID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIW5vZGVTdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3Npbmcgb3BlbiB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZlcmlmeSBvcGVuIDwtPiBjbG9zZSB0YWcgbWF0Y2hcbiAgICAgICAgeCA9IGVsZW1lbnROYW1lID0gbm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICBxID0gaSArIDIgKyB4Lmxlbmd0aDtcblxuICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhpICsgMiwgcSkgIT09IHgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2Nsb3NpbmcgdGFnIG1pc21hdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2ZXJpZnkgY2hhcnMgaW4gY2xvc2UgdGFnXG4gICAgICAgIGZvciAoOyBxIDwgajsgcSsrKSB7XG4gICAgICAgICAgdyA9IHhtbC5jaGFyQ29kZUF0KHEpO1xuXG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3ID4gOCAmJiB3IDwgMTQpKSB7IC8vIFxcZlxcblxcclxcdFxcdiBzcGFjZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdjbG9zZSB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaiAtIDEpID09PSA0NykgeyAvLyAuLi4vPlxuICAgICAgICAgIHggPSBlbGVtZW50TmFtZSA9IHhtbC5zdWJzdHJpbmcoaSArIDEsIGogLSAxKTtcblxuICAgICAgICAgIHRhZ1N0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICB0YWdFbmQgPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeCA9IGVsZW1lbnROYW1lID0geG1sLnN1YnN0cmluZyhpICsgMSwgaik7XG5cbiAgICAgICAgICB0YWdTdGFydCA9IHRydWU7XG4gICAgICAgICAgdGFnRW5kID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh3ID4gOTYgJiYgdyA8IDEyMyB8fCB3ID4gNjQgJiYgdyA8IDkxIHx8IHcgPT09IDk1IHx8IHcgPT09IDU4KSkgeyAvLyBjaGFyIDk1XCJfXCIgNThcIjpcIlxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignaWxsZWdhbCBmaXJzdCBjaGFyIG5vZGVOYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHEgPSAxLCB5ID0geC5sZW5ndGg7IHEgPCB5OyBxKyspIHtcbiAgICAgICAgICB3ID0geC5jaGFyQ29kZUF0KHEpO1xuXG4gICAgICAgICAgaWYgKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA+IDQ3ICYmIHcgPCA1OSB8fCB3ID09PSA0NSB8fCB3ID09PSA5NSB8fCB3ID09IDQ2KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gXFxmXFxuXFxyXFx0XFx2IHNwYWNlXG4gICAgICAgICAgICBlbGVtZW50TmFtZSA9IHguc3Vic3RyaW5nKDAsIHEpO1xuXG4gICAgICAgICAgICAvLyBtYXliZSB0aGVyZSBhcmUgYXR0cmlidXRlc1xuICAgICAgICAgICAgY2FjaGVkQXR0cnMgPSBudWxsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdpbnZhbGlkIG5vZGVOYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhZ0VuZCkge1xuICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGVsZW1lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcblxuICAgICAgICBfbnNNYXRyaXggPSBuc01hdHJpeDtcblxuICAgICAgICBpZiAodGFnU3RhcnQpIHtcblxuICAgICAgICAgIC8vIHJlbWVtYmVyIG9sZCBuYW1lc3BhY2VcbiAgICAgICAgICAvLyB1bmxlc3Mgd2UncmUgc2VsZi1jbG9zaW5nXG4gICAgICAgICAgaWYgKCF0YWdFbmQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4U3RhY2sucHVzaChfbnNNYXRyaXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjYWNoZWRBdHRycyA9PT0gbnVsbCkge1xuXG4gICAgICAgICAgICAvLyBxdWljayBjaGVjaywgd2hldGhlciB0aGVyZSBtYXkgYmUgbmFtZXNwYWNlXG4gICAgICAgICAgICAvLyBkZWNsYXJhdGlvbnMgb24gdGhlIG5vZGU7IGlmIHRoYXQgaXMgdGhlIGNhc2VcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZWFnZXJseSBwYXJzZSB0aGUgbm9kZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpZiAoKG1heWJlTlMgPSB4LmluZGV4T2YoJ3htbG5zJywgcSkgIT09IC0xKSkge1xuICAgICAgICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuXG4gICAgICAgICAgICAgIGdldEF0dHJzKCk7XG5cbiAgICAgICAgICAgICAgbWF5YmVOUyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lO1xuXG4gICAgICAgIHcgPSBlbGVtZW50TmFtZS5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgIHhtbG5zID0gbnNNYXRyaXhbZWxlbWVudE5hbWUuc3Vic3RyaW5nKDAsIHcpXTtcblxuICAgICAgICAgIC8vIHByZWZpeCBnaXZlbjsgbmFtZXNwYWNlIG11c3QgZXhpc3RcbiAgICAgICAgICBpZiAoIXhtbG5zKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3NpbmcgbmFtZXNwYWNlIG9uIDwnICsgX2VsZW1lbnROYW1lICsgJz4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lLnN1YnN0cih3ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeG1sbnMgPSBuc01hdHJpeFsneG1sbnMnXTtcblxuICAgICAgICAgIC8vIGlmIG5vIGRlZmF1bHQgbmFtZXNwYWNlIGlzIGRlZmluZWQsXG4gICAgICAgICAgLy8gd2UnbGwgaW1wb3J0IHRoZSBlbGVtZW50IGFzIGFub255bW91cy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIGl0IGlzIHVwIHRvIHVzZXJzIHRvIGNvcnJlY3QgdGhhdCB0byB0aGUgZG9jdW1lbnQgZGVmaW5lZFxuICAgICAgICAgIC8vIHRhcmdldE5hbWVzcGFjZSwgb3Igd2hhdGV2ZXIgdGhlaXIgdW5kZXJzYW5kaW5nIG9mIHRoZVxuICAgICAgICAgIC8vIFhNTCBzcGVjIG1hbmRhdGVzLlxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRqdXN0IG5hbWVzcGFjZSBwcmVmaXhzIGFzIGNvbmZpZ3VyZWRcbiAgICAgICAgaWYgKHhtbG5zKSB7XG4gICAgICAgICAgZWxlbWVudE5hbWUgPSB4bWxucyArICc6JyArIGVsZW1lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKHRhZ1N0YXJ0KSB7XG4gICAgICAgIGF0dHJzU3RhcnQgPSBxO1xuICAgICAgICBhdHRyc1N0cmluZyA9IHg7XG5cbiAgICAgICAgaWYgKG9uT3BlblRhZykge1xuICAgICAgICAgIGlmIChwcm94eSkge1xuICAgICAgICAgICAgb25PcGVuVGFnKGVsZW1lbnRQcm94eSwgZGVjb2RlRW50aXRpZXMsIHRhZ0VuZCwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uT3BlblRhZyhlbGVtZW50TmFtZSwgZ2V0QXR0cnMsIGRlY29kZUVudGl0aWVzLCB0YWdFbmQsIGdldENvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAodGFnRW5kKSB7XG5cbiAgICAgICAgaWYgKG9uQ2xvc2VUYWcpIHtcbiAgICAgICAgICBvbkNsb3NlVGFnKHByb3h5ID8gZWxlbWVudFByb3h5IDogZWxlbWVudE5hbWUsIGRlY29kZUVudGl0aWVzLCB0YWdTdGFydCwgZ2V0Q29udGV4dCk7XG5cbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzdG9yZSBvbGQgbmFtZXNwYWNlXG4gICAgICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgICAgIGlmICghdGFnU3RhcnQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4ID0gbnNNYXRyaXhTdGFjay5wb3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbnNNYXRyaXggPSBfbnNNYXRyaXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGogKz0gMTtcbiAgICB9XG4gIH0gLyoqIGVuZCBwYXJzZSAqL1xuXG59XG5cbmV4cG9ydCB7IFBhcnNlciwgZGVjb2RlRW50aXRpZXMgYXMgZGVjb2RlIH07XG4iLCJpbXBvcnQge1xuICBkb21pZnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgbWF0Y2hlcyBhcyBkb21NYXRjaGVzLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsLFxuICBldmVudCBhcyBkb21FdmVudCxcbiAgYXR0ciBhcyBkb21BdHRyXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBjcmVhdGVFbWl0dGVyIGZyb20gJ21pdHQnO1xuXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBzY3JvbGxTeW1ib2xMZWZ0OiAn4oC5JyxcbiAgc2Nyb2xsU3ltYm9sUmlnaHQ6ICfigLonXG59O1xuXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgYWRkcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBzY3JvbGwgb3ZlciBhIGxpc3Qgb2YgdGFicy5cbiAqXG4gKiBJdCBhZGRzIHNjcm9sbCBidXR0b25zIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlIG9mIHRoZSB0YWJzIGNvbnRhaW5lclxuICogaWYgbm90IGFsbCB0YWJzIGFyZSB2aXNpYmxlLiBJdCBhbHNvIGFkZHMgYSBtb3VzZSB3aGVlbCBsaXN0ZW5lciBvbiB0aGVcbiAqIGNvbnRhaW5lci5cbiAqXG4gKiBJZiBlaXRoZXIgYSBidXR0b24gaXMgY2xpY2tlZCBvciB0aGUgbW91c2Ugd2hlZWwgaXMgdXNlZCBvdmVyIHRoZSB0YWJzLFxuICogYSAnc2Nyb2xsJyBldmVudCBpcyBiZWluZyBmaXJlZC4gVGhpcyBldmVudCBjb250YWlucyB0aGUgbm9kZSBlbGVtZW50c1xuICogb2YgdGhlIG5ldyBhbmQgb2xkIGFjdGl2ZSB0YWIsIGFuZCB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSB0YWIgaGFzXG4gKiBjaGFuZ2VkIHJlbGF0aXZlIHRvIHRoZSBvbGQgYWN0aXZlIHRhYi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqICgxKSBwcm92aWRlIGEgdGFicy1jb250YWluZXI6XG4gKlxuICogdmFyICRlbCA9IChcbiAqICAgPGRpdj5cbiAqICAgICA8IS0tIGJ1dHRvbiBhZGRlZCBieSBzY3JvbGxUYWJzIC0tPlxuICogICAgIDxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uIHNjcm9sbC10YWJzLWxlZnRcIj48L3NwYW4+XG4gKiAgICAgPHVsIGNsYXNzPVwibXktdGFicy1jb250YWluZXJcIj5cbiAqICAgICAgIDxsaSBjbGFzcz1cIm15LXRhYiBpLWFtLWFjdGl2ZVwiPjwvbGk+XG4gKiAgICAgICA8bGkgY2xhc3M9XCJteS10YWJcIj48L2xpPlxuICogICAgICAgPGxpIGNsYXNzPVwibXktdGFiIGlnbm9yZS1tZVwiPjwvbGk+XG4gKiAgICAgPC91bD5cbiAqICAgICA8IS0tIGJ1dHRvbiBhZGRlZCBieSBzY3JvbGxUYWJzIC0tPlxuICogICAgIDxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uIHNjcm9sbC10YWJzLXJpZ2h0XCI+PC9zcGFuPlxuICogICA8L2Rpdj5cbiAqICk7XG4gKlxuICpcbiAqICgyKSBpbml0aWFsaXplIHNjcm9sbFRhYnM6XG4gKlxuICogIHZhciBzY3JvbGxlciA9IHNjcm9sbFRhYnModGFiQmFyTm9kZSwge1xuICogICAgc2VsZWN0b3JzOiB7XG4gKiAgICAgIHRhYnNDb250YWluZXI6ICcubXktdGFicy1jb250YWluZXInLFxuICogICAgICB0YWI6ICcubXktdGFiJyxcbiAqICAgICAgaWdub3JlOiAnLmlnbm9yZS1tZScsXG4gKiAgICAgIGFjdGl2ZTogJy5pLWFtLWFjdGl2ZSdcbiAqICAgIH1cbiAqICB9KTtcbiAqXG4gKlxuICogKDMpIGxpc3RlbiB0byB0aGUgc2Nyb2xsIGV2ZW50OlxuICpcbiAqIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCBmdW5jdGlvbihuZXdBY3RpdmVOb2RlLCBvbGRBY3RpdmVOb2RlLCBkaXJlY3Rpb24pIHtcbiAqICAgLy8gZGlyZWN0aW9uIGlzIGFueSBvZiAoLTE6IGxlZnQsIDE6IHJpZ2h0KVxuICogICAvLyBhY3RpdmF0ZSB0aGUgbmV3IGFjdGl2ZSB0YWJcbiAqIH0pO1xuICpcbiAqXG4gKiAoNCkgdXBkYXRlIHRoZSBzY3JvbGxlciBpZiB0YWJzIGNoYW5nZSBhbmQgb3IgdGhlIHRhYiBjb250YWluZXIgcmVzaXplczpcbiAqXG4gKiBzY3JvbGxlci51cGRhdGUoKTtcbiAqXG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gZWxcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zLnNlbGVjdG9yc1xuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy50YWJzQ29udGFpbmVyIHRoZSBjb250YWluZXIgYWxsIHRhYnMgYXJlIGNvbnRhaW5lZCBpblxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy50YWIgYSBzaW5nbGUgdGFiIGluc2lkZSB0aGUgdGFiIGNvbnRhaW5lclxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy5pZ25vcmUgdGFicyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGR1cmluZyBzY3JvbGwgbGVmdC9yaWdodFxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy5hY3RpdmUgc2VsZWN0b3IgZm9yIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAqIEBwYXJhbSAge1N0cmluZ30gW29wdGlvbnMuc2Nyb2xsU3ltYm9sTGVmdF1cbiAqIEBwYXJhbSAge1N0cmluZ30gW29wdGlvbnMuc2Nyb2xsU3ltYm9sUmlnaHRdXG4gKi9cbmZ1bmN0aW9uIFNjcm9sbFRhYnMoJGVsLCBvcHRpb25zKSB7XG5cbiAgLy8gd2UgYXJlIGFuIGV2ZW50IGVtaXR0ZXJcbiAgYXNzaWduKHRoaXMsIGNyZWF0ZUVtaXR0ZXIoKSk7XG5cbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IGFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgdGhpcy5jb250YWluZXIgPSAkZWw7XG5cbiAgdGhpcy5fY3JlYXRlU2Nyb2xsQnV0dG9ucygkZWwsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX2JpbmRFdmVudHMoJGVsKTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhIGNsaWNrYWJsZSBzY3JvbGwgYnV0dG9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmNsYXNzTmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMubGFiZWxcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLmRpcmVjdGlvblxuICpcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSBjcmVhdGVkIHNjcm9sbCBidXR0b24gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgb3B0aW9ucykge1xuXG4gIHZhciBjbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZSxcbiAgICAgIGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuXG5cbiAgdmFyIGJ1dHRvbiA9IGRvbVF1ZXJ5KCcuJyArIGNsYXNzTmFtZSwgcGFyZW50Tm9kZSk7XG5cbiAgaWYgKCFidXR0b24pIHtcbiAgICBidXR0b24gPSBkb21pZnkoJzxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uICcgKyBjbGFzc05hbWUgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGFiZWwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3Bhbj4nKTtcblxuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJ1dHRvbiwgcGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdKTtcbiAgfVxuXG4gIGRvbUF0dHIoYnV0dG9uLCAnZGF0YS1kaXJlY3Rpb24nLCBkaXJlY3Rpb24pO1xuXG4gIHJldHVybiBidXR0b247XG59O1xuXG4vKipcbiAqIENyZWF0ZSBib3RoIHNjcm9sbCBidXR0b25zXG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gcGFyZW50Tm9kZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG9wdGlvbnMuc2Nyb2xsU3ltYm9sTGVmdFxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNjcm9sbFN5bWJvbFJpZ2h0XG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLl9jcmVhdGVTY3JvbGxCdXR0b25zID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgb3B0aW9ucykge1xuXG4gIC8vIENyZWF0ZSBhIGJ1dHRvbiB0aGF0IHNjcm9sbHMgdG8gdGhlIHRhYiBsZWZ0IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYlxuICB0aGlzLl9jcmVhdGVCdXR0b24ocGFyZW50Tm9kZSwge1xuICAgIGNsYXNzTmFtZTogJ3Njcm9sbC10YWJzLWxlZnQnLFxuICAgIGxhYmVsOiBvcHRpb25zLnNjcm9sbFN5bWJvbExlZnQsXG4gICAgZGlyZWN0aW9uOiAtMVxuICB9KTtcblxuICAvLyBDcmVhdGUgYSBidXR0b24gdGhhdCBzY3JvbGxzIHRvIHRoZSB0YWIgcmlnaHQgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiXG4gIHRoaXMuX2NyZWF0ZUJ1dHRvbihwYXJlbnROb2RlLCB7XG4gICAgY2xhc3NOYW1lOiAnc2Nyb2xsLXRhYnMtcmlnaHQnLFxuICAgIGxhYmVsOiBvcHRpb25zLnNjcm9sbFN5bWJvbFJpZ2h0LFxuICAgIGRpcmVjdGlvbjogMVxuICB9KTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5nZXRBY3RpdmVUYWJOb2RlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkb21RdWVyeSh0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLmFjdGl2ZSwgdGhpcy5jb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgY29udGFpbmVyIGFsbCB0YWJzIGFyZSBjb250YWluZWQgaW5cbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5nZXRUYWJzQ29udGFpbmVyTm9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZG9tUXVlcnkodGhpcy5vcHRpb25zLnNlbGVjdG9ycy50YWJzQ29udGFpbmVyLCB0aGlzLmNvbnRhaW5lcik7XG59O1xuXG5cbi8qKlxuICogR2V0IGFsbCB0YWJzICh2aXNpYmxlIGFuZCBpbnZpc2libGUgb25lcylcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxET01FbGVtZW50Pn1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0QWxsVGFiTm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5QWxsKHRoaXMub3B0aW9ucy5zZWxlY3RvcnMudGFiLCB0aGlzLmNvbnRhaW5lcik7XG59O1xuXG5cbi8qKlxuICogR2V0cyBhbGwgdGFicyB0aGF0IGRvbid0IGhhdmUgdGhlIGlnbm9yZSBjbGFzcyBzZXRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxET01FbGVtZW50Pn1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0VmlzaWJsZVRhYnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGFsbFRhYnMgPSB0aGlzLmdldEFsbFRhYk5vZGVzKCk7XG5cbiAgdmFyIGlnbm9yZSA9IHRoaXMub3B0aW9ucy5zZWxlY3RvcnMuaWdub3JlO1xuXG4gIHJldHVybiBmaWx0ZXIoYWxsVGFicywgZnVuY3Rpb24odGFiTm9kZSkge1xuICAgIHJldHVybiAhZG9tTWF0Y2hlcyh0YWJOb2RlLCBpZ25vcmUpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBHZXQgYSB0YWIgcmVsYXRpdmUgdG8gYSByZWZlcmVuY2UgdGFiLlxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IHJlZmVyZW5jZVRhYk5vZGVcbiAqIEBwYXJhbSAge051bWJlcn0gbiBnZXRzIHRoZSBudGggdGFiIG5leHQgb3IgcHJldmlvdXMgdG8gdGhlIHJlZmVyZW5jZSB0YWJcbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICpcbiAqIEBleGFtcGxlOlxuICogVmlzaWJsZSB0YWJzOiBbIEEgfCBCIHwgQyB8IEQgfCBFIF1cbiAqIEFzc3VtZSB0YWIgJ0MnIGlzIHRoZSByZWZlcmVuY2UgdGFiOlxuICogSWYgZGlyZWN0aW9uID09PSAtMSwgaXQgcmV0dXJucyB0YWIgJ0InLFxuICogaWYgZGlyZWN0aW9uID09PSAgMiwgaXQgcmV0dXJucyB0YWIgJ0UnXG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLmdldEFkamFjZW50VGFiID0gZnVuY3Rpb24ocmVmZXJlbmNlVGFiTm9kZSwgbikge1xuICB2YXIgdmlzaWJsZVRhYnMgPSB0aGlzLmdldFZpc2libGVUYWJzKCk7XG5cbiAgdmFyIGluZGV4ID0gdmlzaWJsZVRhYnMuaW5kZXhPZihyZWZlcmVuY2VUYWJOb2RlKTtcblxuICByZXR1cm4gdmlzaWJsZVRhYnNbaW5kZXggKyBuXTtcbn07XG5cblNjcm9sbFRhYnMucHJvdG90eXBlLl9iaW5kRXZlbnRzID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLl9iaW5kV2hlZWxFdmVudChub2RlKTtcbiAgdGhpcy5fYmluZFRhYkNsaWNrRXZlbnRzKG5vZGUpO1xuICB0aGlzLl9iaW5kU2Nyb2xsQnV0dG9uRXZlbnRzKG5vZGUpO1xufTtcblxuLyoqXG4gKiAgQmluZCBhIGNsaWNrIGxpc3RlbmVyIHRvIGEgRE9NIG5vZGUuXG4gKiAgTWFrZSBzdXJlIGEgdGFiIGxpbmsgaXMgZW50aXJlbHkgdmlzaWJsZSBhZnRlciBvbkNsaWNrLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fYmluZFRhYkNsaWNrRXZlbnRzID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgc2VsZWN0b3IgPSB0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLnRhYjtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChub2RlLCBzZWxlY3RvciwgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgIHNlbGYuc2Nyb2xsVG9UYWJOb2RlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0KTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogQmluZCB0aGUgd2hlZWwgZXZlbnQgbGlzdGVuZXIgdG8gYSBET00gbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fYmluZFdoZWVsRXZlbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkb21FdmVudC5iaW5kKG5vZGUsICd3aGVlbCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIHNjcm9sbCBkaXJlY3Rpb24gKC0xOiBsZWZ0LCAxOiByaWdodClcbiAgICB2YXIgZGlyZWN0aW9uID0gTWF0aC5zaWduKGUuZGVsdGFZKTtcblxuICAgIHZhciBvbGRBY3RpdmVUYWIgPSBzZWxmLmdldEFjdGl2ZVRhYk5vZGUoKTtcblxuICAgIHZhciBuZXdBY3RpdmVUYWIgPSBzZWxmLmdldEFkamFjZW50VGFiKG9sZEFjdGl2ZVRhYiwgZGlyZWN0aW9uKTtcblxuICAgIGlmIChuZXdBY3RpdmVUYWIpIHtcbiAgICAgIHNlbGYuc2Nyb2xsVG9UYWJOb2RlKG5ld0FjdGl2ZVRhYik7XG4gICAgICBzZWxmLmVtaXQoJ3Njcm9sbCcsIG5ld0FjdGl2ZVRhYiwgb2xkQWN0aXZlVGFiLCBkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEJpbmQgc2Nyb2xsIGJ1dHRvbiBldmVudHMgdG8gYSBET00gbm9kZVxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IG5vZGVcbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuX2JpbmRTY3JvbGxCdXR0b25FdmVudHMgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQobm9kZSwgJy5zY3JvbGwtdGFicy1idXR0b24nLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgLy8gZGF0YS1kaXJlY3Rpb24gaXMgZWl0aGVyIC0xIG9yIDFcbiAgICB2YXIgZGlyZWN0aW9uID0gcGFyc2VJbnQoZG9tQXR0cih0YXJnZXQsICdkYXRhLWRpcmVjdGlvbicpLCAxMCk7XG5cbiAgICB2YXIgb2xkQWN0aXZlVGFiTm9kZSA9IHNlbGYuZ2V0QWN0aXZlVGFiTm9kZSgpO1xuXG4gICAgdmFyIG5ld0FjdGl2ZVRhYk5vZGUgPSBzZWxmLmdldEFkamFjZW50VGFiKG9sZEFjdGl2ZVRhYk5vZGUsIGRpcmVjdGlvbik7XG5cbiAgICBpZiAobmV3QWN0aXZlVGFiTm9kZSkge1xuICAgICAgc2VsZi5zY3JvbGxUb1RhYk5vZGUobmV3QWN0aXZlVGFiTm9kZSk7XG4gICAgICBzZWxmLmVtaXQoJ3Njcm9sbCcsIG5ld0FjdGl2ZVRhYk5vZGUsIG9sZEFjdGl2ZVRhYk5vZGUsIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuKiBTY3JvbGwgdG8gYSB0YWIgaWYgaXQgaXMgbm90IGVudGlyZWx5IHZpc2libGVcbipcbiogQHBhcmFtICB7RE9NRWxlbWVudH0gdGFiTm9kZSB0YWIgbm9kZSB0byBzY3JvbGwgdG9cbiovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5zY3JvbGxUb1RhYk5vZGUgPSBmdW5jdGlvbih0YWJOb2RlKSB7XG4gIGlmICghdGFiTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YWJzQ29udGFpbmVyTm9kZSA9IHRhYk5vZGUucGFyZW50Tm9kZTtcblxuICB2YXIgdGFiV2lkdGggPSB0YWJOb2RlLm9mZnNldFdpZHRoLFxuICAgICAgdGFiT2Zmc2V0TGVmdCA9IHRhYk5vZGUub2Zmc2V0TGVmdCxcbiAgICAgIHRhYk9mZnNldFJpZ2h0ID0gdGFiT2Zmc2V0TGVmdCArIHRhYldpZHRoLFxuICAgICAgY29udGFpbmVyV2lkdGggPSB0YWJzQ29udGFpbmVyTm9kZS5vZmZzZXRXaWR0aCxcbiAgICAgIGNvbnRhaW5lclNjcm9sbExlZnQgPSB0YWJzQ29udGFpbmVyTm9kZS5zY3JvbGxMZWZ0O1xuXG4gIGlmIChjb250YWluZXJTY3JvbGxMZWZ0ID4gdGFiT2Zmc2V0TGVmdCkge1xuICAgIC8vIHNjcm9sbCB0byB0aGUgbGVmdCwgaWYgdGhlIHRhYiBpcyBvdmVyZmxvd2luZyBvbiB0aGUgbGVmdCBzaWRlXG4gICAgdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSBpZiAodGFiT2Zmc2V0UmlnaHQgPiBjb250YWluZXJXaWR0aCkge1xuICAgIC8vIHNjcm9sbCB0byB0aGUgcmlnaHQsIGlmIHRoZSB0YWIgaXMgb3ZlcmZsb3dpbmcgb24gdGhlIHJpZ2h0IHNpZGVcbiAgICB0YWJzQ29udGFpbmVyTm9kZS5zY3JvbGxMZWZ0ID0gdGFiT2Zmc2V0UmlnaHQgLSBjb250YWluZXJXaWR0aDtcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlYWN0IG9uIHRhYiBjaGFuZ2VzIGZyb20gb3V0c2lkZSAocmVzaXplL3Nob3cvaGlkZS9hZGQvcmVtb3ZlKSxcbiAqIHVwZGF0ZSBzY3JvbGwgYnV0dG9uIHZpc2liaWxpdHkuXG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciB0YWJzQ29udGFpbmVyTm9kZSA9IHRoaXMuZ2V0VGFic0NvbnRhaW5lck5vZGUoKTtcblxuICAvLyBjaGVjayBpZiB0YWJzIGZpdCBpbiBjb250YWluZXJcbiAgdmFyIG92ZXJmbG93ID0gdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsV2lkdGggPiB0YWJzQ29udGFpbmVyTm9kZS5vZmZzZXRXaWR0aDtcblxuICAvLyBUT0RPKG5pa2t1KTogZGlzdGluZ3Vpc2ggb3ZlcmZsb3cgbGVmdCAvIG92ZXJmbG93IHJpZ2h0P1xuICB2YXIgb3ZlcmZsb3dDbGFzcyA9ICdzY3JvbGwtdGFicy1vdmVyZmxvdyc7XG5cbiAgZG9tQ2xhc3Nlcyh0aGlzLmNvbnRhaW5lcikudG9nZ2xlKG92ZXJmbG93Q2xhc3MsIG92ZXJmbG93KTtcblxuICBpZiAob3ZlcmZsb3cpIHtcbiAgICAvLyBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYiBpcyBhbHdheXMgdmlzaWJsZVxuICAgIHRoaXMuc2Nyb2xsVG9UYWJOb2RlKHRoaXMuZ2V0QWN0aXZlVGFiTm9kZSgpKTtcbiAgfVxufTtcblxuXG4vLyBleHBvcnRzIC8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDcmVhdGUgYSBzY3JvbGxUYWJzIGluc3RhbmNlIG9uIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gJGVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm4ge1Njcm9sbFRhYnN9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZSgkZWwsIG9wdGlvbnMpIHtcblxuICB2YXIgc2Nyb2xsVGFicyA9IGdldCgkZWwpO1xuXG4gIGlmICghc2Nyb2xsVGFicykge1xuICAgIHNjcm9sbFRhYnMgPSBuZXcgU2Nyb2xsVGFicygkZWwsIG9wdGlvbnMpO1xuXG4gICAgJGVsLl9fc2Nyb2xsVGFicyA9IHNjcm9sbFRhYnM7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVGFicztcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgc2Nyb2xsVGFicyBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIHByZXZpb3VzbHlcbiAqIGluaXRpYWxpemVkIG9uIHRoZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gJGVsXG4gKiBAcmV0dXJuIHtTY3JvbGxUYWJzfVxuICovXG5mdW5jdGlvbiBnZXQoJGVsKSB7XG4gIHJldHVybiAkZWwuX19zY3JvbGxUYWJzO1xufVxuXG5jcmVhdGUuZ2V0ID0gZ2V0OyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNlbGVjdGlvbiB1cGRhdGUgZm9yIHRoZSBnaXZlblxuICogY3VycmVudCBhbmQgbmV3IGlucHV0IHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3VycmVudFNlbGVjdGlvbiBhcyB7c3RhcnQsIGVuZH1cbiAqIEBwYXJhbSB7U3RyaW5nfSBjdXJyZW50VmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBuZXdWYWx1ZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gbmV3U2VsZWN0aW9uIGFzIHtzdGFydCwgZW5kfVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVVcGRhdGUoY3VycmVudFNlbGVjdGlvbiwgY3VycmVudFZhbHVlLCBuZXdWYWx1ZSkge1xuXG4gIHZhciBjdXJyZW50Q3Vyc29yID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCxcbiAgICAgIG5ld0N1cnNvciA9IGN1cnJlbnRDdXJzb3IsXG4gICAgICBkaWZmID0gbmV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFZhbHVlLmxlbmd0aCxcbiAgICAgIGlkeDtcblxuICB2YXIgbGVuZ3RoRGVsdGEgPSBuZXdWYWx1ZS5sZW5ndGggLSBjdXJyZW50VmFsdWUubGVuZ3RoO1xuXG4gIHZhciBjdXJyZW50VGFpbCA9IGN1cnJlbnRWYWx1ZS5zdWJzdHJpbmcoY3VycmVudEN1cnNvcik7XG5cbiAgLy8gY2hlY2sgaWYgd2UgY2FuIHJlbW92ZSBjb21tb24gZW5kaW5nIGZyb20gdGhlIGVxdWF0aW9uXG4gIC8vIHRvIGJlIGFibGUgdG8gcHJvcGVybHkgZGV0ZWN0IGEgc2VsZWN0aW9uIGNoYW5nZSBmb3JcbiAgLy8gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4gIC8vXG4gIC8vICAqIChBQUFUVFR8VEYpID0+IChBQUFUfFRGKVxuICAvLyAgKiAoQUFBVHxURikgPT4gIChBQUFUVFR8VEYpXG4gIC8vXG4gIGlmIChuZXdWYWx1ZS5sYXN0SW5kZXhPZihjdXJyZW50VGFpbCkgPT09IG5ld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRUYWlsLmxlbmd0aCkge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5zdWJzdHJpbmcoMCwgY3VycmVudFZhbHVlLmxlbmd0aCAtIGN1cnJlbnRUYWlsLmxlbmd0aCk7XG4gICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5zdWJzdHJpbmcoMCwgbmV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFRhaWwubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGRpZmZcbiAgdmFyIGRpZmYgPSBjcmVhdGVEaWZmKGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpO1xuXG4gIGlmIChkaWZmKSB7XG4gICAgaWYgKGRpZmYudHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIG5ld0N1cnNvciA9IGRpZmYubmV3U3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0N1cnNvciA9IGRpZmYubmV3RW5kO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByYW5nZShuZXdDdXJzb3IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbGN1bGF0ZVVwZGF0ZTtcblxuXG5mdW5jdGlvbiBjcmVhdGVEaWZmKGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpIHtcblxuICB2YXIgaW5zZXJ0O1xuXG4gIHZhciBsX3N0ciwgbF9jaGFyLCBsX2lkeCA9IDAsXG4gICAgICBzX3N0ciwgc19jaGFyLCBzX2lkeCA9IDA7XG5cbiAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICBsX3N0ciA9IG5ld1ZhbHVlO1xuICAgIHNfc3RyID0gY3VycmVudFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGxfc3RyID0gY3VycmVudFZhbHVlO1xuICAgIHNfc3RyID0gbmV3VmFsdWU7XG4gIH1cblxuICAvLyBhc3N1bWUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBpbnNlcnQgLyByZW1vdmUgYW5kXG4gIC8vIGRldGVjdCB0aGF0IF9maXJzdF8gZWRpdCBvcGVyYXRpb24gb25seVxuICB3aGlsZSAobF9pZHggPCBsX3N0ci5sZW5ndGgpIHtcblxuICAgIGxfY2hhciA9IGxfc3RyLmNoYXJBdChsX2lkeCk7XG4gICAgc19jaGFyID0gc19zdHIuY2hhckF0KHNfaWR4KTtcblxuICAgIC8vIGNoYXJzIG5vIG5vdCBlcXVhbFxuICAgIGlmIChsX2NoYXIgIT09IHNfY2hhcikge1xuXG4gICAgICBpZiAoIWluc2VydCkge1xuICAgICAgICBpbnNlcnQgPSB7XG4gICAgICAgICAgbF9zdGFydDogbF9pZHgsXG4gICAgICAgICAgc19zdGFydDogc19pZHhcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbF9pZHgrKztcbiAgICB9XG5cbiAgICAvLyBjaGFycyBlcXVhbCAoYWdhaW4/KVxuICAgIGVsc2Uge1xuXG4gICAgICBpZiAoaW5zZXJ0ICYmICFpbnNlcnQuY29tcGxldGUpIHtcbiAgICAgICAgaW5zZXJ0LmxfZW5kID0gbF9pZHg7XG4gICAgICAgIGluc2VydC5zX2VuZCA9IHNfaWR4O1xuICAgICAgICBpbnNlcnQuY29tcGxldGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBzX2lkeCsrO1xuICAgICAgbF9pZHgrKztcbiAgICB9XG4gIH1cblxuICBpZiAoaW5zZXJ0ICYmICFpbnNlcnQuY29tcGxldGUpIHtcbiAgICBpbnNlcnQuY29tcGxldGUgPSB0cnVlO1xuICAgIGluc2VydC5zX2VuZCA9IHNfc3RyLmxlbmd0aDtcbiAgICBpbnNlcnQubF9lbmQgPSBsX3N0ci5sZW5ndGg7XG4gIH1cblxuICAvLyBubyBkaWZmXG4gIGlmICghaW5zZXJ0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3U3RhcnQ6IGluc2VydC5sX3N0YXJ0LFxuICAgICAgbmV3RW5kOiBpbnNlcnQubF9lbmQsXG4gICAgICB0eXBlOiAnYWRkJ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld1N0YXJ0OiBpbnNlcnQuc19zdGFydCxcbiAgICAgIG5ld0VuZDogaW5zZXJ0LnNfZW5kLFxuICAgICAgdHlwZTogbmV3VmFsdWUubGVuZ3RoIDwgY3VycmVudFZhbHVlLmxlbmd0aCA/ICdyZW1vdmUnIDogJ3JlcGxhY2UnXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFV0aWxpdHkgbWV0aG9kIGZvciBjcmVhdGluZyBhIG5ldyBzZWxlY3Rpb24gcmFuZ2Uge3N0YXJ0LCBlbmR9IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhcnRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbZW5kXVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gc2VsZWN0aW9uIHJhbmdlIGFzIHtzdGFydCwgZW5kfVxuICovXG5mdW5jdGlvbiByYW5nZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IGVuZFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5yYW5nZSA9IHJhbmdlO1xuXG5cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0ciwgcG9zaXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICBiZWZvcmU6IHN0ci5zdWJzdHJpbmcoMCwgcG9zaXRpb24pLFxuICAgIGFmdGVyOiBzdHIuc3Vic3RyaW5nKHBvc2l0aW9uKVxuICB9O1xufSIsImZ1bmN0aW9uIGVuc3VyZUltcG9ydGVkKGVsZW1lbnQsIHRhcmdldCkge1xuXG4gIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHRhcmdldC5vd25lckRvY3VtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIG1heSBmYWlsIG9uIHdlYmtpdFxuICAgICAgcmV0dXJuIHRhcmdldC5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudCwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogYXBwZW5kVG8gdXRpbGl0eVxuICovXG5cbi8qKlxuICogQXBwZW5kIGEgbm9kZSB0byBhIHRhcmdldCBlbGVtZW50IGFuZCByZXR1cm4gdGhlIGFwcGVuZGVkIG5vZGUuXG4gKlxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gdGFyZ2V0XG4gKlxuICogQHJldHVybiB7U1ZHRWxlbWVudH0gdGhlIGFwcGVuZGVkIG5vZGVcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG8oZWxlbWVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuYXBwZW5kQ2hpbGQoZW5zdXJlSW1wb3J0ZWQoZWxlbWVudCwgdGFyZ2V0KSk7XG59XG5cbi8qKlxuICogYXBwZW5kIHV0aWxpdHlcbiAqL1xuXG4vKipcbiAqIEFwcGVuZCBhIG5vZGUgdG8gYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBhcHBlbmQodGFyZ2V0LCBub2RlKSB7XG4gIGFwcGVuZFRvKG5vZGUsIHRhcmdldCk7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qKlxuICogYXR0cmlidXRlIGFjY2Vzc29yIHV0aWxpdHlcbiAqL1xuXG52YXIgTEVOR1RIX0FUVFIgPSAyO1xuXG52YXIgQ1NTX1BST1BFUlRJRVMgPSB7XG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAxLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAxLFxuICAnY2xpcCc6IDEsXG4gICdjbGlwLXBhdGgnOiAxLFxuICAnY2xpcC1ydWxlJzogMSxcbiAgJ2NvbG9yJzogMSxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAxLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogMSxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAxLFxuICAnY29sb3ItcmVuZGVyaW5nJzogMSxcbiAgJ2N1cnNvcic6IDEsXG4gICdkaXJlY3Rpb24nOiAxLFxuICAnZGlzcGxheSc6IDEsXG4gICdkb21pbmFudC1iYXNlbGluZSc6IDEsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6IDEsXG4gICdmaWxsJzogMSxcbiAgJ2ZpbGwtb3BhY2l0eSc6IDEsXG4gICdmaWxsLXJ1bGUnOiAxLFxuICAnZmlsdGVyJzogMSxcbiAgJ2Zsb29kLWNvbG9yJzogMSxcbiAgJ2Zsb29kLW9wYWNpdHknOiAxLFxuICAnZm9udCc6IDEsXG4gICdmb250LWZhbWlseSc6IDEsXG4gICdmb250LXNpemUnOiBMRU5HVEhfQVRUUixcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAxLFxuICAnZm9udC1zdHJldGNoJzogMSxcbiAgJ2ZvbnQtc3R5bGUnOiAxLFxuICAnZm9udC12YXJpYW50JzogMSxcbiAgJ2ZvbnQtd2VpZ2h0JzogMSxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAxLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAxLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogMSxcbiAgJ2tlcm5pbmcnOiAxLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAxLFxuICAnbGlnaHRpbmctY29sb3InOiAxLFxuICAnbWFya2VyJzogMSxcbiAgJ21hcmtlci1lbmQnOiAxLFxuICAnbWFya2VyLW1pZCc6IDEsXG4gICdtYXJrZXItc3RhcnQnOiAxLFxuICAnbWFzayc6IDEsXG4gICdvcGFjaXR5JzogMSxcbiAgJ292ZXJmbG93JzogMSxcbiAgJ3BvaW50ZXItZXZlbnRzJzogMSxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6IDEsXG4gICdzdG9wLWNvbG9yJzogMSxcbiAgJ3N0b3Atb3BhY2l0eSc6IDEsXG4gICdzdHJva2UnOiAxLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6IDEsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6IDEsXG4gICdzdHJva2UtbGluZWNhcCc6IDEsXG4gICdzdHJva2UtbGluZWpvaW4nOiAxLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAxLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAxLFxuICAnc3Ryb2tlLXdpZHRoJzogTEVOR1RIX0FUVFIsXG4gICd0ZXh0LWFuY2hvcic6IDEsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAxLFxuICAndGV4dC1yZW5kZXJpbmcnOiAxLFxuICAndW5pY29kZS1iaWRpJzogMSxcbiAgJ3Zpc2liaWxpdHknOiAxLFxuICAnd29yZC1zcGFjaW5nJzogMSxcbiAgJ3dyaXRpbmctbW9kZSc6IDFcbn07XG5cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpIHtcbiAgaWYgKENTU19QUk9QRVJUSUVTW25hbWVdKSB7XG4gICAgcmV0dXJuIG5vZGUuc3R5bGVbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlTlMobnVsbCwgbmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBoeXBoZW5hdGVkID0gbmFtZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xuXG4gIHZhciB0eXBlID0gQ1NTX1BST1BFUlRJRVNbaHlwaGVuYXRlZF07XG5cbiAgaWYgKHR5cGUpIHtcbiAgICAvLyBhcHBlbmQgcGl4ZWwgdW5pdCwgdW5sZXNzIHByZXNlbnRcbiAgICBpZiAodHlwZSA9PT0gTEVOR1RIX0FUVFIgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpICsgJ3B4JztcbiAgICB9XG5cbiAgICBub2RlLnN0eWxlW2h5cGhlbmF0ZWRdID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlcyhub2RlLCBhdHRycykge1xuXG4gIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJzKSwgaSwgbmFtZTtcblxuICBmb3IgKGkgPSAwLCBuYW1lOyAobmFtZSA9IG5hbWVzW2ldKTsgaSsrKSB7XG4gICAgc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIGF0dHJzW25hbWVdKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgb3Igc2V0cyByYXcgYXR0cmlidXRlcyBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7T2JqZWN0fSBbYXR0cnNdXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtuYW1lXVxuICogQHBhcmFtICB7U3RyaW5nfSBbdmFsdWVdXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBhdHRyKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2V0QXR0cmlidXRlcyhub2RlLCBuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcclxuICogQ2xlYXIgdXRpbGl0eVxyXG4gKi9cclxuZnVuY3Rpb24gaW5kZXgoYXJyLCBvYmopIHtcclxuICBpZiAoYXJyLmluZGV4T2YpIHtcclxuICAgIHJldHVybiBhcnIuaW5kZXhPZihvYmopO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoYXJyW2ldID09PSBvYmopIHtcclxuICAgICAgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gLTE7XHJcbn1cclxuXHJcbnZhciByZSA9IC9cXHMrLztcclxuXHJcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XHJcblxyXG5mdW5jdGlvbiBkZWZpbmVkKG8pIHtcclxuICByZXR1cm4gdHlwZW9mIG8gIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG4vKipcclxuICogV3JhcCBgZWxgIGluIGEgYENsYXNzTGlzdGAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIGNsYXNzZXMoZWwpIHtcclxuICByZXR1cm4gbmV3IENsYXNzTGlzdChlbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsYXNzTGlzdChlbCkge1xyXG4gIGlmICghZWwgfHwgIWVsLm5vZGVUeXBlKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgRE9NIGVsZW1lbnQgcmVmZXJlbmNlIGlzIHJlcXVpcmVkJyk7XHJcbiAgfVxyXG4gIHRoaXMuZWwgPSBlbDtcclxuICB0aGlzLmxpc3QgPSBlbC5jbGFzc0xpc3Q7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGQgY2xhc3MgYG5hbWVgIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuXHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgdGhpcy5saXN0LmFkZChuYW1lKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZmFsbGJhY2tcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIHZhciBpID0gaW5kZXgoYXJyLCBuYW1lKTtcclxuICBpZiAoIX5pKSB7XHJcbiAgICBhcnIucHVzaChuYW1lKTtcclxuICB9XHJcblxyXG4gIGlmIChkZWZpbmVkKHRoaXMuZWwuY2xhc3NOYW1lLmJhc2VWYWwpKSB7XHJcbiAgICB0aGlzLmVsLmNsYXNzTmFtZS5iYXNlVmFsID0gYXJyLmpvaW4oJyAnKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5lbC5jbGFzc05hbWUgPSBhcnIuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGNsYXNzIGBuYW1lYCB3aGVuIHByZXNlbnQsIG9yXHJcbiAqIHBhc3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVtb3ZlXHJcbiAqIGFueSB3aGljaCBtYXRjaC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBuYW1lXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICBpZiAoJ1tvYmplY3QgUmVnRXhwXScgPT09IHRvU3RyaW5nLmNhbGwobmFtZSkpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbW92ZU1hdGNoaW5nKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgdGhpcy5saXN0LnJlbW92ZShuYW1lKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZmFsbGJhY2tcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIHZhciBpID0gaW5kZXgoYXJyLCBuYW1lKTtcclxuICBpZiAofmkpIHtcclxuICAgIGFyci5zcGxpY2UoaSwgMSk7XHJcbiAgfVxyXG4gIHRoaXMuZWwuY2xhc3NOYW1lLmJhc2VWYWwgPSBhcnIuam9pbignICcpO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBhbGwgY2xhc3NlcyBtYXRjaGluZyBgcmVgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nID0gZnVuY3Rpb24ocmUpIHtcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAocmUudGVzdChhcnJbaV0pKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKGFycltpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRvZ2dsZSBjbGFzcyBgbmFtZWAsIGNhbiBmb3JjZSBzdGF0ZSB2aWEgYGZvcmNlYC5cclxuICpcclxuICogRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBjbGFzc0xpc3QsIGJ1dCBkbyBub3Qgc3VwcG9ydCBgZm9yY2VgIHlldCxcclxuICogdGhlIG1pc3Rha2Ugd2lsbCBiZSBkZXRlY3RlZCBhbmQgY29ycmVjdGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGZvcmNlXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKG5hbWUsIGZvcmNlKSB7XHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgaWYgKGRlZmluZWQoZm9yY2UpKSB7XHJcbiAgICAgIGlmIChmb3JjZSAhPT0gdGhpcy5saXN0LnRvZ2dsZShuYW1lLCBmb3JjZSkpIHtcclxuICAgICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpOyAvLyB0b2dnbGUgYWdhaW4gdG8gY29ycmVjdFxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBmYWxsYmFja1xyXG4gIGlmIChkZWZpbmVkKGZvcmNlKSkge1xyXG4gICAgaWYgKCFmb3JjZSkge1xyXG4gICAgICB0aGlzLnJlbW92ZShuYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkKG5hbWUpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcclxuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZChuYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhbiBhcnJheSBvZiBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheX1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLmFycmF5ID0gZnVuY3Rpb24oKSB7XHJcbiAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnO1xyXG4gIHZhciBzdHIgPSBjbGFzc05hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xyXG4gIHZhciBhcnIgPSBzdHIuc3BsaXQocmUpO1xyXG4gIGlmICgnJyA9PT0gYXJyWzBdKSB7XHJcbiAgICBhcnIuc2hpZnQoKTtcclxuICB9XHJcbiAgcmV0dXJuIGFycjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBjbGFzcyBgbmFtZWAgaXMgcHJlc2VudC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkNsYXNzTGlzdC5wcm90b3R5cGUuaGFzID1cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICByZXR1cm4gKFxyXG4gICAgdGhpcy5saXN0ID9cclxuICAgICAgdGhpcy5saXN0LmNvbnRhaW5zKG5hbWUpIDpcclxuICAgICAgISEgfmluZGV4KHRoaXMuYXJyYXkoKSwgbmFtZSlcclxuICApO1xyXG59O1xuXG5mdW5jdGlvbiByZW1vdmUoZWxlbWVudCkge1xuICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDbGVhciB1dGlsaXR5XG4gKi9cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgKGZvciBjaGFpbmluZylcbiAqL1xuZnVuY3Rpb24gY2xlYXIoZWxlbWVudCkge1xuICB2YXIgY2hpbGQ7XG5cbiAgd2hpbGUgKChjaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZCkpIHtcbiAgICByZW1vdmUoY2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGNsb25lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xufVxuXG52YXIgbnMgPSB7XG4gIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJ1xufTtcblxuLyoqXG4gKiBET00gcGFyc2luZyB1dGlsaXR5XG4gKi9cblxudmFyIFNWR19TVEFSVCA9ICc8c3ZnIHhtbG5zPVwiJyArIG5zLnN2ZyArICdcIic7XG5cbmZ1bmN0aW9uIHBhcnNlKHN2Zykge1xuXG4gIHZhciB1bndyYXAgPSBmYWxzZTtcblxuICAvLyBlbnN1cmUgd2UgaW1wb3J0IGEgdmFsaWQgc3ZnIGRvY3VtZW50XG4gIGlmIChzdmcuc3Vic3RyaW5nKDAsIDQpID09PSAnPHN2ZycpIHtcbiAgICBpZiAoc3ZnLmluZGV4T2YobnMuc3ZnKSA9PT0gLTEpIHtcbiAgICAgIHN2ZyA9IFNWR19TVEFSVCArIHN2Zy5zdWJzdHJpbmcoNCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG5hbWVzcGFjZSBzdmdcbiAgICBzdmcgPSBTVkdfU1RBUlQgKyAnPicgKyBzdmcgKyAnPC9zdmc+JztcbiAgICB1bndyYXAgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHBhcnNlZCA9IHBhcnNlRG9jdW1lbnQoc3ZnKTtcblxuICBpZiAoIXVud3JhcCkge1xuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgdmFyIHBhcmVudCA9IHBhcnNlZC5maXJzdENoaWxkO1xuXG4gIHdoaWxlIChwYXJlbnQuZmlyc3RDaGlsZCkge1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBhcmVudC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiBmcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gcGFyc2VEb2N1bWVudChzdmcpIHtcblxuICB2YXIgcGFyc2VyO1xuXG4gIC8vIHBhcnNlXG4gIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgcGFyc2VyLmFzeW5jID0gZmFsc2U7XG5cbiAgcmV0dXJuIHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3ZnLCAndGV4dC94bWwnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdXRpbGl0eSBmb3IgU1ZHIGVsZW1lbnRzXG4gKi9cblxuXG4vKipcbiAqIENyZWF0ZSBhIHNwZWNpZmljIHR5cGUgZnJvbSBuYW1lIG9yIFNWRyBtYXJrdXAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb3IgbWFya3VwIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW2F0dHJzXSBhdHRyaWJ1dGVzIHRvIHNldCBvbiB0aGUgZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGUobmFtZSwgYXR0cnMpIHtcbiAgdmFyIGVsZW1lbnQ7XG5cbiAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnPCcpIHtcbiAgICBlbGVtZW50ID0gcGFyc2UobmFtZSkuZmlyc3RDaGlsZDtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLnN2ZywgbmFtZSk7XG4gIH1cblxuICBpZiAoYXR0cnMpIHtcbiAgICBhdHRyKGVsZW1lbnQsIGF0dHJzKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIEV2ZW50cyBoYW5kbGluZyB1dGlsaXR5XG4gKi9cblxuZnVuY3Rpb24gb24obm9kZSwgZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XG4gIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xufVxuXG5mdW5jdGlvbiBvZmYobm9kZSwgZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XG4gIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xufVxuXG4vKipcbiAqIEdlb21ldHJ5IGhlbHBlcnNcbiAqL1xuXG4vLyBmYWtlIG5vZGUgdXNlZCB0byBpbnN0YW50aWF0ZSBzdmcgZ2VvbWV0cnkgZWxlbWVudHNcbnZhciBub2RlID0gY3JlYXRlKCdzdmcnKTtcblxuZnVuY3Rpb24gZXh0ZW5kKG9iamVjdCwgcHJvcHMpIHtcbiAgdmFyIGksIGssIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG5cbiAgZm9yIChpID0gMDsgKGsgPSBrZXlzW2ldKTsgaSsrKSB7XG4gICAgb2JqZWN0W2tdID0gcHJvcHNba107XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVBvaW50KHgsIHkpIHtcbiAgdmFyIHBvaW50ID0gbm9kZS5jcmVhdGVTVkdQb2ludCgpO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICBjYXNlIDA6XG4gICAgcmV0dXJuIHBvaW50O1xuICBjYXNlIDI6XG4gICAgeCA9IHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5XG4gICAgfTtcbiAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBleHRlbmQocG9pbnQsIHgpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBtYXRyaXggdmlhIGFyZ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjcmVhdGVNYXRyaXgoeyBhOiAxLCBiOiAxIH0pO1xuICogY3JlYXRlTWF0cml4KCk7XG4gKiBjcmVhdGVNYXRyaXgoMSwgMiwgMCwgMCwgMzAsIDIwKTtcbiAqXG4gKiBAcmV0dXJuIHtTVkdNYXRyaXh9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBtYXRyaXggPSBub2RlLmNyZWF0ZVNWR01hdHJpeCgpO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICBjYXNlIDA6XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgY2FzZSAxOlxuICAgIHJldHVybiBleHRlbmQobWF0cml4LCBhKTtcbiAgY2FzZSA2OlxuICAgIHJldHVybiBleHRlbmQobWF0cml4LCB7XG4gICAgICBhOiBhLFxuICAgICAgYjogYixcbiAgICAgIGM6IGMsXG4gICAgICBkOiBkLFxuICAgICAgZTogZSxcbiAgICAgIGY6IGZcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm0obWF0cml4KSB7XG4gIGlmIChtYXRyaXgpIHtcbiAgICByZXR1cm4gbm9kZS5jcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KG1hdHJpeCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuY3JlYXRlU1ZHVHJhbnNmb3JtKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJpYWxpemF0aW9uIHV0aWxcbiAqL1xuXG52YXIgVEVYVF9FTlRJVElFUyA9IC8oWyY8Pl17MX0pL2c7XG52YXIgQVRUUl9FTlRJVElFUyA9IC8oW1xcblxcclwiXXsxfSkvZztcblxudmFyIEVOVElUWV9SRVBMQUNFTUVOVCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICdcXCcnXG59O1xuXG5mdW5jdGlvbiBlc2NhcGUoc3RyLCBwYXR0ZXJuKSB7XG5cbiAgZnVuY3Rpb24gcmVwbGFjZUZuKG1hdGNoLCBlbnRpdHkpIHtcbiAgICByZXR1cm4gRU5USVRZX1JFUExBQ0VNRU5UW2VudGl0eV0gfHwgZW50aXR5O1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VGbik7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShub2RlLCBvdXRwdXQpIHtcblxuICB2YXIgaSwgbGVuLCBhdHRyTWFwLCBhdHRyTm9kZSwgY2hpbGROb2RlcztcblxuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgLy8gVEVYVFxuICBjYXNlIDM6XG4gICAgLy8gcmVwbGFjZSBzcGVjaWFsIFhNTCBjaGFyYWN0ZXJzXG4gICAgb3V0cHV0LnB1c2goZXNjYXBlKG5vZGUudGV4dENvbnRlbnQsIFRFWFRfRU5USVRJRVMpKTtcbiAgICBicmVhaztcblxuICAvLyBFTEVNRU5UXG4gIGNhc2UgMTpcbiAgICBvdXRwdXQucHVzaCgnPCcsIG5vZGUudGFnTmFtZSk7XG5cbiAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHtcbiAgICAgIGF0dHJNYXAgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSBhdHRyTWFwLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGF0dHJOb2RlID0gYXR0ck1hcC5pdGVtKGkpO1xuICAgICAgICBvdXRwdXQucHVzaCgnICcsIGF0dHJOb2RlLm5hbWUsICc9XCInLCBlc2NhcGUoYXR0ck5vZGUudmFsdWUsIEFUVFJfRU5USVRJRVMpLCAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgIG91dHB1dC5wdXNoKCc+Jyk7XG4gICAgICBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBzZXJpYWxpemUoY2hpbGROb2Rlcy5pdGVtKGkpLCBvdXRwdXQpO1xuICAgICAgfVxuICAgICAgb3V0cHV0LnB1c2goJzwvJywgbm9kZS50YWdOYW1lLCAnPicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnLz4nKTtcbiAgICB9XG4gICAgYnJlYWs7XG5cbiAgLy8gQ09NTUVOVFxuICBjYXNlIDg6XG4gICAgb3V0cHV0LnB1c2goJzwhLS0nLCBlc2NhcGUobm9kZS5ub2RlVmFsdWUsIFRFWFRfRU5USVRJRVMpLCAnLS0+Jyk7XG4gICAgYnJlYWs7XG5cbiAgLy8gQ0RBVEFcbiAgY2FzZSA0OlxuICAgIG91dHB1dC5wdXNoKCc8IVtDREFUQVsnLCBub2RlLm5vZGVWYWx1ZSwgJ11dPicpO1xuICAgIGJyZWFrO1xuXG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gaGFuZGxlIG5vZGUgJyArIG5vZGUubm9kZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBpbm5lckhUTUwgbGlrZSBmdW5jdGlvbmFsaXR5IGZvciBTVkcgZWxlbWVudHMuXG4gKiBiYXNlZCBvbiBpbm5lclNWRyAoaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9pbm5lcnN2ZylcbiAqL1xuXG5cbmZ1bmN0aW9uIHNldChlbGVtZW50LCBzdmcpIHtcblxuICB2YXIgcGFyc2VkID0gcGFyc2Uoc3ZnKTtcblxuICAvLyBjbGVhciBlbGVtZW50IGNvbnRlbnRzXG4gIGNsZWFyKGVsZW1lbnQpO1xuXG4gIGlmICghc3ZnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc0ZyYWdtZW50KHBhcnNlZCkpIHtcbiAgICAvLyBleHRyYWN0IDxzdmc+IGZyb20gcGFyc2VkIGRvY3VtZW50XG4gICAgcGFyc2VkID0gcGFyc2VkLmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub2RlcyA9IHNsaWNlKHBhcnNlZC5jaGlsZE5vZGVzKTtcblxuICAvLyBpbXBvcnQgKyBhcHBlbmQgZWFjaCBub2RlXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhcHBlbmRUbyhub2Rlc1tpXSwgZWxlbWVudCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXQoZWxlbWVudCkge1xuICB2YXIgY2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQsXG4gICAgICBvdXRwdXQgPSBbXTtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBzZXJpYWxpemUoY2hpbGQsIG91dHB1dCk7XG4gICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZztcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnJhZ21lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCc7XG59XG5cbmZ1bmN0aW9uIGlubmVyU1ZHKGVsZW1lbnQsIHN2Zykge1xuXG4gIGlmIChzdmcgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldChlbGVtZW50LCBzdmcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgcGFyc2luZyBTVkc6ICcgKyBlLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXQoZWxlbWVudCk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzbGljZShhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG59XG5cbi8qKlxuICogU2VsZWN0aW9uIHV0aWxpdGllc1xuICovXG5cbmZ1bmN0aW9uIHNlbGVjdChub2RlLCBzZWxlY3Rvcikge1xuICByZXR1cm4gbm9kZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0QWxsKG5vZGUsIHNlbGVjdG9yKSB7XG4gIHZhciBub2RlcyA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgcmV0dXJuIFtdLm1hcC5jYWxsKG5vZGVzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIHByZXBlbmRUbyB1dGlsaXR5XG4gKi9cblxuLyoqXG4gKiBQcmVwZW5kIGEgbm9kZSB0byBhIHRhcmdldCBlbGVtZW50IGFuZCByZXR1cm4gdGhlIHByZXBlbmRlZCBub2RlLlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHRoZSBwcmVwZW5kZWQgbm9kZVxuICovXG5mdW5jdGlvbiBwcmVwZW5kVG8obm9kZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuaW5zZXJ0QmVmb3JlKGVuc3VyZUltcG9ydGVkKG5vZGUsIHRhcmdldCksIHRhcmdldC5maXJzdENoaWxkIHx8IG51bGwpO1xufVxuXG4vKipcbiAqIHByZXBlbmQgdXRpbGl0eVxuICovXG5cbi8qKlxuICogUHJlcGVuZCBhIG5vZGUgdG8gYSB0YXJnZXQgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IHRhcmdldFxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gbm9kZVxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHRoZSB0YXJnZXQgZWxlbWVudFxuICovXG5mdW5jdGlvbiBwcmVwZW5kKHRhcmdldCwgbm9kZSkge1xuICBwcmVwZW5kVG8obm9kZSwgdGFyZ2V0KTtcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHV0aWxpdHlcbiAqL1xuXG5mdW5jdGlvbiByZXBsYWNlKGVsZW1lbnQsIHJlcGxhY2VtZW50KSB7XG4gIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZW5zdXJlSW1wb3J0ZWQocmVwbGFjZW1lbnQsIGVsZW1lbnQpLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlcGxhY2VtZW50O1xufVxuXG4vKipcbiAqIHRyYW5zZm9ybSBhY2Nlc3NvciB1dGlsaXR5XG4gKi9cblxuZnVuY3Rpb24gd3JhcE1hdHJpeCh0cmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm0pIHtcbiAgaWYgKHRyYW5zZm9ybSBpbnN0YW5jZW9mIFNWR01hdHJpeCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1MaXN0LmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgodHJhbnNmb3JtKTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2Zvcm07XG59XG5cblxuZnVuY3Rpb24gc2V0VHJhbnNmb3Jtcyh0cmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm1zKSB7XG4gIHZhciBpLCB0O1xuXG4gIHRyYW5zZm9ybUxpc3QuY2xlYXIoKTtcblxuICBmb3IgKGkgPSAwOyAodCA9IHRyYW5zZm9ybXNbaV0pOyBpKyspIHtcbiAgICB0cmFuc2Zvcm1MaXN0LmFwcGVuZEl0ZW0od3JhcE1hdHJpeCh0cmFuc2Zvcm1MaXN0LCB0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgb3Igc2V0IHRoZSB0cmFuc2Zvcm1zIG9uIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7U1ZHVHJhbnNmb3JtfFNWR01hdHJpeHxBcnJheTxTVkdUcmFuc2Zvcm18U1ZHTWF0cml4Pn0gW3RyYW5zZm9ybXNdXG4gKlxuICogQHJldHVybiB7U1ZHVHJhbnNmb3JtfSB0aGUgY29uc29saWRhdGVkIHRyYW5zZm9ybVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSwgdHJhbnNmb3Jtcykge1xuICB2YXIgdHJhbnNmb3JtTGlzdCA9IG5vZGUudHJhbnNmb3JtLmJhc2VWYWw7XG5cbiAgaWYgKHRyYW5zZm9ybXMpIHtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1zKSkge1xuICAgICAgdHJhbnNmb3JtcyA9IFsgdHJhbnNmb3JtcyBdO1xuICAgIH1cblxuICAgIHNldFRyYW5zZm9ybXModHJhbnNmb3JtTGlzdCwgdHJhbnNmb3Jtcyk7XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtTGlzdC5jb25zb2xpZGF0ZSgpO1xufVxuXG5leHBvcnQgeyBhcHBlbmQsIGFwcGVuZFRvLCBhdHRyLCBjbGFzc2VzLCBjbGVhciwgY2xvbmUsIGNyZWF0ZSwgaW5uZXJTVkcsIHByZXBlbmQsIHByZXBlbmRUbywgcmVtb3ZlLCByZXBsYWNlLCB0cmFuc2Zvcm0sIG9uLCBvZmYsIGNyZWF0ZVBvaW50LCBjcmVhdGVNYXRyaXgsIGNyZWF0ZVRyYW5zZm9ybSwgc2VsZWN0LCBzZWxlY3RBbGwgfTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcclxuICBcIm5hbWVcIjogXCJBY3Rpdml0aVwiLFxyXG4gIFwidXJpXCI6IFwiaHR0cDovL2FjdGl2aXRpLm9yZy9icG1uXCIsXHJcbiAgXCJwcmVmaXhcIjogXCJhY3Rpdml0aVwiLFxyXG4gIFwieG1sXCI6IHtcclxuICAgIFwidGFnQWxpYXNcIjogXCJsb3dlckNhc2VcIlxyXG4gIH0sXHJcbiAgXCJhc3NvY2lhdGlvbnNcIjogW10sXHJcbiAgXCJ0eXBlc1wiOiBbXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkRlZmluaXRpb25zXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpEZWZpbml0aW9uc1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGlhZ3JhbVJlbGF0aW9uSWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5PdXRCaW5kaW5nXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJFbGVtZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic291cmNlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInNvdXJjZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidGFyZ2V0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImJ1c2luZXNzS2V5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImxvY2FsXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZXNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5cIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkluT3V0QmluZGluZ1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkNhbGxBY3Rpdml0eVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJPdXRcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkluT3V0QmluZGluZ1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkNhbGxBY3Rpdml0eVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJBc3luY0NhcGFibGVcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkFjdGl2aXR5XCIsXHJcbiAgICAgICAgXCJicG1uOkdhdGV3YXlcIixcclxuICAgICAgICBcImJwbW46RXZlbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzeW5jXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhc3luY0JlZm9yZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYXN5bmNBZnRlclwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhjbHVzaXZlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkpvYlByaW9yaXplZFwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46UHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJqb2JQcmlvcml0eVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJTaWduYWxFdmVudERlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYXN5bmNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVycm9yRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXJyb3JDb2RlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXJyb3JNZXNzYWdlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRXJyb3JcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkVycm9yXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhY3Rpdml0aTplcnJvck1lc3NhZ2VcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiUG90ZW50aWFsU3RhcnRlclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYnBtbjpSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZvcm1TdXBwb3J0ZWRcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlN0YXJ0RXZlbnRcIixcclxuICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImZvcm1IYW5kbGVyQ2xhc3NcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZm9ybUtleVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUZW1wbGF0ZVN1cHBvcnRlZFwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46UHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiYnBtbjpGbG93RWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibW9kZWxlclRlbXBsYXRlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkluaXRpYXRvclwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFsgXCJicG1uOlN0YXJ0RXZlbnRcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImluaXRpYXRvclwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJTY3JpcHRUYXNrXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpTY3JpcHRUYXNrXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXN1bHRWYXJpYWJsZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJQcm9jZXNzXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpQcm9jZXNzXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVTdGFydGVyQ29uZmlndXJhdGlvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVTdGFydGVyVXNlcnNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmVyc2lvblRhZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJoaXN0b3J5VGltZVRvTGl2ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpc1N0YXJ0YWJsZUluVGFza2xpc3RcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicHJvY2Vzcy1pcy1leGVjdXRhYmxlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVzY2FsYXRpb25FdmVudERlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVzY2FsYXRpb25Db2RlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybWFsRXhwcmVzc2lvblwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46Rm9ybWFsRXhwcmVzc2lvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQXNzaWduYWJsZVwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogWyBcImJwbW46VXNlclRhc2tcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzc2lnbmVlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhbmRpZGF0ZVVzZXJzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhbmRpZGF0ZUdyb3Vwc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkdWVEYXRlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImZvbGxvd1VwRGF0ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJwcmlvcml0eVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJDYWxsQWN0aXZpdHlcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFsgXCJicG1uOkNhbGxBY3Rpdml0eVwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FsbGVkRWxlbWVudEJpbmRpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcImxhdGVzdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VmVyc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VmVyc2lvblRhZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VGVuYW50SWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FzZVJlZlwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYXNlQmluZGluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IFwibGF0ZXN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhc2VWZXJzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhc2VUZW5hbnRJZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZU1hcHBpbmdDbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiU2VydmljZVRhc2tMaWtlXCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlNlcnZpY2VUYXNrXCIsXHJcbiAgICAgICAgXCJicG1uOkJ1c2luZXNzUnVsZVRhc2tcIixcclxuICAgICAgICBcImJwbW46U2VuZFRhc2tcIixcclxuICAgICAgICBcImJwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzdWx0VmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRG1uQ2FwYWJsZVwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpCdXNpbmVzc1J1bGVUYXNrXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZlwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZkJpbmRpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcImxhdGVzdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZlZlcnNpb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibWFwRGVjaXNpb25SZXN1bHRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInJlc3VsdExpc3RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVjaXNpb25SZWZUZW5hbnRJZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJFeHRlcm5hbENhcGFibGVcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImFjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZVwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidHlwZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ0b3BpY1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUYXNrUHJpb3JpemVkXCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlByb2Nlc3NcIixcclxuICAgICAgICBcImFjdGl2aXRpOkV4dGVybmFsQ2FwYWJsZVwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidGFza1ByaW9yaXR5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlByb3BlcnRpZXNcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkVsZW1lbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFsgXCIqXCIgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiUHJvcGVydHlcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlByb3BlcnR5XCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJFbGVtZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbm5lY3RvclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2VcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpbnB1dE91dHB1dFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiSW5wdXRPdXRwdXRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29ubmVjdG9ySWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJJbnB1dE91dHB1dFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkZsb3dOb2RlXCIsXHJcbiAgICAgICAgICBcImFjdGl2aXRpOkNvbm5lY3RvclwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlucHV0T3V0cHV0XCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJJbnB1dE91dHB1dFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb25uZWN0b3JJZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlucHV0UGFyYW1ldGVyc1wiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0UGFyYW1ldGVyXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm91dHB1dFBhcmFtZXRlcnNcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJPdXRwdXRQYXJhbWV0ZXJcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJcIixcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlZmluaXRpb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkxpc3RcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIml0ZW1zXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIk1hcFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZW50cmllc1wiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkVudHJ5XCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVudHJ5XCIsXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwia2V5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlZmluaXRpb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJWYWx1ZVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlNjcmlwdFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic2NyaXB0Rm9ybWF0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2VcIixcclxuICAgICAgICAgIFwiYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXJcIixcclxuICAgICAgICAgIFwiYWN0aXZpdGk6VGFza0xpc3RlbmVyXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic3RyaW5nVmFsdWVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRQYXJhbWV0ZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlclwiIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIk91dHB1dFBhcmFtZXRlclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyXCIgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQ29sbGVjdGFibGVcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbIFwiYnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljc1wiIF0sXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVsZW1lbnRWYXJpYWJsZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCIsXHJcbiAgICAgICAgICBcImJwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJib2R5XCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkV4ZWN1dGlvbkxpc3RlbmVyXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOlRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpTZXJ2aWNlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCIsXHJcbiAgICAgICAgICBcImJwbW46QnVzaW5lc3NSdWxlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOlNjcmlwdFRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpSZWNlaXZlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOk1hbnVhbFRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpFeGNsdXNpdmVHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46U2VxdWVuY2VGbG93XCIsXHJcbiAgICAgICAgICBcImJwbW46UGFyYWxsZWxHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46SW5jbHVzaXZlR2F0ZXdheVwiLFxyXG4gICAgICAgICAgXCJicG1uOkV2ZW50QmFzZWRHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46U3RhcnRFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46RW5kRXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpCb3VuZGFyeUV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46Q2FsbEFjdGl2aXR5XCIsXHJcbiAgICAgICAgICBcImJwbW46U3ViUHJvY2Vzc1wiLFxyXG4gICAgICAgICAgXCJicG1uOlByb2Nlc3NcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNsYXNzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlbGVnYXRlRXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJzY3JpcHRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlNjcmlwdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUYXNrTGlzdGVuZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNsYXNzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlbGVnYXRlRXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJzY3JpcHRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlNjcmlwdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudERlZmluaXRpb25zXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGb3JtUHJvcGVydHlcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImJwbW46U3RhcnRFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ0eXBlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlcXVpcmVkXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlYWRhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIndyaXRhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhcmlhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGF0ZVBhdHRlcm5cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZXNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGb3JtRGF0YVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYnBtbjpTdGFydEV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYnVzaW5lc3NLZXlcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibGFiZWxcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidHlwZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkYXRlUGF0dGVyblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWZhdWx0VmFsdWVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicHJvcGVydGllc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiUHJvcGVydGllc1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWxpZGF0aW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJWYWxpZGF0aW9uXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiVmFsdWVcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlZhbGlkYXRpb25cIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb25zdHJhaW50c1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQ29uc3RyYWludFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQ29uc3RyYWludFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm5hbWVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29uZmlnXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFyaWFibGVOYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhcmlhYmxlRXZlbnRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfVxyXG4gIF0sXHJcbiAgXCJlbXVtZXJhdGlvbnNcIjogWyBdXHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tQ29udGV4dFBhZCB7XHJcbiAgY29uc3RydWN0b3IoY29uZmlnLCBjb250ZXh0UGFkLCBjcmVhdGUsIGVsZW1lbnRGYWN0b3J5LCBpbmplY3RvciwgdHJhbnNsYXRlKSB7XHJcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcclxuICAgIHRoaXMuZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcclxuICAgIHRoaXMudHJhbnNsYXRlID0gdHJhbnNsYXRlO1xyXG4gICAgLy/oh6rliqjmkYbmlL7kvY3nva5cclxuICAgIGlmIChjb25maWcuYXV0b1BsYWNlICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmF1dG9QbGFjZSA9IGluamVjdG9yLmdldCgnYXV0b1BsYWNlJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgLy/ms6jlhozlt6XlhbdcclxuICAgIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcclxuICB9XHJcbiAgZ2V0Q29udGV4dFBhZEVudHJpZXMoZWxlbWVudCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBhdXRvUGxhY2UsXHJcbiAgICAgIGNyZWF0ZSxcclxuICAgICAgZWxlbWVudEZhY3RvcnksXHJcbiAgICAgIHRyYW5zbGF0ZVxyXG4gICAgfSA9IHRoaXM7XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwZW5kVXNlclRhc2soZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgaWYgKGF1dG9QbGFjZSkge1xyXG4gICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpVc2VyVGFzaycgfSk7XHJcbiAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXBwZW5kVXNlclRhc2tTdGFydChldmVudCwgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBlbmRVc2VyVGFza1N0YXJ0KGV2ZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46VXNlclRhc2snIH0pO1xyXG4gICAgICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcHBlbmRDYWxsQWN0aXZpdHlTdGFydChldmVudCkge1xyXG4gICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46Q2FsbEFjdGl2aXR5JyB9KTtcclxuICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwZW5kQ2FsbEFjdGl2aXR5KGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGF1dG9QbGFjZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46Q2FsbEFjdGl2aXR5JyB9KTtcclxuICAgICAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXBwZW5kQ2FsbEFjdGl2aXR5U3RhcnQoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICdhcHBlbmQudXNlci10YXNrJzoge1xyXG4gICAgICAgIGdyb3VwOiAnbW9kZWwnLFxyXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi11c2VyLXRhc2snLFxyXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FwcGVuZCBTZXJ2aWNlVGFzaycpLFxyXG4gICAgICAgIGFjdGlvbjoge1xyXG4gICAgICAgICAgY2xpY2s6IGFwcGVuZFVzZXJUYXNrLFxyXG4gICAgICAgICAgZHJhZ3N0YXJ0OiBhcHBlbmRVc2VyVGFza1N0YXJ0XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAnYXBwZW5kLmNhbGwtYWN0aXZpdHknOntcclxuICAgICAgICAgIGdyb3VwOiAnbW9kZWwnLFxyXG4gICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNhbGwtYWN0aXZpdHknLFxyXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQXBwZW5kIENhbGxBY3Rpdml0eScpLFxyXG4gICAgICAgICAgYWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgY2xpY2s6IGFwcGVuZENhbGxBY3Rpdml0eSxcclxuICAgICAgICAgICAgICBkcmFnc3RhcnQ6IGFwcGVuZENhbGxBY3Rpdml0eVN0YXJ0XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbkN1c3RvbUNvbnRleHRQYWQuJGluamVjdCA9IFtcclxuICAnY29uZmlnJyxcclxuICAnY29udGV4dFBhZCcsXHJcbiAgJ2NyZWF0ZScsXHJcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcclxuICAnaW5qZWN0b3InLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tUGFsZXR0ZSB7XHJcbiAgY29uc3RydWN0b3IoY3JlYXRlLCBlbGVtZW50RmFjdG9yeSwgcGFsZXR0ZSwgdHJhbnNsYXRlKSB7XHJcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcclxuICAgIHRoaXMuZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcclxuICAgIHRoaXMudHJhbnNsYXRlID0gdHJhbnNsYXRlO1xyXG4gICAgcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFsZXR0ZUVudHJpZXMoZWxlbWVudCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjcmVhdGUsXHJcbiAgICAgIGVsZW1lbnRGYWN0b3J5LFxyXG4gICAgICB0cmFuc2xhdGVcclxuICAgIH0gPSB0aGlzO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VUYXNrKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpVc2VyVGFzaycgfSk7XHJcbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xyXG4gICAgfVxyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDYWxsQWN0aXZpdHkoZXZlbnQpIHtcclxuICAgICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknIH0pO1xyXG4gICAgICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2NyZWF0ZS51c2VyLXRhc2snOiB7XHJcbiAgICAgICAgZ3JvdXA6ICdhY3Rpdml0eScsXHJcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXVzZXItdGFzaycsXHJcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIFVzZXJUYXNrJyksXHJcbiAgICAgICAgYWN0aW9uOiB7XHJcbiAgICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZVNlcnZpY2VUYXNrLFxyXG4gICAgICAgICAgY2xpY2s6IGNyZWF0ZVNlcnZpY2VUYXNrXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAgICdjcmVhdGUuY2FsbC1hY3Rpdml0eSc6IHtcclxuICAgICAgICAgICAgZ3JvdXA6ICdhY3Rpdml0eScsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jYWxsLWFjdGl2aXR5JyxcclxuICAgICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIENhbGxBY3Rpdml0eScpLFxyXG4gICAgICAgICAgICBhY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIGRyYWdzdGFydDogY3JlYXRlQ2FsbEFjdGl2aXR5LFxyXG4gICAgICAgICAgICAgICAgY2xpY2s6IGNyZWF0ZUNhbGxBY3Rpdml0eVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQ3VzdG9tUGFsZXR0ZS4kaW5qZWN0ID0gW1xyXG4gICdjcmVhdGUnLFxyXG4gICdlbGVtZW50RmFjdG9yeScsXHJcbiAgJ3BhbGV0dGUnLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07IiwiaW1wb3J0IEN1c3RvbUNvbnRleHRQYWQgZnJvbSAnLi9DdXN0b21Db250ZXh0UGFkJztcclxuaW1wb3J0IEN1c3RvbVBhbGV0dGUgZnJvbSAnLi9DdXN0b21QYWxldHRlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBfX2luaXRfXzogWyAnY3VzdG9tQ29udGV4dFBhZCcsICdjdXN0b21QYWxldHRlJyBdLFxyXG4gIGN1c3RvbUNvbnRleHRQYWQ6IFsgJ3R5cGUnLCBDdXN0b21Db250ZXh0UGFkIF0sXHJcbiAgY3VzdG9tUGFsZXR0ZTogWyAndHlwZScsIEN1c3RvbVBhbGV0dGUgXVxyXG59OyIsImltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi90cmFuc2xhdGlvbnNHZXJtYW4nO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdXN0b21UcmFuc2xhdGUodGVtcGxhdGUsIHJlcGxhY2VtZW50cykge1xyXG4gIHJlcGxhY2VtZW50cyA9IHJlcGxhY2VtZW50cyB8fCB7fTtcclxuICB0ZW1wbGF0ZSA9IHRyYW5zbGF0aW9uc1t0ZW1wbGF0ZV0gfHwgdGVtcGxhdGU7XHJcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soW159XSspfS9nLCBmdW5jdGlvbihfLCBrZXkpIHtcclxuXHQgdmFyIHN0ciA9IHJlcGxhY2VtZW50c1trZXldO1xyXG5cdCAgaWYodHJhbnNsYXRpb25zW3JlcGxhY2VtZW50c1trZXldXSAhPSBudWxsICYmIHRyYW5zbGF0aW9ucyBbcmVwbGFjZW1lbnRzW2tleV1dICE9ICd1bmRlZmluZWQnKXtcclxuXHRcdCAgc3RyID0gdHJhbnNsYXRpb25zW3JlcGxhY2VtZW50c1trZXldXTtcclxuXHQgIH1cclxuICAgIHJldHVybiAgc3RyIHx8ICd7JyArIGtleSArICd9JztcclxuICB9KTtcclxufSIsImV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8vIExhYmVsc1xyXG4gICAgJ0FjdGl2YXRlIHRoZSBnbG9iYWwgY29ubmVjdCB0b29sJyA6ICfmv4DmtLvlhajlsYDov57mjqXlt6XlhbcnLFxyXG4gICAgJ0FwcGVuZCB7dHlwZX0nOiAn6L+95YqgIHt0eXBlfScsXHJcbiAgICAnQXBwZW5kIEVuZEV2ZW50JzogJ+i/veWKoCDnu5PmnZ/kuovku7YgJyxcclxuICAgICdBcHBlbmQgVGFzayc6J+i/veWKoCDku7vliqEnLFxyXG4gICAgJ0FwcGVuZCBHYXRld2F5Jzon6L+95YqgIOe9keWFsycsXHJcbiAgICAnQXBwZW5kIEludGVybWVkaWF0ZS9Cb3VuZGFyeSBFdmVudCc6J+i/veWKoCDkuK3pl7Qv6L6555WMIOS6i+S7ticsXHJcbiAgICAnQWRkIExhbmUgYWJvdmUnOiAn5Zyo5LiK6Z2i5re75Yqg6YGTJyxcclxuICAgICdEaXZpZGUgaW50byB0d28gTGFuZXMnOiAn5YiG5Ymy5oiQ5Lik5Liq6YGTJyxcclxuICAgICdEaXZpZGUgaW50byB0aHJlZSBMYW5lcyc6ICfliIblibLmiJDkuInkuKrpgZMnLFxyXG4gICAgJ0FkZCBMYW5lIGJlbG93JzogJ+WcqOS4i+mdoua3u+WKoOmBkycsXHJcbiAgICAnQXBwZW5kIGNvbXBlbnNhdGlvbiBhY3Rpdml0eSc6ICfov73liqDooaXlgb/mtLvliqgnLFxyXG4gICAgJ0NoYW5nZSB0eXBlJzogJ+S/ruaUueexu+WeiycsXHJcbiAgICAnQ29ubmVjdCB1c2luZyBBc3NvY2lhdGlvbic6ICfkvb/nlKjlhbPogZTov57mjqUnLFxyXG4gICAgJ0Nvbm5lY3QgdXNpbmcgU2VxdWVuY2UvTWVzc2FnZUZsb3cgb3IgQXNzb2NpYXRpb24nOiAn5L2/55So6aG65bqPL+a2iOaBr+a1geaIluiAheWFs+iBlOi/nuaOpScsXHJcbiAgICAnQ29ubmVjdCB1c2luZyBEYXRhSW5wdXRBc3NvY2lhdGlvbic6ICfkvb/nlKjmlbDmja7ovpPlhaXlhbPogZTov57mjqUnLFxyXG4gICAgJ1JlbW92ZSc6ICfnp7vpmaQnLFxyXG4gICAgJ0FjdGl2YXRlIHRoZSBoYW5kIHRvb2wnOiAn5r+A5rS75oqT5omL5bel5YW3JyxcclxuICAgICdBY3RpdmF0ZSB0aGUgbGFzc28gdG9vbCc6ICfmv4DmtLvlpZfntKLlt6XlhbcnLFxyXG4gICAgJ0FjdGl2YXRlIHRoZSBjcmVhdGUvcmVtb3ZlIHNwYWNlIHRvb2wnOiAn5r+A5rS75Yib5bu6L+WIoOmZpOepuumXtOW3peWFtycsXHJcbiAgICAnQ3JlYXRlIGV4cGFuZGVkIFN1YlByb2Nlc3MnOiAn5Yib5bu65omp5bGV5a2Q6L+H56iLJyxcclxuICAgICdDcmVhdGUgSW50ZXJtZWRpYXRlVGhyb3dFdmVudC9Cb3VuZGFyeUV2ZW50JyA6ICfliJvlu7rkuK3pl7Tmipvlh7rkuovku7Yv6L6555WM5LqL5Lu2JyxcclxuICAgICdDcmVhdGUgUG9vbC9QYXJ0aWNpcGFudCc6ICfliJvlu7rmsaAv5Y+C5LiO6ICFJyxcclxuICAgICdQYXJhbGxlbCBNdWx0aSBJbnN0YW5jZSc6ICflubbooYzlpJrph43kuovku7YnLFxyXG4gICAgJ1NlcXVlbnRpYWwgTXVsdGkgSW5zdGFuY2UnOiAn5pe25bqP5aSa6YeN5LqL5Lu2JyxcclxuICAgICdEYXRhT2JqZWN0UmVmZXJlbmNlJzon5pWw5o2u5a+56LGh5Y+C6ICDJyxcclxuICAgICdEYXRhU3RvcmVSZWZlcmVuY2UnOifmlbDmja7lrZjlgqjlj4LogIMnLFxyXG4gICAgJ0xvb3AnOiAn5b6q546vJyxcclxuICAgICdBZC1ob2MnOiAn5Y2z5bitJyxcclxuICAgICdDcmVhdGUge3R5cGV9JzogJ+WIm+W7uiB7dHlwZX0nLFxyXG4gICAgJ0NyZWF0ZSBUYXNrJzon5Yib5bu65Lu75YqhJyxcclxuICAgICdDcmVhdGUgU3RhcnRFdmVudCc6J+WIm+W7uuW8gOWni+S6i+S7ticsXHJcbiAgICAnQ3JlYXRlIEVuZEV2ZW50Jzon5Yib5bu657uT5p2f5LqL5Lu2JyxcclxuICAgICdDcmVhdGUgR3JvdXAnOifliJvlu7rnu4QnLFxyXG4gICAgJ1Rhc2snOiAn5Lu75YqhJyxcclxuICAgICdTZW5kIFRhc2snOiAn5Y+R6YCB5Lu75YqhJyxcclxuICAgICdSZWNlaXZlIFRhc2snOiAn5o6l5pS25Lu75YqhJyxcclxuICAgICdVc2VyIFRhc2snOiAn55So5oi35Lu75YqhJyxcclxuICAgICdNYW51YWwgVGFzayc6ICfmiYvlt6Xku7vliqEnLFxyXG4gICAgJ0J1c2luZXNzIFJ1bGUgVGFzayc6ICfkuJrliqHop4TliJnku7vliqEnLFxyXG4gICAgJ1NlcnZpY2UgVGFzayc6ICfmnI3liqHku7vliqEnLFxyXG4gICAgJ1NjcmlwdCBUYXNrJzogJ+iEmuacrOS7u+WKoScsXHJcbiAgICAnQ2FsbCBBY3Rpdml0eSc6ICfosIPnlKjmtLvliqgnLFxyXG4gICAgJ1N1YiBQcm9jZXNzIChjb2xsYXBzZWQpJzogJ+WtkOa1geeoi++8iOaKmOWPoOeahO+8iScsXHJcbiAgICAnU3ViIFByb2Nlc3MgKGV4cGFuZGVkKSc6ICflrZDmtYHnqIvvvIjlsZXlvIDnmoTvvIknLFxyXG4gICAgJ1N0YXJ0IEV2ZW50JzogJ+W8gOWni+S6i+S7ticsXHJcbiAgICAnU3RhcnRFdmVudCc6ICflvIDlp4vkuovku7YnLFxyXG4gICAgJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfkuK3pl7Tkuovku7YnLFxyXG4gICAgJ0VuZCBFdmVudCc6ICfnu5PmnZ/kuovku7YnLFxyXG4gICAgJ0VuZEV2ZW50JzogJ+e7k+adn+S6i+S7ticsXHJcbiAgICAnQ3JlYXRlIEdhdGV3YXknOiAn5Yib5bu6572R5YWzJyxcclxuICAgICdHYXRlV2F5Jzon572R5YWzJyxcclxuICAgICdDcmVhdGUgSW50ZXJtZWRpYXRlL0JvdW5kYXJ5IEV2ZW50JzogJ+WIm+W7uuS4remXtC/ovrnnlYzkuovku7YnLFxyXG4gICAgJ01lc3NhZ2UgU3RhcnQgRXZlbnQnOiAn5raI5oGv5byA5aeL5LqL5Lu2JyxcclxuICAgICdUaW1lciBTdGFydCBFdmVudCc6ICflrprml7blvIDlp4vkuovku7YnLFxyXG4gICAgJ0NvbmRpdGlvbmFsIFN0YXJ0IEV2ZW50JzogJ+adoeS7tuW8gOWni+S6i+S7ticsXHJcbiAgICAnU2lnbmFsIFN0YXJ0IEV2ZW50JzogJ+S/oeWPt+W8gOWni+S6i+S7ticsXHJcbiAgICAnRXJyb3IgU3RhcnQgRXZlbnQnOiAn6ZSZ6K+v5byA5aeL5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50JzogJ+WNh+e6p+W8gOWni+S6i+S7ticsXHJcbiAgICAnQ29tcGVuc2F0aW9uIFN0YXJ0IEV2ZW50JzogJ+ihpeWBv+W8gOWni+S6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5raI5oGv5byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdUaW1lciBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5a6a5pe25byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdDb25kaXRpb25hbCBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5p2h5Lu25byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdTaWduYWwgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+S/oeWPt+W8gOWni+S6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnRXNjYWxhdGlvbiBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5Y2H57qn5byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdNZXNzYWdlIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfmtojmga/kuK3pl7TmjZXojrfkuovku7YnLFxyXG4gICAgJ01lc3NhZ2UgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+a2iOaBr+S4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnVGltZXIgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JzogJ+WumuaXtuS4remXtOaNleiOt+S6i+S7ticsXHJcbiAgICAnRXNjYWxhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnOiAn5Y2H57qn5Lit6Ze05oqb5Ye65LqL5Lu2JyxcclxuICAgICdDb25kaXRpb25hbCBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnOiAn5p2h5Lu25Lit6Ze05o2V6I635LqL5Lu2JyxcclxuICAgICdMaW5rIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfpk77mjqXkuK3pl7TmjZXojrfkuovku7YnLFxyXG4gICAgJ0xpbmsgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+mTvuaOpeS4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnQ29tcGVuc2F0aW9uIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfooaXlgb/kuK3pl7Tmipvlh7rkuovku7YnLFxyXG4gICAgJ1NpZ25hbCBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnOiAn5L+h5Y+35Lit6Ze05o2V6I635LqL5Lu2JyxcclxuICAgICdTaWduYWwgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+S/oeWPt+S4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBFbmQgRXZlbnQnOiAn5raI5oGv57uT5p2f5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIEVuZCBFdmVudCc6ICflrprml7bnu5PmnZ/kuovku7YnLFxyXG4gICAgJ0Vycm9yIEVuZCBFdmVudCc6ICfplJnor6/nu5PmnZ/kuovku7YnLFxyXG4gICAgJ0NhbmNlbCBFbmQgRXZlbnQnOiAn5Y+W5raI57uT5p2f5LqL5Lu2JyxcclxuICAgICdDb21wZW5zYXRpb24gRW5kIEV2ZW50JzogJ+ihpeWBv+e7k+adn+S6i+S7ticsXHJcbiAgICAnU2lnbmFsIEVuZCBFdmVudCc6ICfkv6Hlj7fnu5PmnZ/kuovku7YnLFxyXG4gICAgJ1Rlcm1pbmF0ZSBFbmQgRXZlbnQnOiAn57uI5q2i57uT5p2f5LqL5Lu2JyxcclxuICAgICdNZXNzYWdlIEJvdW5kYXJ5IEV2ZW50JzogJ+a2iOaBr+i+ueeVjOS6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5raI5oGv6L6555WM5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdUaW1lciBCb3VuZGFyeSBFdmVudCc6ICflrprml7bovrnnlYzkuovku7YnLFxyXG4gICAgJ1RpbWVyIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICflrprml7bovrnnlYzkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxyXG4gICAgJ0VzY2FsYXRpb24gQm91bmRhcnkgRXZlbnQnOiAn5Y2H57qn6L6555WM5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICfljYfnuqfovrnnlYzkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxyXG4gICAgJ0NvbmRpdGlvbmFsIEJvdW5kYXJ5IEV2ZW50JzogJ+adoeS7tui+ueeVjOS6i+S7ticsXHJcbiAgICAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+adoeS7tui+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnRXJyb3IgQm91bmRhcnkgRXZlbnQnOiAn6ZSZ6K+v6L6555WM5LqL5Lu2JyxcclxuICAgICdDYW5jZWwgQm91bmRhcnkgRXZlbnQnOiAn5Y+W5raI6L6555WM5LqL5Lu2JyxcclxuICAgICdTaWduYWwgQm91bmRhcnkgRXZlbnQnOiAn5L+h5Y+36L6555WM5LqL5Lu2JyxcclxuICAgICdTaWduYWwgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+S/oeWPt+i+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnQ29tcGVuc2F0aW9uIEJvdW5kYXJ5IEV2ZW50JzogJ+ihpeWBv+i+ueeVjOS6i+S7ticsXHJcbiAgICAnRXhjbHVzaXZlIEdhdGV3YXknOiAn5LqS5pal572R5YWzJyxcclxuICAgICdQYXJhbGxlbCBHYXRld2F5JzogJ+W5tuihjOe9keWFsycsXHJcbiAgICAnSW5jbHVzaXZlIEdhdGV3YXknOiAn55u45a65572R5YWzJyxcclxuICAgICdDb21wbGV4IEdhdGV3YXknOiAn5aSN5p2C572R5YWzJyxcclxuICAgICdFdmVudCBiYXNlZCBHYXRld2F5JzogJ+S6i+S7tue9keWFsycsXHJcbiAgICAnVHJhbnNhY3Rpb24nOiAn6L2s6L+QJyxcclxuICAgICdTdWIgUHJvY2Vzcyc6ICflrZDmtYHnqIsnLFxyXG4gICAgJ0V2ZW50IFN1YiBQcm9jZXNzJzogJ+S6i+S7tuWtkOa1geeoiycsXHJcbiAgICAnQ29sbGFwc2VkIFBvb2wnOiAn5oqY5Y+g5rGgJyxcclxuICAgICdFeHBhbmRlZCBQb29sJzogJ+WxleW8gOaxoCcsXHJcbiAgICAvLyBFcnJvcnNcclxuICAgICdubyBwYXJlbnQgZm9yIHtlbGVtZW50fSBpbiB7cGFyZW50fSc6ICflnKh7cGFyZW50femHjO+8jHtlbGVtZW50feayoeacieeItuexuycsXHJcbiAgICAnbm8gc2hhcGUgdHlwZSBzcGVjaWZpZWQnOiAn5rKh5pyJ5oyH5a6a55qE5b2i54q257G75Z6LJyxcclxuICAgICdmbG93IGVsZW1lbnRzIG11c3QgYmUgY2hpbGRyZW4gb2YgcG9vbHMvcGFydGljaXBhbnRzJzogJ+a1geWFg+e0oOW/hemhu+aYr+axoC/lj4LkuI7ogIXnmoTlrZDnsbsnLFxyXG4gICAgJ291dCBvZiBib3VuZHMgcmVsZWFzZSc6ICdvdXQgb2YgYm91bmRzIHJlbGVhc2UnLFxyXG4gICAgJ21vcmUgdGhhbiB7Y291bnR9IGNoaWxkIGxhbmVzJzogJ+WtkOmBk+Wkp+S6jntjb3VudH0gJyxcclxuICAgICdlbGVtZW50IHJlcXVpcmVkJzogJ+WFg+e0oOS4jeiDveS4uuepuicsXHJcbiAgICAnZGlhZ3JhbSBub3QgcGFydCBvZiBicG1uOkRlZmluaXRpb25zJzogJ+a1geeoi+WbvuS4jeespuWQiGJwbW7op4TojIMnLFxyXG4gICAgJ25vIGRpYWdyYW0gdG8gZGlzcGxheSc6ICfmsqHmnInlj6/lsZXnpLrnmoTmtYHnqIvlm74nLFxyXG4gICAgJ25vIHByb2Nlc3Mgb3IgY29sbGFib3JhdGlvbiB0byBkaXNwbGF5JzogJ+ayoeacieWPr+WxleekuueahOa1geeoiy/ljY/kvZwnLFxyXG4gICAgJ2VsZW1lbnQge2VsZW1lbnR9IHJlZmVyZW5jZWQgYnkge3JlZmVyZW5jZWR9I3twcm9wZXJ0eX0gbm90IHlldCBkcmF3bic6ICfnlLF7cmVmZXJlbmNlZH0je3Byb3BlcnR5feW8leeUqOeahHtlbGVtZW50feWFg+e0oOS7jeacque7mOWIticsXHJcbiAgICAnYWxyZWFkeSByZW5kZXJlZCB7ZWxlbWVudH0nOiAne2VsZW1lbnR9IOW3suiiq+a4suafkycsXHJcbiAgICAnZmFpbGVkIHRvIGltcG9ydCB7ZWxlbWVudH0nOiAn5a+85YWle2VsZW1lbnR95aSx6LSlJyxcclxuICAgIC8v5bGe5oCn6Z2i5p2/55qE5Y+C5pWwXHJcbiAgICAnSWQnOifnvJblj7cnLFxyXG4gICAgJ05hbWUnOiflkI3np7AnLFxyXG4gICAgJ0dlbmVyYWwnOifluLjop4QnLFxyXG4gICAgJ0RldGFpbHMnOifor6bmg4UnLFxyXG4gICAgJ01lc3NhZ2UgTmFtZSc6J+a2iOaBr+WQjeensCcsXHJcbiAgICAnTWVzc2FnZSc6J+a2iOaBrycsXHJcbiAgICAnSW5pdGlhdG9yJzon5Yib5bu66ICFJyxcclxuICAgICdBc3luY2hyb25vdXMgQ29udGludWF0aW9ucyc6J+aMgee7reW8guatpScsXHJcbiAgICAnQXN5bmNocm9ub3VzIEJlZm9yZSc6J+W8guatpeWJjScsXHJcbiAgICAnQXN5bmNocm9ub3VzIEFmdGVyJzon5byC5q2l5ZCOJyxcclxuICAgICdKb2IgQ29uZmlndXJhdGlvbic6J+W3peS9nOmFjee9ricsXHJcbiAgICAnRXhjbHVzaXZlJzon5o6S6ZmkJyxcclxuICAgICdKb2IgUHJpb3JpdHknOiflt6XkvZzkvJjlhYjnuqcnLFxyXG4gICAgJ1JldHJ5IFRpbWUgQ3ljbGUnOifph43or5Xml7bpl7TlkajmnJ8nLFxyXG4gICAgJ0RvY3VtZW50YXRpb24nOifmlofmoaMnLFxyXG4gICAgJ0VsZW1lbnQgRG9jdW1lbnRhdGlvbic6J+WFg+e0oOaWh+ahoycsXHJcbiAgICAnSGlzdG9yeSBDb25maWd1cmF0aW9uJzon5Y6G5Y+y6YWN572uJyxcclxuICAgICdIaXN0b3J5IFRpbWUgVG8gTGl2ZSc6J+WOhuWPsueahOeUn+WtmOaXtumXtCcsXHJcbiAgICAnRm9ybXMnOifooajljZUnLFxyXG4gICAgJ0Zvcm0gS2V5Jzon6KGo5Y2Va2V5JyxcclxuICAgICdGb3JtIEZpZWxkcyc6J+ihqOWNleWtl+autScsXHJcbiAgICAnQnVzaW5lc3MgS2V5Jzon5Lia5Yqha2V5JyxcclxuICAgICdGb3JtIEZpZWxkJzon6KGo5Y2V5a2X5q61JyxcclxuICAgICdJRCc6J+e8luWPtycsXHJcbiAgICAnVHlwZSc6J+exu+WeiycsXHJcbiAgICAnTGFiZWwnOiflkI3np7AnLFxyXG4gICAgJ0RlZmF1bHQgVmFsdWUnOifpu5jorqTlgLwnLFxyXG4gICAgJ1ZhbGlkYXRpb24nOifmoKHpqownLFxyXG4gICAgJ0FkZCBDb25zdHJhaW50Jzon5re75Yqg57qm5p2fJyxcclxuICAgICdDb25maWcnOifphY3nva4nLFxyXG4gICAgJ1Byb3BlcnRpZXMnOiflsZ7mgKcnLFxyXG4gICAgJ0FkZCBQcm9wZXJ0eSc6J+a3u+WKoOWxnuaApycsXHJcbiAgICAnVmFsdWUnOiflgLwnLFxyXG4gICAgJ0FkZCc6J+a3u+WKoCcsXHJcbiAgICAnVmFsdWVzJzon5YC8JyxcclxuICAgICdBZGQgVmFsdWUnOifmt7vliqDlgLwnLFxyXG4gICAgJ0xpc3RlbmVycyc6J+ebkeWQrOWZqCcsXHJcbiAgICAnRXhlY3V0aW9uIExpc3RlbmVyJzon5omn6KGM55uR5ZCsJyxcclxuICAgICdFdmVudCBUeXBlJzon5LqL5Lu257G75Z6LJyxcclxuICAgICdMaXN0ZW5lciBUeXBlJzon55uR5ZCs5Zmo57G75Z6LJyxcclxuICAgICdKYXZhIENsYXNzJzonSmF2YeexuycsXHJcbiAgICAnRXhwcmVzc2lvbic6J+ihqOi+vuW8jycsXHJcbiAgICAnTXVzdCBwcm92aWRlIGEgdmFsdWUnOiflv4Xpobvmj5DkvpvkuIDkuKrlgLwnLFxyXG4gICAgJ0RlbGVnYXRlIEV4cHJlc3Npb24nOifku6PnkIbooajovr7lvI8nLFxyXG4gICAgJ1NjcmlwdCc6J+iEmuacrCcsXHJcbiAgICAnU2NyaXB0IEZvcm1hdCc6J+iEmuacrOagvOW8jycsXHJcbiAgICAnU2NyaXB0IFR5cGUnOifohJrmnKznsbvlnosnLFxyXG4gICAgJ0lubGluZSBTY3JpcHQnOiflhoXogZTohJrmnKwnLFxyXG4gICAgJ0V4dGVybmFsIFNjcmlwdCc6J+WklumDqOiEmuacrCcsXHJcbiAgICAnUmVzb3VyY2UnOifotYTmupAnLFxyXG4gICAgJ0ZpZWxkIEluamVjdGlvbic6J+Wtl+auteazqOWFpScsXHJcbiAgICAnRXh0ZW5zaW9ucyc6J+aJqeWxlScsXHJcbiAgICAnSW5wdXQvT3V0cHV0Jzon6L6T5YWlL+i+k+WHuicsXHJcbiAgICAnSW5wdXQgUGFyYW1ldGVycyc6J+i+k+WFpeWPguaVsCcsXHJcbiAgICAnT3V0cHV0IFBhcmFtZXRlcnMnOifovpPlh7rlj4LmlbAnLFxyXG4gICAgJ1BhcmFtZXRlcnMnOiflj4LmlbAnLFxyXG4gICAgJ091dHB1dCBQYXJhbWV0ZXInOifovpPlh7rlj4LmlbAnLFxyXG4gICAgJ1RpbWVyIERlZmluaXRpb24gVHlwZSc6J+WumuaXtuWZqOWumuS5ieexu+WeiycsXHJcbiAgICAnVGltZXIgRGVmaW5pdGlvbic6J+WumuaXtuWZqOWumuS5iScsXHJcbiAgICAnRGF0ZSc6J+aXpeacnycsXHJcbiAgICAnRHVyYXRpb24nOifmjIHnu60nLFxyXG4gICAgJ0N5Y2xlJzon5b6q546vJyxcclxuICAgICdTaWduYWwnOifkv6Hlj7cnLFxyXG4gICAgJ1NpZ25hbCBOYW1lJzon5L+h5Y+35ZCN56ewJyxcclxuICAgICdFc2NhbGF0aW9uJzon5Y2H57qnJyxcclxuICAgICdFcnJvcic6J+mUmeivrycsXHJcbiAgICAnTGluayBOYW1lJzon6ZO+5o6l5ZCN56ewJyxcclxuICAgICdDb25kaXRpb24nOifmnaHku7blkI3np7AnLFxyXG4gICAgJ1ZhcmlhYmxlIE5hbWUnOiflj5jph4/lkI3np7AnLFxyXG4gICAgJ1ZhcmlhYmxlIEV2ZW50Jzon5Y+Y6YeP5LqL5Lu2JyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUgY2hhbmdlIGV2ZW50IGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuJzon5aSa5Liq5Y+Y6YeP5LqL5Lu25Lul6YCX5Y+36ZqU5byAJyxcclxuICAgICdXYWl0IGZvciBDb21wbGV0aW9uJzon562J5b6F5a6M5oiQJyxcclxuICAgICdBY3Rpdml0eSBSZWYnOifmtLvliqjlj4LogIMnLFxyXG4gICAgJ1ZlcnNpb24gVGFnJzon54mI5pys5qCH562+JyxcclxuICAgICdFeGVjdXRhYmxlJzon5Y+v5omn6KGM5paH5Lu2JyxcclxuICAgICdFeHRlcm5hbCBUYXNrIENvbmZpZ3VyYXRpb24nOifmianlsZXku7vliqHphY3nva4nLFxyXG4gICAgJ1Rhc2sgUHJpb3JpdHknOifku7vliqHkvJjlhYjnuqcnLFxyXG4gICAgJ0V4dGVybmFsJzon5aSW6YOoJyxcclxuICAgICdDb25uZWN0b3InOifov57mjqXlmagnLFxyXG4gICAgJ011c3QgY29uZmlndXJlIENvbm5lY3Rvcic6J+W/hemhu+mFjee9rui/nuaOpeWZqCcsXHJcbiAgICAnQ29ubmVjdG9yIElkJzon6L+e5o6l5Zmo57yW5Y+3JyxcclxuICAgICdJbXBsZW1lbnRhdGlvbic6J+WunueOsOaWueW8jycsXHJcbiAgICAnRmllbGQgSW5qZWN0aW9ucyc6J+Wtl+auteazqOWFpScsXHJcbiAgICAnRmllbGRzJzon5a2X5q61JyxcclxuICAgICdSZXN1bHQgVmFyaWFibGUnOifnu5Pmnpzlj5jph48nLFxyXG4gICAgJ1RvcGljJzon5Li76aKYJyxcclxuICAgICdDb25maWd1cmUgQ29ubmVjdG9yJzon6YWN572u6L+e5o6l5ZmoJyxcclxuICAgICdJbnB1dCBQYXJhbWV0ZXInOifovpPlhaXlj4LmlbAnLFxyXG4gICAgJ0Fzc2lnbmVlJzon5Luj55CG5Lq6JyxcclxuICAgICdDYW5kaWRhdGUgVXNlcnMnOiflgJnpgInnlKjmiLcnLFxyXG4gICAgJ0NhbmRpZGF0ZSBHcm91cHMnOiflgJnpgInnu4QnLFxyXG4gICAgJ0R1ZSBEYXRlJzon5Yiw5pyf5pe26Ze0JyxcclxuICAgICdGb2xsb3cgVXAgRGF0ZSc6J+i3n+i4quaXpeacnycsXHJcbiAgICAnUHJpb3JpdHknOifkvJjlhYjnuqcnLFxyXG4gICAgJ1RoZSBmb2xsb3cgdXAgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJzon6Lef6Liq5pel5pyf5b+F6aG756ym5ZCIRUzooajovr7lvI/vvIzlpoLvvJogJHtzb21lRGF0ZX0gLOaIluiAheS4gOS4qklTT+agh+WHhuaXpeacn++8jOWmgu+8mjIwMTUtMDYtMjZUMDk6NTQ6MDAnLFxyXG4gICAgJ1RoZSBkdWUgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJzon6Lef6Liq5pel5pyf5b+F6aG756ym5ZCIRUzooajovr7lvI/vvIzlpoLvvJogJHtzb21lRGF0ZX0gLOaIluiAheS4gOS4qklTT+agh+WHhuaXpeacn++8jOWmgu+8mjIwMTUtMDYtMjZUMDk6NTQ6MDAnLFxyXG4gICAgJ1ZhcmlhYmxlcyc6J+WPmOmHjycsXHJcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgQ29uZmlndXJhdGlvbic6J+WAmemAieW8gOWni+mFjee9ricsXHJcbiAgICAnVGFzayBMaXN0ZW5lcic6J+S7u+WKoeebkeWQrOWZqCcsXHJcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgR3JvdXBzJzon5YCZ6YCJ5byA5aeL57uEJyxcclxuICAgICdDYW5kaWRhdGUgU3RhcnRlciBVc2Vycyc6J+WAmemAieW8gOWni+eUqOaItycsXHJcbiAgICAnVGFza2xpc3QgQ29uZmlndXJhdGlvbic6J+S7u+WKoeWIl+ihqOmFjee9ricsXHJcbiAgICAnU3RhcnRhYmxlJzon5ZCv5YqoJyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nOifmjIflrprlpJrkuKrnu4Qs55So6YCX5Y+35YiG6ZqUJyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdXNlciBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0Lic6J+aMh+WumuWkmuS4queUqOaItyznlKjpgJflj7fliIbpmpQnLFxyXG4gICAgJ1RoaXMgbWFwcyB0byB0aGUgcHJvY2VzcyBkZWZpbml0aW9uIGtleS4nOifov5nkvJrmmKDlsITkuLrmtYHnqIvlrprkuYnnmoTplK4nLFxyXG4gICAgJ0NhbGxBY3Rpdml0eSBUeXBlJzon6LCD55So5rS75Yqo57G75Z6LJyxcclxuICAgICdDb25kaXRpb24gVHlwZSc6J+adoeS7tuexu+WeiycsXHJcbiAgICAnQ3JlYXRlIFVzZXJUYXNrJzon5Yib5bu655So5oi35Lu75YqhJyxcclxuICAgICdDcmVhdGUgQ2FsbEFjdGl2aXR5Jzon5Yib5bu66LCD55So5rS75YqoJyxcclxuICAgICdDYWxsZWQgRWxlbWVudCc6J+iwg+eUqOWFg+e0oCcsXHJcbiAgICAnQ3JlYXRlIERhdGFPYmplY3RSZWZlcmVuY2UnOifliJvlu7rmlbDmja7lr7nosaHlvJXnlKgnLFxyXG4gICAgJ0NyZWF0ZSBEYXRhU3RvcmVSZWZlcmVuY2UnOifliJvlu7rmlbDmja7lrZjlgqjlvJXnlKgnLFxyXG4gICAgJ011bHRpIEluc3RhbmNlJzon5aSa5a6e5L6LJyxcclxuICAgICdMb29wIENhcmRpbmFsaXR5Jzon5a6e5L6L5pWw6YePJyxcclxuICAgICdDb2xsZWN0aW9uJzon5Lu75Yqh5Y+C5LiO5Lq65YiX6KGoJyxcclxuICAgICdFbGVtZW50IFZhcmlhYmxlJzon5YWD57Sg5Y+Y6YePJyxcclxuICAgICdDb21wbGV0aW9uIENvbmRpdGlvbic6J+WujOaIkOadoeS7tidcclxufTtcclxuIiwibW9kdWxlLmV4cG9ydHMgPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxyXFxuPGJwbW4yOmRlZmluaXRpb25zIHhtbG5zOnhzaT1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcXFwiIHhtbG5zOmJwbW4yPVxcXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9CUE1OLzIwMTAwNTI0L01PREVMXFxcIiB4bWxuczpicG1uZGk9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvRElcXFwiIHhtbG5zOmRjPVxcXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1xcXCIgeG1sbnM6ZGk9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXFxcIiB4c2k6c2NoZW1hTG9jYXRpb249XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUwgQlBNTjIwLnhzZFxcXCIgaWQ9XFxcInNhbXBsZS1kaWFncmFtXFxcIiB0YXJnZXROYW1lc3BhY2U9XFxcImh0dHA6Ly9hY3Rpdml0aS5vcmcvYnBtblxcXCI+XFxyXFxuICA8YnBtbjI6cHJvY2VzcyBpZD1cXFwiUHJvY2Vzc18xXFxcIiBpc0V4ZWN1dGFibGU9XFxcInRydWVcXFwiPlxcclxcbiAgICA8YnBtbjI6c3RhcnRFdmVudCBpZD1cXFwiU3RhcnRFdmVudF8xXFxcIi8+XFxyXFxuICA8L2JwbW4yOnByb2Nlc3M+XFxyXFxuICA8YnBtbmRpOkJQTU5EaWFncmFtIGlkPVxcXCJCUE1ORGlhZ3JhbV8xXFxcIj5cXHJcXG4gICAgPGJwbW5kaTpCUE1OUGxhbmUgaWQ9XFxcIkJQTU5QbGFuZV8xXFxcIiBicG1uRWxlbWVudD1cXFwiUHJvY2Vzc18xXFxcIj5cXHJcXG4gICAgICA8YnBtbmRpOkJQTU5TaGFwZSBpZD1cXFwiX0JQTU5TaGFwZV9TdGFydEV2ZW50XzJcXFwiIGJwbW5FbGVtZW50PVxcXCJTdGFydEV2ZW50XzFcXFwiPlxcclxcbiAgICAgICAgPGRjOkJvdW5kcyBoZWlnaHQ9XFxcIjM2LjBcXFwiIHdpZHRoPVxcXCIzNi4wXFxcIiB4PVxcXCI0MTIuMFxcXCIgeT1cXFwiMjQwLjBcXFwiLz5cXHJcXG4gICAgICA8L2JwbW5kaTpCUE1OU2hhcGU+XFxyXFxuICAgIDwvYnBtbmRpOkJQTU5QbGFuZT5cXHJcXG4gIDwvYnBtbmRpOkJQTU5EaWFncmFtPlxcclxcbjwvYnBtbjI6ZGVmaW5pdGlvbnM+XCI7XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRoYXQgZGVjaWRlcyB1cG9uIHRoZSB2aXNpYmlsaXR5IC8gZWRpdGFibGVcclxuICogc3RhdGUgb2YgcHJvcGVydGllcyBpbiB0aGUgcHJvcGVydGllcyBwYW5lbC5cclxuICpcclxuICogSW1wbGVtZW50b3JzIG11c3Qgc3ViY2xhc3MgdGhpcyBjb21wb25lbnQgYW5kIG92ZXJyaWRlXHJcbiAqIHtAbGluayBQcm9wZXJ0aWVzQWN0aXZhdG9yI2lzRW50cnlWaXNpYmxlfSBhbmRcclxuICoge0BsaW5rIFByb3BlcnRpZXNBY3RpdmF0b3IjaXNQcm9wZXJ0eUVkaXRhYmxlfSB0byBwcm92aWRlXHJcbiAqIGN1c3RvbSBiZWhhdmlvci5cclxuICpcclxuICogQGNsYXNzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge051bWJlcn0gW3ByaW9yaXR5XSBhdCB3aGljaCBwcmlvcml0eSB0byBob29rIGludG8gdGhlIGFjdGl2YXRpb25cclxuICovXHJcbmZ1bmN0aW9uIFByb3BlcnRpZXNBY3RpdmF0b3IoZXZlbnRCdXMsIHByaW9yaXR5KSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBwcmlvcml0eSA9IHByaW9yaXR5IHx8IERFRkFVTFRfUFJJT1JJVFk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdwcm9wZXJ0aWVzUGFuZWwuaXNFbnRyeVZpc2libGUnLCBwcmlvcml0eSwgZnVuY3Rpb24oZSkge1xyXG4gICAgcmV0dXJuIHNlbGYuaXNFbnRyeVZpc2libGUoZS5lbnRyeSwgZS5lbGVtZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oJ3Byb3BlcnRpZXNQYW5lbC5pc1Byb3BlcnR5RWRpdGFibGUnLCBwcmlvcml0eSwgZnVuY3Rpb24oZSkge1xyXG4gICAgcmV0dXJuIHNlbGYuaXNQcm9wZXJ0eUVkaXRhYmxlKGUuZW50cnksIGUucHJvcGVydHlOYW1lLCBlLmVsZW1lbnQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5Qcm9wZXJ0aWVzQWN0aXZhdG9yLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHJvcGVydGllc0FjdGl2YXRvcjtcclxuXHJcblxyXG4vKipcclxuICogU2hvdWxkIHRoZSBnaXZlbiBlbnRyeSBiZSB2aXNpYmxlIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgIFByb3BlcnRpZXNBY3RpdmF0b3IjaXNFbnRyeVZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICovXHJcblByb3BlcnRpZXNBY3RpdmF0b3IucHJvdG90eXBlLmlzRW50cnlWaXNpYmxlID0gZnVuY3Rpb24oZW50cnksIGVsZW1lbnQpIHtcclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG91bGQgdGhlIGdpdmVuIHByb3BlcnR5IGJlIGVkaXRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnRcclxuICpcclxuICogQG1ldGhvZCAgUHJvcGVydGllc0FjdGl2YXRvciNpc1Byb3BlcnR5RWRpdGFibGVcclxuICpcclxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eU5hbWVcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gKi9cclxuUHJvcGVydGllc0FjdGl2YXRvci5wcm90b3R5cGUuaXNQcm9wZXJ0eUVkaXRhYmxlID0gZnVuY3Rpb24oZW50cnksIHByb3BlcnR5TmFtZSwgZWxlbWVudCkge1xyXG4gIHJldHVybiB0cnVlO1xyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbUNsZWFyID0gcmVxdWlyZSgnbWluLWRvbScpLmNsZWFyLFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyksXHJcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxyXG4gICAgSWRzID0gcmVxdWlyZSgnaWRzJykuZGVmYXVsdDtcclxuXHJcbnZhciBTUEFDRV9SRUdFWCA9IC9cXHMvO1xyXG5cclxuLy8gZm9yIFFOYW1lIHZhbGlkYXRpb24gYXMgcGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVDaGFyXHJcbnZhciBRTkFNRV9SRUdFWCA9IC9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaTtcclxuXHJcbi8vIGZvciBJRCB2YWxpZGF0aW9uIGFzIHBlciBCUE1OIFNjaGVtYSAoUU5hbWUgLSBOYW1lc3BhY2UpXHJcbnZhciBJRF9SRUdFWCA9IC9eW2Etel9dW1xcdy0uXSokL2k7XHJcblxyXG52YXIgUExBQ0VIT0xERVJfUkVHRVggPSAvXFwkXFx7KFtefV0qKVxcfS9nO1xyXG5cclxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcclxuICAnJic6ICcmYW1wOycsXHJcbiAgJzwnOiAnJmx0OycsXHJcbiAgJz4nOiAnJmd0OycsXHJcbiAgJ1wiJzogJyZxdW90OycsXHJcbiAgJ1xcJyc6ICcmIzM5OydcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNlbGVjdGVkT3B0aW9uKHNlbGVjdEJveCkge1xyXG4gIGlmIChzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0Qm94Lm9wdGlvbnNbc2VsZWN0Qm94LnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VsZWN0ZWRPcHRpb24gPSBzZWxlY3RlZE9wdGlvbjtcclxuXHJcblxyXG5mdW5jdGlvbiBzZWxlY3RlZFR5cGUoZWxlbWVudFN5bnRheCwgaW5wdXROb2RlKSB7XHJcbiAgdmFyIHR5cGVTZWxlY3QgPSBkb21RdWVyeShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpO1xyXG4gIHJldHVybiBzZWxlY3RlZE9wdGlvbih0eXBlU2VsZWN0KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VsZWN0ZWRUeXBlID0gc2VsZWN0ZWRUeXBlO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgcm9vdCBlbGVtZW50IHRoZSBkb2N1bWVudCB0aGlzXHJcbiAqIGJ1c2luZXNzIG9iamVjdCBpcyBjb250YWluZWQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRSb290KGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgdmFyIHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xyXG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCkge1xyXG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XHJcbiAgfVxyXG4gIHJldHVybiBwYXJlbnQ7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldFJvb3QgPSBnZXRSb290O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBmaWx0ZXJzIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCB3aGljaCBoYXZlIGEgZ2l2ZW4gdHlwZS5cclxuICogcmVtb3ZlcyBhIG5ldyBsaXN0XHJcbiAqL1xyXG5mdW5jdGlvbiBmaWx0ZXJFbGVtZW50c0J5VHlwZShvYmplY3RMaXN0LCB0eXBlKSB7XHJcbiAgdmFyIGxpc3QgPSBvYmplY3RMaXN0IHx8IFtdO1xyXG4gIHZhciByZXN1bHQgPSBbXTtcclxuICBmb3JFYWNoKGxpc3QsIGZ1bmN0aW9uKG9iaikge1xyXG4gICAgaWYgKGlzKG9iaiwgdHlwZSkpIHtcclxuICAgICAgcmVzdWx0LnB1c2gob2JqKTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5maWx0ZXJFbGVtZW50c0J5VHlwZSA9IGZpbHRlckVsZW1lbnRzQnlUeXBlO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XHJcbiAgdmFyIHJvb3QgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlckVsZW1lbnRzQnlUeXBlKHJvb3Qucm9vdEVsZW1lbnRzLCByZWZlcmVuY2VkVHlwZSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRSb290RWxlbWVudHNCeVR5cGUgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUFsbENoaWxkcmVuKGRvbUVsZW1lbnQpIHtcclxuICB3aGlsZSAoZG9tRWxlbWVudC5maXJzdENoaWxkKSB7XHJcbiAgICBkb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVBbGxDaGlsZHJlbiA9IHJlbW92ZUFsbENoaWxkcmVuO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBhZGRzIGFuIGVtcHR5IG9wdGlvbiB0byB0aGUgbGlzdFxyXG4gKi9cclxuZnVuY3Rpb24gYWRkRW1wdHlQYXJhbWV0ZXIobGlzdCkge1xyXG4gIHJldHVybiBsaXN0LnB1c2goeyAnbGFiZWwnOiAnJywgJ3ZhbHVlJzogJycsICduYW1lJzogJycgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmFkZEVtcHR5UGFyYW1ldGVyID0gYWRkRW1wdHlQYXJhbWV0ZXI7XHJcblxyXG5cclxuLyoqXHJcbiAqIHJldHVybnMgYSBsaXN0IHdpdGggYWxsIHJvb3QgZWxlbWVudHMgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXIgJ3JlZmVyZW5jZWRUeXBlJ1xyXG4gKi9cclxuZnVuY3Rpb24gcmVmcmVzaE9wdGlvbnNNb2RlbChidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUpIHtcclxuICB2YXIgbW9kZWwgPSBbXTtcclxuICB2YXIgcmVmZXJhYmxlT2JqZWN0cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcclxuICBmb3JFYWNoKHJlZmVyYWJsZU9iamVjdHMsIGZ1bmN0aW9uKG9iaikge1xyXG4gICAgbW9kZWwucHVzaCh7XHJcbiAgICAgIGxhYmVsOiAob2JqLm5hbWUgfHwgJycpICsgJyAoaWQ9JytvYmouaWQrJyknLFxyXG4gICAgICB2YWx1ZTogb2JqLmlkLFxyXG4gICAgICBuYW1lOiBvYmoubmFtZVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG1vZGVsO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZWZyZXNoT3B0aW9uc01vZGVsID0gcmVmcmVzaE9wdGlvbnNNb2RlbDtcclxuXHJcblxyXG4vKipcclxuICogZmlsbHMgdGhlIGRyb3AgZG93biB3aXRoIG9wdGlvbnNcclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnNEcm9wRG93bihkb21TZWxlY3RvciwgYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlLCBlbnRyeU5vZGUpIHtcclxuICB2YXIgb3B0aW9ucyA9IHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcclxuICBhZGRFbXB0eVBhcmFtZXRlcihvcHRpb25zKTtcclxuICB2YXIgc2VsZWN0Qm94ID0gZG9tUXVlcnkoZG9tU2VsZWN0b3IsIGVudHJ5Tm9kZSk7XHJcbiAgZG9tQ2xlYXIoc2VsZWN0Qm94KTtcclxuXHJcbiAgZm9yRWFjaChvcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgIHZhciBvcHRpb25FbnRyeSA9IGRvbWlmeSgnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbi52YWx1ZSkgKyAnXCI+JyArIGVzY2FwZUhUTUwob3B0aW9uLmxhYmVsKSArICc8L29wdGlvbj4nKTtcclxuICAgIHNlbGVjdEJveC5hcHBlbmRDaGlsZChvcHRpb25FbnRyeSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnVwZGF0ZU9wdGlvbnNEcm9wRG93biA9IHVwZGF0ZU9wdGlvbnNEcm9wRG93bjtcclxuXHJcblxyXG4vKipcclxuICogY2hlY2tzIHdoZXRoZXIgdGhlIGlkIHZhbHVlIGlzIHZhbGlkXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYm9cclxuICogQHBhcmFtIHtTdHJpbmd9IGlkVmFsdWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ30gZXJyb3IgbWVzc2FnZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYXNzaWduZWQgPSBiby4kbW9kZWwuaWRzLmFzc2lnbmVkKGlkVmFsdWUpO1xyXG5cclxuICB2YXIgaWRFeGlzdHMgPSBhc3NpZ25lZCAmJiBhc3NpZ25lZCAhPT0gYm87XHJcblxyXG4gIGlmICghaWRWYWx1ZSB8fCBpZEV4aXN0cykge1xyXG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnRWxlbWVudCBtdXN0IGhhdmUgYW4gdW5pcXVlIGlkLicpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuaXNJZFZhbGlkID0gaXNJZFZhbGlkO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlkVmFsdWUgPSBzdHJpcFBsYWNlaG9sZGVycyhpZFZhbHVlKTtcclxuXHJcbiAgaWYgKGNvbnRhaW5zU3BhY2UoaWRWYWx1ZSkpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lkIG11c3Qgbm90IGNvbnRhaW4gc3BhY2VzLicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFJRF9SRUdFWC50ZXN0KGlkVmFsdWUpKSB7XHJcblxyXG4gICAgaWYgKFFOQU1FX1JFR0VYLnRlc3QoaWRWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBub3QgY29udGFpbiBwcmVmaXguJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBiZSBhIHZhbGlkIFFOYW1lLicpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVJZCA9IHZhbGlkYXRlSWQ7XHJcblxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xyXG4gIHJldHVybiBTUEFDRV9SRUdFWC50ZXN0KHZhbHVlKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY29udGFpbnNTcGFjZSA9IGNvbnRhaW5zU3BhY2U7XHJcblxyXG5cclxuZnVuY3Rpb24gc3RyaXBQbGFjZWhvbGRlcnMoaWRWYWx1ZSkge1xyXG5cclxuICAvLyByZXBsYWNlIGV4cHJlc3Npb24gZS5nLiAke1ZFUlNJT05fVEFHfVxyXG4gIC8vIHVzZSBvbmx5IHRoZSBjb250ZW50IGJldHdlZW4gJHt9XHJcbiAgLy8gZm9yIHRoZSBSRUdFWCBjaGVja1xyXG4gIHJldHVybiBpZFZhbHVlLnJlcGxhY2UoUExBQ0VIT0xERVJfUkVHRVgsICckMScpO1xyXG59XHJcblxyXG4vKipcclxuICogZ2VuZXJhdGUgYSBzZW1hbnRpYyBpZCB3aXRoIGdpdmVuIHByZWZpeFxyXG4gKi9cclxuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xyXG4gIHZhciBpZHMgPSBuZXcgSWRzKFszMiwzMiwxXSk7XHJcblxyXG4gIHJldHVybiBpZHMubmV4dFByZWZpeGVkKHByZWZpeCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLm5leHRJZCA9IG5leHRJZDtcclxuXHJcblxyXG5mdW5jdGlvbiB0cmlnZ2VyQ2xpY2tFdmVudChlbGVtZW50KSB7XHJcbiAgdmFyIGV2dDtcclxuICB2YXIgZXZlbnRUeXBlID0gJ2NsaWNrJztcclxuXHJcbiAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveFxyXG4gICAgICBldnQgPSBuZXcgTW91c2VFdmVudCgoZXZlbnRUeXBlKSwgeyB2aWV3OiB3aW5kb3csIGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIElFIDExLCBQaGFudG9tSlMgKHdhdCEpXHJcbiAgICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50Jyk7XHJcblxyXG4gICAgICBldnQuaW5pdEV2ZW50KChldmVudFR5cGUpLCB0cnVlLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gV2VsY29tZSBJRVxyXG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcclxuXHJcbiAgICByZXR1cm4gZWxlbWVudC5maXJlRXZlbnQoJ29uJyArIGV2ZW50VHlwZSwgZXZ0KTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnRyaWdnZXJDbGlja0V2ZW50ID0gdHJpZ2dlckNsaWNrRXZlbnQ7XHJcblxyXG5cclxuZnVuY3Rpb24gZXNjYXBlSFRNTChzdHIpIHtcclxuICBzdHIgPSAnJyArIHN0cjtcclxuXHJcbiAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZSgvWyY8PlwiJ10vZywgZnVuY3Rpb24obWF0Y2gpIHtcclxuICAgIHJldHVybiBIVE1MX0VTQ0FQRV9NQVBbbWF0Y2hdO1xyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5lc2NhcGVIVE1MID0gZXNjYXBlSFRNTDsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxuXHJcbnZhciBjaGVja2JveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcbiAgdmFyIHJlc291cmNlID0gZGVmYXVsdFBhcmFtZXRlcnMsXHJcbiAgICAgIGlkID0gcmVzb3VyY2UuaWQsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCBpZCxcclxuICAgICAgY2FuQmVEaXNhYmxlZCA9ICEhb3B0aW9ucy5kaXNhYmxlZCAmJiB0eXBlb2Ygb3B0aW9ucy5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuICByZXNvdXJjZS5odG1sID1cclxuICAgICc8aW5wdXQgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgICd0eXBlPVwiY2hlY2tib3hcIiAnICtcclxuICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiICcgK1xyXG4gICAgICAgICAoY2FuQmVEaXNhYmxlZCA/ICdkYXRhLWRpc2FibGU9XCJpc0Rpc2FibGVkXCInIDogJycpICtcclxuICAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCInIDogJycpICtcclxuICAgICAgICAgJyAvPicgK1xyXG4gICAgJzxsYWJlbCBmb3I9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIicgOiAnJykgK1xyXG4gICAgICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xyXG4gICAgICAgICAnPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPic7XHJcblxyXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBjaGVja2JveCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2UuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgcmVzID0ge307XHJcblxyXG4gICAgcmVzW29wdGlvbnMubW9kZWxQcm9wZXJ0eV0gPSBiby5nZXQob3B0aW9ucy5tb2RlbFByb3BlcnR5KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH07XHJcblxyXG4gIHJlc291cmNlLnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgdmFyIHJlcyA9IHt9O1xyXG5cclxuICAgIHJlc1tvcHRpb25zLm1vZGVsUHJvcGVydHldID0gISF2YWx1ZXNbb3B0aW9ucy5tb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcmVzKTtcclxuICB9O1xyXG5cclxuICBpZiAodHlwZW9mIG9wdGlvbnMuc2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXNvdXJjZS5zZXQgPSBvcHRpb25zLnNldDtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5nZXQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLmdldCA9IG9wdGlvbnMuZ2V0O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcclxuICAgIHJlc291cmNlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzYWJsZWQuYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlSGlkZGVuKSB7XHJcbiAgICByZXNvdXJjZS5pc0hpZGRlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gIW9wdGlvbnMuaGlkZGVuLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC1jaGVja2JveCddO1xyXG5cclxuICByZXR1cm4gcmVzb3VyY2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrYm94O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnk7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBzZWxlY3RFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL1NlbGVjdEVudHJ5RmFjdG9yeScpLFxyXG4gICAgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG4vKipcclxuICogVGhlIGNvbWJvIGJveCBpcyBhIHNwZWNpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlbGVjdCBlbnRyeSBhbmQgYWRkcyB0aGUgb3B0aW9uICdjdXN0b20nIHRvIHRoZVxyXG4gKiBzZWxlY3QgYm94LiBJZiAnY3VzdG9tJyBpcyBzZWxlY3RlZCwgYW4gYWRkaXRpb25hbCB0ZXh0IGlucHV0IGZpZWxkIGlzIHNob3duIHdoaWNoIGFsbG93cyB0byBkZWZpbmVcclxuICogYSBjdXN0b20gdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWRcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsXHJcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyBsaXN0IG9mIG5hbWUvdmFsdWUgcGFpcnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm1vZGVsUHJvcGVydHlcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuZ2V0XHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLnNldFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtvcHRpb25zLmN1c3RvbVZhbHVlXSBjdXN0b20gc2VsZWN0IG9wdGlvbiB2YWx1ZSAoZGVmYXVsdDogJ2N1c3RvbScpXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gW29wdGlvbnMuY3VzdG9tTmFtZV0gY3VzdG9tIHNlbGVjdCBvcHRpb24gbmFtZSB2aXNpYmxlIGluIHRoZSBzZWxlY3QgYm94IChkZWZhdWx0OiAnY3VzdG9tJylcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxudmFyIGNvbWJvQm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cclxuICB2YXIgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcclxuICAgICAgY3VzdG9tVmFsdWUgPSBvcHRpb25zLmN1c3RvbVZhbHVlIHx8ICdjdXN0b20nLFxyXG4gICAgICBjdXN0b21OYW1lID0gb3B0aW9ucy5jdXN0b21OYW1lIHx8ICdjdXN0b20gJyArIG1vZGVsUHJvcGVydHksXHJcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgLy8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBub3QgYSBidWlsdCBpbiB2YWx1ZVxyXG4gIHZhciBpc0N1c3RvbVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWVbbW9kZWxQcm9wZXJ0eV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXNDdXN0b20gPSAhZmluZChzZWxlY3RPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgcmV0dXJuIHZhbHVlW21vZGVsUHJvcGVydHldID09PSBvcHRpb24udmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaXNDdXN0b207XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNvbWJvT3B0aW9ucyA9IGFzc2lnbih7fSwgb3B0aW9ucyk7XHJcblxyXG4gIC8vIHRydWUgaWYgdGhlIHNlbGVjdGVkIHZhbHVlIGluIHRoZSBzZWxlY3QgYm94IGlzIGN1c3RvbVZhbHVlXHJcbiAgY29tYm9PcHRpb25zLnNob3dDdXN0b21JbnB1dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBzZWxlY3RCb3ggPSBkb21RdWVyeSgnW2RhdGEtZW50cnk9XCInKyBvcHRpb25zLmlkICsnXCJdIHNlbGVjdCcsIG5vZGUucGFyZW50Tm9kZSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdEJveCkge1xyXG4gICAgICByZXR1cm4gc2VsZWN0Qm94LnZhbHVlID09PSBjdXN0b21WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgY29tYm9PcHRpb25zLmdldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMuZ2V0KGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgIHZhciBtb2RpZmllZFZhbHVlcyA9IHt9O1xyXG5cclxuICAgIGlmICghaXNDdXN0b21WYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZVttb2RlbFByb3BlcnR5XSB8fCAnJztcclxuXHJcbiAgICAgIHJldHVybiBtb2RpZmllZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZmllZFZhbHVlc1ttb2RlbFByb3BlcnR5XSA9IGN1c3RvbVZhbHVlO1xyXG4gICAgbW9kaWZpZWRWYWx1ZXNbJ2N1c3RvbS0nK21vZGVsUHJvcGVydHldID0gdmFsdWVbbW9kZWxQcm9wZXJ0eV07XHJcblxyXG4gICAgcmV0dXJuIG1vZGlmaWVkVmFsdWVzO1xyXG4gIH07XHJcblxyXG4gIGNvbWJvT3B0aW9ucy5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciBtb2RpZmllZFZhbHVlcyA9IHt9O1xyXG5cclxuICAgIC8vIGlmIHRoZSBjdXN0b20gc2VsZWN0IG9wdGlvbiBoYXMgYmVlbiBzZWxlY3RlZFxyXG4gICAgLy8gdGFrZSB0aGUgdmFsdWUgZnJvbSB0aGUgdGV4dCBpbnB1dCBmaWVsZFxyXG4gICAgaWYgKHZhbHVlc1ttb2RlbFByb3BlcnR5XSA9PT0gY3VzdG9tVmFsdWUpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZXNbJ2N1c3RvbS0nICsgbW9kZWxQcm9wZXJ0eV0gfHwgJyc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcHRpb25zLmVtcHR5UGFyYW1ldGVyICYmIHZhbHVlc1ttb2RlbFByb3BlcnR5XSA9PT0gJycpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtb2RpZmllZFZhbHVlc1ttb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb25zLnNldChlbGVtZW50LCBtb2RpZmllZFZhbHVlcywgbm9kZSk7XHJcbiAgfTtcclxuXHJcbiAgY29tYm9PcHRpb25zLnNlbGVjdE9wdGlvbnMucHVzaCh7IG5hbWU6IGN1c3RvbU5hbWUsIHZhbHVlOiBjdXN0b21WYWx1ZSB9KTtcclxuXHJcbiAgdmFyIGNvbWJvQm94RW50cnkgPSBhc3NpZ24oe30sIHNlbGVjdEVudHJ5RmFjdG9yeShjb21ib09wdGlvbnMsIGNvbWJvT3B0aW9ucykpO1xyXG5cclxuICBjb21ib0JveEVudHJ5Lmh0bWwgKz0gJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlciBicHAtY29tYm8taW5wdXRcIiAnICtcclxuICAgICdkYXRhLXNob3c9XCJzaG93Q3VzdG9tSW5wdXRcIicgK1xyXG4gICAgJz4nICtcclxuICAgICc8aW5wdXQgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChvcHRpb25zLmlkKSArICctaW5wdXRcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJjdXN0b20tJyArXHJcbiAgICAgIGVzY2FwZUhUTUwobW9kZWxQcm9wZXJ0eSkgKyAnXCIgJyArXHJcbiAgICAnIC8+JyArXHJcbiAgJzwvZGl2Pic7XHJcblxyXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBjb21ibyBib3ggZW50cnkgZmllbGRcclxuICBpZiAoZGVzY3JpcHRpb24pIHtcclxuICAgIGNvbWJvQm94RW50cnkuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvbWJvQm94RW50cnk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGNvbWJvQm94O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuLy8gaW5wdXQgZW50aXRpZXNcclxudmFyIHRleHRJbnB1dEZpZWxkID0gcmVxdWlyZSgnLi9UZXh0SW5wdXRFbnRyeUZhY3RvcnknKSxcclxuICAgIGNoZWNrYm94RmllbGQgPSByZXF1aXJlKCcuL0NoZWNrYm94RW50cnlGYWN0b3J5JyksXHJcbiAgICBzZWxlY3RCb3hGaWVsZCA9IHJlcXVpcmUoJy4vU2VsZWN0RW50cnlGYWN0b3J5JyksXHJcbiAgICBjb21ib0JveEZpZWxkID0gcmVxdWlyZSgnLi9Db21ib0VudHJ5RmFjdG9yeScpLFxyXG4gICAgdGV4dEJveEZpZWxkID0gcmVxdWlyZSgnLi9UZXh0Qm94RW50cnlGYWN0b3J5JyksXHJcbiAgICB2YWxpZGF0aW9uQXdhcmVUZXh0SW5wdXRGaWVsZCA9IHJlcXVpcmUoJy4vVmFsaWRhdGlvbkF3YXJlVGV4dElucHV0JyksXHJcbiAgICB0YWJsZUZpZWxkID0gcmVxdWlyZSgnLi9UYWJsZUVudHJ5RmFjdG9yeScpLFxyXG4gICAgbGFiZWxFbnRyeSA9IHJlcXVpcmUoJy4vTGFiZWxGYWN0b3J5JyksXHJcbiAgICBsaW5rID0gcmVxdWlyZSgnLi9MaW5rRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBlbnN1cmVOb3ROdWxsKHByb3ApIHtcclxuICBpZiAoIXByb3ApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihwcm9wICsgJyBtdXN0IGJlIHNldC4nKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwcm9wO1xyXG59XHJcblxyXG4vKipcclxuICogc2V0cyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBuZWVkZWQgdG8gY3JlYXRlIGFuIGVudHJ5XHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zXHJcbiAqIEByZXR1cm5zIHt7aWQ6ICosIGRlc2NyaXB0aW9uOiAoKnxzdHJpbmcpLCBnZXQ6ICgqfEZ1bmN0aW9uKSwgc2V0OiAoKnxGdW5jdGlvbiksXHJcbiAqICAgICAgICAgICAgdmFsaWRhdGU6ICgqfEZ1bmN0aW9uKSwgaHRtbDogc3RyaW5nfX1cclxuICovXHJcbnZhciBzZXREZWZhdWx0UGFyYW1ldGVycyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgLy8gZGVmYXVsdCBtZXRob2QgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlucHV0IGZpZWxkXHJcbiAgdmFyIGRlZmF1bHRHZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICByZXMgPSB7fSxcclxuICAgICAgICBwcm9wID0gZW5zdXJlTm90TnVsbChvcHRpb25zLm1vZGVsUHJvcGVydHkpO1xyXG4gICAgcmVzW3Byb3BdID0gYm8uZ2V0KHByb3ApO1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gZGVmYXVsdCBtZXRob2QgdG8gc2V0IGEgbmV3IHZhbHVlIHRvIHRoZSBpbnB1dCBmaWVsZFxyXG4gIHZhciBkZWZhdWx0U2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgcmVzID0ge30sXHJcbiAgICAgICAgcHJvcCA9IGVuc3VyZU5vdE51bGwob3B0aW9ucy5tb2RlbFByb3BlcnR5KTtcclxuICAgIGlmICh2YWx1ZXNbcHJvcF0gIT09ICcnKSB7XHJcbiAgICAgIHJlc1twcm9wXSA9IHZhbHVlc1twcm9wXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc1twcm9wXSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcmVzKTtcclxuICB9O1xyXG5cclxuICAvLyBkZWZhdWx0IHZhbGlkYXRpb24gbWV0aG9kXHJcbiAgdmFyIGRlZmF1bHRWYWxpZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZCA6IG9wdGlvbnMuaWQsXHJcbiAgICBkZXNjcmlwdGlvbiA6IChvcHRpb25zLmRlc2NyaXB0aW9uIHx8ICcnKSxcclxuICAgIGdldCA6IChvcHRpb25zLmdldCB8fCBkZWZhdWx0R2V0KSxcclxuICAgIHNldCA6IChvcHRpb25zLnNldCB8fCBkZWZhdWx0U2V0KSxcclxuICAgIHZhbGlkYXRlIDogKG9wdGlvbnMudmFsaWRhdGUgfHwgZGVmYXVsdFZhbGlkYXRlKSxcclxuICAgIGh0bWw6ICcnXHJcbiAgfTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEVudHJ5RmFjdG9yeSgpIHtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYW4gdGV4dCBpbnB1dCBlbnRyeSBvYmplY3QgZm9yIGEgcHJvcGVydHkgcGFuZWwuXHJcbiAqIG9wdGlvbnMgYXJlOlxyXG4gKiAtIGlkOiBpZCBvZiB0aGUgZW50cnkgLSBTdHJpbmdcclxuICpcclxuICogLSBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gbGFiZWw6IGxhYmVsIGZvciB0aGUgaW5wdXQgZmllbGQgLSBTdHJpbmdcclxuICpcclxuICogLSBzZXQ6IHNldHRlciBtZXRob2QgLSBGdW5jdGlvblxyXG4gKlxyXG4gKiAtIGdldDogZ2V0dGVyIG1ldGhvZCAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gdmFsaWRhdGU6IHZhbGlkYXRpb24gbWVodG9kIC0gRnVuY3Rpb25cclxuICpcclxuICogLSBtb2RlbFByb3BlcnR5OiBuYW1lIG9mIHRoZSBtb2RlbCBwcm9wZXJ0eSAtIFN0cmluZ1xyXG4gKlxyXG4gKiAtIGJ1dHRvbkFjdGlvbjogT2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogLSBPYmplY3RcclxuICogLS0tLSBuYW1lOiBuYW1lIG9mIHRoZSBbZGF0YS1hY3Rpb25dIGNhbGxiYWNrIC0gU3RyaW5nXHJcbiAqIC0tLS0gbWV0aG9kOiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgW2RhdGEtYWN0aW9uXSAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gYnV0dG9uU2hvdzogT2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogLSBPYmplY3RcclxuICogLS0tLSBuYW1lOiBuYW1lIG9mIHRoZSBbZGF0YS1zaG93XSBjYWxsYmFjayAtIFN0cmluZ1xyXG4gKiAtLS0tIG1ldGhvZDogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIFtkYXRhLXNob3ddIC0gRnVuY3Rpb25cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICogQHJldHVybnMgdGhlIHByb3BlcnR5UGFuZWwgZW50cnkgcmVzb3VyY2Ugb2JqZWN0XHJcbiAqL1xyXG5FbnRyeUZhY3RvcnkudGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiB0ZXh0SW5wdXRGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiB2YWxpZGF0aW9uQXdhcmVUZXh0SW5wdXRGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgY2hlY2tib3ggaW5wdXQgZW50cnkgb2JqZWN0IGZvciBhIHByb3BlcnR5IHBhbmVsLlxyXG4gKiBvcHRpb25zIGFyZTpcclxuICogLSBpZDogaWQgb2YgdGhlIGVudHJ5IC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eSAtIFN0cmluZ1xyXG4gKlxyXG4gKiAtIGxhYmVsOiBsYWJlbCBmb3IgdGhlIGlucHV0IGZpZWxkIC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gc2V0OiBzZXR0ZXIgbWV0aG9kIC0gRnVuY3Rpb25cclxuICpcclxuICogLSBnZXQ6IGdldHRlciBtZXRob2QgLSBGdW5jdGlvblxyXG4gKlxyXG4gKiAtIHZhbGlkYXRlOiB2YWxpZGF0aW9uIG1ldGhvZCAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gbW9kZWxQcm9wZXJ0eTogbmFtZSBvZiB0aGUgbW9kZWwgcHJvcGVydHkgLSBTdHJpbmdcclxuICpcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICogQHJldHVybnMgdGhlIHByb3BlcnR5UGFuZWwgZW50cnkgcmVzb3VyY2Ugb2JqZWN0XHJcbiAqL1xyXG5FbnRyeUZhY3RvcnkuY2hlY2tib3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGNoZWNrYm94RmllbGQob3B0aW9ucywgc2V0RGVmYXVsdFBhcmFtZXRlcnMob3B0aW9ucykpO1xyXG59O1xyXG5cclxuRW50cnlGYWN0b3J5LnRleHRCb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHRleHRCb3hGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3Rvcnkuc2VsZWN0Qm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiBzZWxlY3RCb3hGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkuY29tYm9Cb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGNvbWJvQm94RmllbGQob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkudGFibGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHRhYmxlRmllbGQob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkubGFiZWwgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGxhYmVsRW50cnkob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkubGluayA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICByZXR1cm4gbGluayhvcHRpb25zKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRW50cnlGYWN0b3J5O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBsaW5raWZpZWQgYW5kIEhUTUwgZXNjYXBlZCBlbnRyeSBmaWVsZCBkZXNjcmlwdGlvbi5cclxuICpcclxuICogQXMgYSBzcGVjaWFsIGZlYXR1cmUsIHRoaXMgZGVzY3JpcHRpb24gbWF5IGNvbnRhaW4gYm90aCBtYXJrZG93blxyXG4gKiBhbmQgcGxhaW4gPGEgaHJlZj4gbGlua3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvblxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuXHJcbiAgLy8gd2UgdG9rZW5pemUgdGhlIGRlc2NyaXB0aW9uIHRvIGV4dHJhY3QgdGV4dCwgSFRNTCBhbmQgbWFya2Rvd24gbGlua3NcclxuICAvLyB0ZXh0IGFuZCBsaW5rcyBhcmUgaGFuZGxlZCBzZXBlcmF0ZWx5XHJcblxyXG4gIHZhciBlc2NhcGVkID0gW107XHJcblxyXG4gIC8vIG1hdGNoIG1hcmtkb3duIFt7VEVYVH1dKHtVUkx9KSBhbmQgSFRNTCBsaW5rcyA8YSBocmVmPVwie1VSTH1cIj57VEVYVH08L2E+XHJcbiAgdmFyIHBhdHRlcm4gPSAvKD86XFxbKFteXFxdXSspXFxdXFwoKGh0dHBzPzpcXC9cXC9bXlwiPD5cXF1dKylcXCkpfCg/OjxhIGhyZWY9XCIoaHR0cHM/OlxcL1xcL1teXCI8Pl0rKVwiPihbXjxdKik8XFwvYT4pL2dpO1xyXG5cclxuICB2YXIgaW5kZXggPSAwO1xyXG4gIHZhciBtYXRjaDtcclxuICB2YXIgbGluaywgdGV4dDtcclxuXHJcbiAgd2hpbGUgKChtYXRjaCA9IHBhdHRlcm4uZXhlYyhkZXNjcmlwdGlvbikpKSB7XHJcblxyXG4gICAgLy8gZXNjYXBlICsgaW5zZXJ0IHRleHQgYmVmb3JlIG1hdGNoXHJcbiAgICBpZiAobWF0Y2guaW5kZXggPiBpbmRleCkge1xyXG4gICAgICBlc2NhcGVkLnB1c2goZXNjYXBlSFRNTChkZXNjcmlwdGlvbi5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGxpbmsgPSBtYXRjaFsyXSB8fCBtYXRjaFszXTtcclxuICAgIHRleHQgPSBtYXRjaFsxXSB8fCBtYXRjaFs0XTtcclxuXHJcbiAgICAvLyBpbnNlcnQgc2FmZSBsaW5rXHJcbiAgICBlc2NhcGVkLnB1c2goJzxhIGhyZWY9XCInICsgbGluayArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgZXNjYXBlSFRNTCh0ZXh0KSArICc8L2E+Jyk7XHJcblxyXG4gICAgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vIGVzY2FwZSBhbmQgaW5zZXJ0IHRleHQgYWZ0ZXIgbGFzdCBtYXRjaFxyXG4gIGlmIChpbmRleCA8IGRlc2NyaXB0aW9uLmxlbmd0aCkge1xyXG4gICAgZXNjYXBlZC5wdXNoKGVzY2FwZUhUTUwoZGVzY3JpcHRpb24uc3Vic3RyaW5nKGluZGV4KSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLWRlc2NyaXB0aW9uXCI+JyArIGVzY2FwZWQuam9pbignJykgKyAnPC9kaXY+JztcclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogVGhlIGxhYmVsIGZhY3RvcnkgcHJvdmlkZXMgYSBsYWJlbCBlbnRyeS4gRm9yIHRoZSBsYWJlbCB0ZXh0XHJcbiAqIGl0IGV4cGVjdHMgZWl0aGVyIGEgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBvcHRpb25zLmxhYmVsVGV4dFxyXG4gKiBwYXJhbWV0ZXIgb3IgaXQgY291bGQgYmUgZ2VuZXJhdGVkIHByb2dyYW1tYXRpY2FsbHkgdXNpbmcgYVxyXG4gKiBmdW5jdGlvbiBwYXNzZWQgYXMgdGhlIG9wdGlvbnMuZ2V0IHBhcmFtZXRlci5cclxuICpcclxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsVGV4dF1cclxuICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLmdldF1cclxuICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNob3dMYWJlbF1cclxuICogQHBhcmFtICB7Qm9vbGVhbn0gW29wdGlvbnMuZGl2aWRlcl0gYWRkcyBhIGRpdmlkZXIgYXQgdGhlIHRvcCBvZiB0aGUgbGFiZWwgaWYgdHJ1ZTsgZGVmYXVsdDogZmFsc2VcclxuICovXHJcbnZhciBsYWJlbCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IG9wdGlvbnMuaWQsXHJcbiAgICBodG1sOiAnPGxhYmVsIGRhdGEtdmFsdWU9XCJsYWJlbFwiICcgK1xyXG4gICAgICAgICAgICAnZGF0YS1zaG93PVwic2hvd0xhYmVsXCIgJyArXHJcbiAgICAgICAgICAgICdjbGFzcz1cImVudHJ5LWxhYmVsJyArIChvcHRpb25zLmRpdmlkZXIgPyAnIGRpdmlkZXInIDogJycpICsgJ1wiPicgK1xyXG4gICAgICAgICAgJzwvbGFiZWw+JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IGxhYmVsOiBvcHRpb25zLmxhYmVsVGV4dCB9O1xyXG4gICAgfSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0xhYmVsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2hvd0xhYmVsKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGxhYmVsO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxudmFyIGJpbmQgPSByZXF1aXJlKCdsb2Rhc2gvYmluZCcpO1xyXG5cclxuLyoqXHJcbiAqIEFuIGVudHJ5IHRoYXQgcmVuZGVycyBhIGNsaWNrYWJsZSBsaW5rLlxyXG4gKlxyXG4gKiBBIHBhc3NlZCB7QGxpbmsgb3B0aW9ucyNoYW5kbGVDbGlja30gaGFuZGxlciBpcyByZXNwb25zaWJsZVxyXG4gKiB0byBwcm9jZXNzIHRoZSBjbGljay5cclxuICpcclxuICogVGhlIGxpbmsgbWF5IGJlIGNvbmRpdGlvbmFsbHkgc2hvd24gb3IgaGlkZGVuLiBUaGlzIGNhbiBiZVxyXG4gKiBjb250cm9sbGVkIHZpYSB0aGUge0BsaW5rIG9wdGlvbnMuc2hvd0xpbmt9LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMubGFiZWxdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMuaGFuZGxlQ2xpY2tcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuc2hvd0xpbmtdIHJldHVybmluZyBmYWxzZSB0byBoaWRlIGxpbmtcclxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmRlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiB2YXIgbGlua0VudHJ5ID0gbGluayh7XHJcbiAqICAgaWQ6ICdmb28nLFxyXG4gKiAgIGRlc2NyaXB0aW9uOiAnU29tZSBEZXNjcmlwdGlvbicsXHJcbiAqICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50KSB7IC4uLiB9LFxyXG4gKiAgIHNob3dMaW5rOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7IC4uLiB9XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtFbnRyeX0gdGhlIG5ld2x5IGNyZWF0ZWQgZW50cnlcclxuICovXHJcbmZ1bmN0aW9uIGxpbmsob3B0aW9ucykge1xyXG5cclxuICB2YXIgaWQgPSBvcHRpb25zLmlkLFxyXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgaWQsXHJcbiAgICAgIHNob3dMaW5rID0gb3B0aW9ucy5zaG93TGluayxcclxuICAgICAgaGFuZGxlQ2xpY2sgPSBvcHRpb25zLmhhbmRsZUNsaWNrLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIGlmIChzaG93TGluayAmJiB0eXBlb2Ygc2hvd0xpbmsgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5zaG93TGluayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgaGFuZGxlQ2xpY2sgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5oYW5kbGVDbGljayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICB9XHJcblxyXG4gIHZhciByZXNvdXJjZSA9IHtcclxuICAgIGlkOiBpZFxyXG4gIH07XHJcblxyXG4gIHJlc291cmNlLmh0bWwgPVxyXG4gICAgJzxhIGRhdGEtYWN0aW9uPVwiaGFuZGxlQ2xpY2tcIiAnICtcclxuICAgIChzaG93TGluayA/ICdkYXRhLXNob3c9XCJzaG93TGlua1wiICcgOiAnJykgK1xyXG4gICAgJ2NsYXNzPVwiYnBwLWVudHJ5LWxpbmsnICsgKG9wdGlvbnMuY3NzQ2xhc3NlcyA/ICcgJyArIGVzY2FwZUhUTUwob3B0aW9ucy5jc3NDbGFzc2VzKSA6ICcnKSArXHJcbiAgICAnXCI+JyArIGVzY2FwZUhUTUwobGFiZWwpICsgJzwvYT4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgbGluayBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2UuaGFuZGxlQ2xpY2sgPSBiaW5kKGhhbmRsZUNsaWNrLCByZXNvdXJjZSk7XHJcblxyXG4gIGlmICh0eXBlb2Ygc2hvd0xpbmsgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLnNob3dMaW5rID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBzaG93TGluay5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzb3VyY2U7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gbGluaztcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZG9taWZ5ID0gcmVxdWlyZSgnbWluLWRvbScpLmRvbWlmeTtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxuXHJcbnZhciBpc0xpc3QgPSBmdW5jdGlvbihsaXN0KSB7XHJcbiAgcmV0dXJuICEoIWxpc3QgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxpc3QpICE9PSAnW29iamVjdCBBcnJheV0nKTtcclxufTtcclxuXHJcbnZhciBhZGRFbXB0eVBhcmFtZXRlciA9IGZ1bmN0aW9uKGxpc3QpIHtcclxuICByZXR1cm4gbGlzdC5jb25jYXQoWyB7IG5hbWU6ICcnLCB2YWx1ZTogJycgfSBdKTtcclxufTtcclxuXHJcbnZhciBjcmVhdGVPcHRpb24gPSBmdW5jdGlvbihvcHRpb24pIHtcclxuICByZXR1cm4gJzxvcHRpb24gdmFsdWU9XCInICsgb3B0aW9uLnZhbHVlICsgJ1wiPicgKyBvcHRpb24ubmFtZSArICc8L29wdGlvbj4nO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWRcclxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbF1cclxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gb3B0aW9ucy5zZWxlY3RPcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5tb2RlbFByb3BlcnR5XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZW1wdHlQYXJhbWV0ZXJcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuZGlzYWJsZWRcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuaGlkZGVuXHJcbiAqIEBwYXJhbSAge09iamVjdH0gZGVmYXVsdFBhcmFtZXRlcnNcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxudmFyIHNlbGVjdGJveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcbiAgdmFyIHJlc291cmNlID0gZGVmYXVsdFBhcmFtZXRlcnMsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCByZXNvdXJjZS5pZCxcclxuICAgICAgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyB8fCBbIHsgbmFtZTogJycsIHZhbHVlOiAnJyB9IF0sXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHksXHJcbiAgICAgIGVtcHR5UGFyYW1ldGVyID0gb3B0aW9ucy5lbXB0eVBhcmFtZXRlcixcclxuICAgICAgY2FuQmVEaXNhYmxlZCA9ICEhb3B0aW9ucy5kaXNhYmxlZCAmJiB0eXBlb2Ygb3B0aW9ucy5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuXHJcbiAgaWYgKGVtcHR5UGFyYW1ldGVyKSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gYWRkRW1wdHlQYXJhbWV0ZXIoc2VsZWN0T3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcmVzb3VyY2UuaHRtbCA9XHJcbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIicgK1xyXG4gICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiICcgOiAnJykgK1xyXG4gICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCIgJyA6ICcnKSArXHJcbiAgICAnPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPicgK1xyXG4gICAgJzxzZWxlY3QgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChyZXNvdXJjZS5pZCkgKyAnLXNlbGVjdFwiIG5hbWU9XCInICtcclxuICAgIGVzY2FwZUhUTUwobW9kZWxQcm9wZXJ0eSkgKyAnXCInICtcclxuICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIiAnIDogJycpICtcclxuICAgIChjYW5CZUhpZGRlbiA/ICdkYXRhLXNob3c9XCJpc0hpZGRlblwiICcgOiAnJykgK1xyXG4gICAgJyBkYXRhLXZhbHVlPic7XHJcblxyXG4gIGlmIChpc0xpc3Qoc2VsZWN0T3B0aW9ucykpIHtcclxuICAgIGZvckVhY2goc2VsZWN0T3B0aW9ucywgZnVuY3Rpb24ob3B0aW9uKSB7XHJcbiAgICAgIHJlc291cmNlLmh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgZXNjYXBlSFRNTChvcHRpb24udmFsdWUpICsgJ1wiPicgK1xyXG4gICAgICAob3B0aW9uLm5hbWUgPyBlc2NhcGVIVE1MKG9wdGlvbi5uYW1lKSA6ICcnKSArICc8L29wdGlvbj4nO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNvdXJjZS5odG1sICs9ICc8L3NlbGVjdD4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgc2VsZWN0IGJveCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaG93Q3VzdG9tSW5wdXQgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLmh0bWwgKz0gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbGwgdGhlIHNlbGVjdCBib3ggb3B0aW9ucyBkeW5hbWljYWxseS5cclxuICAgKlxyXG4gICAqIENhbGxzIHRoZSBkZWZpbmVkIGZ1bmN0aW9uICNzZWxlY3RPcHRpb25zIGluIHRoZSBlbnRyeSB0byBnZXQgdGhlXHJcbiAgICogdmFsdWVzIGZvciB0aGUgb3B0aW9ucyBhbmQgc2V0IHRoZSB2YWx1ZSB0byB0aGUgaW5wdXROb2RlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVudHJ5Tm9kZVxyXG4gICAqIEBwYXJhbSB7RW50cnlEZXNjcmlwdG9yfSBpbnB1dE5vZGVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXROYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1ZhbHVlXHJcbiAgICovXHJcbiAgcmVzb3VyY2Uuc2V0Q29udHJvbFZhbHVlID0gZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlLCBpbnB1dE5vZGUsIGlucHV0TmFtZSwgbmV3VmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2Ygc2VsZWN0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cclxuICAgICAgdmFyIG9wdGlvbnMgPSBzZWxlY3RPcHRpb25zKGVsZW1lbnQsIGlucHV0Tm9kZSk7XHJcblxyXG4gICAgICBpZiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyByZW1vdmUgZXhpc3Rpbmcgb3B0aW9uc1xyXG4gICAgICAgIHdoaWxlIChpbnB1dE5vZGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgaW5wdXROb2RlLnJlbW92ZUNoaWxkKGlucHV0Tm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkZCBvcHRpb25zXHJcbiAgICAgICAgZm9yRWFjaChvcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvbWlmeShjcmVhdGVPcHRpb24ob3B0aW9uKSk7XHJcblxyXG4gICAgICAgICAgaW5wdXROb2RlLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNlbGVjdCB2YWx1ZVxyXG4gICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaW5wdXROb2RlLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGlmIChjYW5CZURpc2FibGVkKSB7XHJcbiAgICByZXNvdXJjZS5pc0Rpc2FibGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBvcHRpb25zLmRpc2FibGVkLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlmIChjYW5CZUhpZGRlbikge1xyXG4gICAgcmVzb3VyY2UuaXNIaWRkZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICFvcHRpb25zLmhpZGRlbi5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXNvdXJjZS5jc3NDbGFzc2VzID0gWydicHAtZHJvcGRvd24nXTtcclxuXHJcbiAgcmV0dXJuIHJlc291cmNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBzZWxlY3Rib3g7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbUF0dHIgPSByZXF1aXJlKCdtaW4tZG9tJykuYXR0cixcclxuICAgIGRvbUNsb3Nlc3QgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xvc2VzdDtcclxuXHJcbnZhciBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyksXHJcbiAgICBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcclxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpO1xyXG5cclxudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnk7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcbnZhciB1cGRhdGVTZWxlY3Rpb24gPSByZXF1aXJlKCdzZWxlY3Rpb24tdXBkYXRlJyk7XHJcblxyXG52YXIgVEFCTEVfUk9XX0RJVl9TTklQUEVUID0gJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlciBicHAtdGFibGUtcm93XCI+JztcclxudmFyIERFTEVURV9ST1dfQlVUVE9OX1NOSVBQRVQgPSAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJkZWxldGVFbGVtZW50XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+WDwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JztcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUlucHV0Um93VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKSB7XHJcbiAgdmFyIHRlbXBsYXRlID0gVEFCTEVfUk9XX0RJVl9TTklQUEVUO1xyXG4gIHRlbXBsYXRlICs9IGNyZWF0ZUlucHV0VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKTtcclxuICB0ZW1wbGF0ZSArPSBjYW5SZW1vdmUgPyBERUxFVEVfUk9XX0JVVFRPTl9TTklQUEVUIDogJyc7XHJcbiAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XHJcblxyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSW5wdXRUZW1wbGF0ZShwcm9wZXJ0aWVzLCBjYW5SZW1vdmUpIHtcclxuICB2YXIgY29sdW1ucyA9IHByb3BlcnRpZXMubGVuZ3RoO1xyXG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xyXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgdGVtcGxhdGUgKz0gJzxpbnB1dCBjbGFzcz1cImJwcC10YWJsZS1yb3ctY29sdW1ucy0nICsgY29sdW1ucyArICcgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FuUmVtb3ZlID8gJ2JwcC10YWJsZS1yb3ctcmVtb3ZhYmxlJyA6ICcnKSArICdcIiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAnaWQ9XCJhY3Rpdml0aS10YWJsZS1yb3ctY2VsbC1pbnB1dC12YWx1ZVwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICd0eXBlPVwidGV4dFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICduYW1lPVwiJyArIGVzY2FwZUhUTUwocHJvcCkgKyAnXCIgLz4nO1xyXG4gIH0pO1xyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTGFiZWxSb3dUZW1wbGF0ZShsYWJlbHMpIHtcclxuICB2YXIgdGVtcGxhdGUgPSBUQUJMRV9ST1dfRElWX1NOSVBQRVQ7XHJcbiAgdGVtcGxhdGUgKz0gY3JlYXRlTGFiZWxUZW1wbGF0ZShsYWJlbHMpO1xyXG4gIHRlbXBsYXRlICs9ICc8L2Rpdj4nO1xyXG5cclxuICByZXR1cm4gdGVtcGxhdGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUxhYmVsVGVtcGxhdGUobGFiZWxzKSB7XHJcbiAgdmFyIGNvbHVtbnMgPSBsYWJlbHMubGVuZ3RoO1xyXG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xyXG4gIGZvckVhY2gobGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xyXG4gICAgdGVtcGxhdGUgKz0gJzxsYWJlbCBjbGFzcz1cImJwcC10YWJsZS1yb3ctY29sdW1ucy0nICsgY29sdW1ucyArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nO1xyXG4gIH0pO1xyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGljayhlbGVtZW50cywgcHJvcGVydGllcykge1xyXG4gIHJldHVybiAoZWxlbWVudHMgfHwgW10pLm1hcChmdW5jdGlvbihlbGVtKSB7XHJcbiAgICB2YXIgbmV3RWxlbWVudCA9IHt9O1xyXG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgIG5ld0VsZW1lbnRbcHJvcF0gPSBlbGVtW3Byb3BdIHx8ICcnO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGlmZihlbGVtZW50LCBub2RlLCB2YWx1ZXMsIG9sZFZhbHVlcywgZWRpdGFibGUpIHtcclxuICByZXR1cm4gZmlsdGVyKHZhbHVlcywgZnVuY3Rpb24odmFsdWUsIGlkeCkge1xyXG4gICAgcmV0dXJuICF2YWx1ZUVxdWFsKGVsZW1lbnQsIG5vZGUsIHZhbHVlLCBvbGRWYWx1ZXNbaWR4XSwgZWRpdGFibGUsIGlkeCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhbHVlRXF1YWwoZWxlbWVudCwgbm9kZSwgdmFsdWUsIG9sZFZhbHVlLCBlZGl0YWJsZSwgaWR4KSB7XHJcbiAgaWYgKHZhbHVlICYmICFvbGRWYWx1ZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICB2YXIgYWxsS2V5cyA9IGtleXModmFsdWUpLmNvbmNhdChrZXlzKG9sZFZhbHVlKSk7XHJcblxyXG4gIHJldHVybiBhbGxLZXlzLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xyXG4gICAgdmFyIG4gPSB2YWx1ZVtrZXldIHx8IHVuZGVmaW5lZDtcclxuICAgIHZhciBvID0gb2xkVmFsdWVba2V5XSB8fCB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gIWVkaXRhYmxlKGVsZW1lbnQsIG5vZGUsIGtleSwgaWR4KSB8fCBuID09PSBvO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRFbnRyeU5vZGUobm9kZSkge1xyXG4gIHJldHVybiBkb21DbG9zZXN0KG5vZGUsICdbZGF0YS1lbnRyeV0nLCB0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKG5vZGUpIHtcclxuICByZXR1cm4gZG9tUXVlcnkoJ2RpdltkYXRhLWxpc3QtZW50cnktY29udGFpbmVyXScsIG5vZGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcclxuICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKSB7XHJcbiAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydDtcclxuICBub2RlLnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi5lbmQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5kZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLm1vZGVsUHJvcGVydGllc1xyXG4gKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLmxhYmVsc1xyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5nZXRFbGVtZW50cyAtIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBsaXN0IG9mIGJ1c2luZXNzIG9iamVjdCBpdGVtc1xyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5yZW1vdmVFbGVtZW50XHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBvcHRpb25zLmFkZEVsZW1lbnRcclxuICogQHBhcmFtICB7RnVuY3Rpb259IG9wdGlvbnMudXBkYXRlRWxlbWVudFxyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5lZGl0YWJsZVxyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5zZXRDb250cm9sVmFsdWVcclxuICogQHBhcmFtICB7RnVuY3Rpb259IG9wdGlvbnMuc2hvd1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgdmFyIGlkID0gb3B0aW9ucy5pZCxcclxuICAgICAgbW9kZWxQcm9wZXJ0aWVzID0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXMsXHJcbiAgICAgIGxhYmVscyA9IG9wdGlvbnMubGFiZWxzLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIHZhciBsYWJlbFJvdyA9IGNyZWF0ZUxhYmVsUm93VGVtcGxhdGUobGFiZWxzKTtcclxuXHJcbiAgdmFyIGdldEVsZW1lbnRzID0gb3B0aW9ucy5nZXRFbGVtZW50cztcclxuXHJcbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBvcHRpb25zLnJlbW92ZUVsZW1lbnQsXHJcbiAgICAgIGNhblJlbW92ZSA9IHR5cGVvZiByZW1vdmVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgYWRkRWxlbWVudCA9IG9wdGlvbnMuYWRkRWxlbWVudCxcclxuICAgICAgY2FuQWRkID0gdHlwZW9mIGFkZEVsZW1lbnQgPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGFkZExhYmVsID0gb3B0aW9ucy5hZGRMYWJlbCB8fCAnQWRkIFZhbHVlJztcclxuXHJcbiAgdmFyIHVwZGF0ZUVsZW1lbnQgPSBvcHRpb25zLnVwZGF0ZUVsZW1lbnQsXHJcbiAgICAgIGNhblVwZGF0ZSA9IHR5cGVvZiB1cGRhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgZWRpdGFibGUgPSBvcHRpb25zLmVkaXRhYmxlIHx8IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuICAgICAgc2V0Q29udHJvbFZhbHVlID0gb3B0aW9ucy5zZXRDb250cm9sVmFsdWU7XHJcblxyXG4gIHZhciBzaG93ID0gb3B0aW9ucy5zaG93LFxyXG4gICAgICBjYW5CZVNob3duID0gdHlwZW9mIHNob3cgPT09ICdmdW5jdGlvbic7XHJcblxyXG4gIHZhciBlbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiBwaWNrKGdldEVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpLCBtb2RlbFByb3BlcnRpZXMpO1xyXG4gIH07XHJcblxyXG4gIHZhciBmYWN0b3J5ID0ge1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgaHRtbDogKGNhbkFkZCA/XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXRhYmxlLWFkZC1yb3dcIiAnICsgKGNhbkJlU2hvd24gPyAnZGF0YS1zaG93PVwic2hvd1wiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgICAgICc8bGFiZWw+JyArIGVzY2FwZUhUTUwoYWRkTGFiZWwpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiYWRkXCIgZGF0YS1hY3Rpb249XCJhZGRFbGVtZW50XCI+PHNwYW4+Kzwvc3Bhbj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICc8L2Rpdj4nIDogJycpICtcclxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXRhYmxlXCIgZGF0YS1zaG93PVwic2hvd1RhYmxlXCI+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXIgYnBwLXRhYmxlLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICBsYWJlbFJvdyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgJzwvZGl2PicgK1xyXG5cclxuICAgICAgICAgIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyB0YWJsZSBlbnRyeSBmaWVsZFxyXG4gICAgICAgICAgKGRlc2NyaXB0aW9uID8gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6ICcnKSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvRWxlbWVudHMgPSBlbGVtZW50cyhlbGVtZW50LCBub2RlLCB0aGlzLl9faW52YWxpZFZhbHVlcyk7XHJcblxyXG4gICAgICB2YXIgaW52YWxpZFZhbHVlcyA9IHRoaXMuX19pbnZhbGlkVmFsdWVzO1xyXG5cclxuICAgICAgZGVsZXRlIHRoaXMuX19pbnZhbGlkVmFsdWVzO1xyXG5cclxuICAgICAgZm9yRWFjaChpbnZhbGlkVmFsdWVzLCBmdW5jdGlvbih2YWx1ZSwgaWR4KSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBib0VsZW1lbnRzW2lkeF07XHJcblxyXG4gICAgICAgIGZvckVhY2gobW9kZWxQcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgICAgICBlbGVtZW50W3Byb3BdID0gdmFsdWVbcHJvcF07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGJvRWxlbWVudHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpb24gPSB0aGlzLl9fYWN0aW9uIHx8IHt9O1xyXG4gICAgICBkZWxldGUgdGhpcy5fX2FjdGlvbjtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdkZWxldGUtZWxlbWVudCcpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlRWxlbWVudChlbGVtZW50LCBub2RlLCBhY3Rpb24uaWR4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhY3Rpb24uaWQgPT09ICdhZGQtZWxlbWVudCcpIHtcclxuICAgICAgICByZXR1cm4gYWRkRWxlbWVudChlbGVtZW50LCBub2RlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChjYW5VcGRhdGUpIHtcclxuICAgICAgICB2YXIgY29tbWFuZHMgPSBbXSxcclxuICAgICAgICAgICAgdmFsdWVzVG9WYWxpZGF0ZSA9IHZhbHVlcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICB2YWx1ZXNUb1ZhbGlkYXRlID0gZGlmZihlbGVtZW50LCBub2RlLCB2YWx1ZXMsIGVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpLCBlZGl0YWJsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGZvckVhY2godmFsdWVzVG9WYWxpZGF0ZSwgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIHZhciB2YWxpZGF0aW9uRXJyb3IsXHJcbiAgICAgICAgICAgICAgaWR4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSBvcHRpb25zLnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yKSB7XHJcbiAgICAgICAgICAgIHZhciBjbWQgPSB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNtZCkge1xyXG4gICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY2FjaGUgaW52YWxpZCB2YWx1ZSBpbiBhbiBvYmplY3QgYnkgaW5kZXggYXMga2V5XHJcbiAgICAgICAgICAgIHNlbGYuX19pbnZhbGlkVmFsdWVzID0gc2VsZi5fX2ludmFsaWRWYWx1ZXMgfHwge307XHJcbiAgICAgICAgICAgIHNlbGYuX19pbnZhbGlkVmFsdWVzW2lkeF0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGV4ZWN1dGUgYSBjb21tYW5kLCB3aGljaCBkb2VzIG5vdCBkbyBhbnl0aGluZ1xyXG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZUxpc3RFbnRyeVRlbXBsYXRlOiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIHNlbGVjdEJveCkge1xyXG4gICAgICByZXR1cm4gY3JlYXRlSW5wdXRSb3dUZW1wbGF0ZShtb2RlbFByb3BlcnRpZXMsIGNhblJlbW92ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIHRlbXBsYXRlID0gZG9taWZ5KGNyZWF0ZUlucHV0Um93VGVtcGxhdGUobW9kZWxQcm9wZXJ0aWVzLCBjYW5SZW1vdmUpKTtcclxuXHJcbiAgICAgIHZhciBjb250YWluZXIgPSBnZXRDb250YWluZXIobm9kZSk7XHJcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgICB0aGlzLl9fYWN0aW9uID0ge1xyXG4gICAgICAgIGlkOiAnYWRkLWVsZW1lbnQnXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG5vZGUpO1xyXG4gICAgICB2YXIgcm93VG9EZWxldGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoZG9tQXR0cihyb3dUb0RlbGV0ZSwgJ2RhdGEtaW5kZXgnKSwgMTApO1xyXG5cclxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvd1RvRGVsZXRlKTtcclxuXHJcbiAgICAgIHRoaXMuX19hY3Rpb24gPSB7XHJcbiAgICAgICAgaWQ6ICdkZWxldGUtZWxlbWVudCcsXHJcbiAgICAgICAgaWR4OiBpZHhcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0YWJsZTogZnVuY3Rpb24oZWxlbWVudCwgcm93Tm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbUNsb3Nlc3Qocm93Tm9kZSwgJ1tkYXRhLWVudHJ5XScpO1xyXG4gICAgICByZXR1cm4gZWRpdGFibGUoZWxlbWVudCwgZW50cnlOb2RlLCBwcm9wLCBpZHgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICBlbnRyeU5vZGUgPSBnZXRFbnRyeU5vZGUoZW50cnlOb2RlKTtcclxuICAgICAgcmV0dXJuIHNob3coZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93VGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShlbnRyeU5vZGUpO1xyXG4gICAgICB2YXIgZWxlbXMgPSBlbGVtZW50cyhlbGVtZW50LCBlbnRyeU5vZGUpO1xyXG4gICAgICByZXR1cm4gZWxlbXMgJiYgZWxlbXMubGVuZ3RoICYmICghY2FuQmVTaG93biB8fCBzaG93KGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlTGlzdEl0ZW06IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfTtcclxuXHJcbiAgLy8gVXBkYXRlL3NldCB0aGUgc2VsZWN0aW9uIG9uIHRoZSBjb3JyZWN0IHBvc2l0aW9uLlxyXG4gIC8vIEl0J3MgdGhlIHNhbWUgY29kZSBsaWtlIGZvciBhbiBpbnB1dCB2YWx1ZSBpbiB0aGUgUHJvcGVydGllc1BhbmVsLmpzLlxyXG4gIGlmIChzZXRDb250cm9sVmFsdWUpIHtcclxuICAgIGZhY3Rvcnkuc2V0Q29udHJvbFZhbHVlID0gZnVuY3Rpb24oZWxlbWVudCwgcm93Tm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShyb3dOb2RlKTtcclxuXHJcbiAgICAgIHZhciBpc1JlYWRPbmx5ID0gZG9tQXR0cihpbnB1dCwgJ3JlYWRvbmx5Jyk7XHJcbiAgICAgIHZhciBvbGRWYWx1ZSA9IGlucHV0LnZhbHVlO1xyXG5cclxuICAgICAgdmFyIHNlbGVjdGlvbjtcclxuXHJcbiAgICAgIC8vIHByZXZlbnRzIGlucHV0IGZpZWxkcyBmcm9tIGhhdmluZyB0aGUgdmFsdWUgJ3VuZGVmaW5lZCdcclxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3aGVuIHRoZSBhdHRyaWJ1dGUgJ3JlYWRvbmx5JyBleGlzdHMsIGlnbm9yZSB0aGUgY29tcGFyaXNvblxyXG4gICAgICAvLyB3aXRoICdvbGRWYWx1ZScgYW5kICd2YWx1ZSdcclxuICAgICAgaWYgKCEhaXNSZWFkT25seSAmJiBvbGRWYWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3Rpb24gb24gdW5kby9yZWRvXHJcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBpbnB1dCkge1xyXG4gICAgICAgIHNlbGVjdGlvbiA9IHVwZGF0ZVNlbGVjdGlvbihnZXRTZWxlY3Rpb24oaW5wdXQpLCBvbGRWYWx1ZSwgdmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRDb250cm9sVmFsdWUoZWxlbWVudCwgZW50cnlOb2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCk7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmYWN0b3J5O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG52YXIgdGV4dEJveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcblxyXG4gIHZhciByZXNvdXJjZSA9IGRlZmF1bHRQYXJhbWV0ZXJzLFxyXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgcmVzb3VyY2UuaWQsXHJcbiAgICAgIGNhbkJlU2hvd24gPSAhIW9wdGlvbnMuc2hvdyAmJiB0eXBlb2Ygb3B0aW9ucy5zaG93ID09PSAnZnVuY3Rpb24nLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIHJlc291cmNlLmh0bWwgPVxyXG4gICAgJzxsYWJlbCBmb3I9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChyZXNvdXJjZS5pZCkgKyAnXCIgJyArXHJcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcclxuICAgICc+JyArIGxhYmVsICsgJzwvbGFiZWw+JyArXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgJyArXHJcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcclxuICAgICc+JyArXHJcbiAgICAgICc8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcclxuICAgICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiIC8+JyArXHJcbiAgICAnPC9kaXY+JztcclxuXHJcbiAgLy8gYWRkIGRlc2NyaXB0aW9uIGJlbG93IHRleHQgYm94IGVudHJ5IGZpZWxkXHJcbiAgaWYgKGRlc2NyaXB0aW9uKSB7XHJcbiAgICByZXNvdXJjZS5odG1sICs9IGVudHJ5RmllbGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7XHJcbiAgfVxyXG5cclxuICBpZiAoY2FuQmVTaG93bikge1xyXG4gICAgcmVzb3VyY2UuaXNTaG93biA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaG93LmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC10ZXh0Ym94J107XHJcblxyXG4gIHJldHVybiByZXNvdXJjZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gdGV4dEJveDtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnk7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG52YXIgdGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdFBhcmFtZXRlcnMpIHtcclxuXHJcbiAgLy8gRGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBidXR0b24gbmV4dCB0byB0aGUgaW5wdXQtZmllbGRcclxuICB2YXIgZGVmYXVsdEJ1dHRvbkFjdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9XCInICsgb3B0aW9ucy5tb2RlbFByb3BlcnR5ICsgJ1wiXScsIGlucHV0Tm9kZSk7XHJcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8vIGRlZmF1bHQgbWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgYnV0dG9uIHNob3VsZCBiZSB2aXNpYmxlXHJcbiAgdmFyIGRlZmF1bHRCdXR0b25TaG93ID0gZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1cIicgKyBvcHRpb25zLm1vZGVsUHJvcGVydHkgKyAnXCJdJywgaW5wdXROb2RlKTtcclxuXHJcbiAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gIH07XHJcblxyXG5cclxuICB2YXIgcmVzb3VyY2UgPSBkZWZhdWx0UGFyYW1ldGVycyxcclxuICAgICAgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHJlc291cmNlLmlkLFxyXG4gICAgICBkYXRhVmFsdWVMYWJlbCA9IG9wdGlvbnMuZGF0YVZhbHVlTGFiZWwsXHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gKG9wdGlvbnMuYnV0dG9uTGFiZWwgfHwgJ1gnKSxcclxuICAgICAgYWN0aW9uTmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25BY3Rpb24gIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5idXR0b25BY3Rpb24ubmFtZSA6ICdjbGVhcicsXHJcbiAgICAgIGFjdGlvbk1ldGhvZCA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25BY3Rpb24gIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5idXR0b25BY3Rpb24ubWV0aG9kIDogZGVmYXVsdEJ1dHRvbkFjdGlvbixcclxuICAgICAgc2hvd05hbWUgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uU2hvdyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLmJ1dHRvblNob3cubmFtZSA6ICdjYW5DbGVhcicsXHJcbiAgICAgIHNob3dNZXRob2QgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uU2hvdyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLmJ1dHRvblNob3cubWV0aG9kIDogZGVmYXVsdEJ1dHRvblNob3csXHJcbiAgICAgIGNhbkJlRGlzYWJsZWQgPSAhIW9wdGlvbnMuZGlzYWJsZWQgJiYgdHlwZW9mIG9wdGlvbnMuZGlzYWJsZWQgPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGNhbkJlSGlkZGVuID0gISFvcHRpb25zLmhpZGRlbiAmJiB0eXBlb2Ygb3B0aW9ucy5oaWRkZW4gPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgcmVzb3VyY2UuaHRtbCA9XHJcbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcclxuICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiICcgOiAnJykgK1xyXG4gICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIiAnIDogJycpICtcclxuICAgICAgKGRhdGFWYWx1ZUxhYmVsID8gJ2RhdGEtdmFsdWU9XCInICsgZXNjYXBlSFRNTChkYXRhVmFsdWVMYWJlbCkgKyAnXCInIDogJycpICsgJz4nKyBlc2NhcGVIVE1MKGxhYmVsKSArJzwvbGFiZWw+JyArXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgJyArXHJcbiAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIicgOiAnJykgK1xyXG4gICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xyXG4gICAgICAnPicgK1xyXG4gICAgICAnPGlucHV0IGlkPVwiYWN0aXZpdGktJyArIGVzY2FwZUhUTUwocmVzb3VyY2UuaWQpICsgJ1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbnMubW9kZWxQcm9wZXJ0eSkgKyAnXCIgJyArXHJcbiAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXHJcbiAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCInIDogJycpICtcclxuICAgICAgICAnIC8+JyArXHJcbiAgICAgICc8YnV0dG9uIGNsYXNzPVwiJyArIGVzY2FwZUhUTUwoYWN0aW9uTmFtZSkgKyAnXCIgZGF0YS1hY3Rpb249XCInICsgZXNjYXBlSFRNTChhY3Rpb25OYW1lKSArICdcIiBkYXRhLXNob3c9XCInICsgZXNjYXBlSFRNTChzaG93TmFtZSkgKyAnXCIgJyArXHJcbiAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXHJcbiAgICAgICAgKGNhbkJlSGlkZGVuID8gJyBkYXRhLXNob3c9XCJpc0hpZGRlblwiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgJzxzcGFuPicgKyBlc2NhcGVIVE1MKGJ1dHRvbkxhYmVsKSArICc8L3NwYW4+JyArXHJcbiAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICc8L2Rpdj4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgdGV4dCBpbnB1dCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2VbYWN0aW9uTmFtZV0gPSBhY3Rpb25NZXRob2Q7XHJcbiAgcmVzb3VyY2Vbc2hvd05hbWVdID0gc2hvd01ldGhvZDtcclxuXHJcbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcclxuICAgIHJlc291cmNlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzYWJsZWQuYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlSGlkZGVuKSB7XHJcbiAgICByZXNvdXJjZS5pc0hpZGRlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gIW9wdGlvbnMuaGlkZGVuLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC10ZXh0ZmllbGQnXTtcclxuXHJcbiAgcmV0dXJuIHJlc291cmNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB0ZXh0RmllbGQ7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB0ZXh0RmllbGQgPSByZXF1aXJlKCcuL1RleHRJbnB1dEVudHJ5RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGFyb3VuZCBUZXh0SW5wdXRFbnRyeUZhY3RvcnkuXHJcbiAqIEl0IGFkZHMgZnVuY3Rpb25hbGl0eSB0byBjYWNoZSBhbiBpbnZhbGlkIHZhbHVlIGVudGVyZWQgaW4gdGhlXHJcbiAqIHRleHQgaW5wdXQsIGluc3RlYWQgb2Ygc2V0dGluZyBpdCBvbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LlxyXG4gKi9cclxudmFyIHZhbGlkYXRpb25Bd2FyZVRleHRGaWVsZCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcblxyXG4gIHZhciBtb2RlbFByb3BlcnR5ID0gb3B0aW9ucy5tb2RlbFByb3BlcnR5O1xyXG5cclxuICBkZWZhdWx0UGFyYW1ldGVycy5nZXQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl9fbGFzdEludmFsaWRWYWx1ZTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fX2xhc3RJbnZhbGlkVmFsdWU7XHJcblxyXG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICBwcm9wZXJ0aWVzW21vZGVsUHJvcGVydHldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogb3B0aW9ucy5nZXRQcm9wZXJ0eShlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICByZXR1cm4gcHJvcGVydGllcztcclxuICB9O1xyXG5cclxuICBkZWZhdWx0UGFyYW1ldGVycy5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGUuYXBwbHkodGhpcywgWyBlbGVtZW50LCB2YWx1ZXMsIG5vZGUgXSksXHJcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICAvLyBtYWtlIHN1cmUgd2UgZG8gbm90IHVwZGF0ZSB0aGUgaWRcclxuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIHZhbGlkYXRpb25FcnJvcnNbbW9kZWxQcm9wZXJ0eV0pIHtcclxuICAgICAgdGhpcy5fX2xhc3RJbnZhbGlkVmFsdWUgPSBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwge30sIG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICAgIHByb3BlcnRpZXNbbW9kZWxQcm9wZXJ0eV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwgcHJvcGVydGllcywgbm9kZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgdmFyIHZhbGlkYXRlID0gZGVmYXVsdFBhcmFtZXRlcnMudmFsaWRhdGUgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciB2YWx1ZSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB0aGlzLl9fbGFzdEludmFsaWRWYWx1ZTtcclxuXHJcbiAgICB2YXIgcHJvcGVydHkgPSB7fTtcclxuICAgIHByb3BlcnR5W21vZGVsUHJvcGVydHldID0gdmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgcHJvcGVydHksIG5vZGUpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiB0ZXh0RmllbGQob3B0aW9ucywgZGVmYXVsdFBhcmFtZXRlcnMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB2YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQ7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBtYXAgPSByZXF1aXJlKCdsb2Rhc2gvbWFwJyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgJ2FjdGl2aXRpOmFzeW5jQmVmb3JlJyBpcyBzZXRcclxuICogdG8gdHJ1ZS5cclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJvKSB7XHJcbiAgcmV0dXJuICEhKGJvLmdldCgnYWN0aXZpdGk6YXN5bmNCZWZvcmUnKSB8fCBiby5nZXQoJ2FjdGl2aXRpOmFzeW5jJykpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5pc0FzeW5jQmVmb3JlID0gaXNBc3luY0JlZm9yZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnYWN0aXZpdGk6YXN5bmNBZnRlcicgaXMgc2V0XHJcbiAqIHRvIHRydWUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJvKSB7XHJcbiAgcmV0dXJuICEhYm8uZ2V0KCdhY3Rpdml0aTphc3luY0FmdGVyJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmlzQXN5bmNBZnRlciA9IGlzQXN5bmNBZnRlcjtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnYWN0aXZpdGk6ZXhjbHVzaXZlJyBpcyBzZXRcclxuICogdG8gdHJ1ZS5cclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0V4Y2x1c2l2ZShibykge1xyXG4gIHJldHVybiAhIWJvLmdldCgnYWN0aXZpdGk6ZXhjbHVzaXZlJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmlzRXhjbHVzaXZlID0gaXNFeGNsdXNpdmU7XHJcblxyXG4vKipcclxuICogR2V0IGZpcnN0ICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSdcclxuICovXHJcbmZ1bmN0aW9uIGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKSB7XHJcbiAgcmV0dXJuIChleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhibywgJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJykgfHwgW10pWzBdO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5nZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSA9IGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlO1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgYWxsIGV4aXN0aW5nICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBhIGxpc3Qgb2YgJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJ1xyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpIHtcclxuICB2YXIgcmV0cnlUaW1lQ3ljbGVzID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScpO1xyXG4gIHJldHVybiBtYXAocmV0cnlUaW1lQ3ljbGVzLCBmdW5jdGlvbihjeWNsZSkge1xyXG4gICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLnJlbW92ZUVudHJ5KGJvLCBlbGVtZW50LCBjeWNsZSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlID0gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGU7IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNvbGxlY3Rpb25BZGQgPSByZXF1aXJlKCdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJykuYWRkLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIENhdGVnb3J5SGVscGVyID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhdGVnb3J5SGVscGVyO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgYnBtbjpDYXRlZ29yeVZhbHVlIGluc2lkZSBhIG5ldyBicG1uOkNhdGVnb3J5XHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvbnNcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlWYWx1ZS5cclxuICovXHJcbkNhdGVnb3J5SGVscGVyLmNyZWF0ZUNhdGVnb3J5VmFsdWUgPSBmdW5jdGlvbihkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeVZhbHVlJyksXHJcbiAgICAgIGNhdGVnb3J5ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5Jywge1xyXG4gICAgICAgIGNhdGVnb3J5VmFsdWU6IFsgY2F0ZWdvcnlWYWx1ZSBdXHJcbiAgICAgIH0pO1xyXG5cclxuICAvLyBhZGQgdG8gY29ycmVjdCBwbGFjZVxyXG4gIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgY2F0ZWdvcnkpO1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0KGNhdGVnb3J5KS4kcGFyZW50ID0gZGVmaW5pdGlvbnM7XHJcbiAgZ2V0QnVzaW5lc3NPYmplY3QoY2F0ZWdvcnlWYWx1ZSkuJHBhcmVudCA9IGNhdGVnb3J5O1xyXG5cclxuICByZXR1cm4gY2F0ZWdvcnlWYWx1ZTtcclxuXHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIENtZEhlbHBlciA9IHt9O1xyXG5tb2R1bGUuZXhwb3J0cyA9IENtZEhlbHBlcjtcclxuXHJcbkNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgY29udGV4dDogeyBlbGVtZW50OiBlbGVtZW50LCBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnRpZXMpIHtcclxuICByZXR1cm4ge1xyXG4gICAgY21kOiAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXNcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIG9iamVjdHNUb0FkZCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcclxuICAgIGNvbnRleHQ6IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogbGlzdFByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvQWRkOiBvYmplY3RzVG9BZGRcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QgPSBmdW5jdGlvbihlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbGlzdFByb3BlcnR5TmFtZSwgcmVmZXJlbmNlUHJvcGVydHlOYW1lLCBvYmplY3RzVG9SZW1vdmUpIHtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBjdXJyZW50T2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuICAgICAgcHJvcGVydHlOYW1lOiBsaXN0UHJvcGVydHlOYW1lLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvYmplY3RzVG9SZW1vdmVcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuXHJcbkNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIHJlZmVyZW5jZVByb3BlcnR5TmFtZSwgb2JqZWN0c1RvQWRkLCBvYmplY3RzVG9SZW1vdmUpIHtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBjdXJyZW50T2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuICAgICAgcHJvcGVydHlOYW1lOiBsaXN0UHJvcGVydHlOYW1lLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvQWRkOiBvYmplY3RzVG9BZGQsXHJcbiAgICAgIG9iamVjdHNUb1JlbW92ZTogb2JqZWN0c1RvUmVtb3ZlXHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcblxyXG5DbWRIZWxwZXIuc2V0TGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBsaXN0UHJvcGVydHlOYW1lLCB1cGRhdGVkT2JqZWN0TGlzdCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcclxuICAgIGNvbnRleHQ6IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogbGlzdFByb3BlcnR5TmFtZSxcclxuICAgICAgdXBkYXRlZE9iamVjdExpc3Q6IHVwZGF0ZWRPYmplY3RMaXN0XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEVsZW1lbnRIZWxwZXIgPSB7fTtcclxubW9kdWxlLmV4cG9ydHMgPSBFbGVtZW50SGVscGVyO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBhbmQgc2V0IHRoZSBwYXJlbnQgdG8gaXRcclxuICpcclxuICogQG1ldGhvZCBFbGVtZW50SGVscGVyI2NyZWF0ZUVsZW1lbnRcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnRUeXBlIG9mIHRoZSBuZXcgZWxlbWVudFxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBvZiB0aGUgbmV3IGVsZW1lbnQgaW4ga2V5LXZhbHVlIHBhaXJzXHJcbiAqIEBwYXJhbSB7bW9kZGxlLm9iamVjdH0gcGFyZW50IG9mIHRoZSBuZXcgZWxlbWVudFxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgdGhlIG5ldyBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudCB3aGljaCBpcyBjcmVhdGVkXHJcbiAqL1xyXG5FbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KSB7XHJcbiAgdmFyIGVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZShlbGVtZW50VHlwZSwgcHJvcGVydGllcyk7XHJcbiAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xyXG5cclxuICByZXR1cm4gZWxlbWVudDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxudmFyIEV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFdmVudERlZmluaXRpb25IZWxwZXI7XHJcblxyXG5FdmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCwgZXZlbnRUeXBlKSB7XHJcblxyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICBldmVudERlZmluaXRpb24gPSBudWxsO1xyXG5cclxuICBpZiAoYm8uZXZlbnREZWZpbml0aW9ucykge1xyXG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICBpZiAoaXMoZXZlbnQsIGV2ZW50VHlwZSkpIHtcclxuICAgICAgICBldmVudERlZmluaXRpb24gPSBldmVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXZlbnREZWZpbml0aW9uO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldE1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKTtcclxufTtcclxuXHJcbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVycm9yRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVzY2FsYXRpb25FdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKTtcclxufTtcclxuXHJcbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XHJcbn07XHJcblxyXG5FdmVudERlZmluaXRpb25IZWxwZXIuZ2V0TGlua0V2ZW50RGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5nZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi9DbWRIZWxwZXInKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSB7fTtcclxuXHJcbnZhciBnZXRFeHRlbnNpb25FbGVtZW50cyA9IGZ1bmN0aW9uKGJvKSB7XHJcbiAgcmV0dXJuIGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzID0gZnVuY3Rpb24oYm8sIHR5cGUpIHtcclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhibyk7XHJcbiAgaWYgKHR5cGVvZiBleHRlbnNpb25FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHZhciBleHRlbnNpb25WYWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpO1xyXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25WYWx1ZXMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHZhciBlbGVtZW50cyA9IGV4dGVuc2lvblZhbHVlcy5maWx0ZXIoZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaXModmFsdWUsIHR5cGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50cztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmFkZEVudHJ5ID0gZnVuY3Rpb24oYm8sIGVsZW1lbnQsIGVudHJ5LCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbiAgLy8gaWYgdGhlcmUgaXMgbm8gZXh0ZW5zaW9uRWxlbWVudHMgbGlzdCwgY3JlYXRlIG9uZVxyXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgIC8vIFRPRE86IEFzayBEYW5pZWwgd2hpY2ggb3BlcmF0aW9uIGNvc3RzIG1vcmVcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtlbnRyeV0gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgIHJldHVybiB7IGV4dGVuc2lvbkVsZW1lbnRzIDogZXh0ZW5zaW9uRWxlbWVudHMgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gYWRkIG5ldyBmYWlsZWRKb2JSZXRyeUV4dGVuc2lvbkVsZW1lbnQgdG8gZXhpc3RpbmcgZXh0ZW5zaW9uRWxlbWVudHMgbGlzdFxyXG4gICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFtlbnRyeV0pO1xyXG4gIH1cclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLnJlbW92ZUVudHJ5ID0gZnVuY3Rpb24oYm8sIGVsZW1lbnQsIGVudHJ5KSB7XHJcbiAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcblxyXG4gICAgLy8gcmV0dXJuIGFuIGVtcHR5IGNvbW1hbmQgd2hlbiB0aGVyZSBpcyBubyBleHRlbnNpb25FbGVtZW50cyBsaXN0XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCAnZXh0ZW5zaW9uRWxlbWVudHMnLCBbZW50cnldKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXI7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50cyA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKS5nZXRFeHRlbnNpb25FbGVtZW50cztcclxuXHJcbnZhciBGb3JtSGVscGVyID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1IZWxwZXI7XHJcblxyXG4vKipcclxuICogUmV0dXJuIGZvcm0gZGF0YSBmcm9tIGJ1c2luZXNzIG9iamVjdCBvciB1bmRlZmluZWQgaWYgbm9uZSBleGlzdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fHVuZGVmaW5lZH0gZm9ybURhdGFcclxuICpcclxuICog5q2k5pa55rOV5bqf5byDXHJcbiAqXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldEZvcm1EYXRhID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gLyogdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcclxuXHJcbiAgdmFyIGZvcm1EYXRhID0ge31cclxuXHJcbiAgaWYgKHR5cGVvZiBmb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiBmb3JtRGF0YVswXTtcclxuICB9Ki9cclxuIHJldHVybiB7fTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGFsbCBmb3JtIGZpZWxkcyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcclxuICogYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7QXJyYXl9IGEgbGlzdCBvZiBmb3JtIGZpZWxkIG9iamVjdHNcclxuICovXHJcbkZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgLyoq55u05o6l6I635Y+WIEV4dGVuc2lvbkVsZW1lbnRz55qEIGFjdGl2aXRpOkZvcm1Qcm9wZXJ0eeWFg+e0oCovXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcclxuXHJcbiAgcmV0dXJuIGZvcm1GaWVsZHMgfHwgW107XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGZvcm0gZmllbGQgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0IGF0IGdpdmVuIGluZGV4XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZm9ybSBmaWVsZFxyXG4gKi9cclxuRm9ybUhlbHBlci5nZXRGb3JtRmllbGQgPSBmdW5jdGlvbihlbGVtZW50LCBpZHgpIHtcclxuXHJcbiAgdmFyIGZvcm1GaWVsZHMgPSB0aGlzLmdldEZvcm1GaWVsZHMoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiBmb3JtRmllbGRzW2lkeF07XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgY29uc3RyYWludHMgZm9yIGEgc3BlY2lmaWMgZm9ybSBmaWVsZCBmcm9tIHRoZSBidXNpbmVzcyBvYmplY3RcclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZm9ybUZpZWxkXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBhIGxpc3Qgb2YgY29uc3RyYWludCBvYmplY3RzXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldENvbnN0cmFpbnRzID0gZnVuY3Rpb24oZm9ybUZpZWxkKSB7XHJcbiAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQudmFsaWRhdGlvbiAmJiBmb3JtRmllbGQudmFsaWRhdGlvbi5jb25zdHJhaW50cykge1xyXG4gICAgcmV0dXJuIGZvcm1GaWVsZC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgYWN0aXZpdGk6dmFsdWUgb2JqZWN0cyBmb3IgYSBzcGVjaWZpYyBmb3JtIGZpZWxkIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBmb3JtRmllbGRcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldEVudW1WYWx1ZXMgPSBmdW5jdGlvbihmb3JtRmllbGQpIHtcclxuICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC52YWx1ZXMpIHtcclxuICAgIHJldHVybiBmb3JtRmllbGQudmFsdWVzO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTW9kZWxVdGlsID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKSxcclxuICAgIGlzID0gTW9kZWxVdGlsLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25IZWxwZXInKTtcclxudmFyIGV4dGVuc2lvbnNFbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpO1xyXG5cclxudmFyIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXI7XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2FjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZSdcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1NlcnZpY2VUYXNrTGlrZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZScpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgJ3RydWUnIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzICdhY3Rpdml0aTpEbW5DYXBhYmxlJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRG1uQ2FwYWJsZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkRtbkNhcGFibGUnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXh0ZXJuYWxDYXBhYmxlJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXh0ZXJuYWxDYXBhYmxlID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYWN0aXZpdGk6RXh0ZXJuYWxDYXBhYmxlJyk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcidcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1Rhc2tMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcicpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgJ3RydWUnIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcidcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc0V4ZWN1dGlvbkxpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInIG9yXHJcbiAqICdhY3Rpdml0aTpUYXNrTGlzdGVuZXInXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5pc1Rhc2tMaXN0ZW5lcihlbGVtZW50KSB8fCB0aGlzLmlzRXhlY3V0aW9uTGlzdGVuZXIoZWxlbWVudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2JwbW46U2VxdWVuY2VGbG93J1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VxdWVuY2VGbG93ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSAnYWN0aXZpdGk6U2VydmljZVRhc2tMaWtlJyBidXNpbmVzcyBvYmplY3QuXHJcbiAqXHJcbiAqIElmIHRoZSBnaXZlbiBlbGVtZW50IGlzIG5vdCBhICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnLCB0aGVuICdmYWxzZSdcclxuICogaXMgcmV0dXJuZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnIGJ1c2luZXNzIG9iamVjdFxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOkVuZEV2ZW50JykpIHtcclxuXHJcbiAgICAvLyBjaGFuZ2UgYnVzaW5lc3Mgb2JqZWN0IHRvICdtZXNzYWdlRXZlbnREZWZpbml0aW9uJyB3aGVuXHJcbiAgICAvLyB0aGUgZWxlbWVudCBpcyBhIG1lc3NhZ2UgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50IG9yIG1lc3NhZ2UgZW5kIGV2ZW50XHJcbiAgICAvLyBiZWNhdXNlIHRoZSBhY3Rpdml0aSBleHRlbnNpb25zIChlLmcuIGFjdGl2aXRpOmNsYXNzKSBhcmUgaW4gdGhlIG1lc3NhZ2VcclxuICAgIC8vIGV2ZW50IGRlZmluaXRpb24gdGFnIGFuZCBub3QgaW4gdGhlIGludGVybWVkaWF0ZSB0aHJvdyBldmVudCBvciBlbmQgZXZlbnQgdGFnXHJcbiAgICB2YXIgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gICAgaWYgKG1lc3NhZ2VFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgZWxlbWVudCA9IG1lc3NhZ2VFdmVudERlZmluaXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcy5pc1NlcnZpY2VUYXNrTGlrZShlbGVtZW50KSAmJiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cclxuICpcclxuICogUG9zc2libGUgaW1wbGVtZW50YXRpb24gdHlwZXMgYXJlOlxyXG4gKiAtIGRtblxyXG4gKiAtIGNvbm5lY3RvclxyXG4gKiAtIGV4dGVybmFsXHJcbiAqIC0gY2xhc3NcclxuICogLSBleHByZXNzaW9uXHJcbiAqIC0gZGVsZWdhdGVFeHByZXNzaW9uXHJcbiAqIC0gc2NyaXB0XHJcbiAqIC0gb3IgdW5kZWZpbmVkLCB3aGVuIG5vIG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIHR5cGUgaXMgZm91bmRcclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSB0aGUgaW1wbGVtZW50YXRpb24gdHlwZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgdmFyIGJvID0gdGhpcy5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFibykge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW5lcihlbGVtZW50KSkge1xyXG4gICAgICBibyA9IGVsZW1lbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5pc0RtbkNhcGFibGUoYm8pKSB7XHJcbiAgICB2YXIgZGVjaXNpb25SZWYgPSBiby5nZXQoJ2FjdGl2aXRpOmRlY2lzaW9uUmVmJyk7XHJcbiAgICBpZiAodHlwZW9mIGRlY2lzaW9uUmVmICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gJ2Rtbic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5pc1NlcnZpY2VUYXNrTGlrZShibykpIHtcclxuICAgIHZhciBjb25uZWN0b3JzID0gZXh0ZW5zaW9uc0VsZW1lbnRIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpDb25uZWN0b3InKTtcclxuICAgIGlmICh0eXBlb2YgY29ubmVjdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuICdjb25uZWN0b3InO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuaXNFeHRlcm5hbENhcGFibGUoYm8pKSB7XHJcbiAgICB2YXIgdHlwZSA9IGJvLmdldCgnYWN0aXZpdGk6dHlwZScpO1xyXG4gICAgaWYgKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcclxuICAgICAgcmV0dXJuICdleHRlcm5hbCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgY2xzID0gYm8uZ2V0KCdhY3Rpdml0aTpjbGFzcycpO1xyXG4gIGlmICh0eXBlb2YgY2xzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgcmV0dXJuICdjbGFzcyc7XHJcbiAgfVxyXG5cclxuICB2YXIgZXhwcmVzc2lvbiA9IGJvLmdldCgnYWN0aXZpdGk6ZXhwcmVzc2lvbicpO1xyXG4gIGlmICh0eXBlb2YgZXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAnZXhwcmVzc2lvbic7XHJcbiAgfVxyXG5cclxuICB2YXIgZGVsZWdhdGVFeHByZXNzaW9uID0gYm8uZ2V0KCdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nKTtcclxuICBpZiAodHlwZW9mIGRlbGVnYXRlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAnZGVsZWdhdGVFeHByZXNzaW9uJztcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmlzTGlzdGVuZXIoYm8pKSB7XHJcbiAgICB2YXIgc2NyaXB0ID0gYm8uZ2V0KCdzY3JpcHQnKTtcclxuICAgIGlmICh0eXBlb2Ygc2NyaXB0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gJ3NjcmlwdCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIE1vZGVsVXRpbCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJyksXHJcbiAgICBpcyA9IE1vZGVsVXRpbC5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gTW9kZWxVdGlsLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxyXG4gICAgaW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcbnZhciBJbnB1dE91dHB1dEhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnB1dE91dHB1dEhlbHBlcjtcclxuXHJcbmZ1bmN0aW9uIGdldEVsZW1lbnRzKGJvLCB0eXBlLCBwcm9wKSB7XHJcbiAgdmFyIGVsZW1zID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sIHR5cGUpIHx8IFtdO1xyXG4gIHJldHVybiAhcHJvcCA/IGVsZW1zIDogKGVsZW1zWzBdIHx8IHt9KVtwcm9wXSB8fCBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyhlbGVtZW50LCBwcm9wLCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICB2YXIgaW5wdXRPdXRwdXQgPSBJbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gIHJldHVybiAoaW5wdXRPdXRwdXQgJiYgaW5wdXRPdXRwdXQuZ2V0KHByb3ApKSB8fCBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGlucHV0T3V0cHV0IGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgaW5wdXRPdXRwdXQgb2JqZWN0XHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIGlmICghaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgIHJldHVybiAoZ2V0RWxlbWVudHMoYm8sICdhY3Rpdml0aTpJbnB1dE91dHB1dCcpIHx8IFtdKVswXTtcclxuICB9XHJcbiAgdmFyIGNvbm5lY3RvciA9IHRoaXMuZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xyXG4gIHJldHVybiBjb25uZWN0b3IgJiYgY29ubmVjdG9yLmdldCgnaW5wdXRPdXRwdXQnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBjb25uZWN0b3IgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGNvbm5lY3RvciBvYmplY3RcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmdldENvbm5lY3RvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGJvICYmIChnZXRFbGVtZW50cyhibywgJ2FjdGl2aXRpOkNvbm5lY3RvcicpIHx8IFtdKVswXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYWxsIGlucHV0IHBhcmFtZXRlcnMgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdCwgYW5kXHJcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuXHJcbiAqXHJcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheX0gYSBsaXN0IG9mIGlucHV0IHBhcmFtZXRlciBvYmplY3RzXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlcnMgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gZ2V0UGFyYW1ldGVycy5hcHBseSh0aGlzLCBbIGVsZW1lbnQsICdpbnB1dFBhcmFtZXRlcnMnLCBpbnNpZGVDb25uZWN0b3IgXSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFsbCBvdXRwdXQgcGFyYW1ldGVycyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcclxuICogYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7Ym9vbGVhbn0gaW5zaWRlQ29ubmVjdG9yXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5fSBhIGxpc3Qgb2Ygb3V0cHV0IHBhcmFtZXRlciBvYmplY3RzXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRPdXRwdXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24oZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMuYXBwbHkodGhpcywgWyBlbGVtZW50LCAnb3V0cHV0UGFyYW1ldGVycycsIGluc2lkZUNvbm5lY3RvciBdKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBpbnB1dCBwYXJhbWV0ZXIgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0IGF0IGdpdmVuIGluZGV4XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7Ym9vbGVhbn0gaW5zaWRlQ29ubmVjdG9yXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gaW5wdXQgcGFyYW1ldGVyXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvcilbaWR4XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBvdXRwdXQgcGFyYW1ldGVyIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdCBhdCBnaXZlbiBpbmRleFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IG91dHB1dCBwYXJhbWV0ZXJcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpW2lkeF07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgc3VwcG9ydHMgaW5wdXRPdXRwdXRcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBpbnNpZGVDb25uZWN0b3JcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5pc0lucHV0T3V0cHV0U3VwcG9ydGVkID0gZnVuY3Rpb24oZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcblxyXG4gIGlmIChpbnNpZGVDb25uZWN0b3IpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBpcyhibywgJ2JwbW46Rmxvd05vZGUnKSAmJiAhKFxyXG4gICAgICBpcyhibywgJ2JwbW46U3RhcnRFdmVudCcpIHx8XHJcbiAgICAgIGlzKGJvLCAnYnBtbjpHYXRld2F5JykgfHxcclxuICAgICAgaXMoYm8sICdicG1uOkJvdW5kYXJ5RXZlbnQnKSB8fFxyXG4gICAgICAoXHJcbiAgICAgICAgaXMoYm8sICdicG1uOlN1YlByb2Nlc3MnKSAmJiBiby5nZXQoJ3RyaWdnZXJlZEJ5RXZlbnQnKVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBzdXBwb3J0cyBvdXRwdXQgcGFyYW1ldGVyc1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmFyZU91dHB1dFBhcmFtZXRlcnNTdXBwb3J0ZWQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICByZXR1cm4gaW5zaWRlQ29ubmVjdG9yIHx8ICghaXMoYm8sICdicG1uOkVuZEV2ZW50JykgJiYgIWJvLmxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi9DbWRIZWxwZXInKTtcclxuXHJcblxyXG52YXIgUGFydGljaXBhbnRIZWxwZXIgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFydGljaXBhbnRIZWxwZXI7XHJcblxyXG5QYXJ0aWNpcGFudEhlbHBlci5tb2RpZnlQcm9jZXNzQnVzaW5lc3NPYmplY3QgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVzKSB7XHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKSxcclxuICAgICAgcHJvcGVydGllcyA9IHt9O1xyXG5cclxuICBwcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlc1twcm9wZXJ0eV07XHJcblxyXG4gIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BlcnRpZXMpO1xyXG59O1xyXG5cclxuUGFydGljaXBhbnRIZWxwZXIuZ2V0UHJvY2Vzc0J1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKSxcclxuICAgICAgcHJvcGVydGllcyA9IHt9O1xyXG5cclxuICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBiby5nZXQocHJvcGVydHlOYW1lKTtcclxuXHJcbiAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcclxuXHJcbnZhciBQcm9wZXJ0aWVzQWN0aXZhdG9yID0gcmVxdWlyZSgnLi4vLi4vUHJvcGVydGllc0FjdGl2YXRvcicpO1xyXG5cclxudmFyIGFzeW5jQ2FwYWJsZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXInKSxcclxuICAgIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG4vLyBicG1uIHByb3BlcnRpZXNcclxudmFyIHByb2Nlc3NQcm9wcyA9IHJlcXVpcmUoJy4uLy4uL3Byb3ZpZGVyL2JwbW4vcGFydHMvUHJvY2Vzc1Byb3BzJyksXHJcbiAgICBldmVudFByb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9FdmVudFByb3BzJyksXHJcbiAgICBsaW5rUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0xpbmtQcm9wcycpLFxyXG4gICAgZG9jdW1lbnRhdGlvblByb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9Eb2N1bWVudGF0aW9uUHJvcHMnKSxcclxuICAgIGlkUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0lkUHJvcHMnKSxcclxuICAgIG5hbWVQcm9wcyA9IHJlcXVpcmUoJy4uLy4uL3Byb3ZpZGVyL2JwbW4vcGFydHMvTmFtZVByb3BzJyksXHJcbiAgICBleGVjdXRhYmxlUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0V4ZWN1dGFibGVQcm9wcycpO1xyXG5cclxuLy8gYWN0aXZpdGkgcHJvcGVydGllc1xyXG52YXIgc2VydmljZVRhc2tEZWxlZ2F0ZVByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9TZXJ2aWNlVGFza0RlbGVnYXRlUHJvcHMnKSxcclxuICAgIHVzZXJUYXNrUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL1VzZXJUYXNrUHJvcHMnKSxcclxuICAgIGFzeW5jaHJvbm91c0NvbnRpbnVhdGlvblByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9Bc3luY2hyb25vdXNDb250aW51YXRpb25Qcm9wcycpLFxyXG4gICAgY2FsbEFjdGl2aXR5UHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0NhbGxBY3Rpdml0eVByb3BzJyksXHJcbiAgICBtdWx0aUluc3RhbmNlUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL011bHRpSW5zdGFuY2VMb29wUHJvcHMnKSxcclxuICAgIGNvbmRpdGlvbmFsUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0NvbmRpdGlvbmFsUHJvcHMnKSxcclxuICAgIHNjcmlwdFByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9TY3JpcHRUYXNrUHJvcHMnKSxcclxuICAgIGVycm9yUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0Vycm9yRXZlbnRQcm9wcycpLFxyXG4gICAgZm9ybVByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9Gb3JtUHJvcHMnKSxcclxuICAgIHN0YXJ0RXZlbnRJbml0aWF0b3IgPSByZXF1aXJlKCcuL3BhcnRzL1N0YXJ0RXZlbnRJbml0aWF0b3InKSxcclxuICAgIHZhcmlhYmxlTWFwcGluZyA9IHJlcXVpcmUoJy4vcGFydHMvVmFyaWFibGVNYXBwaW5nUHJvcHMnKSxcclxuICAgIHZlcnNpb25UYWcgPSByZXF1aXJlKCcuL3BhcnRzL1ZlcnNpb25UYWdQcm9wcycpO1xyXG5cclxudmFyIGxpc3RlbmVyUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyUHJvcHMnKSxcclxuICAgIGxpc3RlbmVyRGV0YWlscyA9IHJlcXVpcmUoJy4vcGFydHMvTGlzdGVuZXJEZXRhaWxQcm9wcycpLFxyXG4gICAgbGlzdGVuZXJGaWVsZHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyRmllbGRJbmplY3Rpb25Qcm9wcycpO1xyXG5cclxudmFyIGVsZW1lbnRUZW1wbGF0ZUNob29zZXJQcm9wcyA9IHJlcXVpcmUoJy4vZWxlbWVudC10ZW1wbGF0ZXMvcGFydHMvQ2hvb3NlclByb3BzJyksXHJcbiAgICBlbGVtZW50VGVtcGxhdGVDdXN0b21Qcm9wcyA9IHJlcXVpcmUoJy4vZWxlbWVudC10ZW1wbGF0ZXMvcGFydHMvQ3VzdG9tUHJvcHMnKTtcclxuXHJcbi8vIElucHV0L091dHB1dFxyXG52YXIgaW5wdXRPdXRwdXQgPSByZXF1aXJlKCcuL3BhcnRzL0lucHV0T3V0cHV0UHJvcHMnKSxcclxuICAgIGlucHV0T3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi9wYXJ0cy9JbnB1dE91dHB1dFBhcmFtZXRlclByb3BzJyk7XHJcblxyXG4vLyBDb25uZWN0b3JcclxudmFyIGNvbm5lY3RvckRldGFpbHMgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvckRldGFpbFByb3BzJyksXHJcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dCA9IHJlcXVpcmUoJy4vcGFydHMvQ29ubmVjdG9ySW5wdXRPdXRwdXRQcm9wcycpLFxyXG4gICAgY29ubmVjdG9ySW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyUHJvcHMnKTtcclxuXHJcbi8vIHByb3BlcnRpZXNcclxudmFyIHByb3BlcnRpZXMgPSByZXF1aXJlKCcuL3BhcnRzL1Byb3BlcnRpZXNQcm9wcycpO1xyXG5cclxuLy8gam9iIGNvbmZpZ3VyYXRpb25cclxudmFyIGpvYkNvbmZpZ3VyYXRpb24gPSByZXF1aXJlKCcuL3BhcnRzL0pvYkNvbmZpZ3VyYXRpb25Qcm9wcycpO1xyXG5cclxuLy8gaGlzdG9yeSB0aW1lIHRvIGxpdmVcclxudmFyIGhpc3RvcnlUaW1lVG9MaXZlID0gcmVxdWlyZSgnLi9wYXJ0cy9IaXN0b3J5VGltZVRvTGl2ZVByb3BzJyk7XHJcblxyXG4vLyBjYW5kaWRhdGUgc3RhcnRlciBncm91cHMvdXNlcnNcclxudmFyIGNhbmRpZGF0ZVN0YXJ0ZXIgPSByZXF1aXJlKCcuL3BhcnRzL0NhbmRpZGF0ZVN0YXJ0ZXJQcm9wcycpO1xyXG5cclxuLy8gdGFza2xpc3RcclxudmFyIHRhc2tsaXN0ID0gcmVxdWlyZSgnLi9wYXJ0cy9UYXNrbGlzdFByb3BzJyk7XHJcblxyXG4vLyBleHRlcm5hbCB0YXNrIGNvbmZpZ3VyYXRpb25cclxudmFyIGV4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24gPSByZXF1aXJlKCcuL3BhcnRzL0V4dGVybmFsVGFza0NvbmZpZ3VyYXRpb25Qcm9wcycpO1xyXG5cclxuLy8gZmllbGQgaW5qZWN0aW9uXHJcbnZhciBmaWVsZEluamVjdGlvbnMgPSByZXF1aXJlKCcuL3BhcnRzL0ZpZWxkSW5qZWN0aW9uUHJvcHMnKTtcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyk7XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbnZhciBpc0V4dGVybmFsVGFza1ByaW9yaXR5RW5hYmxlZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgLy8gc2hvdyBvbmx5IGlmIGVsZW1lbnQgaXMgYSBwcm9jZXNzLCBhIHBhcnRpY2lwYW50IC4uLlxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB2YXIgZXh0ZXJuYWxCbyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgaXNFeHRlcm5hbFRhc2sgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGV4dGVybmFsQm8pID09PSAnZXh0ZXJuYWwnO1xyXG5cclxuICAvLyAuLi4gb3IgYW4gZXh0ZXJuYWwgdGFzayB3aXRoIHNlbGVjdGVkIGV4dGVybmFsIGltcGxlbWVudGF0aW9uIHR5cGVcclxuICByZXR1cm4gISFJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNFeHRlcm5hbENhcGFibGUoZXh0ZXJuYWxCbykgJiYgaXNFeHRlcm5hbFRhc2s7XHJcbn07XHJcblxyXG52YXIgaXNKb2JDb25maWdFbmFibGVkID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgYmVoYXZpb3JcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICBpZiAoYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNCZWZvcmUoYm8pIHx8IGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQWZ0ZXIoYm8pKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIHRpbWVyIGRlZmluaXRpb25cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSkge1xyXG4gICAgcmV0dXJuICEhZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxudmFyIGdldElucHV0T3V0cHV0UGFyYW1ldGVyTGFiZWwgPSBmdW5jdGlvbihwYXJhbSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOklucHV0UGFyYW1ldGVyJykpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lucHV0IFBhcmFtZXRlcicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKHBhcmFtLCAnYWN0aXZpdGk6T3V0cHV0UGFyYW1ldGVyJykpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ091dHB1dCBQYXJhbWV0ZXInKTtcclxuICB9XHJcblxyXG4gIHJldHVybiAnJztcclxufTtcclxuXHJcbnZhciBnZXRMaXN0ZW5lckxhYmVsID0gZnVuY3Rpb24ocGFyYW0sIHRyYW5zbGF0ZSkge1xyXG5cclxuICBpZiAoaXMocGFyYW0sICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcicpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdFeGVjdXRpb24gTGlzdGVuZXInKTtcclxuICB9XHJcblxyXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcicpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdUYXNrIExpc3RlbmVyJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJyc7XHJcbn07XHJcblxyXG52YXIgUFJPQ0VTU19LRVlfSElOVCA9ICdUaGlzIG1hcHMgdG8gdGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBrZXkuJztcclxudmFyIFRBU0tfS0VZX0hJTlQgPSAnVGhpcyBtYXBzIHRvIHRoZSB0YXNrIGRlZmluaXRpb24ga2V5Lic7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxyXG4gICAgZWxlbWVudCwgY2FudmFzLCBicG1uRmFjdG9yeSxcclxuICAgIGVsZW1lbnRSZWdpc3RyeSwgZWxlbWVudFRlbXBsYXRlcywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIC8vIHJlZmVyIHRvIHRhcmdldCBlbGVtZW50IGZvciBleHRlcm5hbCBsYWJlbHNcclxuICBlbGVtZW50ID0gZWxlbWVudC5sYWJlbFRhcmdldCB8fCBlbGVtZW50O1xyXG5cclxuICB2YXIgZ2VuZXJhbEdyb3VwID0ge1xyXG4gICAgaWQ6ICdnZW5lcmFsJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIGlkT3B0aW9ucztcclxuICB2YXIgcHJvY2Vzc09wdGlvbnM7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcclxuICAgIGlkT3B0aW9ucyA9IHsgZGVzY3JpcHRpb246IFBST0NFU1NfS0VZX0hJTlQgfTtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpKSB7XHJcbiAgICBpZE9wdGlvbnMgPSB7IGRlc2NyaXB0aW9uOiBUQVNLX0tFWV9ISU5UIH07XHJcbiAgfVxyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgcHJvY2Vzc09wdGlvbnMgPSB7IHByb2Nlc3NJZERlc2NyaXB0aW9uOiBQUk9DRVNTX0tFWV9ISU5UIH07XHJcbiAgfVxyXG5cclxuICBpZFByb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBpZE9wdGlvbnMpO1xyXG4gIG5hbWVQcm9wcyhnZW5lcmFsR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjYW52YXMsIHRyYW5zbGF0ZSk7XHJcbiAgcHJvY2Vzc1Byb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBwcm9jZXNzT3B0aW9ucyk7XHJcbiAgdmVyc2lvblRhZyhnZW5lcmFsR3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSk7XHJcbiAgZXhlY3V0YWJsZVByb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcclxuICBlbGVtZW50VGVtcGxhdGVDaG9vc2VyUHJvcHMoZ2VuZXJhbEdyb3VwLCBlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgY3VzdG9tRmllbGRzR3JvdXBzID0gZWxlbWVudFRlbXBsYXRlQ3VzdG9tUHJvcHMoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBkZXRhaWxzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2RldGFpbHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGV0YWlscycpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIHNlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG4gIHVzZXJUYXNrUHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpO1xyXG4gIHNjcmlwdFByb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcbiAgbGlua1Byb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcclxuICBjYWxsQWN0aXZpdHlQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG4gIGV2ZW50UHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpO1xyXG4gIGVycm9yUHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuICBjb25kaXRpb25hbFByb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcbiAgc3RhcnRFdmVudEluaXRpYXRvcihkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSk7IC8vIHRoaXMgbXVzdCBiZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBkZXRhaWxzIGdyb3VwIVxyXG5cclxuICB2YXIgbXVsdGlJbnN0YW5jZUdyb3VwID0ge1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ011bHRpIEluc3RhbmNlJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgbXVsdGlJbnN0YW5jZVByb3BzKG11bHRpSW5zdGFuY2VHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBhc3luY0dyb3VwID0ge1xyXG4gICAgaWQgOiAnYXN5bmMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQXN5bmNocm9ub3VzIENvbnRpbnVhdGlvbnMnKSxcclxuICAgIGVudHJpZXMgOiBbXVxyXG4gIH07XHJcbiAgYXN5bmNocm9ub3VzQ29udGludWF0aW9uUHJvcHMoYXN5bmNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBqb2JDb25maWd1cmF0aW9uR3JvdXAgPSB7XHJcbiAgICBpZCA6ICdqb2JDb25maWd1cmF0aW9uJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdKb2IgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllcyA6IFtdLFxyXG4gICAgZW5hYmxlZDogaXNKb2JDb25maWdFbmFibGVkXHJcbiAgfTtcclxuICBqb2JDb25maWd1cmF0aW9uKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBleHRlcm5hbFRhc2tHcm91cCA9IHtcclxuICAgIGlkIDogJ2V4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24nLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0V4dGVybmFsIFRhc2sgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllcyA6IFtdLFxyXG4gICAgZW5hYmxlZDogaXNFeHRlcm5hbFRhc2tQcmlvcml0eUVuYWJsZWRcclxuICB9O1xyXG4gIGV4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24oZXh0ZXJuYWxUYXNrR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuXHJcbiAgdmFyIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cCA9IHtcclxuICAgIGlkOiAnY2FuZGlkYXRlU3RhcnRlckNvbmZpZ3VyYXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIGNhbmRpZGF0ZVN0YXJ0ZXIoY2FuZGlkYXRlU3RhcnRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGhpc3RvcnlUaW1lVG9MaXZlR3JvdXAgPSB7XHJcbiAgICBpZDogJ2hpc3RvcnlDb25maWd1cmF0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0hpc3RvcnkgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIGhpc3RvcnlUaW1lVG9MaXZlKGhpc3RvcnlUaW1lVG9MaXZlR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgdGFza2xpc3RHcm91cCA9IHtcclxuICAgIGlkOiAndGFza2xpc3QnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFza2xpc3QgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIHRhc2tsaXN0KHRhc2tsaXN0R3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgZG9jdW1lbnRhdGlvbkdyb3VwID0ge1xyXG4gICAgaWQ6ICdkb2N1bWVudGF0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RvY3VtZW50YXRpb24nKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuICBkb2N1bWVudGF0aW9uUHJvcHMoZG9jdW1lbnRhdGlvbkdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGdyb3VwcyA9IFtdO1xyXG4gIGdyb3Vwcy5wdXNoKGdlbmVyYWxHcm91cCk7XHJcbiAgY3VzdG9tRmllbGRzR3JvdXBzLmZvckVhY2goZnVuY3Rpb24oZ3JvdXApIHtcclxuICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICB9KTtcclxuICBncm91cHMucHVzaChkZXRhaWxzR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGV4dGVybmFsVGFza0dyb3VwKTtcclxuICBncm91cHMucHVzaChtdWx0aUluc3RhbmNlR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGFzeW5jR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCk7XHJcbiAgZ3JvdXBzLnB1c2goY2FuZGlkYXRlU3RhcnRlckdyb3VwKTtcclxuICBncm91cHMucHVzaChoaXN0b3J5VGltZVRvTGl2ZUdyb3VwKTtcclxuICBncm91cHMucHVzaCh0YXNrbGlzdEdyb3VwKTtcclxuICBncm91cHMucHVzaChkb2N1bWVudGF0aW9uR3JvdXApO1xyXG5cclxuICByZXR1cm4gZ3JvdXBzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVWYXJpYWJsZXNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIHZhcmlhYmxlc0dyb3VwID0ge1xyXG4gICAgaWQgOiAndmFyaWFibGVzJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdWYXJpYWJsZXMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuICB2YXJpYWJsZU1hcHBpbmcodmFyaWFibGVzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgdmFyaWFibGVzR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGb3Jtc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgZm9ybUdyb3VwID0ge1xyXG4gICAgaWQgOiAnZm9ybXMnLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0Zvcm1zJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgZm9ybVByb3BzKGZvcm1Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHJldHVybiBbXHJcbiAgICBmb3JtR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lcnNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBsaXN0ZW5lcnNHcm91cCA9IHtcclxuICAgIGlkIDogJ2xpc3RlbmVycycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lcnMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIG9wdGlvbnMgPSBsaXN0ZW5lclByb3BzKGxpc3RlbmVyc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRGV0YWlsc0dyb3VwID0ge1xyXG4gICAgaWQ6ICdsaXN0ZW5lci1kZXRhaWxzJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIGxhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJhbSA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGdldExpc3RlbmVyTGFiZWwocGFyYW0sIHRyYW5zbGF0ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbGlzdGVuZXJEZXRhaWxzKGxpc3RlbmVyRGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRmllbGRzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2xpc3RlbmVyLWZpZWxkcycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBJbmplY3Rpb24nKSxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGxpc3RlbmVyRmllbGRzKGxpc3RlbmVyRmllbGRzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgbGlzdGVuZXJzR3JvdXAsXHJcbiAgICBsaXN0ZW5lckRldGFpbHNHcm91cCxcclxuICAgIGxpc3RlbmVyRmllbGRzR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dE91dHB1dFRhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGlucHV0T3V0cHV0R3JvdXAgPSB7XHJcbiAgICBpZDogJ2lucHV0LW91dHB1dCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQYXJhbWV0ZXJzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcblxyXG4gIHZhciBvcHRpb25zID0gaW5wdXRPdXRwdXQoaW5wdXRPdXRwdXRHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwID0ge1xyXG4gICAgaWQ6ICdpbnB1dC1vdXRwdXQtcGFyYW1ldGVyJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcihlbGVtZW50LCBub2RlKTtcclxuICAgIH0sXHJcbiAgICBsYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcGFyYW0gPSBvcHRpb25zLmdldFNlbGVjdGVkUGFyYW1ldGVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRQYXJhbWV0ZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBpbnB1dE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGlucHV0T3V0cHV0R3JvdXAsXHJcbiAgICBpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdG9yVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBjb25uZWN0b3JEZXRhaWxzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2Nvbm5lY3Rvci1kZXRhaWxzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RldGFpbHMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgY29ubmVjdG9yRGV0YWlscyhjb25uZWN0b3JEZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgY29ubmVjdG9ySW5wdXRPdXRwdXRHcm91cCA9IHtcclxuICAgIGlkOiAnY29ubmVjdG9yLWlucHV0LW91dHB1dCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dC9PdXRwdXQnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIG9wdGlvbnMgPSBjb25uZWN0b3JJbnB1dE91dHB1dChjb25uZWN0b3JJbnB1dE91dHB1dEdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGNvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyR3JvdXAgPSB7XHJcbiAgICBpZDogJ2Nvbm5lY3Rvci1pbnB1dC1vdXRwdXQtcGFyYW1ldGVyJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcihlbGVtZW50LCBub2RlKTtcclxuICAgIH0sXHJcbiAgICBsYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcGFyYW0gPSBvcHRpb25zLmdldFNlbGVjdGVkUGFyYW1ldGVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRQYXJhbWV0ZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlcihjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGNvbm5lY3RvckRldGFpbHNHcm91cCxcclxuICAgIGNvbm5lY3RvcklucHV0T3V0cHV0R3JvdXAsXHJcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmllbGRJbmplY3Rpb25zVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZmllbGRHcm91cCA9IHtcclxuICAgIGlkOiAnZmllbGQtaW5qZWN0aW9ucy1wcm9wZXJ0aWVzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ZpZWxkIEluamVjdGlvbnMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgZmllbGRJbmplY3Rpb25zKGZpZWxkR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgZmllbGRHcm91cFxyXG4gIF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgcHJvcGVydGllc0dyb3VwID0ge1xyXG4gICAgaWQgOiAnZXh0ZW5zaW9uRWxlbWVudHMtcHJvcGVydGllcycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9wZXJ0aWVzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgcHJvcGVydGllcyhwcm9wZXJ0aWVzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgcHJvcGVydGllc0dyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuLy8gYWN0aXZpdGkgUHJvcGVydGllcyBQcm92aWRlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuLyoqXHJcbiAqIEEgcHJvcGVydGllcyBwcm92aWRlciBmb3IgYWN0aXZpdGkgcmVsYXRlZCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcclxuICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGVzfSBlbGVtZW50VGVtcGxhdGVzXHJcbiAqIEBwYXJhbSB7VHJhbnNsYXRlfSB0cmFuc2xhdGVcclxuICovXHJcbmZ1bmN0aW9uIEFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyKFxyXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgYnBtbkZhY3RvcnksXHJcbiAgICBlbGVtZW50UmVnaXN0cnksIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBQcm9wZXJ0aWVzQWN0aXZhdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICB0aGlzLmdldFRhYnMgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcblxyXG4gICAgdmFyIGdlbmVyYWxUYWIgPSB7XHJcbiAgICAgIGlkOiAnZ2VuZXJhbCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxyXG4gICAgICAgIGVsZW1lbnQsIGNhbnZhcywgYnBtbkZhY3RvcnksXHJcbiAgICAgICAgZWxlbWVudFJlZ2lzdHJ5LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB2YXJpYWJsZXNUYWIgPSB7XHJcbiAgICAgIGlkOiAndmFyaWFibGVzJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGVzJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlVmFyaWFibGVzVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGZvcm1zVGFiID0ge1xyXG4gICAgICBpZDogJ2Zvcm1zJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRm9ybXMnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVGb3Jtc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBsaXN0ZW5lcnNUYWIgPSB7XHJcbiAgICAgIGlkOiAnbGlzdGVuZXJzJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnTGlzdGVuZXJzJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlTGlzdGVuZXJzVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSksXHJcbiAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gIWV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpXHJcbiAgICAgICAgICB8fCAoIWlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKVxyXG4gICAgICAgICAgJiYgZXZlbnREZWZpbml0aW9uSGVscGVyLmdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCkpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpbnB1dE91dHB1dFRhYiA9IHtcclxuICAgICAgaWQ6ICdpbnB1dC1vdXRwdXQnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dC9PdXRwdXQnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVJbnB1dE91dHB1dFRhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb25uZWN0b3JUYWIgPSB7XHJcbiAgICAgIGlkOiAnY29ubmVjdG9yJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlQ29ubmVjdG9yVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSksXHJcbiAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIGJvICYmIGltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUoYm8pID09PSAnY29ubmVjdG9yJztcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgZmllbGRJbmplY3Rpb25zVGFiID0ge1xyXG4gICAgICBpZDogJ2ZpZWxkLWluamVjdGlvbnMnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBJbmplY3Rpb25zJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlRmllbGRJbmplY3Rpb25zVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGV4dGVuc2lvbnNUYWIgPSB7XHJcbiAgICAgIGlkOiAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFeHRlbnNpb25zJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlRXh0ZW5zaW9uRWxlbWVudHNHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBnZW5lcmFsVGFiLFxyXG4gICAgICB2YXJpYWJsZXNUYWIsXHJcbiAgICAgIGNvbm5lY3RvclRhYixcclxuICAgICAgZm9ybXNUYWIsXHJcbiAgICAgIGxpc3RlbmVyc1RhYixcclxuICAgICAgaW5wdXRPdXRwdXRUYWIsXHJcbiAgICAgIGZpZWxkSW5qZWN0aW9uc1RhYixcclxuICAgICAgZXh0ZW5zaW9uc1RhYlxyXG4gICAgXTtcclxuICB9O1xyXG5cclxufVxyXG5cclxuQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXIuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnLFxyXG4gICdicG1uRmFjdG9yeScsXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2VsZW1lbnRUZW1wbGF0ZXMnLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07XHJcblxyXG5pbmhlcml0cyhBY3Rpdml0aVByb3BlcnRpZXNQcm92aWRlciwgUHJvcGVydGllc0FjdGl2YXRvcik7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBpbnB1dCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHRoZSBnaXZlblxyXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgc2NyaXB0Rm9ybWF0ID0gYmluZGluZy5zY3JpcHRGb3JtYXQsXHJcbiAgICAgIHBhcmFtZXRlclZhbHVlLFxyXG4gICAgICBwYXJhbWV0ZXJEZWZpbml0aW9uO1xyXG5cclxuICBpZiAoc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICBwYXJhbWV0ZXJEZWZpbml0aW9uID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpTY3JpcHQnLCB7XHJcbiAgICAgIHNjcmlwdEZvcm1hdDogc2NyaXB0Rm9ybWF0LFxyXG4gICAgICB2YWx1ZTogdmFsdWVcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBwYXJhbWV0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6SW5wdXRQYXJhbWV0ZXInLCB7XHJcbiAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXHJcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXHJcbiAgICBkZWZpbml0aW9uOiBwYXJhbWV0ZXJEZWZpbml0aW9uXHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXI7XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBvdXRwdXQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW5cclxuICogYmluZGluZyBhbmQgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBzY3JpcHRGb3JtYXQgPSBiaW5kaW5nLnNjcmlwdEZvcm1hdCxcclxuICAgICAgcGFyYW1ldGVyVmFsdWUsXHJcbiAgICAgIHBhcmFtZXRlckRlZmluaXRpb247XHJcblxyXG4gIGlmIChzY3JpcHRGb3JtYXQpIHtcclxuICAgIHBhcmFtZXRlckRlZmluaXRpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlNjcmlwdCcsIHtcclxuICAgICAgc2NyaXB0Rm9ybWF0OiBzY3JpcHRGb3JtYXQsXHJcbiAgICAgIHZhbHVlOiBiaW5kaW5nLnNvdXJjZVxyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHBhcmFtZXRlclZhbHVlID0gYmluZGluZy5zb3VyY2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpPdXRwdXRQYXJhbWV0ZXInLCB7XHJcbiAgICBuYW1lOiB2YWx1ZSxcclxuICAgIHZhbHVlOiBwYXJhbWV0ZXJWYWx1ZSxcclxuICAgIGRlZmluaXRpb246IHBhcmFtZXRlckRlZmluaXRpb25cclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlT3V0cHV0UGFyYW1ldGVyID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGkgcHJvcGVydHkgZnJvbSB0aGUgZ2l2ZW4gYmluZGluZy5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aVByb3BlcnR5KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlByb3BlcnR5Jywge1xyXG4gICAgbmFtZTogYmluZGluZy5uYW1lLFxyXG4gICAgdmFsdWU6IHZhbHVlIHx8ICcnXHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnR5O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGk6aW4gZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgdmFyIHByb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aUluT3V0QXR0cnMoYmluZGluZywgdmFsdWUpO1xyXG5cclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbicsIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluID0gY3JlYXRlQWN0aXZpdGlJbjtcclxuXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOmluIHdpdGggYnVzaW5lc3NLZXkgZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbicsIHtcclxuICAgIGJ1c2luZXNzS2V5OiB2YWx1ZVxyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5ID0gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleTtcclxuXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOm91dCBlbGVtZW50IGZyb20gZ2l2ZW4gYmluZGluZy5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aU91dChiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgcHJvcGVydGllcyA9IGNyZWF0ZUFjdGl2aXRpSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSk7XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOk91dCcsIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aU91dCA9IGNyZWF0ZUFjdGl2aXRpT3V0O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXIgZWxlbWVudCBjb250YWluaW5nIGFuIGlubGluZSBzY3JpcHQgZnJvbSBnaXZlbiBiaW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIHNjcmlwdEZvcm1hdCA9IGJpbmRpbmcuc2NyaXB0Rm9ybWF0LFxyXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSxcclxuICAgICAgcGFyYW1ldGVyRGVmaW5pdGlvbjtcclxuXHJcbiAgaWYgKHNjcmlwdEZvcm1hdCkge1xyXG4gICAgcGFyYW1ldGVyRGVmaW5pdGlvbiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6U2NyaXB0Jywge1xyXG4gICAgICBzY3JpcHRGb3JtYXQ6IHNjcmlwdEZvcm1hdCxcclxuICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgcGFyYW1ldGVyVmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOkV4ZWN1dGlvbkxpc3RlbmVyJywge1xyXG4gICAgZXZlbnQ6IGJpbmRpbmcuZXZlbnQsXHJcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXHJcbiAgICBzY3JpcHQ6IHBhcmFtZXRlckRlZmluaXRpb25cclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lclNjcmlwdCA9IGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOmZpZWxkIGVsZW1lbnQgY29udGFpbmluZyBzdHJpbmcgb3IgZXhwcmVzc2lvbiBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgREVGQVVMVF9QUk9QUyA9IHtcclxuICAgICdzdHJpbmcnOiB1bmRlZmluZWQsXHJcbiAgICAnZXhwcmVzc2lvbic6IHVuZGVmaW5lZCxcclxuICAgICduYW1lJzogdW5kZWZpbmVkXHJcbiAgfTtcclxuXHJcbiAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUZBVUxUX1BST1BTKTtcclxuXHJcbiAgaWYgKCFiaW5kaW5nLmV4cHJlc3Npb24pIHtcclxuICAgIHByb3BzLnN0cmluZyA9IHZhbHVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBwcm9wcy5leHByZXNzaW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByb3BzLm5hbWUgPSBiaW5kaW5nLm5hbWU7XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOkZpZWxkJywgcHJvcHMpO1xyXG59XHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24gPSBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBwcm9wZXJ0aWVzIGZvciBhY3Rpdml0aTppbiBhbmQgYWN0aXZpdGk6b3V0IHR5cGVzLlxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbk91dEF0dHJzKGJpbmRpbmcsIHZhbHVlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzID0ge307XHJcblxyXG4gIC8vIGFjdGl2aXRpOmluIHNvdXJjZShFeHByZXNzaW9uKSB0YXJnZXRcclxuICBpZiAoYmluZGluZy50YXJnZXQpIHtcclxuXHJcbiAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IGJpbmRpbmcudGFyZ2V0O1xyXG5cclxuICAgIGlmIChiaW5kaW5nLmV4cHJlc3Npb24pIHtcclxuICAgICAgcHJvcGVydGllcy5zb3VyY2VFeHByZXNzaW9uID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH0gZWxzZVxyXG5cclxuICAvLyBhY3Rpdml0aTooaW58b3V0KSB2YXJpYWJsZXMgbG9jYWxcclxuICBpZiAoYmluZGluZy52YXJpYWJsZXMpIHtcclxuICAgIHByb3BlcnRpZXMudmFyaWFibGVzID0gJ2FsbCc7XHJcblxyXG4gICAgaWYgKGJpbmRpbmcudmFyaWFibGVzID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYWN0aXZpdGk6b3V0IHNvdXJjZShFeHByZXNzaW9uKSB0YXJnZXRcclxuICBlbHNlIHtcclxuICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdmFsdWU7XHJcblxyXG4gICAgWyAnc291cmNlJywgJ3NvdXJjZUV4cHJlc3Npb24nIF0uZm9yRWFjaChmdW5jdGlvbihrKSB7XHJcbiAgICAgIGlmIChiaW5kaW5nW2tdKSB7XHJcbiAgICAgICAgcHJvcGVydGllc1trXSA9IGJpbmRpbmdba107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcclxuXHJcbnZhciBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4vSGVscGVyJykuZ2V0VGVtcGxhdGU7XHJcblxyXG52YXIgUHJvcGVydGllc0FjdGl2YXRvciA9IHJlcXVpcmUoJy4uLy4uLy4uL1Byb3BlcnRpZXNBY3RpdmF0b3InKTtcclxuXHJcbnZhciBISUdIRVJfUFJJT1JJVFkgPSAxMTAwO1xyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgdGVtcGxhdGUgdmlzaWJpbGl0eSBzZXR0aW5ncy5cclxuICpcclxuICogQ29udHJvbGxlZCB1c2luZyBgZW50cmllc1Zpc2libGVgIG9uIHRlbXBsYXRlIGNvbmZpZyBvYmplY3Q6XHJcbiAqXHJcbiAqIGBgYGpzb25cclxuICogICAgIFwiZW50cmllc1Zpc2libGVcIjoge1xyXG4gKiAgICAgICBcIl9hbGxcIjogdHJ1ZXxmYWxzZSxcclxuICogICAgICAgXCJlbnRyeU5hbWVcIjogdHJ1ZXxmYWxzZSxcclxuICogICAgICAgLi4uXHJcbiAqICAgICB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcclxuICovXHJcbmZ1bmN0aW9uIEN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcihldmVudEJ1cywgZWxlbWVudFRlbXBsYXRlcykge1xyXG4gIFByb3BlcnRpZXNBY3RpdmF0b3IuY2FsbCh0aGlzLCBldmVudEJ1cywgSElHSEVSX1BSSU9SSVRZKTtcclxuXHJcbiAgdGhpcy5pc0VudHJ5VmlzaWJsZSA9IGZ1bmN0aW9uKGVudHJ5LCBlbGVtZW50KSB7XHJcblxyXG4gICAgdmFyIHRlbXBsYXRlID0gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcyk7XHJcblxyXG4gICAgaWYgKHRlbXBsYXRlICYmICFpc0VudHJ5VmlzaWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB0aGlzLmlzUHJvcGVydHlFZGl0YWJsZSA9IGZ1bmN0aW9uKGVudHJ5LCBwcm9wZXJ0eU5hbWUsIGVsZW1lbnQpIHtcclxuXHJcbiAgICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgICBpZiAodGVtcGxhdGUgJiYgIWlzRW50cnlFZGl0YWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5DdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnIF07XHJcblxyXG5pbmhlcml0cyhDdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IsIFByb3BlcnRpZXNBY3RpdmF0b3IpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3I7XHJcblxyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxudmFyIENVU1RPTV9QUk9QRVJUSUVTX1BBVFRFUk4gPSAvXmN1c3RvbS0vO1xyXG5cclxudmFyIERFRkFVTFRfRU5UUklFU19WSVNJQkxFID0ge1xyXG4gIF9hbGw6IGZhbHNlLFxyXG4gIGlkOiB0cnVlLFxyXG4gIG5hbWU6IHRydWVcclxufTtcclxuXHJcbmZ1bmN0aW9uIGlzQ3VzdG9tRW50cnkoZW50cnkpIHtcclxuICByZXR1cm4gQ1VTVE9NX1BST1BFUlRJRVNfUEFUVEVSTi50ZXN0KGVudHJ5LmlkKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFbnRyeVZpc2libGUoZW50cnksIHRlbXBsYXRlKSB7XHJcblxyXG4gIHZhciBlbnRyeUlkID0gZW50cnkuaWQ7XHJcblxyXG4gIGlmIChlbnRyeUlkID09PSAnZWxlbWVudFRlbXBsYXRlLWNob29zZXInIHx8IGlzQ3VzdG9tRW50cnkoZW50cnkpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhciBlbnRyaWVzVmlzaWJsZSA9IHRlbXBsYXRlLmVudHJpZXNWaXNpYmxlIHx8IERFRkFVTFRfRU5UUklFU19WSVNJQkxFO1xyXG5cclxuICBpZiAodHlwZW9mIGVudHJpZXNWaXNpYmxlID09PSAnYm9vbGVhbicpIHtcclxuICAgIHJldHVybiBlbnRyaWVzVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHZhciBkZWZhdWx0VmlzaWJsZSA9IGVudHJpZXNWaXNpYmxlLl9hbGwgfHwgZmFsc2UsXHJcbiAgICAgIGVudHJ5VmlzaWJsZSA9IGVudHJpZXNWaXNpYmxlW2VudHJ5SWRdO1xyXG5cclxuICAvLyBkID0gdHJ1ZSwgZSA9IGZhbHNlID0+IGZhbHNlXHJcbiAgLy8gZCA9IGZhbHNlLCBlID0gdHJ1ZSA9PiB0cnVlXHJcbiAgLy8gZCA9IGZhbHNlLCBlID0gZmFsc2VcclxuICByZXR1cm4gKFxyXG4gICAgKGRlZmF1bHRWaXNpYmxlID09PSB0cnVlICYmIGVudHJ5VmlzaWJsZSAhPT0gZmFsc2UpIHx8XHJcbiAgICAoZGVmYXVsdFZpc2libGUgPT09IGZhbHNlICYmIGVudHJ5VmlzaWJsZSA9PT0gdHJ1ZSlcclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VudHJ5RWRpdGFibGUoZW50cnksIHRlbXBsYXRlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGlzQ3VzdG9tRW50cnkoZW50cnkpKSB7XHJcbiAgICBwcm9wZXJ0eSA9IGdldFByb3BlcnR5KHRlbXBsYXRlLCBlbnRyeSk7XHJcblxyXG4gICAgcmV0dXJuIHByb3BlcnR5ICYmIHByb3BlcnR5LmVkaXRhYmxlICE9PSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eSh0ZW1wbGF0ZSwgZW50cnkpIHtcclxuXHJcbiAgdmFyIGluZGV4O1xyXG4gIHZhciBpZHggPSBlbnRyeS5pZC5yZXBsYWNlKCdjdXN0b20tJyArIHRlbXBsYXRlLmlkICsgJy0nLCAnJyk7XHJcbiAgaWYgKGlkeC5pbmRleE9mKCctJykgIT09IC0xKSB7XHJcbiAgICB2YXIgaW5kZXhlcyA9IGlkeC5zcGxpdCgnLScpO1xyXG4gICAgaWYgKGluZGV4ZXMubGVuZ3RoID09IDIpIHtcclxuICAgICAgdmFyIHNjb3BlTmFtZSA9IGluZGV4ZXNbMF0ucmVwbGFjZSgvXy9nLCAnOicpO1xyXG4gICAgICBpbmRleCA9IHBhcnNlSW50KGluZGV4ZXNbMV0sIDEwKTtcclxuICAgICAgaWYgKHNjb3BlTmFtZSAmJiAhaXNOYU4oaW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdLnByb3BlcnRpZXNbaW5kZXhdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGluZGV4ID0gcGFyc2VJbnQoaWR4LCAxMCk7XHJcbiAgICBpZiAoIWlzTmFOKGluZGV4KSkge1xyXG4gICAgICByZXR1cm4gdGVtcGxhdGUucHJvcGVydGllc1tpbmRleF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBleHRyYWN0IHByb3BlcnR5IGluZGV4IGZvciBlbnRyeSA8JyArIGVudHJ5LmlkICsgJz4nKTtcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgdmFsdWVzID0gcmVxdWlyZSgnbG9kYXNoL3ZhbHVlcycpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBndXkga25vd2luZyBhbGwgY29uZmlndXJlZCBlbGVtZW50IHRlbXBsYXRlcy5cclxuICpcclxuICogVGhpcyByZWdpc3RyeSB3b24ndCB2YWxpZGF0ZS4gVXNlIHRoZSB7QGxpbmsgVmFsaWRhdG9yfVxyXG4gKiB0byB2ZXJpZnkgYSB0ZW1wbGF0ZSBpcyB2YWxpZCBwcmlvciB0byBhZGRpbmcgaXQgdG9cclxuICogdGhpcyByZWdpc3RyeS5cclxuICovXHJcbmZ1bmN0aW9uIEVsZW1lbnRUZW1wbGF0ZXMoKSB7XHJcblxyXG4gIHRoaXMuX3RlbXBsYXRlcyA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBrbm93biBlbGVtZW50IHRlbXBsYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gZGVzY3JpcHRvcnNcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0VsZW1lbnRUZW1wbGF0ZXN9XHJcbiAgICovXHJcbiAgdGhpcy5zZXQgPSBmdW5jdGlvbihkZXNjcmlwdG9ycykge1xyXG5cclxuICAgIHZhciB0ZW1wbGF0ZXMgPSB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcclxuXHJcbiAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGRlc2NyaXB0b3IpIHtcclxuICAgICAgdGVtcGxhdGVzW2Rlc2NyaXB0b3IuaWRdID0gZGVzY3JpcHRvcjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0ZW1wbGF0ZSBkZXNjcmlwdG9yIHdpdGggZ2l2ZW4gaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gaWRcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1RlbXBsYXRlRGVzY3JpcHRvcn1cclxuICAgKi9cclxuICB0aGlzLmdldCA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW2lkXTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYWxsIGtub3duIHRlbXBsYXRlIGRlc2NyaXB0b3JzLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn1cclxuICAgKi9cclxuICB0aGlzLmdldEFsbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHZhbHVlcyh0aGlzLl90ZW1wbGF0ZXMpO1xyXG4gIH07XHJcblxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRUZW1wbGF0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFZhbGlkYXRvciA9IHJlcXVpcmUoJy4vVmFsaWRhdG9yJyk7XHJcblxyXG4vKipcclxuICogVGhlIGd1eSByZXNwb25zaWJsZSBmb3IgdGVtcGxhdGUgbG9hZGluZy5cclxuICpcclxuICogUHJvdmlkZSB0aGUgYWN0dWFsIHRlbXBsYXRlcyB2aWEgdGhlIGBjb25maWcuZWxlbWVudFRlbXBsYXRlc2AuXHJcbiAqXHJcbiAqIFRoYXQgY29uZmlndXJhdGlvbiBjYW4gZWl0aGVyIGJlIGFuIGFycmF5IG9mIHRlbXBsYXRlXHJcbiAqIGRlc2NyaXB0b3JzIG9yIGEgbm9kZSBzdHlsZSBjYWxsYmFjayB0byByZXRyaWV2ZVxyXG4gKiB0aGUgdGVtcGxhdGVzIGFzeW5jaHJvbm91c2x5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5PFRlbXBsYXRlRGVzY3JpcHRvcj58RnVuY3Rpb259IGxvYWRUZW1wbGF0ZXNcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGVzfSBlbGVtZW50VGVtcGxhdGVzXHJcbiAqL1xyXG5mdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzTG9hZGVyKGxvYWRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzKSB7XHJcbiAgdGhpcy5fbG9hZFRlbXBsYXRlcyA9IGxvYWRUZW1wbGF0ZXM7XHJcbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcclxuICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcclxuXHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLnJlbG9hZCgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXI7XHJcblxyXG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyLiRpbmplY3QgPSBbXHJcbiAgJ2NvbmZpZy5lbGVtZW50VGVtcGxhdGVzJyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdlbGVtZW50VGVtcGxhdGVzJ1xyXG5dO1xyXG5cclxuXHJcbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHZhciBsb2FkVGVtcGxhdGVzID0gdGhpcy5fbG9hZFRlbXBsYXRlcztcclxuXHJcbiAgLy8gbm8gdGVtcGxhdGVzIHNwZWNpZmllZFxyXG4gIGlmICh0eXBlb2YgbG9hZFRlbXBsYXRlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIHRlbXBsYXRlIGxvYWRlciBmdW5jdGlvbiBzcGVjaWZpZWRcclxuICBpZiAodHlwZW9mIGxvYWRUZW1wbGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcclxuXHJcbiAgICByZXR1cm4gbG9hZFRlbXBsYXRlcyhmdW5jdGlvbihlcnIsIHRlbXBsYXRlcykge1xyXG5cclxuICAgICAgaWYgKGVycikge1xyXG4gICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlRXJyb3JzKFsgZXJyIF0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLnNldFRlbXBsYXRlcyh0ZW1wbGF0ZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyB0ZW1wbGF0ZXMgYXJyYXkgc3BlY2lmaWVkXHJcbiAgaWYgKGxvYWRUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRUZW1wbGF0ZXMobG9hZFRlbXBsYXRlcyk7XHJcbiAgfVxyXG5cclxufTtcclxuXHJcbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnNldFRlbXBsYXRlcyA9IGZ1bmN0aW9uKHRlbXBsYXRlcykge1xyXG5cclxuICB2YXIgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXM7XHJcblxyXG4gIHZhciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKCkuYWRkQWxsKHRlbXBsYXRlcyk7XHJcblxyXG4gIHZhciBlcnJvcnMgPSB2YWxpZGF0b3IuZ2V0RXJyb3JzKCksXHJcbiAgICAgIHZhbGlkVGVtcGxhdGVzID0gdmFsaWRhdG9yLmdldFZhbGlkVGVtcGxhdGVzKCk7XHJcblxyXG4gIGVsZW1lbnRUZW1wbGF0ZXMuc2V0KHZhbGlkVGVtcGxhdGVzKTtcclxuXHJcbiAgaWYgKGVycm9ycy5sZW5ndGgpIHtcclxuICAgIHRoaXMudGVtcGxhdGVFcnJvcnMoZXJyb3JzKTtcclxuICB9XHJcblxyXG4gIHRoaXMudGVtcGxhdGVzQ2hhbmdlZCgpO1xyXG59O1xyXG5cclxuRWxlbWVudFRlbXBsYXRlc0xvYWRlci5wcm90b3R5cGUudGVtcGxhdGVzQ2hhbmdlZCA9IGZ1bmN0aW9uKCkge1xyXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2VsZW1lbnRUZW1wbGF0ZXMuY2hhbmdlZCcpO1xyXG59O1xyXG5cclxuRWxlbWVudFRlbXBsYXRlc0xvYWRlci5wcm90b3R5cGUudGVtcGxhdGVFcnJvcnMgPSBmdW5jdGlvbihlcnJvcnMpIHtcclxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmVycm9ycycsIHtcclxuICAgIGVycm9yczogZXJyb3JzXHJcbiAgfSk7XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnk7XHJcblxyXG52YXIgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG5cclxudmFyIFRFTVBMQVRFX0FUVFIgPSAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQlBNTiAyLjAgZXh0ZW5zaW9uIGF0dHJpYnV0ZSBuYW1lIHVuZGVyXHJcbiAqIHdoaWNoIHRoZSBlbGVtZW50IHRlbXBsYXRlIGlzIHN0b3JlZC5cclxuICpcclxuICogQHR5cGUge1N0cmluZ31cclxuICovXHJcbm1vZHVsZS5leHBvcnRzLlRFTVBMQVRFX0FUVFIgPSBURU1QTEFURV9BVFRSO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgaWQgZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ31cclxuICovXHJcbmZ1bmN0aW9uIGdldFRlbXBsYXRlSWQoZWxlbWVudCkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKGJvKSB7XHJcbiAgICByZXR1cm4gYm8uZ2V0KFRFTVBMQVRFX0FUVFIpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZ2V0VGVtcGxhdGVJZCA9IGdldFRlbXBsYXRlSWQ7XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvZiBhIGdpdmVuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcclxuICpcclxuICogQHJldHVybiB7VGVtcGxhdGVEZWZpbml0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xyXG4gIHZhciBpZCA9IGdldFRlbXBsYXRlSWQoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiBpZCAmJiBlbGVtZW50VGVtcGxhdGVzLmdldChpZCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldFRlbXBsYXRlID0gZ2V0VGVtcGxhdGU7XHJcblxyXG4vKipcclxuICogR2V0IGRlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtUZW1wbGF0ZURlZmluaXRpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xyXG5cclxuICAvLyByZXR1cm4gZmlyc3QgZGVmYXVsdCB0ZW1wbGF0ZSwgaWYgYW55IGV4aXN0c1xyXG4gIHJldHVybiAoXHJcbiAgICBlbGVtZW50VGVtcGxhdGVzLmdldEFsbCgpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBpc0FueShlbGVtZW50LCB0LmFwcGxpZXNUbykgJiYgdC5pc0RlZmF1bHQ7XHJcbiAgICB9KVxyXG4gIClbMF07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldERlZmF1bHRUZW1wbGF0ZSA9IGdldERlZmF1bHRUZW1wbGF0ZTtcclxuXHJcblxyXG4vKipcclxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXHJcbiAqIEJQTU4gZWxlbWVudCwgZGlhZ3JhbSBlbGVtZW50IG9yIEV4dGVuc2lvbkVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBmaW5kRXh0ZW5zaW9uKGVsZW1lbnQsIHR5cGUpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICBpZiAoaXMoYm8sICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykpIHtcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm87XHJcbiAgfSBlbHNlIHtcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZXh0ZW5zaW9uRWxlbWVudHM7XHJcbiAgfVxyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGZ1bmN0aW9uKGUpIHtcclxuICAgIHJldHVybiBpcyhlLCB0eXBlKTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZEV4dGVuc2lvbiA9IGZpbmRFeHRlbnNpb247XHJcblxyXG5cclxuZnVuY3Rpb24gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgdHlwZXMpIHtcclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJykuZmlsdGVyKGZ1bmN0aW9uKGUpIHtcclxuICAgIHJldHVybiBpc0FueShlLCB0eXBlcyk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRFeHRlbnNpb25zID0gZmluZEV4dGVuc2lvbnM7XHJcblxyXG5cclxuZnVuY3Rpb24gZmluZEFjdGl2aXRpSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xyXG5cclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgdmFyIG1hdGNoZXI7XHJcblxyXG4gIGlmIChiaW5kaW5nLnR5cGUgPT09ICdhY3Rpdml0aTppbicpIHtcclxuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgIHJldHVybiBpcyhlLCAnYWN0aXZpdGk6SW4nKSAmJiBpc0luT3V0KGUsIGJpbmRpbmcpO1xyXG4gICAgfTtcclxuICB9IGVsc2VcclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6b3V0Jykge1xyXG4gICAgbWF0Y2hlciA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgcmV0dXJuIGlzKGUsICdhY3Rpdml0aTpPdXQnKSAmJiBpc0luT3V0KGUsIGJpbmRpbmcpO1xyXG4gICAgfTtcclxuICB9IGVsc2VcclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknKSB7XHJcbiAgICBtYXRjaGVyID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICByZXR1cm4gaXMoZSwgJ2FjdGl2aXRpOkluJykgJiYgJ2J1c2luZXNzS2V5JyBpbiBlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIG1hdGNoZXIpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5maW5kQWN0aXZpdGlJbk91dCA9IGZpbmRBY3Rpdml0aUluT3V0O1xyXG5cclxuZnVuY3Rpb24gZmluZEFjdGl2aXRpUHJvcGVydHkoYWN0aXZpdGlQcm9wZXJ0aWVzLCBiaW5kaW5nKSB7XHJcbiAgcmV0dXJuIGZpbmQoYWN0aXZpdGlQcm9wZXJ0aWVzLmdldCgndmFsdWVzJyksIGZ1bmN0aW9uKHApIHtcclxuICAgIHJldHVybiBwLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZEFjdGl2aXRpUHJvcGVydHkgPSBmaW5kQWN0aXZpdGlQcm9wZXJ0eTtcclxuXHJcblxyXG5mdW5jdGlvbiBmaW5kSW5wdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcclxuICB2YXIgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyk7XHJcblxyXG4gIHJldHVybiBmaW5kKHBhcmFtZXRlcnMsIGZ1bmN0aW9uKHApIHtcclxuICAgIHJldHVybiBwLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZElucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcclxuICB2YXIgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xyXG5cclxuICByZXR1cm4gZmluZChwYXJhbWV0ZXJzLCBmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgdmFsdWUgPSBwLnZhbHVlO1xyXG5cclxuICAgIGlmICghYmluZGluZy5zY3JpcHRGb3JtYXQpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlID09PSBiaW5kaW5nLnNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHAuZGVmaW5pdGlvbjtcclxuXHJcbiAgICBpZiAoIWRlZmluaXRpb24gfHwgYmluZGluZy5zY3JpcHRGb3JtYXQgIT09IGRlZmluaXRpb24uc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVmaW5pdGlvbi52YWx1ZSA9PT0gYmluZGluZy5zb3VyY2U7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRPdXRwdXRQYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoYm8sICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykpIHtcclxuICAgIHJldHVybiBibztcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xyXG5cclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6aW4nKSB7XHJcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHRhcmdldCBhdHRyaWJ1dGVcclxuICAgIGlmIChiaW5kaW5nLnRhcmdldCkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC50YXJnZXQgPT09IGJpbmRpbmcudGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gJ2FjdGl2aXRpOm91dCcpIHtcclxuICAgIC8vIGZpbmQgYmFzZWQgb24gc291cmNlIC8gc291cmNlRXhwcmVzc2lvblxyXG4gICAgaWYgKGJpbmRpbmcuc291cmNlKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnNvdXJjZSA9PT0gYmluZGluZy5zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJpbmRpbmcuc291cmNlRXhwcmVzc2lvbikge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5zb3VyY2VFeHByZXNzaW9uID09PSBiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmaW5kIGJhc2VkIHZhcmlhYmxlcyAvIGxvY2FsIGNvbWJpbmF0aW9uXHJcbiAgaWYgKGJpbmRpbmcudmFyaWFibGVzKSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC52YXJpYWJsZXMgPT09ICdhbGwnICYmIChcclxuICAgICAgYmluZGluZy52YXJpYWJsZXMgIT09ICdsb2NhbCcgfHwgZWxlbWVudC5sb2NhbFxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheScpO1xyXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3QnKTtcclxuXHJcbnZhciBEUk9QRE9XTl9UWVBFID0gJ0Ryb3Bkb3duJztcclxuXHJcbnZhciBWQUxJRF9UWVBFUyA9IFsgJ1N0cmluZycsICdUZXh0JywgJ0Jvb2xlYW4nLCAnSGlkZGVuJywgRFJPUERPV05fVFlQRSBdO1xyXG5cclxudmFyIFBST1BFUlRZX1RZUEUgPSAncHJvcGVydHknLFxyXG4gICAgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSA9ICdhY3Rpdml0aTpwcm9wZXJ0eScsXHJcbiAgICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTppbnB1dFBhcmFtZXRlcicsXHJcbiAgICBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnYWN0aXZpdGk6b3V0cHV0UGFyYW1ldGVyJyxcclxuICAgIEFDVElWSVRJX0lOX1RZUEUgPSAnYWN0aXZpdGk6aW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX1RZUEUgPSAnYWN0aXZpdGk6b3V0JyxcclxuICAgIEFDVElWSVRJX0lOX0JVU0lORVNTX0tFWV9UWVBFID0gJ2FjdGl2aXRpOmluOmJ1c2luZXNzS2V5JyxcclxuICAgIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUiA9ICdhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lcicsXHJcbiAgICBBQ1RJVklUSV9GSUVMRCA9ICdhY3Rpdml0aTpmaWVsZCc7XHJcblxyXG52YXIgVkFMSURfQklORElOR19UWVBFUyA9IFtcclxuICBQUk9QRVJUWV9UWVBFLFxyXG4gIEFDVElWSVRJX1BST1BFUlRZX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUsXHJcbiAgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSLFxyXG4gIEFDVElWSVRJX0ZJRUxEXHJcbl07XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgZWxlbWVudCB0ZW1wbGF0ZSB2YWxpZGF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBWYWxpZGF0b3IoKSB7XHJcblxyXG4gIHRoaXMuX3RlbXBsYXRlc0J5SWQgPSB7fTtcclxuXHJcbiAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMgPSBbXTtcclxuICB0aGlzLl9lcnJvcnMgPSBbXTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgdGhlIHRlbXBsYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gdGVtcGxhdGVzXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3J9IHNlbGZcclxuICAgKi9cclxuICB0aGlzLmFkZEFsbCA9IGZ1bmN0aW9uKHRlbXBsYXRlcykge1xyXG5cclxuICAgIGlmICghaXNBcnJheSh0ZW1wbGF0ZXMpKSB7XHJcbiAgICAgIHRoaXMuX2xvZ0Vycm9yKCd0ZW1wbGF0ZXMgbXVzdCBiZSBbXScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGVtcGxhdGVzLmZvckVhY2godGhpcy5hZGQsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgZ2l2ZW4gZWxlbWVudCB0ZW1wbGF0ZSwgaWYgaXQgaXMgdmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1ZhbGlkYXRvcn0gc2VsZlxyXG4gICAqL1xyXG4gIHRoaXMuYWRkID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcclxuXHJcbiAgICB2YXIgZXJyID0gdGhpcy5fdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgaWYgKCFlcnIpIHtcclxuICAgICAgdGhpcy5fdGVtcGxhdGVzQnlJZFt0ZW1wbGF0ZS5pZF0gPSB0ZW1wbGF0ZTtcclxuXHJcbiAgICAgIHRoaXMuX3ZhbGlkVGVtcGxhdGVzLnB1c2godGVtcGxhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Vycm9yfSB2YWxpZGF0aW9uIGVycm9yLCBpZiBhbnlcclxuICAgKi9cclxuICB0aGlzLl92YWxpZGF0ZVRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcclxuXHJcbiAgICB2YXIgZXJyLFxyXG4gICAgICAgIGlkID0gdGVtcGxhdGUuaWQsXHJcbiAgICAgICAgYXBwbGllc1RvID0gdGVtcGxhdGUuYXBwbGllc1RvLFxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLFxyXG4gICAgICAgIHNjb3BlcyA9IHRlbXBsYXRlLnNjb3BlcztcclxuXHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignbWlzc2luZyB0ZW1wbGF0ZSBpZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpZCBpbiB0aGlzLl90ZW1wbGF0ZXNCeUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcigndGVtcGxhdGUgaWQgPCcgKyBpZCArICc+IGFscmVhZHkgdXNlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNBcnJheShhcHBsaWVzVG8pKSB7XHJcbiAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKCdtaXNzaW5nIGFwcGxpZXNUbz1bXScsIHRlbXBsYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzQXJyYXkocHJvcGVydGllcykpIHtcclxuICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoJ21pc3NpbmcgcHJvcGVydGllcz1bXScsIHRlbXBsYXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpKSB7XHJcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKCdpbnZhbGlkIHByb3BlcnRpZXMnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzY29wZXMpIHtcclxuICAgICAgZXJyID0gdGhpcy5fdmFsaWRhdGVTY29wZXModGVtcGxhdGUsIHNjb3Blcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycjtcclxuICB9O1xyXG5cclxuICB0aGlzLl92YWxpZGF0ZVNjb3BlcyA9IGZ1bmN0aW9uKHRlbXBsYXRlLCBzY29wZXMpIHtcclxuXHJcbiAgICB2YXIgZXJyLFxyXG4gICAgICAgIHNjb3BlLFxyXG4gICAgICAgIHNjb3BlTmFtZTtcclxuXHJcbiAgICBpZiAoIWlzT2JqZWN0KHNjb3BlcykgfHwgaXNBcnJheShzY29wZXMpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignaW52YWxpZCBzY29wZXMsIHNob3VsZCBiZSBzY29wZXM9e30nLCB0ZW1wbGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChzY29wZU5hbWUgaW4gc2NvcGVzKSB7XHJcbiAgICAgIHNjb3BlID0gc2NvcGVzW3Njb3BlTmFtZV07XHJcblxyXG4gICAgICBpZiAoIWlzT2JqZWN0KHNjb3BlKSB8fCBpc0FycmF5KHNjb3BlKSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKCdpbnZhbGlkIHNjb3BlLCBzaG91bGQgYmUgc2NvcGU9e30nLCB0ZW1wbGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNBcnJheShzY29wZS5wcm9wZXJ0aWVzKSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ21pc3NpbmcgcHJvcGVydGllcz1bXSBpbiBzY29wZSA8JyArIHNjb3BlTmFtZSArICc+JywgdGVtcGxhdGVcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzKHNjb3BlLnByb3BlcnRpZXMpKSB7XHJcbiAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgcHJvcGVydGllcyBpbiBzY29wZSA8JyArIHNjb3BlTmFtZSArICc+Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBwcm9wZXJ0aWVzIGFuZCByZXR1cm4gZmFsc2UgaWYgYW55IGlzIGludmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5PFByb3BlcnR5RGVzY3JpcHRvcj59IHByb3BlcnRpZXNcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYWxsIHByb3BlcnRpZXMgYXJlIHZhbGlkXHJcbiAgICovXHJcbiAgdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcykge1xyXG4gICAgdmFyIHZhbGlkUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKHRoaXMuX3ZhbGlkYXRlUHJvcGVydHksIHRoaXMpO1xyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gdmFsaWRQcm9wZXJ0aWVzLmxlbmd0aDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGZhbHNlLCBpZiB0aGVyZSB3YXNcclxuICAgKiBhIHZhbGlkYXRpb24gZXJyb3IuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgcHJvcGVydHkgaXMgdmFsaWRcclxuICAgKi9cclxuICB0aGlzLl92YWxpZGF0ZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgdHlwZSA9IHByb3BlcnR5LnR5cGUsXHJcbiAgICAgICAgYmluZGluZyA9IHByb3BlcnR5LmJpbmRpbmc7XHJcblxyXG4gICAgdmFyIGVycjtcclxuXHJcbiAgICB2YXIgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcblxyXG4gICAgaWYgKFZBTElEX1RZUEVTLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XHJcbiAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICdpbnZhbGlkIHByb3BlcnR5IHR5cGUgPCcgKyB0eXBlICsgJz47ICcgK1xyXG4gICAgICAgICdtdXN0IGJlIGFueSBvZiB7ICcgKyBWQUxJRF9UWVBFUy5qb2luKCcsICcpICsgJyB9J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09PSBEUk9QRE9XTl9UWVBFICYmIGJpbmRpbmdUeXBlICE9PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVIpIHtcclxuICAgICAgaWYgKCFpc0FycmF5KHByb3BlcnR5LmNob2ljZXMpKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAnbXVzdCBwcm92aWRlIGNob2ljZXM9W10gd2l0aCAnICsgRFJPUERPV05fVFlQRSArICcgdHlwZSdcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2VcclxuXHJcbiAgICAgIGlmICghcHJvcGVydHkuY2hvaWNlcy5ldmVyeShpc0Ryb3Bkb3duQ2hvaWNlVmFsaWQpKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAneyBuYW1lLCB2YWx1ZSB9IG11c3QgYmUgc3BlY2lmaWVkIGZvciAnICtcclxuICAgICAgICAgIERST1BET1dOX1RZUEUgKyAnIGNob2ljZXMnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghYmluZGluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9nRXJyb3IoJ3Byb3BlcnR5IG1pc3NpbmcgYmluZGluZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChWQUxJRF9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpID09PSAtMSkge1xyXG4gICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAnaW52YWxpZCBwcm9wZXJ0eS5iaW5kaW5nIHR5cGUgPCcgKyBiaW5kaW5nVHlwZSArICc+OyAnICtcclxuICAgICAgICAnbXVzdCBiZSBhbnkgb2YgeyAnICsgVkFMSURfQklORElOR19UWVBFUy5qb2luKCcsICcpICsgJyB9J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gUFJPUEVSVFlfVFlQRSB8fFxyXG4gICAgICAgIGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9QUk9QRVJUWV9UWVBFIHx8XHJcbiAgICAgICAgYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0lOUFVUX1BBUkFNRVRFUl9UWVBFIHx8XHJcbiAgICAgICAgYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0ZJRUxEKSB7XHJcblxyXG4gICAgICBpZiAoIWJpbmRpbmcubmFtZSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ3Byb3BlcnR5LmJpbmRpbmcgPCcgKyBiaW5kaW5nVHlwZSArICc+IHJlcXVpcmVzIG5hbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFKSB7XHJcbiAgICAgIGlmICghYmluZGluZy5zb3VyY2UpIHtcclxuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyBzb3VyY2UnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5fVFlQRSkge1xyXG5cclxuICAgICAgaWYgKCFiaW5kaW5nLnZhcmlhYmxlcyAmJiAhYmluZGluZy50YXJnZXQpIHtcclxuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyAnICtcclxuICAgICAgICAgICd2YXJpYWJsZXMgb3IgdGFyZ2V0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcblxyXG4gICAgICBpZiAoIWJpbmRpbmcudmFyaWFibGVzICYmICFiaW5kaW5nLnNvdXJjZSAmJiAhYmluZGluZy5zb3VyY2VFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAncHJvcGVydHkuYmluZGluZyA8JyArIGJpbmRpbmdUeXBlICsgJz4gcmVxdWlyZXMgJyArXHJcbiAgICAgICAgICAndmFyaWFibGVzLCBzb3VyY2VFeHByZXNzaW9uIG9yIHNvdXJjZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVIpIHtcclxuXHJcbiAgICAgIGlmICh0eXBlICE9PSAnSGlkZGVuJykge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ2ludmFsaWQgcHJvcGVydHkgdHlwZSA8JyArIHR5cGUgKyAnPiBmb3IgJyArIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUiArICc7ICcgK1xyXG4gICAgICAgICAgJ211c3QgYmUgPEhpZGRlbj4nXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhZXJyO1xyXG4gIH07XHJcblxyXG5cclxuICB0aGlzLl9sb2dFcnJvciA9IGZ1bmN0aW9uKGVyciwgdGVtcGxhdGUpIHtcclxuXHJcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgZXJyID0gJ3RlbXBsYXRlKGlkOiAnICsgdGVtcGxhdGUuaWQgKyAnKSAnICsgZXJyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlcnIgPSBuZXcgRXJyb3IoZXJyKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9lcnJvcnMucHVzaChlcnIpO1xyXG5cclxuICAgIHJldHVybiBlcnI7XHJcbiAgfTtcclxuXHJcbiAgdGhpcy5nZXRFcnJvcnMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XHJcbiAgfTtcclxuXHJcbiAgdGhpcy5nZXRWYWxpZFRlbXBsYXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkVGVtcGxhdGVzO1xyXG4gIH07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmFsaWRhdG9yO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzRHJvcGRvd25DaG9pY2VWYWxpZChjKSB7XHJcbiAgcmV0dXJuICduYW1lJyBpbiBjICYmICd2YWx1ZScgaW4gYztcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZmluZEV4dGVuc2lvbiA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRFeHRlbnNpb24sXHJcbiAgICBmaW5kRXh0ZW5zaW9ucyA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRFeHRlbnNpb25zO1xyXG5cclxudmFyIGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aVByb3BlcnR5LFxyXG4gICAgY3JlYXRlSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVJbnB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZU91dHB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW4gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluLFxyXG4gICAgY3JlYXRlQWN0aXZpdGlPdXQgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aU91dCxcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5LFxyXG4gICAgY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lclNjcmlwdCA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQsXHJcbiAgICBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbjtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBBQ1RJVklUSV9TRVJWSUNFX1RBU0tfTElLRSA9IFtcclxuICAnYWN0aXZpdGk6Y2xhc3MnLFxyXG4gICdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nLFxyXG4gICdhY3Rpdml0aTpleHByZXNzaW9uJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEEgaGFuZGxlciB0aGF0IGNoYW5nZXMgdGhlIG1vZGVsaW5nIHRlbXBsYXRlIG9mIGEgQlBNTiBlbGVtZW50LlxyXG4gKi9cclxuZnVuY3Rpb24gQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlcihtb2RlbGluZywgY29tbWFuZFN0YWNrLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICBmdW5jdGlvbiBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcclxuXHJcbiAgICB2YXIgYm8gPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICAgIC8vIGFkZCBleHRlbnNpb24gZWxlbWVudHNcclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XHJcbiAgICAgICAgdmFsdWVzOiBbXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xyXG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50c1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpIHtcclxuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xyXG4gICAgICAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJzogbmV3VGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlSW9NYXBwaW5ncyhlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xyXG5cclxuICAgIHZhciBuZXdNYXBwaW5ncyA9IGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3MobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRNYXBwaW5ncztcclxuXHJcbiAgICBpZiAoIW5ld01hcHBpbmdzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7IGlucHV0T3V0cHV0OiBuZXdNYXBwaW5ncyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dCA9IGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XHJcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKTtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgICAgb2JqZWN0c1RvQWRkOiBbIG5ld01hcHBpbmdzIF0sXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRNYXBwaW5ncyA/IFsgb2xkTWFwcGluZ3MgXSA6IFtdXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xyXG5cclxuICAgIHZhciBuZXdNYXBwaW5ncyA9IGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb25zKG5ld1RlbXBsYXRlLCBicG1uRmFjdG9yeSksXHJcbiAgICAgICAgb2xkTWFwcGluZ3M7XHJcblxyXG4gICAgaWYgKCFuZXdNYXBwaW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7IGZpZWxkOiBuZXdNYXBwaW5ncyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dCA9IGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XHJcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgWydhY3Rpdml0aTpGaWVsZCddKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogbmV3TWFwcGluZ3MsXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRNYXBwaW5ncyA/IG9sZE1hcHBpbmdzIDogW11cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdGlQcm9wZXJ0aWVzKGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XHJcblxyXG4gICAgdmFyIG5ld1Byb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnRpZXMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRQcm9wZXJ0aWVzO1xyXG5cclxuICAgIGlmICghbmV3UHJvcGVydGllcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXHJcbiAgICAgICAgcHJvcGVydGllczogeyBwcm9wZXJ0aWVzOiBuZXdQcm9wZXJ0aWVzIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkUHJvcGVydGllcyA9IGZpbmRFeHRlbnNpb24oZWxlbWVudCwgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogWyBuZXdQcm9wZXJ0aWVzIF0sXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRQcm9wZXJ0aWVzID8gWyBvbGRQcm9wZXJ0aWVzIF0gOiBbXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgbmV3UHJvcGVydGllcyA9IGNyZWF0ZUJwbW5Qcm9wZXJ0eVVwZGF0ZXMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICB2YXIgbmV3UHJvcGVydGllc0NvdW50ID0gT2JqZWN0LmtleXMobmV3UHJvcGVydGllcykubGVuZ3RoO1xyXG5cclxuICAgIGlmICghbmV3UHJvcGVydGllc0NvdW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiBuZXdQcm9wZXJ0aWVzXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBuZXdQcm9wZXJ0aWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZUluT3V0KGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XHJcblxyXG4gICAgdmFyIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbk91dChuZXdUZW1wbGF0ZSwgYnBtbkZhY3RvcnkpLFxyXG4gICAgICAgIG9sZEluT3V0O1xyXG5cclxuICAgIGlmICghbmV3SW5PdXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250ZXh0KSB7XHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdCcsIHtcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHsgaW5vdXQ6IG5ld0luT3V0IH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkSW5PdXQgPSBmaW5kRXh0ZW5zaW9ucyhjb250ZXh0LCBbICdhY3Rpdml0aTpJbicsICdhY3Rpdml0aTpPdXQnIF0pO1xyXG5cclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgICAgb2JqZWN0c1RvQWRkOiBuZXdJbk91dCxcclxuICAgICAgICBvYmplY3RzVG9SZW1vdmU6IG9sZEluT3V0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlRXhlY3V0aW9uTGlzdGVuZXIoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgbmV3RXhlY3V0aW9uTGlzdGVuZXJzID0gY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lcnMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRFeGVjdXRpb25zTGlzdGVuZXJzO1xyXG5cclxuICAgIGlmICghbmV3RXhlY3V0aW9uTGlzdGVuZXJzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXHJcbiAgICAgICAgcHJvcGVydGllczogeyBleGVjdXRpb25MaXN0ZW5lcjogbmV3RXhlY3V0aW9uTGlzdGVuZXJzIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkRXhlY3V0aW9uc0xpc3RlbmVycyA9IGZpbmRFeHRlbnNpb25zKGNvbnRleHQsIFsgJ2FjdGl2aXRpOkV4ZWN1dGlvbkxpc3RlbmVyJyBdKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogbmV3RXhlY3V0aW9uTGlzdGVuZXJzLFxyXG4gICAgICAgIG9iamVjdHNUb1JlbW92ZTogb2xkRXhlY3V0aW9uc0xpc3RlbmVyc1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSAvIHJlY3JlYXRlIGEgc2NvcGVkIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50IHRoZSBkaWFncmFtIHBhcmVudCBlbGVtZW50XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNjb3BlTmFtZSBuYW1lIG9mIHRoZSBzY29wZSwgaS5lLiBhY3Rpdml0aTpDb25uZWN0b3JcclxuICAgKiBAcGFyYW0ge09iamVjdH0gc2NvcGVEZWZpbml0aW9uXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gdXBkYXRlU2NvcGVFbGVtZW50cyhlbGVtZW50LCBzY29wZU5hbWUsIHNjb3BlRGVmaW5pdGlvbikge1xyXG5cclxuICAgIHZhciBzY29wZUVsZW1lbnQgPSBicG1uRmFjdG9yeS5jcmVhdGUoc2NvcGVOYW1lKTtcclxuXHJcbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW5wdXRPdXRwdXRcclxuICAgIHVwZGF0ZUlvTWFwcGluZ3MoZWxlbWVudCwgc2NvcGVEZWZpbml0aW9uLCBzY29wZUVsZW1lbnQpO1xyXG5cclxuICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTpmaWVsZFxyXG4gICAgdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOnByb3BlcnRpZXNcclxuICAgIHVwZGF0ZUFjdGl2aXRpUHJvcGVydGllcyhlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIG90aGVyIHByb3BlcnRpZXMgKGJwbW46Y29uZGl0aW9uLCBhY3Rpdml0aTphc3luYywgLi4uKVxyXG4gICAgdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOmluIGFuZCBhY3Rpdml0aTpvdXRcclxuICAgIHVwZGF0ZUluT3V0KGVsZW1lbnQsIHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVFbGVtZW50KTtcclxuXHJcbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXJcclxuICAgIHVwZGF0ZUV4ZWN1dGlvbkxpc3RlbmVyKGVsZW1lbnQsIHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVFbGVtZW50KTtcclxuXHJcbiAgICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xyXG4gICAgdmFyIG9sZFNjb3BlID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgc2NvcGVOYW1lKTtcclxuXHJcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCcsIHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgIG9iamVjdHNUb0FkZDogWyBzY29wZUVsZW1lbnQgXSxcclxuICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRTY29wZSA/IFsgb2xkU2NvcGUgXSA6IFtdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBvc2UgYW4gZWxlbWVudCB0ZW1wbGF0ZSBjaGFuZ2UgYWN0aW9uLCB1cGRhdGluZyBhbGxcclxuICAgKiBuZWNlc3NhcnkgdW5kZXJseWluZyBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50XHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQub2xkVGVtcGxhdGVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5uZXdUZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHRoaXMucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcclxuICAgICAgICBuZXdUZW1wbGF0ZSA9IGNvbnRleHQubmV3VGVtcGxhdGU7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOm1vZGVsZXJUZW1wbGF0ZSBhdHRyaWJ1dGVcclxuICAgIHVwZGF0ZU1vZGVsZXJUZW1wbGF0ZShlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgaWYgKG5ld1RlbXBsYXRlKSB7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW5wdXRPdXRwdXRcclxuICAgICAgdXBkYXRlSW9NYXBwaW5ncyhlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZmllbGRcclxuICAgICAgdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6cHJvcGVydGllc1xyXG4gICAgICB1cGRhdGVBY3Rpdml0aVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xyXG5cclxuICAgICAgLy8gdXBkYXRlIG90aGVyIHByb3BlcnRpZXMgKGJwbW46Y29uZGl0aW9uLCBhY3Rpdml0aTphc3luYywgLi4uKVxyXG4gICAgICB1cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTppbiBhbmQgYWN0aXZpdGk6b3V0XHJcbiAgICAgIHVwZGF0ZUluT3V0KGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lclxyXG4gICAgICB1cGRhdGVFeGVjdXRpb25MaXN0ZW5lcihlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyBsb29wIG9uIHNjb3BlcyBwcm9wZXJ0aWVzXHJcbiAgICAgIGZvckVhY2gobmV3VGVtcGxhdGUuc2NvcGVzLCBmdW5jdGlvbihzY29wZURlZmluaXRpb24sIHNjb3BlTmFtZSkge1xyXG4gICAgICAgIHVwZGF0ZVNjb3BlRWxlbWVudHMoZWxlbWVudCwgc2NvcGVOYW1lLCBzY29wZURlZmluaXRpb24pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnLCAnY29tbWFuZFN0YWNrJywgJ2JwbW5GYWN0b3J5JyBdO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyO1xyXG5cclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVCcG1uUHJvcGVydHlVcGRhdGVzKHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICB2YXIgcHJvcGVydHlVcGRhdGVzID0ge307XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcblxyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1RhcmdldCA9IGJpbmRpbmcubmFtZSxcclxuICAgICAgICBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgIGlmIChiaW5kaW5nLnR5cGUgPT09ICdwcm9wZXJ0eScpIHtcclxuXHJcbiAgICAgIGlmIChiaW5kaW5nVGFyZ2V0ID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XHJcbiAgICAgICAgICBib2R5OiBwLnZhbHVlLFxyXG4gICAgICAgICAgbGFuZ3VhZ2U6IGJpbmRpbmcuc2NyaXB0Rm9ybWF0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHAudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFzc2lnbmluZyBhY3Rpdml0aTphc3luYyB0byB0cnVlfGZhbHNlXHJcbiAgICAgIC8vIGFzc2lnbmluZyBicG1uOmNvbmRpdGlvbkV4cHJlc3Npb24gdG8geyAkdHlwZTogJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIC4uLiB9XHJcbiAgICAgIHByb3BlcnR5VXBkYXRlc1tiaW5kaW5nVGFyZ2V0XSA9IHByb3BlcnR5VmFsdWU7XHJcblxyXG4gICAgICAvLyBtYWtlIHN1cmUgd2UgdW5zZXQgb3RoZXIgXCJpbXBsZW1lbnRhdGlvbiB0eXBlc1wiXHJcbiAgICAgIC8vIHdoZW4gYXBwbHlpbmcgYSBhY3Rpdml0aTpjbGFzcyB0ZW1wbGF0ZSBvbnRvIGEgcHJlY29uZmlndXJlZFxyXG4gICAgICAvLyBhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24gZWxlbWVudFxyXG4gICAgICBpZiAoQUNUSVZJVElfU0VSVklDRV9UQVNLX0xJS0UuaW5kZXhPZihiaW5kaW5nVGFyZ2V0KSAhPT0gLTEpIHtcclxuICAgICAgICBBQ1RJVklUSV9TRVJWSUNFX1RBU0tfTElLRS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcclxuICAgICAgICAgIGlmIChwcm9wICE9PSBiaW5kaW5nVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5VXBkYXRlc1twcm9wXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcHJvcGVydHlVcGRhdGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9ucyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgaW5qZWN0aW9ucyA9IFtdO1xyXG5cclxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpmaWVsZCcpIHtcclxuICAgICAgaW5qZWN0aW9ucy5wdXNoKGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24oXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChpbmplY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIGluamVjdGlvbnM7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aVByb3BlcnRpZXModGVtcGxhdGUsIGJwbW5GYWN0b3J5KSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpwcm9wZXJ0eScpIHtcclxuICAgICAgcHJvcGVydGllcy5wdXNoKGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkoXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6UHJvcGVydGllcycsIHtcclxuICAgICAgdmFsdWVzOiBwcm9wZXJ0aWVzXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3ModGVtcGxhdGUsIGJwbW5GYWN0b3J5KSB7XHJcblxyXG4gIHZhciBpbnB1dFBhcmFtZXRlcnMgPSBbXSxcclxuICAgICAgb3V0cHV0UGFyYW1ldGVycyA9IFtdO1xyXG5cclxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6aW5wdXRQYXJhbWV0ZXInKSB7XHJcbiAgICAgIGlucHV0UGFyYW1ldGVycy5wdXNoKGNyZWF0ZUlucHV0UGFyYW1ldGVyKFxyXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XHJcbiAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ2FjdGl2aXRpOm91dHB1dFBhcmFtZXRlcicpIHtcclxuICAgICAgb3V0cHV0UGFyYW1ldGVycy5wdXNoKGNyZWF0ZU91dHB1dFBhcmFtZXRlcihcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gZG8gd2UgbmVlZCB0byBjcmVhdGUgbmV3IGlvTWFwcGluZ3MgKD8pXHJcbiAgaWYgKG91dHB1dFBhcmFtZXRlcnMubGVuZ3RoIHx8IGlucHV0UGFyYW1ldGVycy5sZW5ndGgpIHtcclxuICAgIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOklucHV0T3V0cHV0Jywge1xyXG4gICAgICBpbnB1dFBhcmFtZXRlcnM6IGlucHV0UGFyYW1ldGVycyxcclxuICAgICAgb3V0cHV0UGFyYW1ldGVyczogb3V0cHV0UGFyYW1ldGVyc1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUluT3V0KHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICB2YXIgaW5PdXRzID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTppbicpIHtcclxuICAgICAgaW5PdXRzLnB1c2goY3JlYXRlQWN0aXZpdGlJbihcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6b3V0Jykge1xyXG4gICAgICBpbk91dHMucHVzaChjcmVhdGVBY3Rpdml0aU91dChcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknKSB7XHJcbiAgICAgIGluT3V0cy5wdXNoKGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBpbk91dHM7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVycyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lcicpIHtcclxuICAgICAgZXhlY3V0aW9uTGlzdGVuZXIucHVzaChjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVyU2NyaXB0KFxyXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XHJcbiAgICAgICkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXI7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIENoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIgPSByZXF1aXJlKCcuL0NoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXInKTtcclxuXHJcbnZhciBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmdldFRlbXBsYXRlLFxyXG4gICAgZ2V0RGVmYXVsdFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0RGVmYXVsdFRlbXBsYXRlO1xyXG5cclxuZnVuY3Rpb24gcmVnaXN0ZXJIYW5kbGVycyhjb21tYW5kU3RhY2ssIGVsZW1lbnRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnkpIHtcclxuICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKFxyXG4gICAgJ3Byb3BlcnRpZXNQYW5lbC5hY3Rpdml0aS5jaGFuZ2VUZW1wbGF0ZScsXHJcbiAgICBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyXHJcbiAgKTtcclxuXHJcbiAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBzaGFwZSBjcmVhdGlvblxyXG4gIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5zaGFwZS5jcmVhdGUucG9zdEV4ZWN1dGVkJyBdLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBhcHBseURlZmF1bHRUZW1wbGF0ZShjb250ZXh0LmNvbnRleHQuc2hhcGUsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIGFwcGx5IGRlZmF1bHQgZWxlbWVudCB0ZW1wbGF0ZXMgb24gY29ubmVjdGlvbiBjcmVhdGlvblxyXG4gIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5jb25uZWN0aW9uLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGFwcGx5RGVmYXVsdFRlbXBsYXRlKGNvbnRleHQuY29udGV4dC5jb25uZWN0aW9uLCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2spO1xyXG4gIH0pO1xyXG59XHJcblxyXG5yZWdpc3RlckhhbmRsZXJzLiRpbmplY3QgPSBbICdjb21tYW5kU3RhY2snLCAnZWxlbWVudFRlbXBsYXRlcycsICdldmVudEJ1cycsICdlbGVtZW50UmVnaXN0cnknIF07XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgX19pbml0X186IFsgcmVnaXN0ZXJIYW5kbGVycyBdXHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gYXBwbHlEZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgY29tbWFuZFN0YWNrKSB7XHJcblxyXG4gIGlmICghZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcylcclxuICAgICAgJiYgZ2V0RGVmYXVsdFRlbXBsYXRlKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMpKSB7XHJcblxyXG4gICAgdmFyIGNvbW1hbmQgPSAncHJvcGVydGllc1BhbmVsLmFjdGl2aXRpLmNoYW5nZVRlbXBsYXRlJztcclxuICAgIHZhciBjb21tYW5kQ29udGV4dCA9IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgbmV3VGVtcGxhdGU6IGdldERlZmF1bHRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKVxyXG4gICAgfTtcclxuXHJcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLCBjb21tYW5kQ29udGV4dCk7XHJcbiAgfVxyXG59XHJcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIF9fZGVwZW5kc19fOiBbXHJcbiAgICByZXF1aXJlKCcuL2NtZC9pbmRleCcpLFxyXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XHJcbiAgXSxcclxuICBfX2luaXRfXzogW1xyXG4gICAgJ2N1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcicsXHJcbiAgICAnZWxlbWVudFRlbXBsYXRlc0xvYWRlcidcclxuICBdLFxyXG4gIGN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQ3VzdG9tRWxlbWVudHNQcm9wZXJ0aWVzQWN0aXZhdG9yJykgXSxcclxuICBlbGVtZW50VGVtcGxhdGVzOiBbICd0eXBlJywgcmVxdWlyZSgnLi9FbGVtZW50VGVtcGxhdGVzJykgXSxcclxuICBlbGVtZW50VGVtcGxhdGVzTG9hZGVyOiBbICd0eXBlJywgcmVxdWlyZSgnLi9FbGVtZW50VGVtcGxhdGVzTG9hZGVyJykgXVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGUsXHJcbiAgICBnZXRUZW1wbGF0ZUlkID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGVJZDtcclxuXHJcbnZhciBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKTtcclxuXHJcbnZhciBURU1QTEFURV9BVFRSID0gcmVxdWlyZSgnLi4vSGVscGVyJykuVEVNUExBVEVfQVRUUjtcclxuXHJcbmZ1bmN0aW9uIGlzQW55KGVsZW1lbnQsIHR5cGVzKSB7XHJcbiAgcmV0dXJuIHR5cGVzLnJlZHVjZShmdW5jdGlvbihyZXN1bHQsIHR5cGUpIHtcclxuICAgIHJldHVybiByZXN1bHQgfHwgaXMoZWxlbWVudCwgdHlwZSk7XHJcbiAgfSwgZmFsc2UpO1xyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBvcHRpb25zID0gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhb3B0aW9uc1swXS5pc0RlZmF1bHQpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCBlbGVtZW50IHRlbXBsYXRlICh2aWEgZHJvcGRvd24pXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdlbGVtZW50VGVtcGxhdGUtY2hvb3NlcicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFbGVtZW50IFRlbXBsYXRlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJyxcclxuICAgIHNlbGVjdE9wdGlvbnM6IG9wdGlvbnMsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcclxuICAgICAgcmV0dXJuIGFwcGx5VGVtcGxhdGUoZWxlbWVudCwgcHJvcGVydGllc1tURU1QTEFURV9BVFRSXSwgZWxlbWVudFRlbXBsYXRlcyk7XHJcbiAgICB9LFxyXG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgICAgIHJldHVybiB0ZW1wbGF0ZSAmJiBpc0RlZmF1bHRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBhcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlSWQsIGVsZW1lbnRUZW1wbGF0ZXMpIHtcclxuXHJcbiAgLy8gY2xlYW51cFxyXG4gIC8vIGNsZWFyIGlucHV0IG91dHB1dCBtYXBwaW5nc1xyXG4gIC8vIHVuZG8gY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGVtcGxhdGVcclxuXHJcbiAgLy8gcmUtZXN0YWJsaXNoXHJcbiAgLy8gc2V0IGlucHV0IG91dHB1dCBtYXBwaW5nc1xyXG4gIC8vIGFwcGx5IGNoYW5nZXMgdG8gcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIG5ldyB0ZW1wbGF0ZVxyXG5cclxuICB2YXIgb2xkVGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKSxcclxuICAgICAgbmV3VGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldChuZXdUZW1wbGF0ZUlkKTtcclxuXHJcbiAgaWYgKG9sZFRlbXBsYXRlID09PSBuZXdUZW1wbGF0ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXNQYW5lbC5hY3Rpdml0aS5jaGFuZ2VUZW1wbGF0ZScsXHJcbiAgICBjb250ZXh0OiB7XHJcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgIG9sZFRlbXBsYXRlOiBvbGRUZW1wbGF0ZSxcclxuICAgICAgbmV3VGVtcGxhdGU6IG5ld1RlbXBsYXRlXHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgY3VycmVudFRlbXBsYXRlSWQgPSBnZXRUZW1wbGF0ZUlkKGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZW1wdHlPcHRpb24gPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIHZhbHVlOiAnJ1xyXG4gIH07XHJcblxyXG4gIHZhciBhbGxPcHRpb25zID0gZWxlbWVudFRlbXBsYXRlcy5nZXRBbGwoKS5yZWR1Y2UoZnVuY3Rpb24odGVtcGxhdGVzLCB0KSB7XHJcbiAgICBpZiAoIWlzQW55KGVsZW1lbnQsIHQuYXBwbGllc1RvKSkge1xyXG4gICAgICByZXR1cm4gdGVtcGxhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZW1wbGF0ZXMuY29uY2F0KHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKHQubmFtZSksXHJcbiAgICAgIHZhbHVlOiB0LmlkLFxyXG4gICAgICBpc0RlZmF1bHQ6IHQuaXNEZWZhdWx0XHJcbiAgICB9KTtcclxuICB9LCBbIGVtcHR5T3B0aW9uIF0pO1xyXG5cclxuXHJcbiAgdmFyIGRlZmF1bHRPcHRpb24gPSBmaW5kKGFsbE9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xyXG4gICAgcmV0dXJuIGlzRGVmYXVsdFRlbXBsYXRlKG9wdGlvbik7XHJcbiAgfSk7XHJcblxyXG4gIHZhciBjdXJyZW50T3B0aW9uID0gZmluZChhbGxPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IGN1cnJlbnRUZW1wbGF0ZUlkO1xyXG4gIH0pO1xyXG5cclxuICBpZiAoY3VycmVudFRlbXBsYXRlSWQgJiYgIWN1cnJlbnRPcHRpb24pIHtcclxuICAgIGN1cnJlbnRPcHRpb24gPSB1bmtub3duVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlSWQsIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgYWxsT3B0aW9ucy5wdXNoKGN1cnJlbnRPcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFkZWZhdWx0T3B0aW9uKSB7XHJcblxyXG4gICAgLy8gcmV0dXJuIGFsbCBvcHRpb25zLCBpbmNsdWRpbmcgZW1wdHlcclxuICAgIC8vIGFuZCBvcHRpb25hbGx5IHVua25vd25UZW1wbGF0ZSBvcHRpb25cclxuICAgIHJldHVybiBhbGxPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gc3BlY2lhbCBsaW1pdGVkIGhhbmRsaW5nIGZvclxyXG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xyXG5cclxuICB2YXIgb3B0aW9ucyA9IFtdO1xyXG5cclxuICAvLyBjdXJyZW50IHRlbXBsYXRlIG5vdCBzZXRcclxuICBpZiAoIWN1cnJlbnRUZW1wbGF0ZUlkKSB7XHJcbiAgICBvcHRpb25zLnB1c2goe1xyXG4gICAgICBuYW1lOiAnJyxcclxuICAgICAgdmFsdWU6ICcnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGN1cnJlbnQgdGVtcGxhdGUgbm90IGRlZmF1bHRcclxuICBpZiAoY3VycmVudE9wdGlvbiAmJiBjdXJyZW50T3B0aW9uICE9PSBkZWZhdWx0T3B0aW9uKSB7XHJcbiAgICBvcHRpb25zLnB1c2goY3VycmVudE9wdGlvbik7XHJcbiAgfVxyXG5cclxuICBvcHRpb25zLnB1c2goZGVmYXVsdE9wdGlvbik7XHJcblxyXG4gIC8vIFsgKGVtcHR5KSwgKGN1cnJlbnQpLCBkZWZhdWx0T3B0aW9uIF1cclxuICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuZnVuY3Rpb24gdW5rbm93blRlbXBsYXRlKHRlbXBsYXRlSWQsIHRyYW5zbGF0ZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiB0cmFuc2xhdGUoJ1t1bmtub3duIHRlbXBsYXRlOiB7dGVtcGxhdGVJZH1dJywgeyB0ZW1wbGF0ZUlkOiB0ZW1wbGF0ZUlkIH0pLFxyXG4gICAgdmFsdWU6IHRlbXBsYXRlSWRcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RlZmF1bHRUZW1wbGF0ZShlbGVtZW50VGVtcGxhdGUpIHtcclxuICByZXR1cm4gZWxlbWVudFRlbXBsYXRlLmlzRGVmYXVsdDtcclxufSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGUsXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBmaW5kRXh0ZW5zaW9uID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbixcclxuICAgIGZpbmRFeHRlbnNpb25zID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbnMsXHJcbiAgICBmaW5kSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9IZWxwZXInKS5maW5kSW5wdXRQYXJhbWV0ZXIsXHJcbiAgICBmaW5kT3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZE91dHB1dFBhcmFtZXRlcixcclxuICAgIGZpbmRBY3Rpdml0aVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEFjdGl2aXRpUHJvcGVydHksXHJcbiAgICBmaW5kQWN0aXZpdGlJbk91dCA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRBY3Rpdml0aUluT3V0O1xyXG5cclxudmFyIGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aVByb3BlcnR5LFxyXG4gICAgY3JlYXRlSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVJbnB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZU91dHB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW4gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluLFxyXG4gICAgY3JlYXRlQWN0aXZpdGlPdXQgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aU91dCxcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5LFxyXG4gICAgY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbiA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb247XHJcblxyXG52YXIgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSA9ICdhY3Rpdml0aTpwcm9wZXJ0eScsXHJcbiAgICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTppbnB1dFBhcmFtZXRlcicsXHJcbiAgICBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnYWN0aXZpdGk6b3V0cHV0UGFyYW1ldGVyJyxcclxuICAgIEFDVElWSVRJX0lOX1RZUEUgPSAnYWN0aXZpdGk6aW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX1RZUEUgPSAnYWN0aXZpdGk6b3V0JyxcclxuICAgIEFDVElWSVRJX0lOX0JVU0lORVNTX0tFWV9UWVBFID0gJ2FjdGl2aXRpOmluOmJ1c2luZXNzS2V5JyxcclxuICAgIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9UWVBFID0gJ2FjdGl2aXRpOmV4ZWN1dGlvbkxpc3RlbmVyJyxcclxuICAgIEFDVElWSVRJX0ZJRUxEID0gJ2FjdGl2aXRpOmZpZWxkJztcclxuXHJcbnZhciBCQVNJQ19NT0RETEVfVFlQRVMgPSBbXHJcbiAgJ0Jvb2xlYW4nLFxyXG4gICdJbnRlZ2VyJyxcclxuICAnU3RyaW5nJ1xyXG5dO1xyXG5cclxudmFyIEVYVEVOU0lPTl9CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX1BST1BFUlRZX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUsXHJcbiAgQUNUSVZJVElfRklFTERcclxuXTtcclxuXHJcbnZhciBJT19CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX0lOUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRVxyXG5dO1xyXG5cclxudmFyIElOX09VVF9CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEVcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBJbmplY3RzIGN1c3RvbSBwcm9wZXJ0aWVzIGludG8gdGhlIGdpdmVuIGdyb3VwLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgaWYgKCF0ZW1wbGF0ZSkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlbmRlckN1c3RvbUZpZWxkID0gZnVuY3Rpb24oaWQsIHAsIGlkeCkge1xyXG4gICAgdmFyIHByb3BlcnR5VHlwZSA9IHAudHlwZTtcclxuXHJcbiAgICB2YXIgZW50cnlPcHRpb25zID0ge1xyXG4gICAgICBpZDogaWQsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBwLmRlc2NyaXB0aW9uLFxyXG4gICAgICBsYWJlbDogcC5sYWJlbCA/IHRyYW5zbGF0ZShwLmxhYmVsKSA6IHAubGFiZWwsXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6IGlkLFxyXG4gICAgICBnZXQ6IHByb3BlcnR5R2V0dGVyKGlkLCBwKSxcclxuICAgICAgc2V0OiBwcm9wZXJ0eVNldHRlcihpZCwgcCwgYnBtbkZhY3RvcnkpLFxyXG4gICAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IoaWQsIHAsIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGVudHJ5O1xyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdCb29sZWFuJykge1xyXG4gICAgICBlbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdTdHJpbmcnKSB7XHJcbiAgICAgIGVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdUZXh0Jykge1xyXG4gICAgICBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KGVudHJ5T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ0Ryb3Bkb3duJykge1xyXG4gICAgICBlbnRyeU9wdGlvbnMuc2VsZWN0T3B0aW9ucyA9IHAuY2hvaWNlcztcclxuXHJcbiAgICAgIGVudHJ5ID0gZW50cnlGYWN0b3J5LnNlbGVjdEJveChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbnRyeTtcclxuICB9O1xyXG5cclxuICB2YXIgZ3JvdXBzID0gW107XHJcbiAgdmFyIGlkLCBlbnRyeTtcclxuXHJcbiAgdmFyIGN1c3RvbUZpZWxkc0dyb3VwID0ge1xyXG4gICAgaWQ6ICdjdXN0b21GaWVsZCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDdXN0b20gRmllbGRzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgdGVtcGxhdGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHAsIGlkeCkge1xyXG5cclxuICAgIGlkID0gJ2N1c3RvbS0nICsgdGVtcGxhdGUuaWQgKyAnLScgKyBpZHg7XHJcblxyXG4gICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChpZCwgcCwgaWR4KTtcclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBjdXN0b21GaWVsZHNHcm91cC5lbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIGlmIChjdXN0b21GaWVsZHNHcm91cC5lbnRyaWVzLmxlbmd0aCA+IDApIHtcclxuICAgIGdyb3Vwcy5wdXNoKGN1c3RvbUZpZWxkc0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGlmICh0ZW1wbGF0ZS5zY29wZXMpIHtcclxuICAgIGZvciAodmFyIHNjb3BlTmFtZSBpbiB0ZW1wbGF0ZS5zY29wZXMpIHtcclxuXHJcbiAgICAgIHZhciBzY29wZSA9IHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdO1xyXG4gICAgICB2YXIgaWRTY29wZU5hbWUgPSBzY29wZU5hbWUucmVwbGFjZSgvOi9nLCAnXycpO1xyXG5cclxuICAgICAgdmFyIGN1c3RvbVNjb3BlRmllbGRzR3JvdXAgPSB7XHJcbiAgICAgICAgaWQ6ICdjdXN0b21GaWVsZC0nICsgaWRTY29wZU5hbWUsXHJcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ3VzdG9tIEZpZWxkcyBmb3Igc2NvcGU6ICcpICsgc2NvcGVOYW1lLFxyXG4gICAgICAgIGVudHJpZXM6IFtdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBzY29wZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XHJcblxyXG4gICAgICAgIHZhciBwcm9wZXJ0eUlkID0gJ2N1c3RvbS0nICsgdGVtcGxhdGUuaWQgKyAnLScgKyBpZFNjb3BlTmFtZSArICctJyArIGlkeDtcclxuXHJcbiAgICAgICAgdmFyIHNjb3BlZFByb3BlcnR5ID0gcHJvcGVydHlXaXRoU2NvcGUocCwgc2NvcGVOYW1lKTtcclxuXHJcbiAgICAgICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChwcm9wZXJ0eUlkLCBzY29wZWRQcm9wZXJ0eSwgaWR4KTtcclxuICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgIGN1c3RvbVNjb3BlRmllbGRzR3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGN1c3RvbVNjb3BlRmllbGRzR3JvdXAuZW50cmllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JvdXBzLnB1c2goY3VzdG9tU2NvcGVGaWVsZHNHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBncm91cHM7XHJcbn07XHJcblxyXG5cclxuLy8gZ2V0dGVycywgc2V0dGVycyBhbmQgdmFsaWRhdG9ycyAvLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGEgZ2V0dGVyIHRoYXQgcmV0cmlldmVzIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHBhcmFtIHtQcm9wZXJ0eURlc2NyaXB0b3J9IHByb3BlcnR5XHJcbiAqXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIobmFtZSwgcHJvcGVydHkpIHtcclxuXHJcbiAgLyogZ2V0dGVyICovXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldChlbGVtZW50KSB7XHJcbiAgICB2YXIgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTtcclxuXHJcbiAgICByZXR1cm4gb2JqZWN0V2l0aEtleShuYW1lLCB2YWx1ZSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhIHNldHRlciB0aGF0IHVwZGF0ZXMgdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBwcm9wZXJ0eVNldHRlcihuYW1lLCBwcm9wZXJ0eSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgLyogc2V0dGVyICovXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldChlbGVtZW50LCB2YWx1ZXMpIHtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XHJcblxyXG4gICAgcmV0dXJuIHNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBicG1uRmFjdG9yeSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhIHZhbGlkYXRvciB0aGF0IGVuc3VyZXMgdGhlIHByb3BlcnR5IGlzIG9rLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IobmFtZSwgcHJvcGVydHksIHRyYW5zbGF0ZSkge1xyXG5cclxuICAvKiB2YWxpZGF0b3IgKi9cclxuICByZXR1cm4gZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XHJcblxyXG4gICAgdmFyIGVycm9yID0gdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBvYmplY3RXaXRoS2V5KG5hbWUsIGVycm9yKTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5cclxuLy8gZ2V0LCBzZXQgYW5kIHZhbGlkYXRlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBkZXNjcmlwdG9yLFxyXG4gKiBvbiB0aGUgcGFzc2VkIGRpYWdyYW0gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICpcclxuICogQHJldHVybiB7QW55fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxyXG4gICAgICBzY29wZSA9IHByb3BlcnR5LnNjb3BlO1xyXG5cclxuICB2YXIgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGUsXHJcbiAgICAgIGJpbmRpbmdOYW1lID0gYmluZGluZy5uYW1lO1xyXG5cclxuICB2YXIgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5LnZhbHVlIHx8ICcnO1xyXG5cclxuICBpZiAoc2NvcGUpIHtcclxuICAgIGJvID0gZmluZEV4dGVuc2lvbihibywgc2NvcGUubmFtZSk7XHJcbiAgICBpZiAoIWJvKSB7XHJcbiAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvcGVydHlcclxuICBpZiAoYmluZGluZ1R5cGUgPT09ICdwcm9wZXJ0eScpIHtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBiby5nZXQoYmluZGluZ05hbWUpO1xyXG5cclxuICAgIGlmIChiaW5kaW5nTmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5ib2R5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHJldHVybiBkZWZpbmVkIGRlZmF1bHRcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gcmV0dXJuIHZhbHVlOyBkZWZhdWx0IHRvIGRlZmluZWQgZGVmYXVsdFxyXG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHZhbHVlIDogcHJvcGVydHlWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydHk7XHJcblxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfUFJPUEVSVFlfVFlQRSkge1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydGllcyA9IGJvLmdldCgncHJvcGVydGllcycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihibywgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWN0aXZpdGlQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydHkgPSBmaW5kQWN0aXZpdGlQcm9wZXJ0eShhY3Rpdml0aVByb3BlcnRpZXMsIGJpbmRpbmcpO1xyXG5cclxuICAgICAgaWYgKGFjdGl2aXRpUHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gYWN0aXZpdGlQcm9wZXJ0eS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGlucHV0T3V0cHV0LFxyXG4gICAgICBpb1BhcmFtZXRlcjtcclxuXHJcbiAgaWYgKElPX0JJTkRJTkdfVFlQRVMuaW5kZXhPZihiaW5kaW5nVHlwZSkgIT09IC0xKSB7XHJcblxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGlucHV0T3V0cHV0ID0gYm8uZ2V0KCdpbnB1dE91dHB1dCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJvLCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlucHV0T3V0cHV0KSB7XHJcbiAgICAgIC8vIGlvUGFyYW1ldGVyIGNhbm5vdCBleGlzdCB5ZXQsIHJldHVybiBwcm9wZXJ0eSB2YWx1ZVxyXG4gICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFjdGl2aXRpIGlucHV0IHBhcmFtZXRlclxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUpIHtcclxuICAgIGlvUGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcclxuXHJcbiAgICBpZiAoaW9QYXJhbWV0ZXIpIHtcclxuICAgICAgaWYgKGJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKGlvUGFyYW1ldGVyLmRlZmluaXRpb24pIHtcclxuICAgICAgICAgIHJldHVybiBpb1BhcmFtZXRlci5kZWZpbml0aW9uLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaW9QYXJhbWV0ZXIudmFsdWUgfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIGFjdGl2aXRpIG91dHB1dCBwYXJhbWV0ZXJcclxuICBpZiAoYmluZGluZy50eXBlID09PSBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUpIHtcclxuICAgIGlvUGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XHJcblxyXG4gICAgaWYgKGlvUGFyYW1ldGVyKSB7XHJcbiAgICAgIHJldHVybiBpb1BhcmFtZXRlci5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIHZhciBpb0VsZW1lbnQ7XHJcblxyXG4gIGlmIChJTl9PVVRfQklORElOR19UWVBFUy5pbmRleE9mKGJpbmRpbmdUeXBlKSAhPSAtMSkge1xyXG4gICAgaW9FbGVtZW50ID0gZmluZEFjdGl2aXRpSW5PdXQoYm8sIGJpbmRpbmcpO1xyXG5cclxuICAgIGlmIChpb0VsZW1lbnQpIHtcclxuICAgICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9CVVNJTkVTU19LRVlfVFlQRSkge1xyXG4gICAgICAgIHJldHVybiBpb0VsZW1lbnQuYnVzaW5lc3NLZXk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcbiAgICAgICAgcmV0dXJuIGlvRWxlbWVudC50YXJnZXQ7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0lOX1RZUEUpIHtcclxuICAgICAgICByZXR1cm4gaW9FbGVtZW50W2JpbmRpbmcuZXhwcmVzc2lvbiA/ICdzb3VyY2VFeHByZXNzaW9uJyA6ICdzb3VyY2UnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfVFlQRSkge1xyXG4gICAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyO1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGV4ZWN1dGlvbkxpc3RlbmVyID0gYm8uZ2V0KCdleGVjdXRpb25MaXN0ZW5lcicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhlY3V0aW9uTGlzdGVuZXIgPSBmaW5kRXh0ZW5zaW9uKGJvLCAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXIuc2NyaXB0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGZpZWxkSW5qZWN0aW9uO1xyXG4gIGlmIChBQ1RJVklUSV9GSUVMRCA9PT0gYmluZGluZ1R5cGUpIHtcclxuICAgIHZhciBmaWVsZEluamVjdGlvbnMgPSBmaW5kRXh0ZW5zaW9ucyhibywgWyAnYWN0aXZpdGk6RmllbGQnIF0pO1xyXG4gICAgZmllbGRJbmplY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICBpZiAoaXRlbS5uYW1lID09PSBiaW5kaW5nLm5hbWUpIHtcclxuICAgICAgICBmaWVsZEluamVjdGlvbiA9IGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGZpZWxkSW5qZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaWVsZEluamVjdGlvbi5zdHJpbmcgfHwgZmllbGRJbmplY3Rpb24uZXhwcmVzc2lvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRocm93IHVua25vd25Qcm9wZXJ0eUJpbmRpbmcocHJvcGVydHkpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5nZXRQcm9wZXJ0eVZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGFuIHVwZGF0ZSBvcGVyYXRpb24gdGhhdCBjaGFuZ2VzIHRoZSBkaWFncmFtXHJcbiAqIGVsZW1lbnQncyBjdXN0b20gcHJvcGVydHkgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgcmVzcG9uc2Ugb2YgdGhpcyBtZXRob2Qgd2lsbCBiZSBwcm9jZXNzZWQgdmlhXHJcbiAqIHtAbGluayBQcm9wZXJ0aWVzUGFuZWwjYXBwbHlDaGFuZ2VzfS5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdHxBcnJheTxPYmplY3Q+fSByZXN1bHRzIHRvIGJlIHByb2Nlc3NlZFxyXG4gKi9cclxuZnVuY3Rpb24gc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBiaW5kaW5nID0gcHJvcGVydHkuYmluZGluZyxcclxuICAgICAgc2NvcGUgPSBwcm9wZXJ0eS5zY29wZTtcclxuXHJcbiAgdmFyIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlLFxyXG4gICAgICBiaW5kaW5nTmFtZSA9IGJpbmRpbmcubmFtZTtcclxuXHJcbiAgdmFyIHByb3BlcnR5VmFsdWU7XHJcblxyXG4gIHZhciB1cGRhdGVzID0gW107XHJcblxyXG4gIHZhciBleHRlbnNpb25FbGVtZW50cztcclxuXHJcbiAgaWYgKEVYVEVOU0lPTl9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBiby5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcblxyXG4gICAgLy8gY3JlYXRlIGV4dGVuc2lvbiBlbGVtZW50cywgaWYgdGhleSBkbyBub3QgZXhpc3QgKHlldClcclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCBudWxsLCBlbGVtZW50LCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KFxyXG4gICAgICAgIGVsZW1lbnQsIGJvLCBvYmplY3RXaXRoS2V5KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKVxyXG4gICAgICApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChzY29wZSkge1xyXG4gICAgYm8gPSBmaW5kRXh0ZW5zaW9uKGJvLCBzY29wZS5uYW1lKTtcclxuICAgIGlmICghYm8pIHtcclxuICAgICAgYm8gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoc2NvcGUubmFtZSwgbnVsbCwgZWxlbWVudCwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICBibywgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIGJvIF1cclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBwcm9wZXJ0eVxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5Jykge1xyXG5cclxuICAgIGlmIChiaW5kaW5nTmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XHJcblxyXG4gICAgICBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XHJcbiAgICAgICAgYm9keTogdmFsdWUsXHJcbiAgICAgICAgbGFuZ3VhZ2U6IGJpbmRpbmcuc2NyaXB0Rm9ybWF0XHJcbiAgICAgIH0sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdmFyIG1vZGRsZVByb3BlcnR5RGVzY3JpcHRvciA9IGJvLiRkZXNjcmlwdG9yLnByb3BlcnRpZXNCeU5hbWVbYmluZGluZ05hbWVdO1xyXG5cclxuICAgICAgdmFyIG1vZGRsZVR5cGUgPSBtb2RkbGVQcm9wZXJ0eURlc2NyaXB0b3IudHlwZTtcclxuXHJcbiAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBvbmx5IHVwZGF0ZSBTdHJpbmcsIEludGVnZXIsIFJlYWwgYW5kXHJcbiAgICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcyAoZG8gbm90IGFjY2lkZW50YWxseSBvdmVycmlkZSBjb21wbGV4IG9iamVjdHMuLi4pXHJcbiAgICAgIGlmIChCQVNJQ19NT0RETEVfVFlQRVMuaW5kZXhPZihtb2RkbGVUeXBlKSA9PT0gLTEpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgbW9kZGxlIHR5cGUgPCcgKyBtb2RkbGVUeXBlICsgJz4nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1vZGRsZVR5cGUgPT09ICdCb29sZWFuJykge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSAhIXZhbHVlO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYgKG1vZGRsZVR5cGUgPT09ICdJbnRlZ2VyJykge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG5cclxuICAgICAgICBpZiAoaXNOYU4ocHJvcGVydHlWYWx1ZSkpIHtcclxuICAgICAgICAgIC8vIGRvIG5vdCB3cml0ZSBOYU4gdmFsdWVcclxuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICBlbGVtZW50LCBibywgb2JqZWN0V2l0aEtleShiaW5kaW5nTmFtZSwgcHJvcGVydHlWYWx1ZSlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhY3Rpdml0aTpwcm9wZXJ0eVxyXG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXHJcbiAgICAgIGV4aXN0aW5nQWN0aXZpdGlQcm9wZXJ0eSxcclxuICAgICAgbmV3QWN0aXZpdGlQcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9QUk9QRVJUWV9UWVBFKSB7XHJcblxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydGllcyA9IGJvLmdldCgncHJvcGVydGllcycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFjdGl2aXRpUHJvcGVydGllcykge1xyXG4gICAgICBhY3Rpdml0aVByb3BlcnRpZXMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlByb3BlcnRpZXMnLCBudWxsLCBibywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICAgIGVsZW1lbnQsIGJvLCB7IHByb3BlcnRpZXM6IGFjdGl2aXRpUHJvcGVydGllcyB9XHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgWyBhY3Rpdml0aVByb3BlcnRpZXMgXVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhpc3RpbmdBY3Rpdml0aVByb3BlcnR5ID0gZmluZEFjdGl2aXRpUHJvcGVydHkoYWN0aXZpdGlQcm9wZXJ0aWVzLCBiaW5kaW5nKTtcclxuXHJcbiAgICBuZXdBY3Rpdml0aVByb3BlcnR5ID0gY3JlYXRlQWN0aXZpdGlQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzLFxyXG4gICAgICAndmFsdWVzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdBY3Rpdml0aVByb3BlcnR5IF0sXHJcbiAgICAgIGV4aXN0aW5nQWN0aXZpdGlQcm9wZXJ0eSA/IFsgZXhpc3RpbmdBY3Rpdml0aVByb3BlcnR5IF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICAvLyBhY3Rpdml0aTppbnB1dFBhcmFtZXRlclxyXG4gIC8vIGFjdGl2aXRpOm91dHB1dFBhcmFtZXRlclxyXG4gIHZhciBpbnB1dE91dHB1dCxcclxuICAgICAgZXhpc3RpbmdJb1BhcmFtZXRlcixcclxuICAgICAgbmV3SW9QYXJhbWV0ZXI7XHJcblxyXG4gIGlmIChJT19CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG5cclxuICAgIGlmIChzY29wZSkge1xyXG4gICAgICBpbnB1dE91dHB1dCA9IGJvLmdldCgnaW5wdXRPdXRwdXQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2FjdGl2aXRpOklucHV0T3V0cHV0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY3JlYXRlIGlucHV0T3V0cHV0IGVsZW1lbnQsIGlmIGl0IGRvIG5vdCBleGlzdCAoeWV0KVxyXG4gICAgaWYgKCFpbnB1dE91dHB1dCkge1xyXG4gICAgICBpbnB1dE91dHB1dCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6SW5wdXRPdXRwdXQnLCBudWxsLCBibywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICAgIGVsZW1lbnQsIGJvLCB7IGlucHV0T3V0cHV0OiBpbnB1dE91dHB1dCB9XHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgaW5wdXRPdXRwdXRcclxuICAgICAgICApKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW9QYXJhbWV0ZXIgPSBmaW5kSW5wdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xyXG5cclxuICAgIG5ld0lvUGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXHJcbiAgICAgIGVsZW1lbnQsXHJcbiAgICAgIGlucHV0T3V0cHV0LFxyXG4gICAgICAnaW5wdXRQYXJhbWV0ZXJzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdJb1BhcmFtZXRlciBdLFxyXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyID8gWyBleGlzdGluZ0lvUGFyYW1ldGVyIF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW9QYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcclxuXHJcbiAgICBuZXdJb1BhcmFtZXRlciA9IGNyZWF0ZU91dHB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgaW5wdXRPdXRwdXQsXHJcbiAgICAgICdvdXRwdXRQYXJhbWV0ZXJzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdJb1BhcmFtZXRlciBdLFxyXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyID8gWyBleGlzdGluZ0lvUGFyYW1ldGVyIF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gYWN0aXZpdGk6aW5cclxuICAvLyBhY3Rpdml0aTpvdXRcclxuICAvLyBhY3Rpdml0aTppbjpidXNpbmVzc0tleVxyXG4gIHZhciBleGlzdGluZ0luT3V0LFxyXG4gICAgICBuZXdJbk91dDtcclxuXHJcbiAgaWYgKElOX09VVF9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW5PdXQgPSBmaW5kQWN0aXZpdGlJbk91dChibywgYmluZGluZyk7XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9UWVBFKSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfSBlbHNlXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlPdXQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICd2YWx1ZXMnLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBbIG5ld0luT3V0IF0sXHJcbiAgICAgIGV4aXN0aW5nSW5PdXQgPyBbIGV4aXN0aW5nSW5PdXQgXSA6IFtdXHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfRklFTEQpIHtcclxuICAgIHZhciBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA9IGZpbmRFeHRlbnNpb25zKGJvLCBbICdhY3Rpdml0aTpGaWVsZCcgXSk7XHJcbiAgICB2YXIgbmV3RmllbGRJbmplY3Rpb25zID0gW107XHJcblxyXG4gICAgaWYgKGV4aXN0aW5nRmllbGRJbmplY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZXhpc3RpbmdGaWVsZEluamVjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gYmluZGluZy5uYW1lKSB7XHJcbiAgICAgICAgICBuZXdGaWVsZEluamVjdGlvbnMucHVzaChjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdGaWVsZEluamVjdGlvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RmllbGRJbmplY3Rpb25zLnB1c2goY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXHJcbiAgICAgIGVsZW1lbnQsXHJcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICAndmFsdWVzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgbmV3RmllbGRJbmplY3Rpb25zLFxyXG4gICAgICBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA/IGV4aXN0aW5nRmllbGRJbmplY3Rpb25zIDogW11cclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVwZGF0ZXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdXBkYXRlcztcclxuICB9XHJcblxyXG4gIC8vIHF1aWNrIHdhcm5pbmcgZm9yIGJldHRlciBkZWJ1Z2dpbmdcclxuICBjb25zb2xlLndhcm4oJ25vIHVwZGF0ZScsIGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnNldFByb3BlcnR5VmFsdWUgPSBzZXRQcm9wZXJ0eVZhbHVlO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIHZhbHVlIG9mIGEgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdH0gd2l0aCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgY29uc3RyYWludHMgPSBwcm9wZXJ0eS5jb25zdHJhaW50cyB8fCB7fTtcclxuXHJcbiAgaWYgKGNvbnN0cmFpbnRzLm5vdEVtcHR5ICYmIGlzRW1wdHkodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IG5vdCBiZSBlbXB0eScpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnN0cmFpbnRzLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBjb25zdHJhaW50cy5tYXhMZW5ndGgpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ011c3QgaGF2ZSBtYXggbGVuZ3RoIHtsZW5ndGh9JywgeyBsZW5ndGg6IGNvbnN0cmFpbnRzLm1heExlbmd0aCB9KTtcclxuICB9XHJcblxyXG4gIGlmIChjb25zdHJhaW50cy5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgY29uc3RyYWludHMubWluTGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWluIGxlbmd0aCB7bGVuZ3RofScsIHsgbGVuZ3RoOiBjb25zdHJhaW50cy5taW5MZW5ndGggfSk7XHJcbiAgfVxyXG5cclxuICB2YXIgcGF0dGVybiA9IGNvbnN0cmFpbnRzLnBhdHRlcm4sXHJcbiAgICAgIG1lc3NhZ2U7XHJcblxyXG4gIGlmIChwYXR0ZXJuKSB7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xyXG4gICAgICBtZXNzYWdlID0gcGF0dGVybi5tZXNzYWdlO1xyXG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKHZhbHVlLCBwYXR0ZXJuKSkge1xyXG4gICAgICByZXR1cm4gbWVzc2FnZSB8fCB0cmFuc2xhdGUoJ011c3QgbWF0Y2ggcGF0dGVybiB7cGF0dGVybn0nLCB7IHBhdHRlcm46IHBhdHRlcm4gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gbWlzYyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIHByb3BlcnR5V2l0aFNjb3BlKHByb3BlcnR5LCBzY29wZU5hbWUpIHtcclxuICBpZiAoIXNjb3BlTmFtZSkge1xyXG4gICAgcmV0dXJuIHByb3BlcnR5O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcclxuICAgIHNjb3BlOiB7XHJcbiAgICAgIG5hbWU6IHNjb3BlTmFtZVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleSAtPiB2YWx1ZSBhc3NvY2lhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxyXG4gKiBAcGFyYW0ge0FueX0gdmFsdWVcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxuZnVuY3Rpb24gb2JqZWN0V2l0aEtleShrZXksIHZhbHVlKSB7XHJcbiAgdmFyIG9iaiA9IHt9O1xyXG5cclxuICBvYmpba2V5XSA9IHZhbHVlO1xyXG5cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG4vKipcclxuICogRG9lcyB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybj9cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVyblxyXG4gKlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gbWF0Y2hlc1BhdHRlcm4oc3RyLCBwYXR0ZXJuKSB7XHJcbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcblxyXG4gIHJldHVybiByZWdleHAudGVzdChzdHIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VtcHR5KHN0cikge1xyXG4gIHJldHVybiAhc3RyIHx8IC9eXFxzKiQvLnRlc3Qoc3RyKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgRXJyb3J9IGluZGljYXRpbmcgYW4gdW5rbm93blxyXG4gKiBwcm9wZXJ0eSBiaW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICpcclxuICogQHJldHVybiB7RXJyb3J9XHJcbiAqL1xyXG5mdW5jdGlvbiB1bmtub3duUHJvcGVydHlCaW5kaW5nKHByb3BlcnR5KSB7XHJcbiAgdmFyIGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nO1xyXG5cclxuICByZXR1cm4gbmV3IEVycm9yKCd1bmtub3duIGJpbmRpbmc6IDwnICsgYmluZGluZy50eXBlICsgJz4nKTtcclxufVxyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuICBfX2RlcGVuZHNfXzogW1xyXG4gICAgcmVxdWlyZSgnLi9lbGVtZW50LXRlbXBsYXRlcy9pbmRleCcpLFxyXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XHJcbiAgXSxcclxuICBfX2luaXRfXzogWyAncHJvcGVydGllc1Byb3ZpZGVyJyBdLFxyXG4gIHByb3BlcnRpZXNQcm92aWRlcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXInKSBdXHJcbn07XHJcblxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgYXN5bmNDb250aW51YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0FzeW5jQ29udGludWF0aW9uJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6QXN5bmNDYXBhYmxlJykpIHtcclxuXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoYXN5bmNDb250aW51YXRpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjYWxsYWJsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FsbGFibGUnKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZmxhdHRlbkRlZXAgPSByZXF1aXJlKCdsb2Rhc2gvZmxhdHRlbkRlZXAnKTtcclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcclxuXHJcbmZ1bmN0aW9uIGdldENhbGxhYmxlVHlwZShlbGVtZW50KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBib0NhbGxlZEVsZW1lbnQgPSBiby5nZXQoJ2NhbGxlZEVsZW1lbnQnKSxcclxuICAgICAgYm9DYXNlUmVmID0gYm8uZ2V0KCdhY3Rpdml0aTpjYXNlUmVmJyk7XHJcblxyXG4gIHZhciBjYWxsQWN0aXZpdHlUeXBlID0gJyc7XHJcbiAgaWYgKHR5cGVvZiBib0NhbGxlZEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBjYWxsQWN0aXZpdHlUeXBlID0gJ2JwbW4nO1xyXG4gIH0gZWxzZVxyXG5cclxuICBpZiAodHlwZW9mIGJvQ2FzZVJlZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGNhbGxBY3Rpdml0eVR5cGUgPSAnY21tbic7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2FsbEFjdGl2aXR5VHlwZTtcclxufVxyXG5cclxudmFyIERFRkFVTFRfUFJPUFMgPSB7XHJcbiAgY2FsbGVkRWxlbWVudDogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50QmluZGluZyc6ICdsYXRlc3QnLFxyXG4gICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50VmVyc2lvbic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFRlbmFudElkJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycgOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicgOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOmNhc2VSZWYnOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOmNhc2VCaW5kaW5nJzogJ2xhdGVzdCcsXHJcbiAgJ2FjdGl2aXRpOmNhc2VWZXJzaW9uJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpjYXNlVGVuYW50SWQnOiB1bmRlZmluZWRcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYWN0aXZpdGk6Q2FsbEFjdGl2aXR5JykpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkIDogJ2NhbGxBY3Rpdml0eScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYWxsQWN0aXZpdHkgVHlwZScpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogW1xyXG4gICAgICB7IG5hbWU6ICdCUE1OJywgdmFsdWU6ICdicG1uJyB9LFxyXG4gICAgICB7IG5hbWU6ICdDTU1OJywgdmFsdWU6ICdjbW1uJyB9XHJcbiAgICBdLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FsbEFjdGl2aXR5VHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbEFjdGl2aXR5VHlwZTogZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gdmFsdWVzLmNhbGxBY3Rpdml0eVR5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUFJPUFMpO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09ICdicG1uJykge1xyXG4gICAgICAgIHByb3BzLmNhbGxlZEVsZW1lbnQgPSAnJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnY21tbicpIHtcclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6Y2FzZVJlZiddID0gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGNhbGxhYmxlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRDYWxsYWJsZVR5cGU6IGdldENhbGxhYmxlVHlwZVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZmxhdHRlbkRlZXAoZ3JvdXAuZW50cmllcyk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgY2FuZGlkYXRlU3RhcnRlciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FuZGlkYXRlU3RhcnRlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlByb2Nlc3MnKSB8fFxyXG4gICAgICBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGNhbmRpZGF0ZVN0YXJ0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgaXNBbnkgPSByZXF1aXJlKCdicG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCcpLmlzQW55LFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJykuZXNjYXBlSFRNTCxcclxuICAgIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBzY3JpcHRJbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vU2NyaXB0Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gIGlmICghKGlzKGVsZW1lbnQsICdicG1uOlNlcXVlbmNlRmxvdycpICYmIGlzQ29uZGl0aW9uYWxTb3VyY2UoZWxlbWVudC5zb3VyY2UpKVxyXG4gICAgJiYgIWNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ2xhbmd1YWdlJywgJ2JvZHknLCB0cnVlLCB0cmFuc2xhdGUpO1xyXG4gIGdyb3VwLmVudHJpZXMucHVzaCh7XHJcbiAgICBpZDogJ2NvbmRpdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25kaXRpb24nKSxcclxuICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWNvbmRpdGlvbi10eXBlXCI+JysgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ0NvbmRpdGlvbiBUeXBlJykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW0tY29uZGl0aW9uLXR5cGVcIiBuYW1lPVwiY29uZGl0aW9uVHlwZVwiIGRhdGEtdmFsdWU+JyArXHJcbiAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiZXhwcmVzc2lvblwiPicrIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdFeHByZXNzaW9uJykpICsgJzwvb3B0aW9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT1cInNjcmlwdFwiPicrIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdTY3JpcHQnKSkgKyAnPC9vcHRpb24+JyArXHJcbiAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+PC9vcHRpb24+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9zZWxlY3Q+JyArXHJcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcblxyXG4gICAgICAgICAgICAvLyBleHByZXNzaW9uXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWNvbmRpdGlvblwiIGRhdGEtc2hvdz1cImlzRXhwcmVzc2lvblwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiBkYXRhLXNob3c9XCJpc0V4cHJlc3Npb25cIj4nICtcclxuICAgICAgICAgICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tY29uZGl0aW9uXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiY29uZGl0aW9uXCIgLz4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiY2xlYXJcIiBkYXRhLWFjdGlvbj1cImNsZWFyXCIgZGF0YS1zaG93PVwiY2FuQ2xlYXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgJzxzcGFuPlg8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXHJcbiAgICAgICAgICAgICAgICBzY3JpcHQudGVtcGxhdGUgK1xyXG4gICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblxyXG4gICAgICAgID8gY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uY29uZGl0aW9uXHJcbiAgICAgICAgOiBiby5jb25kaXRpb25FeHByZXNzaW9uO1xyXG5cclxuICAgICAgdmFyIHZhbHVlcyA9IHt9LFxyXG4gICAgICAgICAgY29uZGl0aW9uVHlwZSA9ICcnO1xyXG5cclxuICAgICAgaWYgKGNvbmRpdGlvbkV4cHJlc3Npb24pIHtcclxuICAgICAgICB2YXIgY29uZGl0aW9uTGFuZ3VhZ2UgPSBjb25kaXRpb25FeHByZXNzaW9uLmxhbmd1YWdlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uTGFuZ3VhZ2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ3NjcmlwdCc7XHJcbiAgICAgICAgICB2YWx1ZXMgPSBzY3JpcHQuZ2V0KGVsZW1lbnQsIGNvbmRpdGlvbkV4cHJlc3Npb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ2V4cHJlc3Npb24nO1xyXG4gICAgICAgICAgdmFsdWVzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbkV4cHJlc3Npb24uZ2V0KCdib2R5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZXMuY29uZGl0aW9uVHlwZSA9IGNvbmRpdGlvblR5cGU7XHJcblxyXG4gICAgICByZXR1cm4gdmFsdWVzO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvblR5cGUgPSB2YWx1ZXMuY29uZGl0aW9uVHlwZTtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICB2YXIgY29uZGl0aW9uUHJvcHMgPSB7XHJcbiAgICAgICAgYm9keTogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoY29uZGl0aW9uVHlwZSA9PT0gJ3NjcmlwdCcpIHtcclxuICAgICAgICBjb25kaXRpb25Qcm9wcyA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY29uZGl0aW9uID0gdmFsdWVzLmNvbmRpdGlvbjtcclxuXHJcbiAgICAgICAgY29uZGl0aW9uUHJvcHMuYm9keSA9IGNvbmRpdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNvbmRpdGlvbk9yQ29uZGl0aW9uRXhwcmVzc2lvbjtcclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25UeXBlKSB7XHJcbiAgICAgICAgY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsXHJcbiAgICAgICAgICBjb25kaXRpb25Qcm9wcyxcclxuICAgICAgICAgIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uIHx8IGJvLFxyXG4gICAgICAgICAgYnBtbkZhY3RvcnlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB2YXIgc291cmNlID0gZWxlbWVudC5zb3VyY2U7XHJcblxyXG4gICAgICAgIC8vIGlmIGRlZmF1bHQtZmxvdywgcmVtb3ZlIGRlZmF1bHQtcHJvcGVydHkgZnJvbSBzb3VyY2VcclxuICAgICAgICBpZiAoc291cmNlICYmIHNvdXJjZS5idXNpbmVzc09iamVjdC5kZWZhdWx0ID09PSBibykge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhzb3VyY2UsIHsgJ2RlZmF1bHQnOiB1bmRlZmluZWQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHVwZGF0ZSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXHJcbiAgICAgICAgPyB7IGNvbmRpdGlvbjogY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uIH1cclxuICAgICAgICA6IHsgY29uZGl0aW9uRXhwcmVzc2lvbjogY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uIH07XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiB8fCBibywgdXBkYXRlKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHQgPSB7fTtcclxuXHJcbiAgICAgIGlmICghdmFsdWVzLmNvbmRpdGlvbiAmJiB2YWx1ZXMuY29uZGl0aW9uVHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5jb25kaXRpb24gPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWVzLmNvbmRpdGlvblR5cGUgPT09ICdzY3JpcHQnKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHNjcmlwdC52YWxpZGF0ZShlbGVtZW50LCB2YWx1ZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgaXNFeHByZXNzaW9uOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvblR5cGUgPSBkb21RdWVyeSgnc2VsZWN0W25hbWU9Y29uZGl0aW9uVHlwZV0nLCBpbnB1dE5vZGUpO1xyXG4gICAgICBpZiAoY29uZGl0aW9uVHlwZS5zZWxlY3RlZEluZGV4ID49IDApIHtcclxuICAgICAgICByZXR1cm4gY29uZGl0aW9uVHlwZS5vcHRpb25zW2NvbmRpdGlvblR5cGUuc2VsZWN0ZWRJbmRleF0udmFsdWUgPT09ICdleHByZXNzaW9uJztcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1NjcmlwdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICAgIHZhciBjb25kaXRpb25UeXBlID0gZG9tUXVlcnkoJ3NlbGVjdFtuYW1lPWNvbmRpdGlvblR5cGVdJywgaW5wdXROb2RlKTtcclxuICAgICAgaWYgKGNvbmRpdGlvblR5cGUuc2VsZWN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmRpdGlvblR5cGUub3B0aW9uc1tjb25kaXRpb25UeXBlLnNlbGVjdGVkSW5kZXhdLnZhbHVlID09PSAnc2NyaXB0JztcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICAgIC8vIGNsZWFyIHRleHQgaW5wdXRcclxuICAgICAgZG9tUXVlcnkoJ2lucHV0W25hbWU9Y29uZGl0aW9uXScsIGlucHV0Tm9kZSkudmFsdWU9Jyc7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FuQ2xlYXI6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1jb25kaXRpb25dJywgaW5wdXROb2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBpbnB1dC52YWx1ZSAhPT0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIHNjcmlwdCA6IHNjcmlwdCxcclxuXHJcbiAgICBjc3NDbGFzc2VzOiBbICdicHAtdGV4dGZpZWxkJyBdXHJcbiAgfSk7XHJcbn07XHJcblxyXG5cclxuLy8gdXRpbGl0aWVzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG52YXIgQ09ORElUSU9OQUxfU09VUkNFUyA9IFtcclxuICAnYnBtbjpBY3Rpdml0eScsXHJcbiAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXHJcbiAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheScsXHJcbiAgJ2JwbW46Q29tcGxleEdhdGV3YXknXHJcbl07XHJcblxyXG5mdW5jdGlvbiBpc0NvbmRpdGlvbmFsU291cmNlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXNBbnkoZWxlbWVudCwgQ09ORElUSU9OQUxfU09VUkNFUyk7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKSxcclxuICAgIElucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbmZ1bmN0aW9uIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSB7XHJcbiAgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb25uZWN0b3IoYm8pIHtcclxuICByZXR1cm4gSW5wdXRPdXRwdXRIZWxwZXIuZ2V0Q29ubmVjdG9yKGJvKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb25uZWN0b3IoZWxlbWVudCkge1xyXG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgPT09ICdjb25uZWN0b3InO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnY29ubmVjdG9ySWQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yIElkJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY29ubmVjdG9ySWQnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGNvbm5lY3RvciA9IGJvICYmIGdldENvbm5lY3Rvcihibyk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGNvbm5lY3RvciAmJiBjb25uZWN0b3IuZ2V0KCdjb25uZWN0b3JJZCcpO1xyXG4gICAgICByZXR1cm4geyBjb25uZWN0b3JJZDogdmFsdWUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IoYm8pO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbm5lY3Rvciwge1xyXG4gICAgICAgIGNvbm5lY3RvcklkOiB2YWx1ZXMuY29ubmVjdG9ySWQgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBpc0Nvbm5lY3RvcihlbGVtZW50KSAmJiAhdmFsdWVzLmNvbm5lY3RvcklkID8geyBjb25uZWN0b3JJZDogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNDb25uZWN0b3IoZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgaW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0UGFyYW1ldGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIG9wdGlvbnMgPSBhc3NpZ24oe1xyXG4gICAgaWRQcmVmaXg6ICdjb25uZWN0b3ItJyxcclxuICAgIGluc2lkZUNvbm5lY3RvcjogdHJ1ZVxyXG4gIH0sIG9wdGlvbnMpO1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlucHV0T3V0cHV0ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbnB1dE91dHB1dCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaW5wdXRPdXRwdXRFbnRyeSA9IGlucHV0T3V0cHV0KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZFByZWZpeDogJ2Nvbm5lY3Rvci0nLFxyXG4gICAgaW5zaWRlQ29ubmVjdG9yOiB0cnVlXHJcbiAgfSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGlucHV0T3V0cHV0RW50cnkuZW50cmllcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBnZXRTZWxlY3RlZFBhcmFtZXRlcjogaW5wdXRPdXRwdXRFbnRyeS5nZXRTZWxlY3RlZFBhcmFtZXRlclxyXG4gIH07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpLFxyXG4gICAgZXJyb3IgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uJyk7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZXJyb3JFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46RW5kRXZlbnQnXHJcbiAgXTtcclxuXHJcbiAgZm9yRWFjaChlcnJvckV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcclxuXHJcbiAgICAgIHZhciBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChlcnJvckV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIHZhciBpc0NhdGNoaW5nRXJyb3JFdmVudCA9IGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSB8fCBpcyAoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpO1xyXG5cclxuICAgICAgICB2YXIgc2hvd0Vycm9yQ29kZVZhcmlhYmxlID0gaXNDYXRjaGluZ0Vycm9yRXZlbnQsXHJcbiAgICAgICAgICAgIHNob3dFcnJvck1lc3NhZ2VWYXJpYWJsZSA9IGlzQ2F0Y2hpbmdFcnJvckV2ZW50O1xyXG5cclxuICAgICAgICBlcnJvcihcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGJwbW5GYWN0b3J5LFxyXG4gICAgICAgICAgZXJyb3JFdmVudERlZmluaXRpb24sXHJcbiAgICAgICAgICBzaG93RXJyb3JDb2RlVmFyaWFibGUsXHJcbiAgICAgICAgICBzaG93RXJyb3JNZXNzYWdlVmFyaWFibGUsXHJcbiAgICAgICAgICB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xyXG5cclxudmFyIGV4dGVybmFsVGFza1ByaW9yaXR5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlcm5hbFRhc2tQcmlvcml0eScpO1xyXG5cclxuZnVuY3Rpb24gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCkge1xyXG4gIHZhciBibyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgc2VydmljZVRhc2tMaWtlIGVsZW1lbnQsIGZldGNoIHRoZSBub3JtYWwgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgLy8gVGhpcyBhdm9pZHMgdGhlIGxvc3Mgb2YgdGhlIHByb2Nlc3MgLyBwYXJ0aWNpcGFudCBidXNpbmVzcyBvYmplY3RcclxuICBpZiAoIWJvKSB7XHJcbiAgICBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJvO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBibyA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoaXMoYm8sICdhY3Rpdml0aTpUYXNrUHJpb3JpemVkJykgfHwgKGlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV4dGVybmFsVGFza1ByaW9yaXR5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xyXG5cclxudmFyIGZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9GaWVsZEluamVjdGlvbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgYm8gPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBmaWVsZEluamVjdGlvbkVudHJ5ID0gZmllbGRJbmplY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSwgeyBidXNpbmVzc09iamVjdDogYm8gfSk7XHJcblxyXG4gIGlmIChmaWVsZEluamVjdGlvbkVudHJ5ICYmIGZpZWxkSW5qZWN0aW9uRW50cnkubGVuZ3RoID4gMCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGZpZWxkSW5qZWN0aW9uRW50cnkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50cyA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLmdldEV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgcmVtb3ZlRW50cnkgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKS5yZW1vdmVFbnRyeSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlbnNpb25FbGVtZW50cycpLFxyXG4gICAgcHJvcGVydGllcyA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vUHJvcGVydGllcycpLFxyXG4gICAgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZm9ybUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9Gb3JtSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKSxcclxuICAgIGVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVWYWx1ZUlkKCkge1xyXG4gIHJldHVybiB1dGlscy5uZXh0SWQoJ1ZhbHVlXycpO1xyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSBmb3JtIGZpZWxkIHNwZWNpZmljIHRleHRGaWVsZCB1c2luZyBlbnRyeUZhY3RvcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubGFiZWxcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm1vZGVsUHJvcGVydHlcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMudmFsaWRhdGVcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fSBhbiBlbnRyeUZhY3RvcnkudGV4dEZpZWxkIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZm9ybUZpZWxkVGV4dEZpZWxkKG9wdGlvbnMsIGdldFNlbGVjdGVkRm9ybUZpZWxkKSB7XHJcblxyXG4gIHZhciBpZCA9IG9wdGlvbnMuaWQsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcclxuICAgICAgdmFsaWRhdGUgPSBvcHRpb25zLnZhbGlkYXRlO1xyXG5cclxuICByZXR1cm4gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogaWQsXHJcbiAgICBsYWJlbDogbGFiZWwsXHJcbiAgICBtb2RlbFByb3BlcnR5OiBtb2RlbFByb3BlcnR5LFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9LFxyXG4gICAgICAgICAgdmFsdWVzID0ge307XHJcblxyXG4gICAgICB2YWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSBzZWxlY3RlZEZvcm1GaWVsZFttb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNldCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHZhciBjbWQgPSBvcHRpb25zLnNldChlbGVtZW50LCB2YWx1ZXMsIG5vZGUpO1xyXG5cclxuICAgICAgICBpZiAoY21kKSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzW21vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgcHJvcGVydGllcykpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVGb3JtS2V5QW5kRGF0YVN1cHBvcnRlZChlbGVtZW50KSB7XHJcbiAgcmV0dXJuIChcclxuICAgICAgaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpXHJcbiAgKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmICghZW5zdXJlRm9ybUtleUFuZERhdGFTdXBwb3J0ZWQoZWxlbWVudCkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3JtIGZpZWxkIHF1ZXJ5aW5nIHRoZSBmb3JtIGZpZWxkIHNlbGVjdCBib3hcclxuICAgKiBmcm9tIHRoZSBET00uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gICAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IG5vZGUgLSBET00gZWxlbWVudCBvZiBhbnkgZm9ybSBmaWVsZCB0ZXh0IGlucHV0XHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZvcm0gZmllbGRcclxuICAgKi9cclxuICBmdW5jdGlvbiBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSB7XHJcbiAgICB2YXIgc2VsZWN0ZWQgPSBmb3JtRmllbGRzRW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZS5wYXJlbnROb2RlKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQuaWR4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkKGVsZW1lbnQsIHNlbGVjdGVkLmlkeCk7XHJcbiAgfVxyXG5cclxuICAvLyBbRm9ybUtleV0gZm9ybSBrZXkgdGV4dCBpbnB1dCBmaWVsZFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkIDogJ2Zvcm0ta2V5JyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdGb3JtIEtleScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2Zvcm1LZXknLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmb3JtS2V5OiBiby5nZXQoJ2FjdGl2aXRpOmZvcm1LZXknKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICAgICAgZm9ybUtleSA9IHZhbHVlcy5mb3JtS2V5IHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgJ2FjdGl2aXRpOmZvcm1LZXknOiBmb3JtS2V5IH0pO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIHNlbGVjdCBib3hcclxuICB2YXIgZm9ybUZpZWxkc0VudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZm9ybS1maWVsZHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRm9ybSBGaWVsZHMnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdpZCcsXHJcbiAgICBwcmVmaXg6ICdGb3JtUHJvcGVydHknLFxyXG4gICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtdIH0sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50cyB9KSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogdmFyIGZvcm1EYXRhID0gZm9ybUhlbHBlci5nZXRGb3JtRGF0YShlbGVtZW50KTtcclxuXHJcbiAgICAgICBpZiAoIWZvcm1EYXRhKSB7XHJcbiAgICAgICAgIGZvcm1EYXRhID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpGb3JtRGF0YScsIHsgZmllbGRzOiBbXSB9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICAgICAgJ2V4dGVuc2lvbkVsZW1lbnRzJyxcclxuICAgICAgICAgICBbZm9ybURhdGFdLFxyXG4gICAgICAgICAgIFtdXHJcbiAgICAgICAgICkpO1xyXG4gICAgICAgfSovXHJcbiAgICAgIC8qKmFjdGl2aXRpIOaYr+WQkSBleHRlbnNpb25FbGVtZW50cyDkuIvov73liqDlhYPntKDvvIzogIzkuI3mmK8gZm9ybURhdGEg5LiL77yMKi9cclxuICAgICAgdmFyIGZpZWxkID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpGb3JtUHJvcGVydHknLCB7IGlkOiB2YWx1ZSB9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICBpZiAodHlwZW9mIGV4dGVuc2lvbkVsZW1lbnRzLnZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFsgZmllbGQgXSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB7XHJcbiAgICAgICAgICB2YWx1ZXM6IFsgZmllbGQgXVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGZpZWxkcyA9IGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcclxuICAgICAgdmFyIGVudHJ5ID0gZmllbGRzW2lkeF0sXHJcbiAgICAgICAgICBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChyZW1vdmVFbnRyeShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgbnVsbCwgW2VudHJ5XSkpO1xyXG4gICAgICAgIC8qIGlmIChlbnRyeS5pZCA9PT0gZm9ybURhdGEuZ2V0KCdidXNpbmVzc0tleScpKSB7XHJcbiAgICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHsgJ2J1c2luZXNzS2V5JzogdW5kZWZpbmVkIH0pKTtcclxuICAgICAgICAgfSovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRGb3JtRmllbGRzKGVsZW1lbnQpO1xyXG4gICAgfSxcclxuICAgIGhpZGVFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGZvcm1GaWVsZHNFbnRyeSk7XHJcblxyXG5cclxuICAvLyBbRm9ybURhdGFdIEZvcm0gRmllbGQgbGFiZWxcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC1oZWFkZXInLFxyXG4gICAgbGFiZWxUZXh0OiB0cmFuc2xhdGUoJ0Zvcm0gRmllbGQnKSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBpZCB0ZXh0IGlucHV0IGZpZWxkXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWlkJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0lEJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaWQnLFxyXG5cclxuICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9O1xyXG5cclxuICAgICAgcmV0dXJuIHNlbGVjdGVkRm9ybUZpZWxkLmlkO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcywgbm9kZSkge1xyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgcHJvcGVydGllcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcblxyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XHJcblxyXG4gICAgICAgIHZhciBpZFZhbHVlID0gdmFsdWVzLmlkO1xyXG5cclxuICAgICAgICBpZiAoIWlkVmFsdWUgfHwgaWRWYWx1ZS50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpZDogJ0Zvcm0gZmllbGQgaWQgbXVzdCBub3QgYmUgZW1wdHknIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm9ybUZpZWxkcyA9IGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGV4aXN0aW5nRm9ybUZpZWxkID0gZmluZChmb3JtRmllbGRzLCBmdW5jdGlvbihmKSB7XHJcbiAgICAgICAgICByZXR1cm4gZiAhPT0gZm9ybUZpZWxkICYmIGYuaWQgPT09IGlkVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleGlzdGluZ0Zvcm1GaWVsZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgaWQ6ICdGb3JtIGZpZWxkIGlkIGFscmVhZHkgdXNlZCBpbiBmb3JtIGRhdGEuJyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIHR5cGUgY29tYm8gYm94XHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5jb21ib0JveCh7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGQtdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ3N0cmluZycsIHZhbHVlOiAnc3RyaW5nJyB9LFxyXG4gICAgICB7IG5hbWU6ICdsb25nJywgdmFsdWU6ICdsb25nJyB9LFxyXG4gICAgICB7IG5hbWU6ICdib29sZWFuJywgdmFsdWU6ICdib29sZWFuJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkYXRlJywgdmFsdWU6ICdkYXRlJyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbnVtJywgdmFsdWU6ICdlbnVtJyB9XHJcbiAgICBdLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3R5cGUnLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdGVkRm9ybUZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogc2VsZWN0ZWRGb3JtRmllbGQudHlwZSB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgY29tbWFuZHMgPSBbXTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEZvcm1GaWVsZC50eXBlID09PSAnZW51bScgJiYgdmFsdWVzLnR5cGUgIT09ICdlbnVtJykge1xyXG4gICAgICAgIC8vIGRlbGV0ZSBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzIGZyb20gZm9ybUZpZWxkLnZhbHVlcyB3aGVuIHN3aXRjaGluZyBmcm9tIHR5cGUgZW51bVxyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHNlbGVjdGVkRm9ybUZpZWxkLCB7IHZhbHVlczogdW5kZWZpbmVkIH0pKTtcclxuICAgICAgfVxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBzZWxlY3RlZEZvcm1GaWVsZCwgdmFsdWVzKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgbGFiZWwgdGV4dCBpbnB1dCBmaWVsZFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC1sYWJlbCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMYWJlbCcpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2xhYmVsJyxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIGRlZmF1bHRWYWx1ZSB0ZXh0IGlucHV0IGZpZWxkXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWRlZmF1bHRWYWx1ZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEZWZhdWx0IFZhbHVlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZGVmYXVsdFZhbHVlJyxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBlbnVtIHZhbHVlcyBsYWJlbFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzLWhlYWRlcicsXHJcbiAgICBsYWJlbFRleHQ6IHRyYW5zbGF0ZSgnVmFsdWVzJyksXHJcbiAgICBkaXZpZGVyOiB0cnVlLFxyXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgcmV0dXJuIHNlbGVjdGVkRm9ybUZpZWxkICYmIHNlbGVjdGVkRm9ybUZpZWxkLnR5cGUgPT09ICdlbnVtJztcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBlbnVtIHZhbHVlcyB0YWJsZVxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzJyxcclxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ0lkJyksIHRyYW5zbGF0ZSgnTmFtZScpIF0sXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2lkJywgJ25hbWUnIF0sXHJcbiAgICBhZGRMYWJlbDp0cmFuc2xhdGUoJ0FkZCBWYWx1ZScpLFxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBzZWxlY3RlZEZvcm1GaWVsZCAmJiBzZWxlY3RlZEZvcm1GaWVsZC50eXBlID09PSAnZW51bSc7XHJcbiAgICB9LFxyXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkRm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRFbnVtVmFsdWVzKHNlbGVjdGVkRm9ybUZpZWxkKTtcclxuICAgIH0sXHJcbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgaWQgPSBnZW5lcmF0ZVZhbHVlSWQoKTtcclxuXHJcbiAgICAgIHZhciBlbnVtVmFsdWUgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAnYWN0aXZpdGk6VmFsdWUnLFxyXG4gICAgICAgICAgeyBpZDogaWQsIG5hbWU6IHVuZGVmaW5lZCB9LFxyXG4gICAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgICBicG1uRmFjdG9yeVxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBzZWxlY3RlZEZvcm1GaWVsZCwgJ3ZhbHVlcycsIFtlbnVtVmFsdWVdKTtcclxuICAgIH0sXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkRm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICBlbnVtVmFsdWUgPSBzZWxlY3RlZEZvcm1GaWVsZC52YWx1ZXNbaWR4XTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBzZWxlY3RlZEZvcm1GaWVsZCwgJ3ZhbHVlcycsIG51bGwsIFtlbnVtVmFsdWVdKTtcclxuICAgIH0sXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgZW51bVZhbHVlID0gc2VsZWN0ZWRGb3JtRmllbGQudmFsdWVzW2lkeF07XHJcblxyXG4gICAgICB2YWx1ZS5uYW1lID0gdmFsdWUubmFtZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZW51bVZhbHVlLCB2YWx1ZSk7XHJcbiAgICB9LFxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpIHtcclxuXHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgZW51bVZhbHVlID0gc2VsZWN0ZWRGb3JtRmllbGQudmFsdWVzW2lkeF07XHJcblxyXG4gICAgICBpZiAoZW51bVZhbHVlKSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgaWQgaXMgdmFsaWRcclxuICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9yID0gdXRpbHMuaXNJZFZhbGlkKGVudW1WYWx1ZSwgdmFsdWUuaWQsIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiB7IGlkOiB2YWxpZGF0aW9uRXJyb3IgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gVmFsaWRhdGlvbiBsYWJlbFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLXZhbGlkYXRpb24taGVhZGVyJyxcclxuICAgIGxhYmVsVGV4dDogdHJhbnNsYXRlKCdWYWxpZGF0aW9uJyksXHJcbiAgICBkaXZpZGVyOiB0cnVlLFxyXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIGNvbnN0cmFpbnRzIHRhYmxlXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50YWJsZSh7XHJcbiAgICBpZDogJ2NvbnN0cmFpbnRzLWxpc3QnLFxyXG4gICAgbW9kZWxQcm9wZXJ0aWVzOiBbICduYW1lJywgJ2NvbmZpZycgXSxcclxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ05hbWUnKSwgdHJhbnNsYXRlKCdDb25maWcnKSBdLFxyXG4gICAgYWRkTGFiZWw6IHRyYW5zbGF0ZSgnQWRkIENvbnN0cmFpbnQnKSxcclxuICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBmb3JtSGVscGVyLmdldENvbnN0cmFpbnRzKGZvcm1GaWVsZCk7XHJcbiAgICB9LFxyXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW10sXHJcbiAgICAgICAgICBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIHZhbGlkYXRpb24gPSBmb3JtRmllbGQudmFsaWRhdGlvbjtcclxuXHJcbiAgICAgIGlmICghdmFsaWRhdGlvbikge1xyXG4gICAgICAgIC8vIGNyZWF0ZSB2YWxpZGF0aW9uIGJ1c2luZXNzIG9iamVjdCBhbmQgYWRkIGl0IHRvIGZvcm0gZGF0YSwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHZhbGlkYXRpb24gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlZhbGlkYXRpb24nLCB7fSwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZm9ybUZpZWxkLCB7ICd2YWxpZGF0aW9uJzogdmFsaWRhdGlvbiB9KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBuZXdDb25zdHJhaW50ID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgJ2FjdGl2aXRpOkNvbnN0cmFpbnQnLFxyXG4gICAgICAgICAgeyBuYW1lOiB1bmRlZmluZWQsIGNvbmZpZzogdW5kZWZpbmVkIH0sXHJcbiAgICAgICAgICB2YWxpZGF0aW9uLFxyXG4gICAgICAgICAgYnBtbkZhY3RvcnlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIHZhbGlkYXRpb24sICdjb25zdHJhaW50cycsIFsgbmV3Q29uc3RyYWludCBdKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICBjb25zdHJhaW50ID0gZm9ybUhlbHBlci5nZXRDb25zdHJhaW50cyhmb3JtRmllbGQpW2lkeF07XHJcblxyXG4gICAgICB2YWx1ZS5uYW1lID0gdmFsdWUubmFtZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIHZhbHVlLmNvbmZpZyA9IHZhbHVlLmNvbmZpZyB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbnN0cmFpbnQsIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW10sXHJcbiAgICAgICAgICBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGNvbnN0cmFpbnRzID0gZm9ybUhlbHBlci5nZXRDb25zdHJhaW50cyhmb3JtRmllbGQpLFxyXG4gICAgICAgICAgY3VycmVudENvbnN0cmFpbnQgPSBjb25zdHJhaW50c1tpZHhdO1xyXG5cclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICBmb3JtRmllbGQudmFsaWRhdGlvbixcclxuICAgICAgICAgICdjb25zdHJhaW50cycsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgWyBjdXJyZW50Q29uc3RyYWludCBdXHJcbiAgICAgICkpO1xyXG5cclxuICAgICAgaWYgKGNvbnN0cmFpbnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIC8vIHJlbW92ZSBhY3Rpdml0aTp2YWxpZGF0aW9uIGlmIHRoZSBsYXN0IGV4aXN0aW5nIGNvbnN0cmFpbnQgaGFzIGJlZW4gcmVtb3ZlZFxyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgeyB2YWxpZGF0aW9uOiB1bmRlZmluZWQgfSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gUHJvcGVydGllcyBsYWJlbFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLXByb3BlcnRpZXMtaGVhZGVyJyxcclxuICAgIGxhYmVsVGV4dDogdHJhbnNsYXRlKCdQcm9wZXJ0aWVzJyksXHJcbiAgICBkaXZpZGVyOiB0cnVlLFxyXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBhY3Rpdml0aTpwcm9wZXJ0aWVzIHRhYmxlXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKHByb3BlcnRpZXMoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC1wcm9wZXJ0aWVzJyxcclxuICAgIG1vZGVsUHJvcGVydGllczogWyAnaWQnLCAndmFsdWUnIF0sXHJcbiAgICBsYWJlbHM6IFsgdHJhbnNsYXRlKCdJZCcpLCB0cmFuc2xhdGUoJ1ZhbHVlJykgXSxcclxuICAgIGdldFBhcmVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9LFxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9LCB0cmFuc2xhdGUpKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBoaXN0b3J5VGltZVRvTGl2ZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSGlzdG9yeVRpbWVUb0xpdmUnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpQcm9jZXNzJykgfHxcclxuICAgICAgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG5cclxuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChoaXN0b3J5VGltZVRvTGl2ZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAoIWlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICAgICAgICByZXR1cm4gYm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpbnB1dE91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSW5wdXRPdXRwdXRQYXJhbWV0ZXInKTtcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChpbnB1dE91dHB1dFBhcmFtZXRlcihlbGVtZW50LCBicG1uRmFjdG9yeSwgYXNzaWduKHt9LCBvcHRpb25zKSwgdHJhbnNsYXRlKSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaW5wdXRPdXRwdXQgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0Jyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBpbnB1dE91dHB1dEVudHJ5ID0gaW5wdXRPdXRwdXQoZWxlbWVudCwgYnBtbkZhY3RvcnksIHt9LCB0cmFuc2xhdGUpO1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRFbnRyeS5lbnRyaWVzKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGdldFNlbGVjdGVkUGFyYW1ldGVyOiBpbnB1dE91dHB1dEVudHJ5LmdldFNlbGVjdGVkUGFyYW1ldGVyXHJcbiAgfTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgam9iUHJpb3JpdHkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0pvYlByaW9yaXR5JyksXHJcbiAgICBqb2JSZXRyeVRpbWVDeWNsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSm9iUmV0cnlUaW1lQ3ljbGUnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpKb2JQcmlvcml6ZWQnKSB8fFxyXG4gICAgICBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGpvYlByaW9yaXR5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmICghaXMoYm8sICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgICAgIHJldHVybiBibztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuICAgICAgfVxyXG4gICAgfSwgdHJhbnNsYXRlKSk7XHJcbiAgfVxyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkFzeW5jQ2FwYWJsZScpKSB7XHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoam9iUmV0cnlUaW1lQ3ljbGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuICB9XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyksXHJcblxyXG4gICAgc2NyaXB0SW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1NjcmlwdCcpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIExJU1RFTkVSX1RZUEVfTEFCRUwgPSB7XHJcbiAgICBjbGFzczogdHJhbnNsYXRlKCdKYXZhIENsYXNzJyksXHJcbiAgICBleHByZXNzaW9uOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKSxcclxuICAgIGRlbGVnYXRlRXhwcmVzc2lvbjogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBFeHByZXNzaW9uJyksXHJcbiAgICBzY3JpcHQ6IHRyYW5zbGF0ZSgnU2NyaXB0JylcclxuICB9O1xyXG5cclxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgdmFyIGdldFNlbGVjdGVkTGlzdGVuZXIgPSBvcHRpb25zLmdldFNlbGVjdGVkTGlzdGVuZXI7XHJcblxyXG4gIHZhciBjbGFzc1Byb3AgPSAnY2xhc3MnLFxyXG4gICAgICBleHByZXNzaW9uUHJvcCA9ICdleHByZXNzaW9uJyxcclxuICAgICAgZGVsZWdhdGVFeHByZXNzaW9uUHJvcCA9ICdkZWxlZ2F0ZUV4cHJlc3Npb24nLFxyXG4gICAgICBzY3JpcHRQcm9wID0gJ3NjcmlwdCc7XHJcblxyXG4gIHZhciBleGVjdXRpb25MaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnMgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNTZXF1ZW5jZUZsb3coZWxlbWVudCkgPyBbXHJcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgndGFrZScpLCB2YWx1ZTogJ3Rha2UnIH1cclxuICBdIDogW1xyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ3N0YXJ0JyksIHZhbHVlOiAnc3RhcnQnIH0sXHJcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgnZW5kJyksIHZhbHVlOiAnZW5kJyB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIHRhc2tMaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnMgPSBbXHJcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgnY3JlYXRlJyksIHZhbHVlOiAnY3JlYXRlJyB9LFxyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2Fzc2lnbm1lbnQnKSwgdmFsdWU6ICdhc3NpZ25tZW50JyB9LFxyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2NvbXBsZXRlJyksIHZhbHVlOiAnY29tcGxldGUnIH0sXHJcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgnZGVsZXRlJyksIHZhbHVlOiAnZGVsZXRlJyB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIGlzU2VsZWN0ZWQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICB9O1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ2xpc3RlbmVyLWV2ZW50LXR5cGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXZlbnQgVHlwZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2V2ZW50VHlwZScsXHJcbiAgICBlbXB0eVBhcmFtZXRlcjogZmFsc2UsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcblxyXG5cclxuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciBldmVudFR5cGUgPSBsaXN0ZW5lciAmJiBsaXN0ZW5lci5nZXQoJ2V2ZW50Jyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGV2ZW50VHlwZTogZXZlbnRUeXBlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBldmVudFR5cGUgPSB2YWx1ZXMuZXZlbnRUeXBlO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpLCB7IGV2ZW50OiBldmVudFR5cGUgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNlbGVjdE9wdGlvbnM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGV2ZW50VHlwZU9wdGlvbnM7XHJcblxyXG4gICAgICB2YXIgc2VsZWN0ZWRMaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIGlmIChJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNUYXNrTGlzdGVuZXIoc2VsZWN0ZWRMaXN0ZW5lcikpIHtcclxuICAgICAgICBldmVudFR5cGVPcHRpb25zID0gdGFza0xpc3RlbmVyRXZlbnRUeXBlT3B0aW9ucztcclxuICAgICAgfSBlbHNlIGlmIChJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNFeGVjdXRpb25MaXN0ZW5lcihzZWxlY3RlZExpc3RlbmVyKSkge1xyXG4gICAgICAgIGV2ZW50VHlwZU9wdGlvbnMgPSBleGVjdXRpb25MaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBldmVudFR5cGVPcHRpb25zO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdsaXN0ZW5lci10eXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpc3RlbmVyIFR5cGUnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IFtcclxuICAgICAgeyB2YWx1ZTogY2xhc3NQcm9wLCBuYW1lOiB0cmFuc2xhdGUoJ0phdmEgQ2xhc3MnKSB9LFxyXG4gICAgICB7IHZhbHVlOiBleHByZXNzaW9uUHJvcCwgbmFtZTogdHJhbnNsYXRlKCdFeHByZXNzaW9uJykgfSxcclxuICAgICAgeyB2YWx1ZTogZGVsZWdhdGVFeHByZXNzaW9uUHJvcCwgbmFtZTogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBFeHByZXNzaW9uJykgfSxcclxuICAgICAgeyB2YWx1ZTogc2NyaXB0UHJvcCwgbmFtZTogdHJhbnNsYXRlKCdTY3JpcHQnKSB9XHJcbiAgICBdLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2xpc3RlbmVyVHlwZScsXHJcbiAgICBlbXB0eVBhcmFtZXRlcjogZmFsc2UsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbGlzdGVuZXJUeXBlOiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGxpc3RlbmVyKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgbGlzdGVuZXJUeXBlID0gdmFsdWVzLmxpc3RlbmVyVHlwZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1cGRhdGUgPSB7fTtcclxuXHJcbiAgICAgIHVwZGF0ZVtjbGFzc1Byb3BdID0gbGlzdGVuZXJUeXBlID09PSBjbGFzc1Byb3AgPyAnJyA6IHVuZGVmaW5lZDtcclxuICAgICAgdXBkYXRlW2V4cHJlc3Npb25Qcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gZXhwcmVzc2lvblByb3AgPyAnJyA6IHVuZGVmaW5lZDtcclxuICAgICAgdXBkYXRlW2RlbGVnYXRlRXhwcmVzc2lvblByb3BdID0gbGlzdGVuZXJUeXBlID09PSBkZWxlZ2F0ZUV4cHJlc3Npb25Qcm9wID8gJycgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHVwZGF0ZVtzY3JpcHRQcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gc2NyaXB0UHJvcCA/IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6U2NyaXB0JykgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxpc3RlbmVyLCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2xpc3RlbmVyLXZhbHVlJyxcclxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnbGlzdGVuZXJWYWx1ZUxhYmVsJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdsaXN0ZW5lclZhbHVlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHZhbHVlID0ge30sXHJcbiAgICAgICAgICBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICBsaXN0ZW5lclR5cGUgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGxpc3RlbmVyKTtcclxuXHJcbiAgICAgIHZhbHVlLmxpc3RlbmVyVmFsdWVMYWJlbCA9IExJU1RFTkVSX1RZUEVfTEFCRUxbbGlzdGVuZXJUeXBlXSB8fCAnJztcclxuICAgICAgdmFsdWUubGlzdGVuZXJWYWx1ZSA9IChsaXN0ZW5lciAmJiBsaXN0ZW5lci5nZXQobGlzdGVuZXJUeXBlKSkgfHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgdXBkYXRlID0ge30sXHJcbiAgICAgICAgICBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICBsaXN0ZW5lclR5cGUgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGxpc3RlbmVyKTtcclxuXHJcbiAgICAgIHVwZGF0ZVtsaXN0ZW5lclR5cGVdID0gdmFsdWVzLmxpc3RlbmVyVmFsdWUgfHwgJyc7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxpc3RlbmVyLCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuICFsaXN0ZW5lciB8fCBsaXN0ZW5lci5zY3JpcHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzLmxpc3RlbmVyVmFsdWUsXHJcbiAgICAgICAgICB2YWxpZGF0ZSA9IHt9O1xyXG5cclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbGlkYXRlLmxpc3RlbmVyVmFsdWUgPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWxpZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ3NjcmlwdEZvcm1hdCcsICd2YWx1ZScsIHRydWUsIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaCh7XHJcbiAgICBpZDogJ2xpc3RlbmVyLXNjcmlwdC12YWx1ZScsXHJcbiAgICBodG1sOiAnPGRpdiBkYXRhLXNob3c9XCJpc1NjcmlwdFwiPicgK1xyXG4gICAgICAgICAgICBzY3JpcHQudGVtcGxhdGUgK1xyXG4gICAgICAgICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBsaXN0ZW5lciAmJiBsaXN0ZW5lci5zY3JpcHQgPyBzY3JpcHQuZ2V0KGVsZW1lbnQsIGxpc3RlbmVyLnNjcmlwdCkgOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIHVwZGF0ZSA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzLCBsaXN0ZW5lcik7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbGlzdGVuZXIuc2NyaXB0LCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBsaXN0ZW5lciAmJiBsaXN0ZW5lci5zY3JpcHQgPyBzY3JpcHQudmFsaWRhdGUoZWxlbWVudCwgdmFsdWVzKSA6IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1NjcmlwdDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gbGlzdGVuZXIgJiYgbGlzdGVuZXIuc2NyaXB0O1xyXG4gICAgfSxcclxuXHJcbiAgICBzY3JpcHQ6IHNjcmlwdFxyXG5cclxuICB9KTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgZmllbGRJbmplY3Rpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0ZpZWxkSW5qZWN0aW9uJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIG9wdGlvbnMgPSBhc3NpZ24oe1xyXG4gICAgaWRQcmVmaXg6ICdsaXN0ZW5lci0nLFxyXG4gICAgaW5zaWRlTGlzdGVuZXI6IHRydWVcclxuICB9LCBvcHRpb25zKTtcclxuXHJcbiAgdmFyIGZpZWxkSW5qZWN0aW9uRW50cnkgPSBmaWVsZEluamVjdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlLCBvcHRpb25zKTtcclxuXHJcbiAgaWYgKGZpZWxkSW5qZWN0aW9uRW50cnkgJiYgZmllbGRJbmplY3Rpb25FbnRyeS5sZW5ndGggPiAwKSB7XHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZmllbGRJbmplY3Rpb25FbnRyeSk7XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGxpc3RlbmVyID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9MaXN0ZW5lcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgbGlzdGVuZXJFbnRyeSA9IGxpc3RlbmVyKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7fSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGxpc3RlbmVyRW50cnkuZW50cmllcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBnZXRTZWxlY3RlZExpc3RlbmVyOiBsaXN0ZW5lckVudHJ5LmdldFNlbGVjdGVkTGlzdGVuZXJcclxuICB9O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcclxuXHJcbnZhciBtdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcyA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MnKTtcclxuXHJcbnZhciBqb2JSZXRyeVRpbWVDeWNsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSm9iUmV0cnlUaW1lQ3ljbGUnKSxcclxuICAgIGFzeW5jQ29udGludWF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Bc3luY0NvbnRpbnVhdGlvbicpO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gIHJldHVybiBiby5sb29wQ2hhcmFjdGVyaXN0aWNzO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZW5zdXJlTXVsdGlJbnN0YW5jZVN1cHBvcnRlZChlbGVtZW50KSB7XHJcbiAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xyXG4gIHJldHVybiAhIWxvb3BDaGFyYWN0ZXJpc3RpY3MgJiYgaXMobG9vcENoYXJhY3RlcmlzdGljcywgJ2FjdGl2aXRpOkNvbGxlY3RhYmxlJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgaWYgKCFlbnN1cmVNdWx0aUluc3RhbmNlU3VwcG9ydGVkKGVsZW1lbnQpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyBtdWx0aSBpbnN0YW5jZSBwcm9wZXJ0aWVzXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KG11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgLy8gYXN5bmMgY29udGludWF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoYXN5bmNDb250aW51YXRpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzLFxyXG4gICAgaWRQcmVmaXg6ICdtdWx0aUluc3RhbmNlLScsXHJcbiAgICBsYWJlbFByZWZpeDogdHJhbnNsYXRlKCdNdWx0aSBJbnN0YW5jZSAnKVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuXHJcbiAgLy8gcmV0cnkgdGltZSBjeWNsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0TG9vcENoYXJhY3RlcmlzdGljcyxcclxuICAgIGlkUHJlZml4OiAnbXVsdGlJbnN0YW5jZS0nLFxyXG4gICAgbGFiZWxQcmVmaXg6IHRyYW5zbGF0ZSgnTXVsdGkgSW5zdGFuY2UgJylcclxuICB9LCB0cmFuc2xhdGUpKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1Byb3BlcnRpZXMnKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIHByb3BlcnRpZXNFbnRyeSA9IHByb3BlcnRpZXMoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAncHJvcGVydGllcycsXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ25hbWUnLCAndmFsdWUnIF0sXHJcbiAgICBsYWJlbHM6IFsgdHJhbnNsYXRlKCdOYW1lJyksIHRyYW5zbGF0ZSgnVmFsdWUnKSBdLFxyXG5cclxuICAgIGdldFBhcmVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgYm8pIHtcclxuICAgICAgcmV0dXJuIGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGJvKSB7XHJcbiAgICAgIHZhciBwYXJlbnQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7IHZhbHVlczogW10gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgICAgdmFyIGNtZCA9IGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgeyBleHRlbnNpb25FbGVtZW50czogcGFyZW50IH0pO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNtZDogY21kLFxyXG4gICAgICAgIHBhcmVudDogcGFyZW50XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgaWYgKHByb3BlcnRpZXNFbnRyeSkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKHByb3BlcnRpZXNFbnRyeSk7XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBzY3JpcHRJbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vU2NyaXB0Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBibztcclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlNjcmlwdFRhc2snKSkge1xyXG4gICAgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBzY3JpcHQgPSBzY3JpcHRJbXBsZW1lbnRhdGlvbignc2NyaXB0Rm9ybWF0JywgJ3NjcmlwdCcsIGZhbHNlLCB0cmFuc2xhdGUpO1xyXG4gIGdyb3VwLmVudHJpZXMucHVzaCh7XHJcbiAgICBpZDogJ3NjcmlwdC1pbXBsZW1lbnRhdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTY3JpcHQnKSxcclxuICAgIGh0bWw6IHNjcmlwdC50ZW1wbGF0ZSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIHNjcmlwdC5nZXQoZWxlbWVudCwgYm8pO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCkge1xyXG4gICAgICB2YXIgcHJvcGVydGllcyA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wZXJ0aWVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICByZXR1cm4gc2NyaXB0LnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNjcmlwdCA6IHNjcmlwdCxcclxuXHJcbiAgICBjc3NDbGFzc2VzOiBbJ2JwcC10ZXh0ZmllbGQnXVxyXG5cclxuICB9KTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQgOiAnc2NyaXB0UmVzdWx0VmFyaWFibGUnLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ1Jlc3VsdCBWYXJpYWJsZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eSA6ICdzY3JpcHRSZXN1bHRWYXJpYWJsZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgdmFyIGJvUmVzdWx0VmFyaWFibGUgPSBiby5nZXQoJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJyk7XHJcblxyXG4gICAgICByZXR1cm4geyBzY3JpcHRSZXN1bHRWYXJpYWJsZSA6IGJvUmVzdWx0VmFyaWFibGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcclxuICAgICAgICAnYWN0aXZpdGk6cmVzdWx0VmFyaWFibGUnOiB2YWx1ZXMuc2NyaXB0UmVzdWx0VmFyaWFibGUubGVuZ3RoXHJcbiAgICAgICAgICA/IHZhbHVlcy5zY3JpcHRSZXN1bHRWYXJpYWJsZVxyXG4gICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyksXHJcbiAgICBJbnB1dE91dHB1dEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9JbnB1dE91dHB1dEhlbHBlcicpO1xyXG5cclxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vVXRpbHMnKSxcclxuICAgIGVzY2FwZUhUTUwgPSB1dGlscy5lc2NhcGVIVE1MLFxyXG4gICAgdHJpZ2dlckNsaWNrRXZlbnQgPSB1dGlscy50cmlnZ2VyQ2xpY2tFdmVudDtcclxuXHJcbnZhciBpbXBsZW1lbnRhdGlvblR5cGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0ltcGxlbWVudGF0aW9uVHlwZScpLFxyXG4gICAgZGVsZWdhdGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0RlbGVnYXRlJyksXHJcbiAgICBleHRlcm5hbCA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vRXh0ZXJuYWwnKSxcclxuICAgIGNhbGxhYmxlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9DYWxsYWJsZScpLFxyXG4gICAgcmVzdWx0VmFyaWFibGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1Jlc3VsdFZhcmlhYmxlJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbUNsb3Nlc3QgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xvc2VzdCxcclxuICAgIGRvbUNsYXNzZXMgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xhc3NlcztcclxuXHJcbmZ1bmN0aW9uIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSB7XHJcbiAgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RtbkNhcGFibGUoZWxlbWVudCkge1xyXG4gIHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNEbW5DYXBhYmxlKGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0V4dGVybmFsQ2FwYWJsZShlbGVtZW50KSB7XHJcbiAgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc0V4dGVybmFsQ2FwYWJsZShlbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTZXJ2aWNlVGFza0xpa2UoZWxlbWVudCkge1xyXG4gIHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNTZXJ2aWNlVGFza0xpa2UoZWxlbWVudCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgaWYgKCFpc1NlcnZpY2VUYXNrTGlrZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBoYXNEbW5TdXBwb3J0ID0gaXNEbW5DYXBhYmxlKGVsZW1lbnQpO1xyXG4gIHZhciBoYXNFeHRlcm5hbFN1cHBvcnQgPSBpc0V4dGVybmFsQ2FwYWJsZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSk7XHJcblxyXG4gIC8vIGltcGxlbWVudGF0aW9uIHR5cGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChpbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldEltcGxlbWVudGF0aW9uVHlwZTogZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxyXG4gICAgaGFzRG1uU3VwcG9ydDogaGFzRG1uU3VwcG9ydCxcclxuICAgIGhhc0V4dGVybmFsU3VwcG9ydDogaGFzRXh0ZXJuYWxTdXBwb3J0LFxyXG4gICAgaGFzU2VydmljZVRhc2tMaWtlU3VwcG9ydDogdHJ1ZVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuXHJcbiAgLy8gZGVsZWdhdGUgKGNsYXNzLCBleHByZXNzaW9uLCBkZWxlZ2F0ZUV4cHJlc3Npb24pIC8vLy8vLy8vLy9cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGRlbGVnYXRlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRJbXBsZW1lbnRhdGlvblR5cGU6IGdldEltcGxlbWVudGF0aW9uVHlwZVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuXHJcbiAgLy8gcmVzdWx0IHZhcmlhYmxlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChyZXN1bHRWYXJpYWJsZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZ2V0SW1wbGVtZW50YXRpb25UeXBlOiBnZXRJbXBsZW1lbnRhdGlvblR5cGUsXHJcbiAgICBoaWRlUmVzdWx0VmFyaWFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSAhPT0gJ2V4cHJlc3Npb24nO1xyXG4gICAgfVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICAvLyBleHRlcm5hbCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBpZiAoaGFzRXh0ZXJuYWxTdXBwb3J0KSB7XHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZXh0ZXJuYWwoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgICBnZXRJbXBsZW1lbnRhdGlvblR5cGU6IGdldEltcGxlbWVudGF0aW9uVHlwZVxyXG4gICAgfSwgdHJhbnNsYXRlKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gZG1uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGlmIChoYXNEbW5TdXBwb3J0KSB7XHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoY2FsbGFibGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0Q2FsbGFibGVUeXBlOiBnZXRJbXBsZW1lbnRhdGlvblR5cGVcclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIGNvbm5lY3RvciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgdmFyIGlzQ29ubmVjdG9yID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSA9PT0gJ2Nvbm5lY3Rvcic7XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5saW5rKHtcclxuICAgIGlkOiAnY29uZmlndXJlQ29ubmVjdG9yTGluaycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25maWd1cmUgQ29ubmVjdG9yJyksXHJcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQpIHtcclxuXHJcbiAgICAgIHZhciBjb25uZWN0b3JUYWJFbCA9IGdldFRhYk5vZGUobm9kZSwgJ2Nvbm5lY3RvcicpO1xyXG5cclxuICAgICAgaWYgKGNvbm5lY3RvclRhYkVsKSB7XHJcbiAgICAgICAgdHJpZ2dlckNsaWNrRXZlbnQoY29ubmVjdG9yVGFiRWwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzdXBwcmVzcyBhY3R1YWwgbGluayBjbGlja1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgc2hvd0xpbms6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGxpbmsgPSBkb21RdWVyeSgnYScsIG5vZGUpO1xyXG4gICAgICBsaW5rLnRleHRDb250ZW50ID0gJyc7XHJcblxyXG4gICAgICBkb21DbGFzc2VzKGxpbmspLnJlbW92ZSgnYnBwLWVycm9yLW1lc3NhZ2UnKTtcclxuXHJcbiAgICAgIGlmIChpc0Nvbm5lY3RvcihlbGVtZW50KSkge1xyXG4gICAgICAgIHZhciBjb25uZWN0b3JJZCA9IElucHV0T3V0cHV0SGVscGVyLmdldENvbm5lY3RvcihlbGVtZW50KS5nZXQoJ2Nvbm5lY3RvcklkJyk7XHJcbiAgICAgICAgaWYgKGNvbm5lY3RvcklkKSB7XHJcbiAgICAgICAgICBsaW5rLnRleHRDb250ZW50ID0gdHJhbnNsYXRlKCdDb25maWd1cmUgQ29ubmVjdG9yJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxpbmsuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPVwiYnBwLWljb24td2FybmluZ1wiPjwvc3Bhbj4gJyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdNdXN0IGNvbmZpZ3VyZSBDb25uZWN0b3InKSk7XHJcbiAgICAgICAgICBkb21DbGFzc2VzKGxpbmspLmFkZCgnYnBwLWVycm9yLW1lc3NhZ2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuXHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGdldFRhYk5vZGUoZWwsIGlkKSB7XHJcbiAgdmFyIGNvbnRhaW5lckVsID0gZG9tQ2xvc2VzdChlbCwgJy5icHAtcHJvcGVydGllcy1wYW5lbCcpO1xyXG5cclxuICByZXR1cm4gZG9tUXVlcnkoJ2FbZGF0YS10YWItdGFyZ2V0PVwiJyArIGlkICsgJ1wiXScsIGNvbnRhaW5lckVsKTtcclxufSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFibykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpJbml0aWF0b3InKSAmJiAhaXMoZWxlbWVudC5wYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZDogJ2luaXRpYXRvcicsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0luaXRpYXRvcicpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnaW5pdGlhdG9yJ1xyXG4gICAgfSkpO1xyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciB0YXNrbGlzdCA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vVGFza2xpc3QnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpQcm9jZXNzJykgfHxcclxuICAgICAgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG5cclxuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdCh0YXNrbGlzdChlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAoIWlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICAgICAgICByZXR1cm4gYm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSkge1xyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6QXNzaWduYWJsZScpKSB7XHJcblxyXG4gICAgLy8gQXNzaWduZWVcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnYXNzaWduZWUnLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnQXNzaWduZWUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdhc3NpZ25lZSdcclxuICAgIH0pKTtcclxuXHJcbiAgICAvLyBDYW5kaWRhdGUgVXNlcnNcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnY2FuZGlkYXRlVXNlcnMnLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFVzZXJzJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnY2FuZGlkYXRlVXNlcnMnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gQ2FuZGlkYXRlIEdyb3Vwc1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZCA6ICdjYW5kaWRhdGVHcm91cHMnLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIEdyb3VwcycpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2NhbmRpZGF0ZUdyb3VwcydcclxuICAgIH0pKTtcclxuXHJcbiAgICAvLyBEdWUgRGF0ZVxyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZCA6ICdkdWVEYXRlJyxcclxuICAgICAgZGVzY3JpcHRpb24gOiB0cmFuc2xhdGUoJ1RoZSBkdWUgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJyksXHJcbiAgICAgIGxhYmVsIDogdHJhbnNsYXRlKCdEdWUgRGF0ZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2R1ZURhdGUnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gRm9sbG93VXAgRGF0ZVxyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZCA6ICdmb2xsb3dVcERhdGUnLFxyXG4gICAgICBkZXNjcmlwdGlvbiA6IHRyYW5zbGF0ZSgnVGhlIGZvbGxvdyB1cCBkYXRlIGFzIGFuIEVMIGV4cHJlc3Npb24gKGUuZy4gJHtzb21lRGF0ZX0gb3IgYW4gJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJ0lTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJyksXHJcbiAgICAgIGxhYmVsIDogdHJhbnNsYXRlKCdGb2xsb3cgVXAgRGF0ZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2ZvbGxvd1VwRGF0ZSdcclxuICAgIH0pKTtcclxuXHJcbiAgICAvLyBwcmlvcml0eVxyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZCA6ICdwcmlvcml0eScsXHJcbiAgICAgIGxhYmVsIDogdHJhbnNsYXRlKCdQcmlvcml0eScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ3ByaW9yaXR5J1xyXG4gICAgfSkpO1xyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGlzQW55ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnKS5pc0FueSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpO1xyXG5cclxudmFyIGV4dGVuc2lvbkVsZW1lbnRzRW50cnkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gICogcmV0dXJuIGRlcGVuZCBvbiBwYXJhbWV0ZXIgJ3R5cGUnIGFjdGl2aXRpOmluIG9yIGFjdGl2aXRpOm91dCBleHRlbnNpb24gZWxlbWVudHNcclxuICAqL1xyXG5mdW5jdGlvbiBnZXRBY3Rpdml0aUluT3V0TWFwcGluZ3MoZWxlbWVudCwgdHlwZSkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihibyk7XHJcblxyXG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhzaWduYWxFdmVudERlZmluaXRpb24gfHwgYm8sIHR5cGUpIHx8IFtdO1xyXG59XHJcblxyXG4vKipcclxuICAqIHJldHVybiBkZXBlbmQgb24gcGFyYW1ldGVyICd0eXBlJyBhY3Rpdml0aTppbiBvciBhY3Rpdml0aTpvdXQgZXh0ZW5zaW9uIGVsZW1lbnRzXHJcbiAgKiB3aXRoIHNvdXJjZSBvciBzb3VyY2VFeHByZXNzaW9uIGF0dHJpYnV0ZVxyXG4gICovXHJcbmZ1bmN0aW9uIGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgdHlwZSkge1xyXG4gIHZhciBhY3Rpdml0aU1hcHBpbmdzID0gZ2V0QWN0aXZpdGlJbk91dE1hcHBpbmdzKGVsZW1lbnQsIHR5cGUpO1xyXG5cclxuICByZXR1cm4gZmlsdGVyKGFjdGl2aXRpTWFwcGluZ3MsIGZ1bmN0aW9uKG1hcHBpbmcpIHtcclxuICAgIHJldHVybiAhbWFwcGluZy5idXNpbmVzc0tleTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpIHtcclxuICB2YXIgaW5PdXRUeXBlID0gJ3NvdXJjZSc7XHJcblxyXG4gIGlmIChtYXBwaW5nLnZhcmlhYmxlcyA9PT0gJ2FsbCcpIHtcclxuICAgIGluT3V0VHlwZSA9ICd2YXJpYWJsZXMnO1xyXG4gIH1cclxuICBlbHNlIGlmICh0eXBlb2YgbWFwcGluZy5zb3VyY2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpbk91dFR5cGUgPSAnc291cmNlJztcclxuICB9XHJcbiAgZWxzZSBpZiAodHlwZW9mIG1hcHBpbmcuc291cmNlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGluT3V0VHlwZSA9ICdzb3VyY2VFeHByZXNzaW9uJztcclxuICB9XHJcblxyXG4gIHJldHVybiBpbk91dFR5cGU7XHJcbn1cclxuXHJcbnZhciBBQ1RJVklUSV9JTl9FWFRFTlNJT05fRUxFTUVOVCA9ICdhY3Rpdml0aTpJbicsXHJcbiAgICBBQ1RJVklUSV9PVVRfRVhURU5TSU9OX0VMRU1FTlQgPSAnYWN0aXZpdGk6T3V0JztcclxuXHJcbnZhciBXSElURVNQQUNFX1JFR0VYID0gL1xccy87XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaW5PdXRUeXBlT3B0aW9ucyA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCdTb3VyY2UnKSxcclxuICAgICAgdmFsdWU6ICdzb3VyY2UnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ1NvdXJjZSBFeHByZXNzaW9uJyksXHJcbiAgICAgIHZhbHVlOiAnc291cmNlRXhwcmVzc2lvbidcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnQWxsJyksXHJcbiAgICAgIHZhbHVlOiAndmFyaWFibGVzJ1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHZhciBzaWduYWxFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG5cclxuICBpZiAoIWlzKGVsZW1lbnQsICdhY3Rpdml0aTpDYWxsQWN0aXZpdHknKSAmJiAhc2lnbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoc2lnbmFsRXZlbnREZWZpbml0aW9uICYmICEoaXNBbnkoZWxlbWVudCwgW1xyXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXHJcbiAgICAnYnBtbjpFbmRFdmVudCdcclxuICBdKSkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgcmV0dXJuICEhZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGdldFNlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XHJcbiAgICB2YXIgc2VsZWN0aW9uID0gaW5FbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBwYXJlbnROb2RlKTtcclxuXHJcbiAgICB2YXIgcGFyYW1ldGVyID0gZ2V0VmFyaWFibGVNYXBwaW5ncyhlbGVtZW50LCBBQ1RJVklUSV9JTl9FWFRFTlNJT05fRUxFTUVOVClbc2VsZWN0aW9uLmlkeF07XHJcblxyXG4gICAgaWYgKCFwYXJhbWV0ZXIgJiYgb3V0RW50cnkpIHtcclxuICAgICAgc2VsZWN0aW9uID0gb3V0RW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgcGFyZW50Tm9kZSk7XHJcbiAgICAgIHBhcmFtZXRlciA9IGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKVtzZWxlY3Rpb24uaWR4XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyYW1ldGVyO1xyXG4gIH07XHJcblxyXG4gIHZhciBzZXRPcHRpb25MYWJlbFZhbHVlID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG9wdGlvbiwgcHJvcGVydHksIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIHZhcmlhYmxlTWFwcGluZ3MgPSBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIHR5cGUpO1xyXG4gICAgICB2YXIgbWFwcGluZ1ZhbHVlID0gdmFyaWFibGVNYXBwaW5nc1tpZHhdO1xyXG4gICAgICB2YXIgbGFiZWwgPSAobWFwcGluZ1ZhbHVlLnRhcmdldCB8fCAnPHVuZGVmaW5lZD4nKSArICcgOj0gJztcclxuICAgICAgdmFyIG1hcHBpbmdUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmdWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAobWFwcGluZ1R5cGUgPT09ICd2YXJpYWJsZXMnKSB7XHJcbiAgICAgICAgbGFiZWwgPSAnYWxsJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChtYXBwaW5nVHlwZSA9PT0gJ3NvdXJjZScpIHtcclxuICAgICAgICBsYWJlbCA9IGxhYmVsICsgKG1hcHBpbmdWYWx1ZS5zb3VyY2UgfHwgJzxlbXB0eT4nKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChtYXBwaW5nVHlwZSA9PT0gJ3NvdXJjZUV4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgbGFiZWwgPSBsYWJlbCArIChtYXBwaW5nVmFsdWUuc291cmNlRXhwcmVzc2lvbiB8fCAnPGVtcHR5PicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxhYmVsID0gbGFiZWwgKyAnPGVtcHR5Pic7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9wdGlvbi50ZXh0ID0gbGFiZWw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBuZXdFbGVtZW50ID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgbmV3RWxlbSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCh0eXBlLCB7IHNvdXJjZTogJycgfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIG5ld0VsZW0gXSk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciByZW1vdmVFbGVtZW50ID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIHZhciB2YXJpYWJsZXNNYXBwaW5ncz0gZ2V0VmFyaWFibGVNYXBwaW5ncyhlbGVtZW50LCB0eXBlKTtcclxuICAgICAgdmFyIG1hcHBpbmcgPSB2YXJpYWJsZXNNYXBwaW5nc1tpZHhdO1xyXG5cclxuICAgICAgaWYgKG1hcHBpbmcpIHtcclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXJcclxuICAgICAgICAgIC5yZW1vdmVFbnRyeShzaWduYWxFdmVudERlZmluaXRpb24gfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGVsZW1lbnQsIG1hcHBpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8vIGluIG1hcHBpbmcgZm9yIHNvdXJjZSBhbmQgc291cmNlRXhwcmVzc2lvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgdmFyIGluRW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy1pbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbiBNYXBwaW5nJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnc291cmNlJyxcclxuICAgIHByZWZpeDogJ0luJyxcclxuICAgIGlkR2VuZXJhdGlvbjogZmFsc2UsXHJcbiAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICBidXNpbmVzc09iamVjdDogc2lnbmFsRXZlbnREZWZpbml0aW9uIHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG5cclxuICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpLFxyXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChBQ1RJVklUSV9JTl9FWFRFTlNJT05fRUxFTUVOVCksXHJcblxyXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XHJcbiAgICAgIG91dEVudHJ5ICYmIG91dEVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldE9wdGlvbkxhYmVsVmFsdWU6IHNldE9wdGlvbkxhYmVsVmFsdWUoQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpXHJcbiAgfSk7XHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGluRW50cnkpO1xyXG5cclxuICAvLyBvdXQgbWFwcGluZyBmb3Igc291cmNlIGFuZCBzb3VyY2VFeHByZXNzaW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgaWYgKCFzaWduYWxFdmVudERlZmluaXRpb24pIHtcclxuICAgIHZhciBvdXRFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctb3V0JyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnT3V0IE1hcHBpbmcnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ3NvdXJjZScsXHJcbiAgICAgIHByZWZpeDogJ091dCcsXHJcbiAgICAgIGlkR2VuZXJhdGlvbjogZmFsc2UsXHJcbiAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuXHJcbiAgICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKSxcclxuICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChBQ1RJVklUSV9PVVRfRVhURU5TSU9OX0VMRU1FTlQpLFxyXG5cclxuICAgICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZ2V0VmFyaWFibGVNYXBwaW5ncyhlbGVtZW50LCBBQ1RJVklUSV9PVVRfRVhURU5TSU9OX0VMRU1FTlQpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgICAgIGluRW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZS5wYXJlbnROb2RlKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHNldE9wdGlvbkxhYmVsVmFsdWU6IHNldE9wdGlvbkxhYmVsVmFsdWUoQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKVxyXG4gICAgfSk7XHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2gob3V0RW50cnkpO1xyXG4gIH1cclxuXHJcbiAgLy8gbGFiZWwgZm9yIHNlbGVjdGVkIG1hcHBpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLXR5cGVMYWJlbCcsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciB2YWx1ZSA9ICcnO1xyXG4gICAgICBpZiAoaXMobWFwcGluZywgQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0cmFuc2xhdGUoJ0luIE1hcHBpbmcnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpcyhtYXBwaW5nLCBBQ1RJVklUSV9PVVRfRVhURU5TSU9OX0VMRU1FTlQpKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0cmFuc2xhdGUoJ091dCBNYXBwaW5nJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbGFiZWw6IHZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy1pbk91dFR5cGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogaW5PdXRUeXBlT3B0aW9ucyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdpbk91dFR5cGUnLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge307XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaW5PdXRUeXBlOiBnZXRJbk91dFR5cGUobWFwcGluZylcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgaW5PdXRUeXBlID0gdmFsdWVzLmluT3V0VHlwZTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICAnc291cmNlJyA6IHVuZGVmaW5lZCxcclxuICAgICAgICAnc291cmNlRXhwcmVzc2lvbicgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgJ3ZhcmlhYmxlcycgOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChpbk91dFR5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgICAgcHJvcHMuc291cmNlID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wcy5zb3VyY2VFeHByZXNzaW9uID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaW5PdXRUeXBlID09PSAndmFyaWFibGVzJykge1xyXG4gICAgICAgIHByb3BzLnZhcmlhYmxlcyA9ICdhbGwnO1xyXG4gICAgICAgIHByb3BzLnRhcmdldCA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBtYXBwaW5nLCBwcm9wcyk7XHJcbiAgICB9LFxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctc291cmNlJyxcclxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnc291cmNlTGFiZWwnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3NvdXJjZScsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSB8fCB7fTtcclxuXHJcbiAgICAgIHZhciBsYWJlbCA9ICcnO1xyXG4gICAgICB2YXIgaW5PdXRUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpO1xyXG4gICAgICBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlJykge1xyXG4gICAgICAgIGxhYmVsID0gdHJhbnNsYXRlKCdTb3VyY2UnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpbk91dFR5cGUgPT09ICdzb3VyY2VFeHByZXNzaW9uJykge1xyXG4gICAgICAgIGxhYmVsID0gdHJhbnNsYXRlKCdTb3VyY2UgRXhwcmVzc2lvbicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNvdXJjZTogbWFwcGluZ1tpbk91dFR5cGVdLFxyXG4gICAgICAgIHNvdXJjZUxhYmVsOiBsYWJlbFxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhbHVlcy5zb3VyY2UgPSB2YWx1ZXMuc291cmNlIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBpbk91dFR5cGUgPSBnZXRJbk91dFR5cGUobWFwcGluZyk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuICAgICAgcHJvcHNbaW5PdXRUeXBlXSA9IHZhbHVlcy5zb3VyY2UgfHwgJyc7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIG1hcHBpbmcsIHByb3BzKTtcclxuICAgIH0sXHJcbiAgICAvLyBvbmUgb2YgYm90aCAoc291cmNlIG9yIHNvdXJjZUV4cHJlc3Npb24pIG11c3QgaGF2ZSBhIHZhbHVlIHRvIG1ha2VcclxuICAgIC8vIHRoZSBjb25maWd1cmF0aW9uIGVhc2llciBhbmQgbW9yZSB1bmRlcnN0YW5kYWJsZVxyXG4gICAgLy8gaXQgaXMgbm90IGVuZ2luZSBjb25mb3JtXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xyXG4gICAgICBpZiAobWFwcGluZykge1xyXG4gICAgICAgIGlmICghdmFsdWVzLnNvdXJjZSkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5zb3VyY2UgPVxyXG4gICAgICAgICAgdmFsaWRhdGlvbi5zb3VyY2UgPSB2YWx1ZXMuc291cmNlTGFiZWwgP1xyXG4gICAgICAgICAgICB0cmFuc2xhdGUoJ01hcHBpbmcgbXVzdCBoYXZlIGEge3ZhbHVlfScsIHsgdmFsdWU6IHZhbHVlcy5zb3VyY2VMYWJlbC50b0xvd2VyQ2FzZSgpIH0pIDpcclxuICAgICAgICAgICAgdHJhbnNsYXRlKCdNYXBwaW5nIG11c3QgaGF2ZSBhIHZhbHVlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5PdXRUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpO1xyXG5cclxuICAgICAgICBpZiAoV0hJVEVTUEFDRV9SRUdFWC50ZXN0KHZhbHVlcy5zb3VyY2UpICYmIGluT3V0VHlwZSAhPT0gJ3NvdXJjZUV4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLnNvdXJjZSA9IHRyYW5zbGF0ZSgne2xhYmVsfSBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UnLCB7IGxhYmVsOiB2YWx1ZXMuc291cmNlTGFiZWwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICAgIH0sXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkTWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gIXNlbGVjdGVkTWFwcGluZyB8fCAoc2VsZWN0ZWRNYXBwaW5nICYmIHNlbGVjdGVkTWFwcGluZy52YXJpYWJsZXMpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLXRhcmdldCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUYXJnZXQnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICd0YXJnZXQnLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFyZ2V0OiAoZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge30pLnRhcmdldFxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhbHVlcy50YXJnZXQgPSB2YWx1ZXMudGFyZ2V0IHx8IHVuZGVmaW5lZDtcclxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBtYXBwaW5nLCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciB2YWxpZGF0aW9uID0ge307XHJcbiAgICAgIGlmIChtYXBwaW5nKSB7XHJcbiAgICAgICAgdmFyIG1hcHBpbmdUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlcy50YXJnZXQgJiYgbWFwcGluZ1R5cGUgIT09ICd2YXJpYWJsZXMnKSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLnRhcmdldCA9IHRyYW5zbGF0ZSgnTWFwcGluZyBtdXN0IGhhdmUgYSB0YXJnZXQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZXMudGFyZ2V0XHJcbiAgICAgICAgICAmJiBXSElURVNQQUNFX1JFR0VYLnRlc3QodmFsdWVzLnRhcmdldClcclxuICAgICAgICAgICYmIG1hcHBpbmdUeXBlICE9PSAndmFyaWFibGVzJykge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi50YXJnZXQgPSB0cmFuc2xhdGUoJ1RhcmdldCBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgc2VsZWN0ZWRNYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiAhc2VsZWN0ZWRNYXBwaW5nIHx8IChzZWxlY3RlZE1hcHBpbmcgJiYgc2VsZWN0ZWRNYXBwaW5nLnZhcmlhYmxlcyk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XHJcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy1sb2NhbCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMb2NhbCcpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2xvY2FsJyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxvY2FsOiAoZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge30pLmxvY2FsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFsdWVzLmxvY2FsID0gdmFsdWVzLmxvY2FsIHx8IGZhbHNlO1xyXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIG1hcHBpbmcsIHZhbHVlcyk7XHJcbiAgICB9LFxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFibykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJvLmdldCgncHJvY2Vzc1JlZicpKSB7XHJcbiAgICB2YXIgdmVyc2lvblRhZ0VudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgIGlkOiAndmVyc2lvblRhZycsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZlcnNpb24gVGFnJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6ICd2ZXJzaW9uVGFnJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gaW4gcGFydGljaXBhbnRzIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldCBhbmQgZ2V0XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICB2ZXJzaW9uVGFnRW50cnkuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBwcm9jZXNzQm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHZlcnNpb25UYWc6IHByb2Nlc3NCby5nZXQoJ2FjdGl2aXRpOnZlcnNpb25UYWcnKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2ZXJzaW9uVGFnRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgdmFyIHByb2Nlc3NCbyA9IGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG5cclxuICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHByb2Nlc3NCbywge1xyXG4gICAgICAgICAgJ2FjdGl2aXRpOnZlcnNpb25UYWcnOiB2YWx1ZXMudmVyc2lvblRhZyB8fCB1bmRlZmluZWRcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2godmVyc2lvblRhZ0VudHJ5KTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgYXN5bmNDYXBhYmxlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0FzeW5jQ2FwYWJsZUhlbHBlcicpLFxyXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxuZnVuY3Rpb24gaXNBc3luY0JlZm9yZShibykge1xyXG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIuaXNBc3luY0JlZm9yZShibyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXN5bmNBZnRlcihibykge1xyXG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIuaXNBc3luY0FmdGVyKGJvKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFeGNsdXNpdmUoYm8pIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzRXhjbHVzaXZlKGJvKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLnJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FuUmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoZWxlbWVudCkge1xyXG4gIHJldHVybiAhZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJyxcclxuICAgICAgbGFiZWxQcmVmaXggPSBvcHRpb25zLmxhYmVsUHJlZml4IHx8ICcnO1xyXG5cclxuXHJcbiAgdmFyIGFzeW5jQmVmb3JlRW50cnkgPSBlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2FzeW5jQmVmb3JlJyxcclxuICAgIGxhYmVsOiBsYWJlbFByZWZpeCArIHRyYW5zbGF0ZSgnQXN5bmNocm9ub3VzIEJlZm9yZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2FzeW5jQmVmb3JlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYXN5bmNCZWZvcmU6IGlzQXN5bmNCZWZvcmUoYm8pXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgYXN5bmNCZWZvcmUgPSAhIXZhbHVlcy5hc3luY0JlZm9yZTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICAnYWN0aXZpdGk6YXN5bmNCZWZvcmUnOiBhc3luY0JlZm9yZSxcclxuICAgICAgICAnYWN0aXZpdGk6YXN5bmMnOiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcbiAgICAgIGlmICghaXNBc3luY0FmdGVyKGJvKSAmJiAhYXN5bmNCZWZvcmUpIHtcclxuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTpleGNsdXNpdmUnIDogdHJ1ZSB9LCBwcm9wcyk7XHJcbiAgICAgICAgaWYgKGNhblJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpKTtcclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgdmFyIGFzeW5jQWZ0ZXJFbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAnYXN5bmNBZnRlcicsXHJcbiAgICBsYWJlbDogbGFiZWxQcmVmaXggKyB0cmFuc2xhdGUoJ0FzeW5jaHJvbm91cyBBZnRlcicpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2FzeW5jQWZ0ZXInLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBhc3luY0FmdGVyOiBpc0FzeW5jQWZ0ZXIoYm8pXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgYXN5bmNBZnRlciA9ICEhdmFsdWVzLmFzeW5jQWZ0ZXI7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmFzeW5jQWZ0ZXInOiBhc3luY0FmdGVyXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuICAgICAgaWYgKCFpc0FzeW5jQmVmb3JlKGJvKSAmJiAhYXN5bmNBZnRlcikge1xyXG4gICAgICAgIHByb3BzID0gYXNzaWduKHsgJ2FjdGl2aXRpOmV4Y2x1c2l2ZScgOiB0cnVlIH0sIHByb3BzKTtcclxuICAgICAgICBpZiAoY2FuUmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoZWxlbWVudCkpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2gocmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wcykpO1xyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICB2YXIgZXhjbHVzaXZlRW50cnkgPSBlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2V4Y2x1c2l2ZScsXHJcbiAgICBsYWJlbDogbGFiZWxQcmVmaXggKyB0cmFuc2xhdGUoJ0V4Y2x1c2l2ZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2V4Y2x1c2l2ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4geyBleGNsdXNpdmU6IGlzRXhjbHVzaXZlKGJvKSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgeyAnYWN0aXZpdGk6ZXhjbHVzaXZlJzogISF2YWx1ZXMuZXhjbHVzaXZlIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBibyAmJiAhaXNBc3luY0FmdGVyKGJvKSAmJiAhaXNBc3luY0JlZm9yZShibyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIGFzeW5jQmVmb3JlRW50cnksIGFzeW5jQWZ0ZXJFbnRyeSwgZXhjbHVzaXZlRW50cnkgXTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyk7XHJcblxyXG5cclxudmFyIHJlc3VsdFZhcmlhYmxlID0gcmVxdWlyZSgnLi9SZXN1bHRWYXJpYWJsZScpO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBhdHRyaWJ1dGVJbmZvID0ge1xyXG4gIGJwbW46IHtcclxuICAgIGVsZW1lbnQ6ICdjYWxsZWRFbGVtZW50JyxcclxuICAgIGJpbmRpbmc6ICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50QmluZGluZycsXHJcbiAgICB2ZXJzaW9uOiAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFZlcnNpb24nLFxyXG4gICAgdmVyc2lvblRhZzogJ2FjdGl2aXRpOmNhbGxlZEVsZW1lbnRWZXJzaW9uVGFnJyxcclxuICAgIHRlbmFudElkOiAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFRlbmFudElkJ1xyXG4gIH0sXHJcblxyXG4gIGNtbW46IHtcclxuICAgIGVsZW1lbnQ6ICdhY3Rpdml0aTpjYXNlUmVmJyxcclxuICAgIGJpbmRpbmc6ICdhY3Rpdml0aTpjYXNlQmluZGluZycsXHJcbiAgICB2ZXJzaW9uOiAnYWN0aXZpdGk6Y2FzZVZlcnNpb24nLFxyXG4gICAgdGVuYW50SWQ6ICdhY3Rpdml0aTpjYXNlVGVuYW50SWQnXHJcbiAgfSxcclxuXHJcbiAgZG1uOiB7XHJcbiAgICBlbGVtZW50OiAnYWN0aXZpdGk6ZGVjaXNpb25SZWYnLFxyXG4gICAgYmluZGluZzogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmQmluZGluZycsXHJcbiAgICB2ZXJzaW9uOiAnYWN0aXZpdGk6ZGVjaXNpb25SZWZWZXJzaW9uJyxcclxuICAgIHZlcnNpb25UYWc6ICdhY3Rpdml0aTpkZWNpc2lvblJlZlZlcnNpb25UYWcnLFxyXG4gICAgdGVuYW50SWQ6ICdhY3Rpdml0aTpkZWNpc2lvblJlZlRlbmFudElkJ1xyXG4gIH1cclxufTtcclxuXHJcbnZhciBtYXBEZWNpc2lvblJlc3VsdE9wdGlvbnMgPSBbXHJcbiAge1xyXG4gICAgbmFtZTogJ3NpbmdsZUVudHJ5IChUeXBlZFZhbHVlKScsXHJcbiAgICB2YWx1ZTogJ3NpbmdsZUVudHJ5J1xyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTonc2luZ2xlUmVzdWx0IChNYXA8U3RyaW5nLCBPYmplY3Q+KScsXHJcbiAgICB2YWx1ZTonc2luZ2xlUmVzdWx0J1xyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTonY29sbGVjdEVudHJpZXMgKExpc3Q8T2JqZWN0PiknLFxyXG4gICAgdmFsdWU6J2NvbGxlY3RFbnRyaWVzJ1xyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZToncmVzdWx0TGlzdCAoTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiknLFxyXG4gICAgdmFsdWU6J3Jlc3VsdExpc3QnXHJcbiAgfVxyXG5dO1xyXG5cclxudmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nT3B0aW9ucyA9IFtcclxuICB7XHJcbiAgICBuYW1lOiAndmFyaWFibGVNYXBwaW5nQ2xhc3MnLFxyXG4gICAgdmFsdWU6ICd2YXJpYWJsZU1hcHBpbmdDbGFzcydcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6ICd2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nLFxyXG4gICAgdmFsdWU6ICd2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nXHJcbiAgfVxyXG5dO1xyXG5cclxuZnVuY3Rpb24gZ2V0QWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShlbGVtZW50KSB7XHJcbiAgdmFyIGFjdGl2aXRpSW4gPSBbXSxcclxuICAgICAgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGFjdGl2aXRpSW5QYXJhbXMgPSBleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhibywgJ2FjdGl2aXRpOkluJyk7XHJcbiAgaWYgKGFjdGl2aXRpSW5QYXJhbXMpIHtcclxuICAgIGZvckVhY2goYWN0aXZpdGlJblBhcmFtcywgZnVuY3Rpb24ocGFyYW0pIHtcclxuICAgICAgaWYgKHBhcmFtLmJ1c2luZXNzS2V5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhY3Rpdml0aUluLnB1c2gocGFyYW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmV0dXJuIGFjdGl2aXRpSW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldEJ1c2luZXNzS2V5KGVsZW1lbnQsIHRleHQsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gIHZhciBhY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5ID0gZ2V0QWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShlbGVtZW50KTtcclxuXHJcbiAgaWYgKGFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkubGVuZ3RoKSB7XHJcbiAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBhY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5WzBdLCB7XHJcbiAgICAgIGJ1c2luZXNzS2V5OiB0ZXh0XHJcbiAgICB9KSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZXh0ZW5zaW9uRWxlbWVudHM7XHJcblxyXG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYWN0aXZpdGlJbiA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChcclxuICAgICAgJ2FjdGl2aXRpOkluJyxcclxuICAgICAgeyAnYnVzaW5lc3NLZXknOiB0ZXh0IH0sXHJcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICBicG1uRmFjdG9yeVxyXG4gICAgKTtcclxuXHJcbiAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICBlbGVtZW50LFxyXG4gICAgICBleHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICdleHRlbnNpb25FbGVtZW50cycsXHJcbiAgICAgIFsgYWN0aXZpdGlJbiBdLFtdXHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjb21tYW5kcztcclxufVxyXG5cclxuZnVuY3Rpb24gZGVsZXRlQnVzaW5lc3NLZXkoZWxlbWVudCkge1xyXG4gIHZhciBhY3Rpdml0aUluRXh0ZW5zaW9ucyA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XHJcbiAgdmFyIGNvbW1hbmRzID0gW107XHJcbiAgZm9yRWFjaChhY3Rpdml0aUluRXh0ZW5zaW9ucywgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgY29tbWFuZHMucHVzaChleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgZWxlbWVudCwgZWxlbSkpO1xyXG4gIH0pO1xyXG4gIHJldHVybiBjb21tYW5kcztcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkge1xyXG4gIHJldHVybiBbICdicG1uJywgJ2NtbW4nLCAnZG1uJyBdLmluZGV4T2YodHlwZSkgIT09IC0xO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGJpbmRpbmdPcHRpb25zID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ2xhdGVzdCcpLFxyXG4gICAgICB2YWx1ZTogJ2xhdGVzdCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnZGVwbG95bWVudCcpLFxyXG4gICAgICB2YWx1ZTogJ2RlcGxveW1lbnQnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ3ZlcnNpb24nKSxcclxuICAgICAgdmFsdWU6ICd2ZXJzaW9uJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCd2ZXJzaW9uVGFnJyksXHJcbiAgICAgIHZhbHVlOiAndmVyc2lvblRhZydcclxuICAgIH1cclxuICBdO1xyXG5cclxuICB2YXIgZ2V0Q2FsbGFibGVUeXBlID0gb3B0aW9ucy5nZXRDYWxsYWJsZVR5cGU7XHJcblxyXG4gIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50LCBwcm9wKSB7XHJcbiAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuICAgIHJldHVybiAoYXR0cmlidXRlSW5mb1t0eXBlXSB8fCB7fSlbcHJvcF07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRDYWxsQWN0aXZpdHlCaW5kaW5nVmFsdWUoZWxlbWVudCkge1xyXG4gICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgIHZhciBhdHRyID0gKGF0dHJpYnV0ZUluZm9bdHlwZV0gfHwge30pLmJpbmRpbmc7XHJcbiAgICByZXR1cm4gYm8uZ2V0KGF0dHIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlKGVsZW1lbnQpIHtcclxuICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgIHZhciBib1ZhcmlhYmxlTWFwcGluZ0NsYXNzID0gYm8uZ2V0KCdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycpLFxyXG4gICAgICAgIGJvVmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uID0gYm8uZ2V0KCdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nKTtcclxuXHJcbiAgICB2YXIgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlID0gJyc7XHJcbiAgICBpZiAodHlwZW9mIGJvVmFyaWFibGVNYXBwaW5nQ2xhc3MgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9ICd2YXJpYWJsZU1hcHBpbmdDbGFzcyc7XHJcbiAgICB9IGVsc2VcclxuXHJcbiAgICBpZiAodHlwZW9mIGJvVmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPSAndmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlO1xyXG4gIH1cclxuXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnY2FsbGFibGUtZWxlbWVudC1yZWYnLFxyXG4gICAgZGF0YVZhbHVlTGFiZWw6ICdjYWxsYWJsZUVsZW1lbnRMYWJlbCcsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FsbGFibGVFbGVtZW50UmVmJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGNhbGxhYmxlRWxlbWVudFJlZjtcclxuXHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICdlbGVtZW50Jyk7XHJcbiAgICAgIGlmIChhdHRyKSB7XHJcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgICAgY2FsbGFibGVFbGVtZW50UmVmID0gYm8uZ2V0KGF0dHIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSAnJztcclxuICAgICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcbiAgICAgIGlmICh0eXBlID09PSAnYnBtbicpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnQ2FsbGVkIEVsZW1lbnQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnY21tbicpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnQ2FzZSBSZWYnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnZG1uJykge1xyXG4gICAgICAgIGxhYmVsID0gdHJhbnNsYXRlKCdEZWNpc2lvbiBSZWYnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjYWxsYWJsZUVsZW1lbnRSZWY6IGNhbGxhYmxlRWxlbWVudFJlZixcclxuICAgICAgICBjYWxsYWJsZUVsZW1lbnRMYWJlbDogbGFiZWxcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIG5ld0NhbGxhYmxlRWxlbWVudFJlZiA9IHZhbHVlcy5jYWxsYWJsZUVsZW1lbnRSZWY7XHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICdlbGVtZW50Jyk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuICAgICAgcHJvcHNbYXR0cl0gPSBuZXdDYWxsYWJsZUVsZW1lbnRSZWYgfHwgJyc7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBlbGVtZW50UmVmID0gdmFsdWVzLmNhbGxhYmxlRWxlbWVudFJlZjtcclxuICAgICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBpc1N1cHBvcnRlZENhbGxhYmxlVHlwZSh0eXBlKSAmJiAhZWxlbWVudFJlZiA/IHsgY2FsbGFibGVFbGVtZW50UmVmOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFpc1N1cHBvcnRlZENhbGxhYmxlVHlwZShnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkOiAnY2FsbGFibGUtYmluZGluZycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdCaW5kaW5nJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICB2YXIgb3B0aW9ucztcclxuXHJcbiAgICAgIGlmICh0eXBlID09PSAnY21tbicpIHtcclxuICAgICAgICBvcHRpb25zID0gYmluZGluZ09wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGJpbmRpbmdPcHRpb24pIHtcclxuICAgICAgICAgIHJldHVybiBiaW5kaW5nT3B0aW9uLnZhbHVlICE9PSAndmVyc2lvblRhZyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IGJpbmRpbmdPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjYWxsYWJsZUJpbmRpbmcnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgY2FsbGFibGVCaW5kaW5nO1xyXG5cclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2JpbmRpbmcnKTtcclxuICAgICAgaWYgKGF0dHIpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgICBjYWxsYWJsZUJpbmRpbmcgPSBiby5nZXQoYXR0cikgfHwgJ2xhdGVzdCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbGFibGVCaW5kaW5nOiBjYWxsYWJsZUJpbmRpbmdcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJpbmRpbmcgPSB2YWx1ZXMuY2FsbGFibGVCaW5kaW5nO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnYmluZGluZycpLFxyXG4gICAgICAgICAgYXR0clZlciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvbicpLFxyXG4gICAgICAgICAgYXR0clZlclRhZyA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvblRhZycpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2F0dHJdID0gYmluZGluZztcclxuXHJcbiAgICAgIC8vIHNldCB2ZXJzaW9uIGFuZCB2ZXJzaW9uVGFnIHZhbHVlcyBhbHdheXMgdG8gdW5kZWZpbmVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgdmFsdWVcclxuICAgICAgcHJvcHNbYXR0clZlcl0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIHByb3BzW2F0dHJWZXJUYWddID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2NhbGxhYmxlLXZlcnNpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbicpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2NhbGxhYmxlVmVyc2lvbicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBjYWxsYWJsZVZlcnNpb247XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvbicpO1xyXG4gICAgICBpZiAoYXR0cikge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICAgIGNhbGxhYmxlVmVyc2lvbiA9IGJvLmdldChhdHRyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjYWxsYWJsZVZlcnNpb246IGNhbGxhYmxlVmVyc2lvblxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgdmVyc2lvbiA9IHZhbHVlcy5jYWxsYWJsZVZlcnNpb247XHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICd2ZXJzaW9uJyk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuICAgICAgcHJvcHNbYXR0cl0gPSB2ZXJzaW9uIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHZlcnNpb24gPSB2YWx1ZXMuY2FsbGFibGVWZXJzaW9uO1xyXG5cclxuICAgICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgJiZcclxuICAgICAgICBnZXRDYWxsQWN0aXZpdHlCaW5kaW5nVmFsdWUoZWxlbWVudCkgPT09ICd2ZXJzaW9uJyAmJiAoXHJcbiAgICAgICAgICAhdmVyc2lvbiA/IHsgY2FsbGFibGVWZXJzaW9uOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgfHwgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpICE9PSAndmVyc2lvbic7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdjYWxsYWJsZS12ZXJzaW9uLXRhZycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uIFRhZycpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3ZlcnNpb25UYWcnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgdmVyc2lvblRhZztcclxuXHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICd2ZXJzaW9uVGFnJyk7XHJcblxyXG4gICAgICBpZiAoYXR0cikge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICB2ZXJzaW9uVGFnID0gYm8uZ2V0KGF0dHIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHZlcnNpb25UYWc6IHZlcnNpb25UYWdcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHZlcnNpb25UYWcgPSB2YWx1ZXMudmVyc2lvblRhZztcclxuXHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICd2ZXJzaW9uVGFnJyk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuXHJcbiAgICAgIHByb3BzW2F0dHJdID0gdmVyc2lvblRhZyB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB2ZXJzaW9uVGFnID0gdmFsdWVzLnZlcnNpb25UYWc7XHJcblxyXG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgJiZcclxuICAgICAgICBnZXRDYWxsQWN0aXZpdHlCaW5kaW5nVmFsdWUoZWxlbWVudCkgPT09ICd2ZXJzaW9uVGFnJyAmJiAoXHJcbiAgICAgICAgICAhdmVyc2lvblRhZyA/IHsgdmVyc2lvblRhZzogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG5cclxuICAgICAgcmV0dXJuICFpc1N1cHBvcnRlZENhbGxhYmxlVHlwZSh0eXBlKSB8fCBnZXRDYWxsQWN0aXZpdHlCaW5kaW5nVmFsdWUoZWxlbWVudCkgIT09ICd2ZXJzaW9uVGFnJztcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ3RlbmFudC1pZCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUZW5hbnQgSWQnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICd0ZW5hbnRJZCcsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB0ZW5hbnRJZDtcclxuXHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICd0ZW5hbnRJZCcpO1xyXG4gICAgICBpZiAoYXR0cikge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICAgIHRlbmFudElkID0gYm8uZ2V0KGF0dHIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRlbmFudElkOiB0ZW5hbnRJZFxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgdGVuYW50SWQgPSB2YWx1ZXMudGVuYW50SWQ7XHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICd0ZW5hbnRJZCcpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2F0dHJdID0gdGVuYW50SWQgfHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gIWlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIGlmIChpcyhnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgJ2JwbW46Q2FsbEFjdGl2aXR5JykpIHtcclxuICAgIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgICBpZDogJ2NhbGxhYmxlLWJ1c2luZXNzLWtleScsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0J1c2luZXNzIEtleScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnY2FsbGFibGVCdXNpbmVzc0tleScsXHJcblxyXG4gICAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgICB2YXIgYWN0aXZpdGlJbiA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBjYWxsYWJsZUJ1c2luZXNzS2V5OiAhIShhY3Rpdml0aUluICYmIGFjdGl2aXRpSW4ubGVuZ3RoID4gMClcclxuICAgICAgICB9O1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgICBpZiAodmFsdWVzLmNhbGxhYmxlQnVzaW5lc3NLZXkpIHtcclxuICAgICAgICAgIHJldHVybiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCAnI3tleGVjdXRpb24ucHJvY2Vzc0J1c2luZXNzS2V5fScsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUJ1c2luZXNzS2V5KGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdidXNpbmVzcy1rZXktZXhwcmVzc2lvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdCdXNpbmVzcyBLZXkgRXhwcmVzc2lvbicpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2J1c2luZXNzS2V5JyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSBnZXRBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBidXNpbmVzc0tleTogKFxyXG4gICAgICAgICAgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleS5sZW5ndGggP1xyXG4gICAgICAgICAgICBhY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5WzBdLmdldCgnYWN0aXZpdGk6YnVzaW5lc3NLZXknKSA6XHJcbiAgICAgICAgICAgIHVuZGVmaW5lZFxyXG4gICAgICAgIClcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJ1c2luZXNzS2V5ID0gdmFsdWVzLmJ1c2luZXNzS2V5O1xyXG5cclxuICAgICAgcmV0dXJuIHNldEJ1c2luZXNzS2V5KGVsZW1lbnQsIGJ1c2luZXNzS2V5LCBicG1uRmFjdG9yeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJ1c2luZXNzS2V5ID0gdmFsdWVzLmJ1c2luZXNzS2V5O1xyXG5cclxuICAgICAgcmV0dXJuIGJ1c2luZXNzS2V5ID09PSAnJyA/IHsgYnVzaW5lc3NLZXk6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIGVudHJpZXMgPSBlbnRyaWVzLmNvbmNhdChyZXN1bHRWYXJpYWJsZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICdkbW4tcmVzdWx0VmFyaWFibGUnLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZ2V0SW1wbGVtZW50YXRpb25UeXBlOiBnZXRDYWxsYWJsZVR5cGUsXHJcbiAgICBoaWRlUmVzdWx0VmFyaWFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldENhbGxhYmxlVHlwZShlbGVtZW50KSAhPT0gJ2Rtbic7XHJcbiAgICB9XHJcbiAgfSwgdHJhbnNsYXRlKSk7XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkOiAnZG1uLW1hcC1kZWNpc2lvbi1yZXN1bHQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWFwIERlY2lzaW9uIFJlc3VsdCcpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogbWFwRGVjaXNpb25SZXN1bHRPcHRpb25zLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ21hcERlY2lzaW9uUmVzdWx0JyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbWFwRGVjaXNpb25SZXN1bHQ6IGJvLmdldCgnYWN0aXZpdGk6bWFwRGVjaXNpb25SZXN1bHQnKSB8fCAncmVzdWx0TGlzdCdcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcclxuICAgICAgICAnYWN0aXZpdGk6bWFwRGVjaXNpb25SZXN1bHQnOiB2YWx1ZXMubWFwRGVjaXNpb25SZXN1bHQgfHwgJ3Jlc3VsdExpc3QnXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciByZXN1bHRWYXJpYWJsZSA9IGJvLmdldCgnYWN0aXZpdGk6cmVzdWx0VmFyaWFibGUnKTtcclxuICAgICAgcmV0dXJuICEoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpID09PSAnZG1uJyAmJiB0eXBlb2YgcmVzdWx0VmFyaWFibGUgIT09ICd1bmRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGVsZWdhdGUgVmFyaWFibGUgTWFwcGluZycpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdPcHRpb25zLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgOiBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudClcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9IHZhbHVlcy5kZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0NsYXNzJyA6IHVuZGVmaW5lZCxcclxuICAgICAgICAnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyA6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9PT0gJ3ZhcmlhYmxlTWFwcGluZ0NsYXNzJykge1xyXG4gICAgICAgIHByb3BzWydhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcyddID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlID09PSAndmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJykge1xyXG4gICAgICAgIHByb3BzWydhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nXSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIChnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgIT09ICdicG1uJyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZycsXHJcbiAgICBkYXRhVmFsdWVMYWJlbDogJ2RlbGVnYXRlVmFyaWFibGVNYXBwaW5nTGFiZWwnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2RlbGVnYXRlVmFyaWFibGVNYXBwaW5nJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSAnJztcclxuICAgICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICB2YXIgdHlwZSA9IGdldERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZShlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmICh0eXBlID09PSAndmFyaWFibGVNYXBwaW5nQ2xhc3MnKSB7XHJcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0NsYXNzJyk7XHJcbiAgICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmcgPSBiby5nZXQoJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0NsYXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpO1xyXG4gICAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gYm8uZ2V0KCdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZzogZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmcsXHJcbiAgICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdMYWJlbDogbGFiZWxcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gdmFsdWVzLmRlbGVnYXRlVmFyaWFibGVNYXBwaW5nO1xyXG5cclxuICAgICAgdmFyIGF0dHIgPSAnYWN0aXZpdGk6JyArIGdldERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZShlbGVtZW50KTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG4gICAgICBwcm9wc1thdHRyXSA9IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gdmFsdWVzLmRlbGVnYXRlVmFyaWFibGVNYXBwaW5nO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGdldENhbGxhYmxlVHlwZShlbGVtZW50KSA9PT0gJ2JwbW4nICYmIChcclxuICAgICAgICAgICFkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA/IHsgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmc6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge31cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIShnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgPT09ICdicG1uJyAmJiBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCkgIT09ICcnKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIHZhciBjYW5kaWRhdGVTdGFydGVyR3JvdXBzRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnY2FuZGlkYXRlU3RhcnRlckdyb3VwcycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYW5kaWRhdGUgU3RhcnRlciBHcm91cHMnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjYW5kaWRhdGVTdGFydGVyR3JvdXBzJyxcclxuICAgIGRlc2NyaXB0aW9uOiB0cmFuc2xhdGUoJ1NwZWNpZnkgbW9yZSB0aGFuIG9uZSBncm91cCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LicpLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMgPSBiby5nZXQoJ2FjdGl2aXRpOmNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMnKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FuZGlkYXRlU3RhcnRlckdyb3VwczogY2FuZGlkYXRlU3RhcnRlckdyb3VwcyA/IGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMgOiAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywge1xyXG4gICAgICAgICdhY3Rpdml0aTpjYW5kaWRhdGVTdGFydGVyR3JvdXBzJzogdmFsdWVzLmNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgdmFyIGNhbmRpZGF0ZVN0YXJ0ZXJVc2Vyc0VudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2NhbmRpZGF0ZVN0YXJ0ZXJVc2VycycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYW5kaWRhdGUgU3RhcnRlciBVc2VycycpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2NhbmRpZGF0ZVN0YXJ0ZXJVc2VycycsXHJcbiAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKCdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdXNlciBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LicpLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyA9IGJvLmdldCgnYWN0aXZpdGk6Y2FuZGlkYXRlU3RhcnRlclVzZXJzJyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbmRpZGF0ZVN0YXJ0ZXJVc2VyczogY2FuZGlkYXRlU3RhcnRlclVzZXJzID8gY2FuZGlkYXRlU3RhcnRlclVzZXJzIDogJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6Y2FuZGlkYXRlU3RhcnRlclVzZXJzJzogdmFsdWVzLmNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyB8fCB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgY2FuZGlkYXRlU3RhcnRlckdyb3Vwc0VudHJ5LFxyXG4gICAgY2FuZGlkYXRlU3RhcnRlclVzZXJzRW50cnlcclxuICBdO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBERUxFR0FURV9UWVBFUyA9IFtcclxuICAnY2xhc3MnLFxyXG4gICdleHByZXNzaW9uJyxcclxuICAnZGVsZWdhdGVFeHByZXNzaW9uJ1xyXG5dO1xyXG5cclxudmFyIFBST1BFUlRJRVMgPSB7XHJcbiAgY2xhc3M6ICdhY3Rpdml0aTpjbGFzcycsXHJcbiAgZXhwcmVzc2lvbjogJ2FjdGl2aXRpOmV4cHJlc3Npb24nLFxyXG4gIGRlbGVnYXRlRXhwcmVzc2lvbjogJ2FjdGl2aXRpOmRlbGVnYXRlRXhwcmVzc2lvbidcclxufTtcclxuXHJcbmZ1bmN0aW9uIGlzRGVsZWdhdGUodHlwZSkge1xyXG4gIHJldHVybiBERUxFR0FURV9UWVBFUy5pbmRleE9mKHR5cGUpICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKHR5cGUpIHtcclxuICByZXR1cm4gUFJPUEVSVElFU1t0eXBlXTtcclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0SW1wbGVtZW50YXRpb25UeXBlID0gb3B0aW9ucy5nZXRJbXBsZW1lbnRhdGlvblR5cGUsXHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgZnVuY3Rpb24gZ2V0RGVsZWdhdGlvbkxhYmVsKHR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgY2FzZSAnY2xhc3MnOlxyXG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdKYXZhIENsYXNzJyk7XHJcbiAgICBjYXNlICdleHByZXNzaW9uJzpcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpO1xyXG4gICAgY2FzZSAnZGVsZWdhdGVFeHByZXNzaW9uJzpcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFyIGRlbGVnYXRlRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnZGVsZWdhdGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcclxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnZGVsZWdhdGlvbkxhYmVsJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdkZWxlZ2F0ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgdHlwZSA9IGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUodHlwZSk7XHJcbiAgICAgIHZhciBsYWJlbCA9IGdldERlbGVnYXRpb25MYWJlbCh0eXBlKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkZWxlZ2F0ZTogYm8uZ2V0KGF0dHIpLFxyXG4gICAgICAgIGRlbGVnYXRpb25MYWJlbDogbGFiZWxcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZSh0eXBlKTtcclxuICAgICAgdmFyIHByb3AgPSB7fTtcclxuICAgICAgcHJvcFthdHRyXSA9IHZhbHVlcy5kZWxlZ2F0ZSB8fCAnJztcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGlzRGVsZWdhdGUoZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpKSAmJiAhdmFsdWVzLmRlbGVnYXRlID8geyBkZWxlZ2F0ZTogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNEZWxlZ2F0ZShnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkpO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgZGVsZWdhdGVFbnRyeSBdO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihcclxuICAgIGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZXJyb3JFdmVudERlZmluaXRpb24sXHJcbiAgICBzaG93RXJyb3JDb2RlVmFyaWFibGUsIHNob3dFcnJvck1lc3NhZ2VWYXJpYWJsZSwgdHJhbnNsYXRlXHJcbikge1xyXG5cclxuXHJcbiAgdmFyIGdldFZhbHVlID0gZnVuY3Rpb24obW9kZWxQcm9wZXJ0eSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIG1vZGVsUHJvcGVydHlWYWx1ZSA9IGVycm9yRXZlbnREZWZpbml0aW9uLmdldCgnYWN0aXZpdGk6JyArIG1vZGVsUHJvcGVydHkpO1xyXG4gICAgICB2YXIgdmFsdWUgPSB7fTtcclxuXHJcbiAgICAgIHZhbHVlW21vZGVsUHJvcGVydHldID0gbW9kZWxQcm9wZXJ0eVZhbHVlO1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBzZXRWYWx1ZSA9IGZ1bmN0aW9uKG1vZGVsUHJvcGVydHkpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHByb3BzID0ge307XHJcblxyXG4gICAgICBwcm9wc1snYWN0aXZpdGk6JyArIG1vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIHByb3BzKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChcclxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgaWQ6ICdlcnJvci1lbGVtZW50LW1lc3NhZ2UnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvciBNZXNzYWdlJyksXHJcbiAgICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXJyb3JSZWYnLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnZXJyb3JNZXNzYWdlJ1xyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBpZiAoc2hvd0Vycm9yQ29kZVZhcmlhYmxlKSB7XHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgIGlkOiAnZXJyb3JDb2RlVmFyaWFibGUnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvciBDb2RlIFZhcmlhYmxlJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnZXJyb3JDb2RlVmFyaWFibGUnLFxyXG5cclxuICAgICAgZ2V0OiBnZXRWYWx1ZSgnZXJyb3JDb2RlVmFyaWFibGUnKSxcclxuICAgICAgc2V0OiBzZXRWYWx1ZSgnZXJyb3JDb2RlVmFyaWFibGUnKVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNob3dFcnJvck1lc3NhZ2VWYXJpYWJsZSkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZDogJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgTWVzc2FnZSBWYXJpYWJsZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnZXJyb3JNZXNzYWdlVmFyaWFibGUnLFxyXG5cclxuICAgICAgZ2V0OiBnZXRWYWx1ZSgnZXJyb3JNZXNzYWdlVmFyaWFibGUnKSxcclxuICAgICAgc2V0OiBzZXRWYWx1ZSgnZXJyb3JNZXNzYWdlVmFyaWFibGUnKVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXHJcbiAgICBkb21DbG9zZXN0ID0gcmVxdWlyZSgnbWluLWRvbScpLmNsb3Nlc3QsXHJcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxyXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBlc2NhcGVIVE1MID0gdXRpbHMuZXNjYXBlSFRNTDtcclxuXHJcbmZ1bmN0aW9uIGdldFNlbGVjdEJveChub2RlLCBpZCkge1xyXG4gIHZhciBjdXJyZW50VGFiID0gZG9tQ2xvc2VzdChub2RlLCAnZGl2LmJwcC1wcm9wZXJ0aWVzLXRhYicpO1xyXG4gIHZhciBxdWVyeSA9ICdzZWxlY3RbbmFtZT1zZWxlY3RlZEV4dGVuc2lvbkVsZW1lbnRdJyArIChpZCA/ICdbaWQ9Y2FtLWV4dGVuc2lvbkVsZW1lbnRzLScgKyBpZCArICddJyA6ICcnKTtcclxuICByZXR1cm4gZG9tUXVlcnkocXVlcnksIGN1cnJlbnRUYWIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZWxlY3RlZChub2RlLCBpZCkge1xyXG4gIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3gobm9kZSwgaWQpO1xyXG4gIHJldHVybiB7XHJcbiAgICB2YWx1ZTogKHNlbGVjdEJveCB8fCB7fSkudmFsdWUsXHJcbiAgICBpZHg6IChzZWxlY3RCb3ggfHwge30pLnNlbGVjdGVkSW5kZXhcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUVsZW1lbnRJZChwcmVmaXgpIHtcclxuICBwcmVmaXggPSBwcmVmaXggKyAnXyc7XHJcbiAgcmV0dXJuIHV0aWxzLm5leHRJZChwcmVmaXgpO1xyXG59XHJcblxyXG52YXIgQ1JFQVRFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTiA9ICdjcmVhdGUtZXh0ZW5zaW9uLWVsZW1lbnQnLFxyXG4gICAgUkVNT1ZFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTiA9ICdyZW1vdmUtZXh0ZW5zaW9uLWVsZW1lbnQnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBpZCA9IG9wdGlvbnMuaWQsXHJcbiAgICAgIHByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdlbGVtJyxcclxuICAgICAgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IGlkLFxyXG4gICAgICBpZEdlbmVyYXRpb24gPSAob3B0aW9ucy5pZEdlbmVyYXRpb24gPT09IGZhbHNlKSA/IG9wdGlvbnMuaWRHZW5lcmF0aW9uIDogdHJ1ZSxcclxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmJ1c2luZXNzT2JqZWN0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSB8fCAnaWQnO1xyXG5cclxuICB2YXIgZ2V0RWxlbWVudHMgPSBvcHRpb25zLmdldEV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICB2YXIgY3JlYXRlRWxlbWVudCA9IG9wdGlvbnMuY3JlYXRlRXh0ZW5zaW9uRWxlbWVudCxcclxuICAgICAgY2FuQ3JlYXRlID0gdHlwZW9mIGNyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XHJcblxyXG4gIHZhciByZW1vdmVFbGVtZW50ID0gb3B0aW9ucy5yZW1vdmVFeHRlbnNpb25FbGVtZW50LFxyXG4gICAgICBjYW5SZW1vdmUgPSB0eXBlb2YgcmVtb3ZlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcclxuXHJcbiAgdmFyIG9uU2VsZWN0aW9uQ2hhbmdlID0gb3B0aW9ucy5vblNlbGVjdGlvbkNoYW5nZTtcclxuXHJcbiAgdmFyIGhpZGVFbGVtZW50cyA9IG9wdGlvbnMuaGlkZUV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICBjYW5CZUhpZGRlbiA9IHR5cGVvZiBoaWRlRWxlbWVudHMgPT09ICdmdW5jdGlvbic7XHJcblxyXG4gIHZhciBzZXRPcHRpb25MYWJlbFZhbHVlID0gb3B0aW9ucy5zZXRPcHRpb25MYWJlbFZhbHVlO1xyXG5cclxuICB2YXIgZGVmYXVsdFNpemUgPSBvcHRpb25zLnNpemUgfHwgNSxcclxuICAgICAgcmVzaXphYmxlID0gb3B0aW9ucy5yZXNpemFibGU7XHJcblxyXG4gIHZhciByZWZlcmVuY2UgPSBvcHRpb25zLnJlZmVyZW5jZSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gIHZhciBzZWxlY3Rpb25DaGFuZ2VkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XHJcbiAgICBpZiAodHlwZW9mIG9uU2VsZWN0aW9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHJldHVybiBvblNlbGVjdGlvbkNoYW5nZShlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHZhciBjcmVhdGVPcHRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuICc8b3B0aW9uIHZhbHVlPVwiJyArIGVzY2FwZUhUTUwodmFsdWUpICsgJ1wiIGRhdGEtdmFsdWUgZGF0YS1uYW1lPVwiZXh0ZW5zaW9uRWxlbWVudFZhbHVlXCI+JyArIGVzY2FwZUhUTUwodmFsdWUpICsgJzwvb3B0aW9uPic7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGluaXRTZWxlY3Rpb25TaXplID0gZnVuY3Rpb24oc2VsZWN0Qm94LCBvcHRpb25zTGVuZ3RoKSB7XHJcbiAgICBpZiAocmVzaXphYmxlKSB7XHJcbiAgICAgIHNlbGVjdEJveC5zaXplID0gb3B0aW9uc0xlbmd0aCA+IGRlZmF1bHRTaXplID8gb3B0aW9uc0xlbmd0aCA6IGRlZmF1bHRTaXplO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZDogaWQsXHJcbiAgICBodG1sOiAnPGRpdiBjbGFzcz1cImJwcC1yb3cgYnBwLWVsZW1lbnQtbGlzdFwiICcgK1xyXG4gICAgICAgICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaGlkZUVsZW1lbnRzXCInIDogJycpICsgJz4nICtcclxuICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tZXh0ZW5zaW9uRWxlbWVudHMtJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW0tZXh0ZW5zaW9uRWxlbWVudHMtJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAnbmFtZT1cInNlbGVjdGVkRXh0ZW5zaW9uRWxlbWVudFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ3NpemU9XCInICsgZXNjYXBlSFRNTChkZWZhdWx0U2l6ZSkgKyAnXCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lciAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICdkYXRhLW9uLWNoYW5nZT1cInNlbGVjdEVsZW1lbnRcIj4nICtcclxuICAgICAgICAgICAgICAnPC9zZWxlY3Q+JyArXHJcbiAgICAgICAgICAgICAgKGNhbkNyZWF0ZSA/ICc8YnV0dG9uIGNsYXNzPVwiYWRkXCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLWNyZWF0ZS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtYWN0aW9uPVwiY3JlYXRlRWxlbWVudFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3Bhbj4rPC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyA6ICcnKSArXHJcbiAgICAgICAgICAgICAgKGNhblJlbW92ZSA/ICc8YnV0dG9uIGNsYXNzPVwiY2xlYXJcIiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQ9XCJjYW0tZXh0ZW5zaW9uRWxlbWVudHMtcmVtb3ZlLScgKyBlc2NhcGVIVE1MKGlkKSArICdcIiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1hY3Rpb249XCJyZW1vdmVFbGVtZW50XCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZGlzYWJsZT1cImRpc2FibGVSZW1vdmVcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+LTwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgOiAnJykgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAnPC9kaXY+JyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGVsZW1lbnRzID0gZ2V0RWxlbWVudHMoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50VmFsdWU6IGVsZW0uZ2V0KG1vZGVsUHJvcGVydHkpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIHNlbGVjdEJveCA9IGdldFNlbGVjdEJveChub2RlLnBhcmVudE5vZGUsIGlkKTtcclxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCByZXN1bHQubGVuZ3RoKTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpb24gPSB0aGlzLl9fYWN0aW9uO1xyXG4gICAgICBkZWxldGUgdGhpcy5fX2FjdGlvbjtcclxuXHJcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gYnVzaW5lc3NPYmplY3QgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgYm8gPVxyXG4gICAgICAgIChyZWZlcmVuY2UgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KHJlZmVyZW5jZSkpXHJcbiAgICAgICAgICA/IGJ1c2luZXNzT2JqZWN0LmdldChyZWZlcmVuY2UpXHJcbiAgICAgICAgICA6IGJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICAgICAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxuICAgICAgaWYgKGFjdGlvbi5pZCA9PT0gQ1JFQVRFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTikge1xyXG4gICAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG4gICAgICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtdIH0sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgeyBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHMgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIGFjdGlvbi52YWx1ZSwgbm9kZSkpO1xyXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYWN0aW9uLmlkID09PSBSRU1PVkVfRVhURU5TSU9OX0VMRU1FTlRfQUNUSU9OKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZUVsZW1lbnQoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIGFjdGlvbi52YWx1ZSwgYWN0aW9uLmlkeCwgbm9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZUxpc3RFbnRyeVRlbXBsYXRlOiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIHNlbGVjdEJveCkge1xyXG4gICAgICBpbml0U2VsZWN0aW9uU2l6ZShzZWxlY3RCb3gsIHNlbGVjdEJveC5vcHRpb25zLmxlbmd0aCArIDEpO1xyXG4gICAgICByZXR1cm4gY3JlYXRlT3B0aW9uKHZhbHVlLmV4dGVuc2lvbkVsZW1lbnRWYWx1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3gobm9kZSwgaWQpO1xyXG4gICAgICBzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTZWxlY3RlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWQobm9kZSwgaWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDb250cm9sVmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG9wdGlvbiwgcHJvcGVydHksIHZhbHVlLCBpZHgpIHtcclxuICAgICAgbm9kZS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgaWYgKCFzZXRPcHRpb25MYWJlbFZhbHVlKSB7XHJcbiAgICAgICAgbm9kZS50ZXh0ID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0T3B0aW9uTGFiZWxWYWx1ZShlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIC8vIGNyZWF0ZSBvcHRpb24gdGVtcGxhdGVcclxuICAgICAgdmFyIGdlbmVyYXRlZElkO1xyXG4gICAgICBpZiAoaWRHZW5lcmF0aW9uKSB7XHJcbiAgICAgICAgZ2VuZXJhdGVkSWQgPSBnZW5lcmF0ZUVsZW1lbnRJZChwcmVmaXgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcclxuICAgICAgdmFyIHRlbXBsYXRlID0gZG9taWZ5KGNyZWF0ZU9wdGlvbihnZW5lcmF0ZWRJZCkpO1xyXG5cclxuICAgICAgLy8gYWRkIG5ldyBlbXB0eSBvcHRpb24gYXMgbGFzdCBjaGlsZCBlbGVtZW50XHJcbiAgICAgIHNlbGVjdEJveC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyBzZWxlY3QgbGFzdCBjaGlsZCBlbGVtZW50XHJcbiAgICAgIHNlbGVjdEJveC5sYXN0Q2hpbGQuc2VsZWN0ZWQgPSAnc2VsZWN0ZWQnO1xyXG4gICAgICBzZWxlY3Rpb25DaGFuZ2VkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgLy8gdXBkYXRlIHNlbGVjdCBib3ggc2l6ZVxyXG4gICAgICBpbml0U2VsZWN0aW9uU2l6ZShzZWxlY3RCb3gsIHNlbGVjdEJveC5vcHRpb25zLmxlbmd0aCk7XHJcblxyXG4gICAgICB0aGlzLl9fYWN0aW9uID0ge1xyXG4gICAgICAgIGlkOiBDUkVBVEVfRVhURU5TSU9OX0VMRU1FTlRfQUNUSU9OLFxyXG4gICAgICAgIHZhbHVlOiBnZW5lcmF0ZWRJZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGlvbiA9IGdldFNlbGVjdGVkKG5vZGUsIGlkKTtcclxuXHJcbiAgICAgIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3gobm9kZSwgaWQpO1xyXG4gICAgICBzZWxlY3RCb3gucmVtb3ZlQ2hpbGQoc2VsZWN0Qm94Lm9wdGlvbnNbc2VsZWN0aW9uLmlkeF0pO1xyXG5cclxuICAgICAgLy8gdXBkYXRlIHNlbGVjdCBib3ggc2l6ZVxyXG4gICAgICBpbml0U2VsZWN0aW9uU2l6ZShzZWxlY3RCb3gsIHNlbGVjdEJveC5vcHRpb25zLmxlbmd0aCk7XHJcblxyXG4gICAgICB0aGlzLl9fYWN0aW9uID0ge1xyXG4gICAgICAgIGlkOiBSRU1PVkVfRVhURU5TSU9OX0VMRU1FTlRfQUNUSU9OLFxyXG4gICAgICAgIHZhbHVlOiBzZWxlY3Rpb24udmFsdWUsXHJcbiAgICAgICAgaWR4OiBzZWxlY3Rpb24uaWR4XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZUVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICByZXR1cm4gIWhpZGVFbGVtZW50cyhlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpc2FibGVSZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIHJldHVybiAoZ2V0U2VsZWN0ZWQoZW50cnlOb2RlLCBpZCkgfHwge30pLmlkeCA8IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIHNlbGVjdEVsZW1lbnQ6IHNlbGVjdGlvbkNoYW5nZWRcclxuICB9O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEltcGxlbWVudGF0aW9uVHlwZSA9IG9wdGlvbnMuZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIGZ1bmN0aW9uIGlzRXh0ZXJuYWwoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSA9PT0gJ2V4dGVybmFsJztcclxuICB9XHJcblxyXG4gIHZhciB0b3BpY0VudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2V4dGVybmFsVG9waWMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVG9waWMnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdleHRlcm5hbFRvcGljJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiB7IGV4dGVybmFsVG9waWM6IGJvLmdldCgnYWN0aXZpdGk6dG9waWMnKSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywge1xyXG4gICAgICAgICdhY3Rpdml0aTp0b3BpYyc6IHZhbHVlcy5leHRlcm5hbFRvcGljXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBpc0V4dGVybmFsKGVsZW1lbnQpICYmICF2YWx1ZXMuZXh0ZXJuYWxUb3BpYyA/IHsgZXh0ZXJuYWxUb3BpYzogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNFeHRlcm5hbChlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIHRvcGljRW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgZXh0ZXJuYWxUYXNrUHJpb3JpdHlFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdleHRlcm5hbFRhc2tQcmlvcml0eScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUYXNrIFByaW9yaXR5JyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAndGFza1ByaW9yaXR5JyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFza1ByaW9yaXR5OiBiby5nZXQoJ2FjdGl2aXRpOnRhc2tQcmlvcml0eScpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnRhc2tQcmlvcml0eSc6IHZhbHVlcy50YXNrUHJpb3JpdHkgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgZXh0ZXJuYWxUYXNrUHJpb3JpdHlFbnRyeSBdO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBleHRlbnNpb25FbGVtZW50c0VudHJ5ID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxudmFyIE1vZGVsVXRpbCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJyksXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IE1vZGVsVXRpbC5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG5cclxudmFyIERFRkFVTFRfUFJPUFMgPSB7XHJcbiAgJ3N0cmluZ1ZhbHVlJzogdW5kZWZpbmVkLFxyXG4gICdzdHJpbmcnOiB1bmRlZmluZWQsXHJcbiAgJ2V4cHJlc3Npb24nOiB1bmRlZmluZWRcclxufTtcclxuXHJcbnZhciBBQ1RJVklUSV9GSUVMRF9FWFRFTlNJT05fRUxFTUVOVCA9ICdhY3Rpdml0aTpGaWVsZCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUsIG9wdGlvbnMpIHtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHZhciBpbnNpZGVMaXN0ZW5lciA9ICEhb3B0aW9ucy5pbnNpZGVMaXN0ZW5lcixcclxuICAgICAgaWRQcmVmaXggPSBvcHRpb25zLmlkUHJlZml4IHx8ICcnLFxyXG4gICAgICBnZXRTZWxlY3RlZExpc3RlbmVyID0gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyLFxyXG4gICAgICBidXNpbmVzc09iamVjdCA9IG9wdGlvbnMuYnVzaW5lc3NPYmplY3QgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgcmV0dXJuIGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKSB7XHJcbiAgICB2YXIgc2VsZWN0ZWQgPSBmaWVsZEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkLmlkeCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBmaWVsZHMgPSBnZXRBY3Rpdml0aUZpZWxkcyhlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICByZXR1cm4gZmllbGRzW3NlbGVjdGVkLmlkeF07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRBY3Rpdml0aUZpZWxkcyhlbGVtZW50LCBub2RlKSB7XHJcbiAgICBpZiAoIWluc2lkZUxpc3RlbmVyKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgJiZcclxuICAgICAgICBleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhidXNpbmVzc09iamVjdCwgQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQpXHJcbiAgICAgICkgfHwgW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2V0QWN0aXZpdGlMaXN0ZW5lckZpZWxkcyhlbGVtZW50LCBub2RlKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEFjdGl2aXRpTGlzdGVuZXJGaWVsZHMoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGVkTGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkTGlzdGVuZXIgJiYgc2VsZWN0ZWRMaXN0ZW5lci5maWVsZHMgfHwgW107XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRGaWVsZFR5cGUoYm8pIHtcclxuICAgIHZhciBmaWVsZFR5cGUgPSAnc3RyaW5nJztcclxuXHJcbiAgICB2YXIgZXhwcmVzc2lvblZhbHVlID0gYm8gJiYgYm8uZXhwcmVzc2lvbjtcclxuICAgIHZhciBzdHJpbmdWYWx1ZSA9IGJvICYmIChiby5zdHJpbmcgfHwgYm8uc3RyaW5nVmFsdWUpO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygc3RyaW5nVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGZpZWxkVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwcmVzc2lvblZhbHVlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBmaWVsZFR5cGUgPSAnZXhwcmVzc2lvbic7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkVHlwZTtcclxuICB9XHJcblxyXG4gIHZhciBzZXRPcHRpb25MYWJlbFZhbHVlID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgb3B0aW9uLCBwcm9wZXJ0eSwgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgYWN0aXZpdGlGaWVsZHMgPSBnZXRBY3Rpdml0aUZpZWxkcyhlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGZpZWxkID0gYWN0aXZpdGlGaWVsZHNbaWR4XTtcclxuXHJcbiAgICAgIHZhbHVlID0gKGZpZWxkLm5hbWUpID8gZmllbGQubmFtZSA6ICc8ZW1wdHk+JztcclxuXHJcbiAgICAgIHZhciBsYWJlbCA9IGlkeCArICcgOiAnICsgdmFsdWU7XHJcblxyXG4gICAgICBvcHRpb24udGV4dCA9IGxhYmVsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgbmV3RWxlbWVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSwgbm9kZSkge1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgIHN0cmluZzogJydcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBuZXdGaWVsZEVsZW07XHJcblxyXG4gICAgICBpZiAoIWluc2lkZUxpc3RlbmVyKSB7XHJcblxyXG4gICAgICAgIG5ld0ZpZWxkRWxlbSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChBQ1RJVklUSV9GSUVMRF9FWFRFTlNJT05fRUxFTUVOVCwgcHJvcHMsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFsgbmV3RmllbGRFbGVtIF0pO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgdmFyIHNlbGVjdGVkTGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICAgIG5ld0ZpZWxkRWxlbSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChBQ1RJVklUSV9GSUVMRF9FWFRFTlNJT05fRUxFTUVOVCwgcHJvcHMsIHNlbGVjdGVkTGlzdGVuZXIsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIHNlbGVjdGVkTGlzdGVuZXIsICdmaWVsZHMnLCBbIG5ld0ZpZWxkRWxlbSBdKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciByZW1vdmVFbGVtZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgsIG5vZGUpIHtcclxuICAgICAgdmFyIGFjdGl2aXRpRmllbGRzPSBnZXRBY3Rpdml0aUZpZWxkcyhlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGZpZWxkID0gYWN0aXZpdGlGaWVsZHNbaWR4XTtcclxuICAgICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgICAgaWYgKCFpbnNpZGVMaXN0ZW5lcikge1xyXG4gICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLnJlbW92ZUVudHJ5KGJ1c2luZXNzT2JqZWN0LCBlbGVtZW50LCBmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxlY3RlZExpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgc2VsZWN0ZWRMaXN0ZW5lciwgJ2ZpZWxkcycsIG51bGwsIFsgZmllbGQgXSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfTtcclxuXHJcblxyXG4gIHZhciBmaWVsZEVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQgOiBpZFByZWZpeCArICdmaWVsZHMnLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0ZpZWxkcycpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2ZpZWxkTmFtZScsXHJcbiAgICBpZEdlbmVyYXRpb246ICdmYWxzZScsXHJcblxyXG4gICAgYnVzaW5lc3NPYmplY3Q6IGJ1c2luZXNzT2JqZWN0LFxyXG5cclxuICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoKSxcclxuICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoKSxcclxuXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldE9wdGlvbkxhYmVsVmFsdWU6IHNldE9wdGlvbkxhYmVsVmFsdWUoKVxyXG5cclxuICB9KTtcclxuICBlbnRyaWVzLnB1c2goZmllbGRFbnRyeSk7XHJcblxyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnZhbGlkYXRpb25Bd2FyZVRleHRGaWVsZCh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAnZmllbGQtbmFtZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZmllbGROYW1lJyxcclxuXHJcbiAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gKGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSkgfHwge30pLm5hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkRmllbGQgPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHNlbGVjdGVkRmllbGQsIHsgbmFtZSA6IHZhbHVlcy5maWVsZE5hbWUgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciB2YWxpZGF0aW9uID0ge307XHJcbiAgICAgIGlmIChibykge1xyXG4gICAgICAgIHZhciBuYW1lVmFsdWUgPSB2YWx1ZXMuZmllbGROYW1lO1xyXG5cclxuICAgICAgICBpZiAobmFtZVZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAodXRpbHMuY29udGFpbnNTcGFjZShuYW1lVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZmllbGROYW1lID0gdHJhbnNsYXRlKCdOYW1lIG11c3Qgbm90IGNvbnRhaW4gc3BhY2VzJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24uZmllbGROYW1lID0gdHJhbnNsYXRlKCdQYXJhbWV0ZXIgbXVzdCBoYXZlIGEgbmFtZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkYXRpb247XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgdmFyIGZpZWxkVHlwZU9wdGlvbnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnU3RyaW5nJyksXHJcbiAgICAgIHZhbHVlOiAnc3RyaW5nJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCdFeHByZXNzaW9uJyksXHJcbiAgICAgIHZhbHVlOiAnZXhwcmVzc2lvbidcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAnZmllbGQtdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBmaWVsZFR5cGVPcHRpb25zLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2ZpZWxkVHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgZmllbGRUeXBlID0gZ2V0RmllbGRUeXBlKGJvKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBmaWVsZFR5cGVcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUZBVUxUX1BST1BTKTtcclxuXHJcbiAgICAgIHZhciBmaWVsZFR5cGUgPSB2YWx1ZXMuZmllbGRUeXBlO1xyXG5cclxuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBwcm9wcy5zdHJpbmcgPSAnJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChmaWVsZFR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgIHByb3BzLmV4cHJlc3Npb24gPSAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpLCBwcm9wcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEJveCh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAnZmllbGQtdmFsdWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdmaWVsZFZhbHVlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZShibyk7XHJcblxyXG4gICAgICB2YXIgZmllbGRWYWx1ZTtcclxuXHJcbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgZmllbGRWYWx1ZSA9IGJvICYmIChiby5zdHJpbmcgfHwgYm8uc3RyaW5nVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGZpZWxkVHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgZmllbGRWYWx1ZSA9IGJvICYmIGJvLmV4cHJlc3Npb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZmllbGRWYWx1ZTogZmllbGRWYWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgZmllbGRUeXBlID0gZ2V0RmllbGRUeXBlKGJvKTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgREVGQVVMVF9QUk9QUyk7XHJcblxyXG4gICAgICB2YXIgZmllbGRWYWx1ZSA9IHZhbHVlcy5maWVsZFZhbHVlIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcHJvcHMuc3RyaW5nID0gZmllbGRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChmaWVsZFR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgIHByb3BzLmV4cHJlc3Npb24gPSBmaWVsZFZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wcyk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xyXG4gICAgICBpZiAoYm8pIHtcclxuICAgICAgICBpZiAoIXZhbHVlcy5maWVsZFZhbHVlKSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkVmFsdWUgPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICAgIH0sXHJcblxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgaGlzdG9yeVRpbWVUb0xpdmVFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdoaXN0b3J5VGltZVRvTGl2ZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdIaXN0b3J5IFRpbWUgVG8gTGl2ZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2hpc3RvcnlUaW1lVG9MaXZlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBoaXN0b3J5VGltZVRvTGl2ZSA9IGJvLmdldCgnYWN0aXZpdGk6aGlzdG9yeVRpbWVUb0xpdmUnKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaGlzdG9yeVRpbWVUb0xpdmU6IGhpc3RvcnlUaW1lVG9MaXZlID8gaGlzdG9yeVRpbWVUb0xpdmUgOiAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywge1xyXG4gICAgICAgICdhY3Rpdml0aTpoaXN0b3J5VGltZVRvTGl2ZSc6IHZhbHVlcy5oaXN0b3J5VGltZVRvTGl2ZSB8fCB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyBoaXN0b3J5VGltZVRvTGl2ZUVudHJ5IF07XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpO1xyXG5cclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcclxudmFyIG1hcCA9IHJlcXVpcmUoJ2xvZGFzaC9tYXAnKTtcclxuXHJcbnZhciBERUZBVUxUX0RFTEVHQVRFX1BST1BTID0gWyAnY2xhc3MnLCAnZXhwcmVzc2lvbicsICdkZWxlZ2F0ZUV4cHJlc3Npb24nIF07XHJcblxyXG52YXIgREVMRUdBVEVfUFJPUFMgPSB7XHJcbiAgJ2FjdGl2aXRpOmNsYXNzJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpleHByZXNzaW9uJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJzogdW5kZWZpbmVkXHJcbn07XHJcblxyXG52YXIgRE1OX0NBUEFCTEVfUFJPUFMgPSB7XHJcbiAgJ2FjdGl2aXRpOmRlY2lzaW9uUmVmJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpkZWNpc2lvblJlZkJpbmRpbmcnOiAnbGF0ZXN0JyxcclxuICAnYWN0aXZpdGk6ZGVjaXNpb25SZWZWZXJzaW9uJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTptYXBEZWNpc2lvblJlc3VsdCc6ICdyZXN1bHRMaXN0JyxcclxuICAnYWN0aXZpdGk6ZGVjaXNpb25SZWZUZW5hbnRJZCc6IHVuZGVmaW5lZFxyXG59O1xyXG5cclxuXHJcbnZhciBFWFRFUk5BTF9DQVBBQkxFX1BST1BTID0ge1xyXG4gICdhY3Rpdml0aTp0eXBlJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTp0b3BpYyc6IHVuZGVmaW5lZFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBERUZBVUxUX09QVElPTlMgPSBbXHJcbiAgICB7IHZhbHVlOiAnY2xhc3MnLCBuYW1lOiB0cmFuc2xhdGUoJ0phdmEgQ2xhc3MnKSB9LFxyXG4gICAgeyB2YWx1ZTogJ2V4cHJlc3Npb24nLCBuYW1lOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKSB9LFxyXG4gICAgeyB2YWx1ZTogJ2RlbGVnYXRlRXhwcmVzc2lvbicsIG5hbWU6IHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpIH1cclxuICBdO1xyXG5cclxuICB2YXIgRE1OX09QVElPTiA9IFtcclxuICAgIHsgdmFsdWU6ICdkbW4nLCBuYW1lOiB0cmFuc2xhdGUoJ0RNTicpIH1cclxuICBdO1xyXG5cclxuICB2YXIgRVhURVJOQUxfT1BUSU9OID0gW1xyXG4gICAgeyB2YWx1ZTogJ2V4dGVybmFsJywgbmFtZTogdHJhbnNsYXRlKCdFeHRlcm5hbCcpIH1cclxuICBdO1xyXG5cclxuICB2YXIgQ09OTkVDVE9SX09QVElPTiA9IFtcclxuICAgIHsgdmFsdWU6ICdjb25uZWN0b3InLCBuYW1lOiB0cmFuc2xhdGUoJ0Nvbm5lY3RvcicpIH1cclxuICBdO1xyXG5cclxuICB2YXIgU0NSSVBUX09QVElPTiA9IFtcclxuICAgIHsgdmFsdWU6ICdzY3JpcHQnLCBuYW1lOiB0cmFuc2xhdGUoJ1NjcmlwdCcpIH1cclxuICBdO1xyXG5cclxuICB2YXIgZ2V0VHlwZSA9IG9wdGlvbnMuZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIHZhciBoYXNEbW5TdXBwb3J0ID0gb3B0aW9ucy5oYXNEbW5TdXBwb3J0LFxyXG4gICAgICBoYXNFeHRlcm5hbFN1cHBvcnQgPSBvcHRpb25zLmhhc0V4dGVybmFsU3VwcG9ydCxcclxuICAgICAgaGFzU2VydmljZVRhc2tMaWtlU3VwcG9ydCA9IG9wdGlvbnMuaGFzU2VydmljZVRhc2tMaWtlU3VwcG9ydCxcclxuICAgICAgaGFzU2NyaXB0U3VwcG9ydCA9IG9wdGlvbnMuaGFzU2NyaXB0U3VwcG9ydDtcclxuXHJcbiAgdmFyIGVudHJpZXMgPSBbXTtcclxuXHJcbiAgdmFyIHNlbGVjdE9wdGlvbnMgPSBERUZBVUxUX09QVElPTlMuY29uY2F0KFtdKTtcclxuXHJcbiAgaWYgKGhhc0RtblN1cHBvcnQpIHtcclxuICAgIHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLmNvbmNhdChETU5fT1BUSU9OKTtcclxuICB9XHJcblxyXG4gIGlmIChoYXNFeHRlcm5hbFN1cHBvcnQpIHtcclxuICAgIHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLmNvbmNhdChFWFRFUk5BTF9PUFRJT04pO1xyXG4gIH1cclxuXHJcbiAgaWYgKGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQpIHtcclxuICAgIHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLmNvbmNhdChDT05ORUNUT1JfT1BUSU9OKTtcclxuICB9XHJcblxyXG4gIGlmIChoYXNTY3JpcHRTdXBwb3J0KSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoU0NSSVBUX09QVElPTik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPcHRpb25zLnB1c2goeyB2YWx1ZTogJycgfSk7XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkIDogJ2ltcGxlbWVudGF0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ltcGxlbWVudGF0aW9uJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2ltcGxUeXBlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpbXBsVHlwZTogZ2V0VHlwZShlbGVtZW50KSB8fCAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIG9sZFR5cGUgPSBnZXRUeXBlKGVsZW1lbnQpO1xyXG4gICAgICB2YXIgbmV3VHlwZSA9IHZhbHVlcy5pbXBsVHlwZTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgREVMRUdBVEVfUFJPUFMpO1xyXG5cclxuICAgICAgaWYgKERFRkFVTFRfREVMRUdBVEVfUFJPUFMuaW5kZXhPZihuZXdUeXBlKSAhPT0gLTEpIHtcclxuXHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKERFRkFVTFRfREVMRUdBVEVfUFJPUFMuaW5kZXhPZihvbGRUeXBlKSAhPT0gLTEpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gYm8uZ2V0KCdhY3Rpdml0aTonICsgb2xkVHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzWydhY3Rpdml0aTonICsgbmV3VHlwZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhc0RtblN1cHBvcnQpIHtcclxuICAgICAgICBwcm9wcyA9IGFzc2lnbihwcm9wcywgRE1OX0NBUEFCTEVfUFJPUFMpO1xyXG4gICAgICAgIGlmIChuZXdUeXBlID09PSAnZG1uJykge1xyXG4gICAgICAgICAgcHJvcHNbJ2FjdGl2aXRpOmRlY2lzaW9uUmVmJ10gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChoYXNFeHRlcm5hbFN1cHBvcnQpIHtcclxuICAgICAgICBwcm9wcyA9IGFzc2lnbihwcm9wcywgRVhURVJOQUxfQ0FQQUJMRV9QUk9QUyk7XHJcbiAgICAgICAgaWYgKG5ld1R5cGUgPT09ICdleHRlcm5hbCcpIHtcclxuICAgICAgICAgIHByb3BzWydhY3Rpdml0aTp0eXBlJ10gPSAnZXh0ZXJuYWwnO1xyXG4gICAgICAgICAgcHJvcHNbJ2FjdGl2aXRpOnRvcGljJ10gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChoYXNTY3JpcHRTdXBwb3J0KSB7XHJcbiAgICAgICAgcHJvcHNbJ2FjdGl2aXRpOnNjcmlwdCddID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAobmV3VHlwZSA9PT0gJ3NjcmlwdCcpIHtcclxuICAgICAgICAgIHByb3BzWydhY3Rpdml0aTpzY3JpcHQnXSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6U2NyaXB0Jywge30sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BzKSk7XHJcblxyXG4gICAgICBpZiAoaGFzU2VydmljZVRhc2tMaWtlU3VwcG9ydCkge1xyXG4gICAgICAgIHZhciBjb25uZWN0b3JzID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpDb25uZWN0b3InKTtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKG1hcChjb25uZWN0b3JzLCBmdW5jdGlvbihjb25uZWN0b3IpIHtcclxuICAgICAgICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShibywgZWxlbWVudCwgY29ubmVjdG9yKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIGlmIChuZXdUeXBlID09PSAnY29ubmVjdG9yJykge1xyXG4gICAgICAgICAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xyXG4gICAgICAgICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgeyBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHMgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIGNvbm5lY3RvciA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6Q29ubmVjdG9yJywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICAgICAgICdleHRlbnNpb25FbGVtZW50cycsXHJcbiAgICAgICAgICAgIFsgY29ubmVjdG9yIF0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuXHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBleHRlbnNpb25FbGVtZW50c0hlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxyXG4gICAgaW5wdXRPdXRwdXRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvSW5wdXRPdXRwdXRIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBleHRlbnNpb25FbGVtZW50c0VudHJ5ID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldElucHV0T3V0cHV0KGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb25uZWN0b3IoZWxlbWVudCkge1xyXG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5nZXRDb25uZWN0b3IoZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE91dHB1dFBhcmFtZXRlcnMoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlcnMoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBpZHgpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0SW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBpZHgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBpZHgpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0T3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcGFyZW50LCBmYWN0b3J5LCBwcm9wZXJ0aWVzKSB7XHJcbiAgcmV0dXJuIGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wZXJ0aWVzLCBwYXJlbnQsIGZhY3RvcnkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dE91dHB1dChwYXJlbnQsIGJwbW5GYWN0b3J5LCBwcm9wZXJ0aWVzKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOklucHV0T3V0cHV0JywgcGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBhcmFtZXRlcih0eXBlLCBwYXJlbnQsIGJwbW5GYWN0b3J5LCBwcm9wZXJ0aWVzKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodHlwZSwgcGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcyk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBlbnN1cmVJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuaXNJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVPdXRwYXJhbWV0ZXJTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmFyZU91dHB1dFBhcmFtZXRlcnNTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBUWVBFX0xBQkVMID0ge1xyXG4gICAgJ2FjdGl2aXRpOk1hcCc6IHRyYW5zbGF0ZSgnTWFwJyksXHJcbiAgICAnYWN0aXZpdGk6TGlzdCc6IHRyYW5zbGF0ZSgnTGlzdCcpLFxyXG4gICAgJ2FjdGl2aXRpOlNjcmlwdCc6IHRyYW5zbGF0ZSgnU2NyaXB0JylcclxuICB9O1xyXG5cclxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgdmFyIGluc2lkZUNvbm5lY3RvciA9ICEhb3B0aW9ucy5pbnNpZGVDb25uZWN0b3IsXHJcbiAgICAgIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJztcclxuXHJcbiAgdmFyIGdldFNlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGlvbiA9IChpbnB1dEVudHJ5ICYmIGlucHV0RW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkpIHx8IHsgaWR4OiAtMSB9O1xyXG5cclxuICAgIHZhciBwYXJhbWV0ZXIgPSBnZXRJbnB1dFBhcmFtZXRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIHNlbGVjdGlvbi5pZHgpO1xyXG4gICAgaWYgKCFwYXJhbWV0ZXIgJiYgb3V0cHV0RW50cnkpIHtcclxuICAgICAgc2VsZWN0aW9uID0gb3V0cHV0RW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHBhcmFtZXRlciA9IGdldE91dHB1dFBhcmFtZXRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIHNlbGVjdGlvbi5pZHgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcclxuICB9O1xyXG5cclxuICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgZ2V0U2VsZWN0ZWRQYXJhbWV0ZXI6IGdldFNlbGVjdGVkXHJcbiAgfTtcclxuXHJcbiAgdmFyIGVudHJpZXMgPSByZXN1bHQuZW50cmllcyA9IFtdO1xyXG5cclxuICBpZiAoIWVuc3VyZUlucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQpKSB7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgdmFyIG5ld0VsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCBwcm9wLCBmYWN0b3J5KSB7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuXHJcbiAgICAgIHZhciBpbnB1dE91dHB1dCA9IGdldElucHV0T3V0cHV0KGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbiAgICAgIGlmICghaW5wdXRPdXRwdXQpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gIWluc2lkZUNvbm5lY3RvciA/IGV4dGVuc2lvbkVsZW1lbnRzIDogZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xyXG4gICAgICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQocGFyZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICAgIG91dHB1dFBhcmFtZXRlcnM6IFtdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICAgICAgICdleHRlbnNpb25FbGVtZW50cycsXHJcbiAgICAgICAgICAgIFsgaW5wdXRPdXRwdXQgXSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICAgICkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBwYXJlbnQsIHsgaW5wdXRPdXRwdXQ6IGlucHV0T3V0cHV0IH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBuZXdFbGVtID0gY3JlYXRlUGFyYW1ldGVyKHR5cGUsIGlucHV0T3V0cHV0LCBicG1uRmFjdG9yeSwgeyBuYW1lOiB2YWx1ZSB9KTtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgaW5wdXRPdXRwdXQsIHByb3AsIFsgbmV3RWxlbSBdKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciByZW1vdmVFbGVtZW50ID0gZnVuY3Rpb24oZ2V0dGVyLCBwcm9wLCBvdGhlclByb3ApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gICAgICB2YXIgcGFyYW1ldGVyID0gZ2V0dGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KTtcclxuXHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGlucHV0T3V0cHV0LCBwcm9wLCBudWxsLCBbIHBhcmFtZXRlciBdKSk7XHJcblxyXG4gICAgICB2YXIgZmlyc3RMZW5ndGggPSBpbnB1dE91dHB1dC5nZXQocHJvcCkubGVuZ3RoLTE7XHJcbiAgICAgIHZhciBzZWNvbmRMZW5ndGggPSAoaW5wdXRPdXRwdXQuZ2V0KG90aGVyUHJvcCkgfHwgW10pLmxlbmd0aDtcclxuXHJcbiAgICAgIGlmICghZmlyc3RMZW5ndGggJiYgIXNlY29uZExlbmd0aCkge1xyXG5cclxuICAgICAgICBpZiAoIWluc2lkZUNvbm5lY3Rvcikge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgZWxlbWVudCwgaW5wdXRPdXRwdXQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIGNvbm5lY3RvciA9IGdldENvbm5lY3RvcihlbGVtZW50KTtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbm5lY3RvciwgeyBpbnB1dE91dHB1dDogdW5kZWZpbmVkIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBzZXRPcHRpb25MYWJlbFZhbHVlID0gZnVuY3Rpb24oZ2V0dGVyKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgb3B0aW9uLCBwcm9wZXJ0eSwgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgcGFyYW1ldGVyID0gZ2V0dGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KTtcclxuXHJcbiAgICAgIHZhciBzdWZmaXggPSAnVGV4dCc7XHJcblxyXG4gICAgICB2YXIgZGVmaW5pdGlvbiA9IHBhcmFtZXRlci5nZXQoJ2RlZmluaXRpb24nKTtcclxuICAgICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHZhciB0eXBlID0gZGVmaW5pdGlvbi4kdHlwZTtcclxuICAgICAgICBzdWZmaXggPSBUWVBFX0xBQkVMW3R5cGVdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvcHRpb24udGV4dCA9ICh2YWx1ZSB8fCAnJykgKyAnIDogJyArIHN1ZmZpeDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIGlucHV0IHBhcmFtZXRlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIHZhciBpbnB1dEVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2lucHV0cycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dCBQYXJhbWV0ZXJzJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXHJcbiAgICBwcmVmaXg6ICdJbnB1dCcsXHJcbiAgICByZXNpemFibGU6IHRydWUsXHJcblxyXG4gICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudCgnYWN0aXZpdGk6SW5wdXRQYXJhbWV0ZXInLCAnaW5wdXRQYXJhbWV0ZXJzJyksXHJcbiAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KGdldElucHV0UGFyYW1ldGVyLCAnaW5wdXRQYXJhbWV0ZXJzJywgJ291dHB1dFBhcmFtZXRlcnMnKSxcclxuXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpIHtcclxuICAgICAgb3V0cHV0RW50cnkgJiYgb3V0cHV0RW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldE9wdGlvbkxhYmVsVmFsdWU6IHNldE9wdGlvbkxhYmVsVmFsdWUoZ2V0SW5wdXRQYXJhbWV0ZXIpXHJcblxyXG4gIH0pO1xyXG4gIGVudHJpZXMucHVzaChpbnB1dEVudHJ5KTtcclxuXHJcblxyXG4gIC8vIG91dHB1dCBwYXJhbWV0ZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgaWYgKGVuc3VyZU91dHBhcmFtZXRlclN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpKSB7XHJcbiAgICB2YXIgb3V0cHV0RW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGlkOiBpZFByZWZpeCArICdvdXRwdXRzJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnT3V0cHV0IFBhcmFtZXRlcnMnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgICBwcmVmaXg6ICdPdXRwdXQnLFxyXG4gICAgICByZXNpemFibGU6IHRydWUsXHJcblxyXG4gICAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KCdhY3Rpdml0aTpPdXRwdXRQYXJhbWV0ZXInLCAnb3V0cHV0UGFyYW1ldGVycycpLFxyXG4gICAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KGdldE91dHB1dFBhcmFtZXRlciwgJ291dHB1dFBhcmFtZXRlcnMnLCAnaW5wdXRQYXJhbWV0ZXJzJyksXHJcblxyXG4gICAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBnZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XHJcbiAgICAgICAgaW5wdXRFbnRyeS5kZXNlbGVjdChlbGVtZW50LCBub2RlKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHNldE9wdGlvbkxhYmVsVmFsdWU6IHNldE9wdGlvbkxhYmVsVmFsdWUoZ2V0T3V0cHV0UGFyYW1ldGVyKVxyXG5cclxuICAgIH0pO1xyXG4gICAgZW50cmllcy5wdXNoKG91dHB1dEVudHJ5KTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgaW5wdXRPdXRwdXRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvSW5wdXRPdXRwdXRIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKTtcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgc2NyaXB0SW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL1NjcmlwdCcpO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcGFyZW50LCBmYWN0b3J5LCBwcm9wZXJ0aWVzKSB7XHJcbiAgcmV0dXJuIGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wZXJ0aWVzLCBwYXJlbnQsIGZhY3RvcnkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NjcmlwdChlbGVtKSB7XHJcbiAgcmV0dXJuIGlzKGVsZW0sICdhY3Rpdml0aTpTY3JpcHQnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNMaXN0KGVsZW0pIHtcclxuICByZXR1cm4gaXMoZWxlbSwgJ2FjdGl2aXRpOkxpc3QnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNNYXAoZWxlbSkge1xyXG4gIHJldHVybiBpcyhlbGVtLCAnYWN0aXZpdGk6TWFwJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuc3VyZUlucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5pc0lucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgdHlwZUluZm8gPSB7XHJcbiAgICAnYWN0aXZpdGk6TWFwJzoge1xyXG4gICAgICB2YWx1ZTogJ21hcCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01hcCcpXHJcbiAgICB9LFxyXG4gICAgJ2FjdGl2aXRpOkxpc3QnOiB7XHJcbiAgICAgIHZhbHVlOiAnbGlzdCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpc3QnKVxyXG4gICAgfSxcclxuICAgICdhY3Rpdml0aTpTY3JpcHQnOiB7XHJcbiAgICAgIHZhbHVlOiAnc2NyaXB0JyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2NyaXB0JylcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgdmFyIGluc2lkZUNvbm5lY3RvciA9ICEhb3B0aW9ucy5pbnNpZGVDb25uZWN0b3IsXHJcbiAgICAgIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJztcclxuXHJcbiAgdmFyIGdldFNlbGVjdGVkID0gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcjtcclxuXHJcbiAgaWYgKCFlbnN1cmVJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpKSB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICB2YXIgZW50cmllcyA9IFtdO1xyXG5cclxuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLy8gcGFyYW1ldGVyIG5hbWUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ3BhcmFtZXRlck5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTmFtZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG5cclxuICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAoZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge30pLm5hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHBhcmFtID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcGFyYW0sIHZhbHVlcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xyXG4gICAgICBpZiAoYm8pIHtcclxuICAgICAgICB2YXIgbmFtZVZhbHVlID0gdmFsdWVzLm5hbWU7XHJcblxyXG4gICAgICAgIGlmIChuYW1lVmFsdWUpIHtcclxuICAgICAgICAgIGlmICh1dGlscy5jb250YWluc1NwYWNlKG5hbWVWYWx1ZSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5uYW1lID0gdHJhbnNsYXRlKCdOYW1lIG11c3Qgbm90IGNvbnRhaW4gc3BhY2VzJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24ubmFtZSA9IHRyYW5zbGF0ZSgnUGFyYW1ldGVyIG11c3QgaGF2ZSBhIG5hbWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB0eXBlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICB2YXIgc2VsZWN0T3B0aW9ucyA9IFtcclxuICAgIHsgdmFsdWU6ICd0ZXh0JywgbmFtZTogdHJhbnNsYXRlKCdUZXh0JykgfSxcclxuICAgIHsgdmFsdWU6ICdzY3JpcHQnLCBuYW1lOiB0cmFuc2xhdGUoJ1NjcmlwdCcpIH0sXHJcbiAgICB7IHZhbHVlOiAnbGlzdCcsIG5hbWU6IHRyYW5zbGF0ZSgnTGlzdCcpIH0sXHJcbiAgICB7IHZhbHVlOiAnbWFwJywgbmFtZTogdHJhbnNsYXRlKCdNYXAnKSB9XHJcbiAgXTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQgOiBpZFByZWZpeCArICdwYXJhbWV0ZXJUeXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IHNlbGVjdE9wdGlvbnMsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAncGFyYW1ldGVyVHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHBhcmFtZXRlclR5cGUgPSAndGV4dCc7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGJvICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHZhciBkZWZpbml0aW9uID0gYm8uZ2V0KCdkZWZpbml0aW9uJyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgdmFyIHR5cGUgPSBkZWZpbml0aW9uLiR0eXBlO1xyXG4gICAgICAgICAgcGFyYW1ldGVyVHlwZSA9IHR5cGVJbmZvW3R5cGVdLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwYXJhbWV0ZXJUeXBlOiBwYXJhbWV0ZXJUeXBlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcclxuICAgICAgICBkZWZpbml0aW9uOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBjcmVhdGVQYXJhbWV0ZXJUeXBlRWxlbSA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCh0eXBlLCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIHBhcmFtZXRlclR5cGUgPSB2YWx1ZXMucGFyYW1ldGVyVHlwZTtcclxuXHJcbiAgICAgIGlmIChwYXJhbWV0ZXJUeXBlID09PSAnc2NyaXB0Jykge1xyXG4gICAgICAgIHByb3BlcnRpZXMuZGVmaW5pdGlvbiA9IGNyZWF0ZVBhcmFtZXRlclR5cGVFbGVtKCdhY3Rpdml0aTpTY3JpcHQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYXJhbWV0ZXJUeXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgICBwcm9wZXJ0aWVzLmRlZmluaXRpb24gPSBjcmVhdGVQYXJhbWV0ZXJUeXBlRWxlbSgnYWN0aXZpdGk6TGlzdCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHBhcmFtZXRlclR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgcHJvcGVydGllcy5kZWZpbml0aW9uID0gY3JlYXRlUGFyYW1ldGVyVHlwZUVsZW0oJ2FjdGl2aXRpOk1hcCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wZXJ0aWVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgLy8gcGFyYW1ldGVyIHZhbHVlICh0eXBlID0gdGV4dCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRCb3goe1xyXG4gICAgaWQgOiBpZFByZWZpeCArICdwYXJhbWV0ZXJUeXBlLXRleHQnLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ1ZhbHVlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAndmFsdWUnLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdmFsdWU6IChnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSB8fCB7fSkudmFsdWVcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHBhcmFtID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhbHVlcy52YWx1ZSA9IHZhbHVlcy52YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcGFyYW0sIHZhbHVlcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBibyAmJiAhYm8uZGVmaW5pdGlvbjtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgLy8gcGFyYW1ldGVyIHZhbHVlICh0eXBlID0gc2NyaXB0KSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgdmFyIHNjcmlwdCA9IHNjcmlwdEltcGxlbWVudGF0aW9uKCdzY3JpcHRGb3JtYXQnLCAndmFsdWUnLCB0cnVlLCB0cmFuc2xhdGUpO1xyXG4gIGVudHJpZXMucHVzaCh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZS1zY3JpcHQnLFxyXG4gICAgaHRtbDogJzxkaXYgZGF0YS1zaG93PVwiaXNTY3JpcHRcIj4nICtcclxuICAgICAgICAgICAgc2NyaXB0LnRlbXBsYXRlICtcclxuICAgICAgICAgICc8L2Rpdj4nLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgaXNTY3JpcHQoYm8uZGVmaW5pdGlvbikgPyBzY3JpcHQuZ2V0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24pIDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgdXBkYXRlID0gc2NyaXB0LnNldChlbGVtZW50LCB2YWx1ZXMpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sIHVwZGF0ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBibyAmJiBpc1NjcmlwdChiby5kZWZpbml0aW9uKSA/IHNjcmlwdC52YWxpZGF0ZShlbGVtZW50LCBiby5kZWZpbml0aW9uKSA6IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1NjcmlwdDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGJvICYmIGlzU2NyaXB0KGJvLmRlZmluaXRpb24pO1xyXG4gICAgfSxcclxuXHJcbiAgICBzY3JpcHQ6IHNjcmlwdFxyXG5cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IGxpc3QpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50YWJsZSh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZS1saXN0JyxcclxuICAgIG1vZGVsUHJvcGVydGllczogWyAndmFsdWUnIF0sXHJcbiAgICBsYWJlbHM6IFsgdHJhbnNsYXRlKCdWYWx1ZScpIF0sXHJcbiAgICBhZGRMYWJlbDogdHJhbnNsYXRlKCdBZGQgVmFsdWUnKSxcclxuXHJcbiAgICBnZXRFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIGlmIChibyAmJiBpc0xpc3QoYm8uZGVmaW5pdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gYm8uZGVmaW5pdGlvbi5pdGVtcztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGl0ZW0gPSBiby5kZWZpbml0aW9uLml0ZW1zW2lkeF07XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgaXRlbSwgdmFsdWVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6VmFsdWUnLCBiby5kZWZpbml0aW9uLCBicG1uRmFjdG9yeSwgeyB2YWx1ZTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sICdpdGVtcycsIFsgbmV3VmFsdWUgXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sICdpdGVtcycsIG51bGwsIFsgYm8uZGVmaW5pdGlvbi5pdGVtc1tpZHhdIF0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0YWJsZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgcHJvcCwgaWR4KSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgaXRlbSA9IGJvLmRlZmluaXRpb24uaXRlbXNbaWR4XTtcclxuICAgICAgcmV0dXJuICFpc01hcChpdGVtKSAmJiAhaXNMaXN0KGl0ZW0pICYmICFpc1NjcmlwdChpdGVtKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGl0ZW0gPSBiby5kZWZpbml0aW9uLml0ZW1zW2lkeF07XHJcblxyXG4gICAgICBpZiAoIWlzTWFwKGl0ZW0pICYmICFpc0xpc3QoaXRlbSkgJiYgIWlzU2NyaXB0KGl0ZW0pKSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnB1dC52YWx1ZSA9IHR5cGVJbmZvW2l0ZW0uJHR5cGVdLmxhYmVsO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBibyAmJiBiby5kZWZpbml0aW9uICYmIGlzTGlzdChiby5kZWZpbml0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgLy8gcGFyYW1ldGVyIHZhbHVlICh0eXBlID0gbWFwKSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ3BhcmFtZXRlclR5cGUtbWFwJyxcclxuICAgIG1vZGVsUHJvcGVydGllczogWyAna2V5JywgJ3ZhbHVlJyBdLFxyXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnS2V5JyksIHRyYW5zbGF0ZSgnVmFsdWUnKSBdLFxyXG4gICAgYWRkTGFiZWw6IHRyYW5zbGF0ZSgnQWRkIEVudHJ5JyksXHJcblxyXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICBpZiAoYm8gJiYgaXNNYXAoYm8uZGVmaW5pdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gYm8uZGVmaW5pdGlvbi5lbnRyaWVzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgZW50cnkgPSBiby5kZWZpbml0aW9uLmVudHJpZXNbaWR4XTtcclxuXHJcbiAgICAgIGlmIChpc01hcChlbnRyeS5kZWZpbml0aW9uKSB8fCBpc0xpc3QoZW50cnkuZGVmaW5pdGlvbikgfHwgaXNTY3JpcHQoZW50cnkuZGVmaW5pdGlvbikpIHtcclxuICAgICAgICB2YWx1ZXMgPSB7XHJcbiAgICAgICAgICBrZXk6IHZhbHVlcy5rZXlcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGVudHJ5LCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgbmV3RW50cnkgPSBjcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpFbnRyeScsIGJvLmRlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7IGtleTogdW5kZWZpbmVkLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sICdlbnRyaWVzJywgWyBuZXdFbnRyeSBdKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgYm8uZGVmaW5pdGlvbiwgJ2VudHJpZXMnLCBudWxsLCBbIGJvLmRlZmluaXRpb24uZW50cmllc1tpZHhdIF0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0YWJsZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgcHJvcCwgaWR4KSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgZW50cnkgPSBiby5kZWZpbml0aW9uLmVudHJpZXNbaWR4XTtcclxuICAgICAgcmV0dXJuIHByb3AgPT09ICdrZXknIHx8ICghaXNNYXAoZW50cnkuZGVmaW5pdGlvbikgJiYgIWlzTGlzdChlbnRyeS5kZWZpbml0aW9uKSAmJiAhaXNTY3JpcHQoZW50cnkuZGVmaW5pdGlvbikpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDb250cm9sVmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlucHV0LCBwcm9wLCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgZW50cnkgPSBiby5kZWZpbml0aW9uLmVudHJpZXNbaWR4XTtcclxuXHJcbiAgICAgIGlmIChwcm9wID09PSAna2V5JyB8fCAoIWlzTWFwKGVudHJ5LmRlZmluaXRpb24pICYmICFpc0xpc3QoZW50cnkuZGVmaW5pdGlvbikgJiYgIWlzU2NyaXB0KGVudHJ5LmRlZmluaXRpb24pKSkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSB0eXBlSW5mb1tlbnRyeS5kZWZpbml0aW9uLiR0eXBlXS5sYWJlbDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgYm8uZGVmaW5pdGlvbiAmJiBpc01hcChiby5kZWZpbml0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgam9iUHJpb3JpdHlFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdqb2JQcmlvcml0eScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdKb2IgUHJpb3JpdHknKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdqb2JQcmlvcml0eScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGpvYlByaW9yaXR5OiBiby5nZXQoJ2FjdGl2aXRpOmpvYlByaW9yaXR5JylcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6am9iUHJpb3JpdHknOiB2YWx1ZXMuam9iUHJpb3JpdHkgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgam9iUHJpb3JpdHlFbnRyeSBdO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGFzeW5jQ2FwYWJsZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXInKTtcclxuXHJcbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbmZ1bmN0aW9uIGlzQXN5bmNCZWZvcmUoYm8pIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNCZWZvcmUoYm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jQWZ0ZXIoYm8pIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNBZnRlcihibyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5nZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5yZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKHBhcmVudCwgYnBtbkZhY3RvcnkpIHtcclxuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtdIH0sIHBhcmVudCwgYnBtbkZhY3RvcnkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShwYXJlbnQsIGJwbW5GYWN0b3J5LCBjeWNsZSkge1xyXG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJywgeyBib2R5OiBjeWNsZSB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIHZhciBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJycsXHJcbiAgICAgIGxhYmVsUHJlZml4ID0gb3B0aW9ucy5sYWJlbFByZWZpeCB8fCAnJztcclxuXHJcbiAgdmFyIHJldHJ5VGltZUN5Y2xlRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiBpZFByZWZpeCArICdyZXRyeVRpbWVDeWNsZScsXHJcbiAgICBsYWJlbDogbGFiZWxQcmVmaXggKyB0cmFuc2xhdGUoJ1JldHJ5IFRpbWUgQ3ljbGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjeWNsZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciByZXRyeVRpbWVDeWNsZSA9IGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpKTtcclxuICAgICAgdmFyIHZhbHVlID0gcmV0cnlUaW1lQ3ljbGUgJiYgcmV0cnlUaW1lQ3ljbGUuZ2V0KCdib2R5Jyk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY3ljbGU6IHZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBuZXdDeWNsZSA9IHZhbHVlcy5jeWNsZTtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAobmV3Q3ljbGUgPT09ICcnIHx8IHR5cGVvZiBuZXdDeWNsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyByZW1vdmUgcmV0cnkgdGltZSBjeWNsZSBlbGVtZW50KHMpXHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHJldHJ5VGltZUN5Y2xlID0gZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8pO1xyXG5cclxuICAgICAgaWYgKCFyZXRyeVRpbWVDeWNsZSkge1xyXG4gICAgICAgIC8vIGFkZCBuZXcgcmV0cnkgdGltZSBjeWNsZSBlbGVtZW50XHJcbiAgICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuICAgICAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgeyBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHMgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0cnlUaW1lQ3ljbGUgPSBjcmVhdGVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnksIG5ld0N5Y2xlKTtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgWyByZXRyeVRpbWVDeWNsZSBdLFxyXG4gICAgICAgICAgW11cclxuICAgICAgICApKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB1cGRhdGUgZXhpc3RpbmcgcmV0cnkgdGltZSBjeWNsZSBlbGVtZW50XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcmV0cnlUaW1lQ3ljbGUsIHsgYm9keTogbmV3Q3ljbGUgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChibyAmJiAoaXNBc3luY0JlZm9yZShibykgfHwgaXNBc3luY0FmdGVyKGJvKSkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpKSB7XHJcbiAgICAgICAgcmV0dXJuICFldmVudERlZmluaXRpb25IZWxwZXIuZ2V0VGltZXJFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgcmV0cnlUaW1lQ3ljbGVFbnRyeSBdO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBleHRlbnNpb25FbGVtZW50c0VudHJ5ID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50cycpLFxyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldExpc3RlbmVycyhibywgdHlwZSkge1xyXG4gIHJldHVybiBibyAmJiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhibywgdHlwZSkgfHwgW107XHJcbn1cclxuXHJcbnZhciBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfRUxFTUVOVCA9ICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcic7XHJcbnZhciBBQ1RJVklUSV9UQVNLX0xJU1RFTkVSX0VMRU1FTlQgPSAnYWN0aXZpdGk6VGFza0xpc3RlbmVyJztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgTElTVEVORVJfVFlQRV9MQUJFTCA9IHtcclxuICAgIGNsYXNzOiB0cmFuc2xhdGUoJ0phdmEgQ2xhc3MnKSxcclxuICAgIGV4cHJlc3Npb246IHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpLFxyXG4gICAgZGVsZWdhdGVFeHByZXNzaW9uOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKSxcclxuICAgIHNjcmlwdDogdHJhbnNsYXRlKCdTY3JpcHQnKVxyXG4gIH07XHJcblxyXG4gIHZhciBibztcclxuXHJcbiAgdmFyIHJlc3VsdCA9IHtcclxuICAgIGdldFNlbGVjdGVkTGlzdGVuZXI6IGdldFNlbGVjdGVkTGlzdGVuZXJcclxuICB9O1xyXG5cclxuICB2YXIgZW50cmllcyA9IHJlc3VsdC5lbnRyaWVzID0gW107XHJcblxyXG4gIHZhciBpc1NlcXVlbmNlRmxvdyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1NlcXVlbmNlRmxvdyhlbGVtZW50KTtcclxuXHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKSB7XHJcbiAgICB2YXIgc2VsZWN0aW9uID0gKGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkgJiYgZXhlY3V0aW9uTGlzdGVuZXJFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSkgfHwgeyBpZHg6IC0xIH07XHJcblxyXG4gICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXJzKGJvLCBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfRUxFTUVOVClbc2VsZWN0aW9uLmlkeF07XHJcbiAgICBpZiAoIWxpc3RlbmVyICYmIHRhc2tMaXN0ZW5lckVudHJ5KSB7XHJcbiAgICAgIHNlbGVjdGlvbiA9IHRhc2tMaXN0ZW5lckVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICBsaXN0ZW5lciA9IGdldExpc3RlbmVycyhibywgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5UKVtzZWxlY3Rpb24uaWR4XTtcclxuICAgIH1cclxuICAgIHJldHVybiBsaXN0ZW5lcjtcclxuICB9XHJcblxyXG4gIHZhciBzZXRPcHRpb25MYWJlbFZhbHVlID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG9wdGlvbiwgcHJvcGVydHksIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGxpc3RlbmVycyA9IGdldExpc3RlbmVycyhibywgdHlwZSk7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpZHhdO1xyXG4gICAgICB2YXIgbGlzdGVuZXJUeXBlID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcik7XHJcblxyXG4gICAgICB2YXIgZXZlbnQgPSAobGlzdGVuZXIuZ2V0KCdldmVudCcpKSA/IGxpc3RlbmVyLmdldCgnZXZlbnQnKSA6ICc8ZW1wdHk+JztcclxuXHJcbiAgICAgIHZhciBsYWJlbCA9IChldmVudCB8fCAnKicpICsgJyA6ICcgKyAoTElTVEVORVJfVFlQRV9MQUJFTFtsaXN0ZW5lclR5cGVdIHx8ICcnKTtcclxuXHJcbiAgICAgIG9wdGlvbi50ZXh0ID0gbGFiZWw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBuZXdFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgdHlwZSwgaW5pdGlhbEV2ZW50KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlKSB7XHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICBldmVudDogaW5pdGlhbEV2ZW50LFxyXG4gICAgICAgIGNsYXNzOiAnJ1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIG5ld0VsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgWyBuZXdFbGVtIF0pO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKGJvLCB0eXBlKTtcclxuICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2lkeF07XHJcbiAgICAgIGlmIChsaXN0ZW5lcikge1xyXG4gICAgICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShibywgZWxlbWVudCwgbGlzdGVuZXIpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBFeGVjdXRpb24gTGlzdGVuZXJcclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkZsb3dFbGVtZW50JykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICBlbGVtZW50ID0gZWxlbWVudC5wcm9jZXNzUmVmO1xyXG4gICAgICBibyA9IGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChibykge1xyXG5cclxuICAgICAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgICAgaWQgOiAnZXhlY3V0aW9uTGlzdGVuZXJzJyxcclxuICAgICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRXhlY3V0aW9uIExpc3RlbmVyJyksXHJcbiAgICAgICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgICAgIGlkR2VuZXJhdGlvbjogJ2ZhbHNlJyxcclxuICAgICAgICByZWZlcmVuY2U6ICdwcm9jZXNzUmVmJyxcclxuXHJcbiAgICAgICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudChlbGVtZW50LCBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfRUxFTUVOVCwgKGlzU2VxdWVuY2VGbG93KSA/ICd0YWtlJyA6ICdzdGFydCcpLFxyXG4gICAgICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQpLFxyXG5cclxuICAgICAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVycyhibywgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpIHtcclxuICAgICAgICAgIHRhc2tMaXN0ZW5lckVudHJ5ICYmIHRhc2tMaXN0ZW5lckVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldE9wdGlvbkxhYmVsVmFsdWU6IHNldE9wdGlvbkxhYmVsVmFsdWUoQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQpXHJcblxyXG4gICAgICB9KTtcclxuICAgICAgZW50cmllcy5wdXNoKGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBUYXNrIExpc3RlbmVyXHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpKSB7XHJcbiAgICBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgIHZhciB0YXNrTGlzdGVuZXJFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgaWQgOiAndGFza0xpc3RlbmVycycsXHJcbiAgICAgIGxhYmVsIDogdHJhbnNsYXRlKCdUYXNrIExpc3RlbmVyJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgICAgaWRHZW5lcmF0aW9uOiAnZmFsc2UnLFxyXG5cclxuICAgICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudChlbGVtZW50LCBBQ1RJVklUSV9UQVNLX0xJU1RFTkVSX0VMRU1FTlQsICdjcmVhdGUnKSxcclxuICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChlbGVtZW50LCBBQ1RJVklUSV9UQVNLX0xJU1RFTkVSX0VMRU1FTlQpLFxyXG5cclxuICAgICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXJzKGJvLCBBQ1RJVklUSV9UQVNLX0xJU1RFTkVSX0VMRU1FTlQpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgICAgIGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX1RBU0tfTElTVEVORVJfRUxFTUVOVClcclxuXHJcbiAgICB9KTtcclxuICAgIGVudHJpZXMucHVzaCh0YXNrTGlzdGVuZXJFbnRyeSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZG9tQ2xhc3NlcyA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbGFzc2VzO1xyXG5cclxuLyoqXHJcbiAqIEdldCBhIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FueX0gdGhlIHByb3BlcnR5IHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUpIHtcclxuICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGxvb3BDaGFyYWN0ZXJpc3RpY3MgJiYgbG9vcENoYXJhY3RlcmlzdGljcy5nZXQocHJvcGVydHlOYW1lKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYm9keSBvZiBhIGdpdmVuIGV4cHJlc3Npb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBleHByZXNzaW9uXHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGJvZHkgKHZhbHVlKSBvZiB0aGUgZXhwcmVzc2lvblxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Qm9keShleHByZXNzaW9uKSB7XHJcbiAgcmV0dXJuIGV4cHJlc3Npb24gJiYgZXhwcmVzc2lvbi5nZXQoJ2JvZHknKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzIG9mIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOk11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzPn0gdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICByZXR1cm4gYm8ubG9vcENoYXJhY3RlcmlzdGljcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbG9vcCBjYXJkaW5hbGl0eSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbG9vcCBjYXJkaW5hbGl0eVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TG9vcENhcmRpbmFsaXR5KGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2xvb3BDYXJkaW5hbGl0eScpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBsb29wIGNhcmRpbmFsaXR5IHZhbHVlIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBsb29wIGNhcmRpbmFsaXR5IHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRMb29wQ2FyZGluYWxpdHlWYWx1ZShlbGVtZW50KSB7XHJcbiAgdmFyIGxvb3BDYXJkaW5hbGl0eSA9IGdldExvb3BDYXJkaW5hbGl0eShlbGVtZW50KTtcclxuICByZXR1cm4gZ2V0Qm9keShsb29wQ2FyZGluYWxpdHkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBjb21wbGV0aW9uIGNvbmRpdGlvbiBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGxldGlvbiBjb25kaXRpb25cclxuICovXHJcbmZ1bmN0aW9uIGdldENvbXBsZXRpb25Db25kaXRpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBnZXRQcm9wZXJ0eShlbGVtZW50LCAnY29tcGxldGlvbkNvbmRpdGlvbicpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBjb21wbGV0aW9uIGNvbmRpdGlvbiB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgY29tcGxldGlvbiBjb25kaXRpb24gdmFsdWVcclxuICovXHJcbmZ1bmN0aW9uIGdldENvbXBsZXRpb25Db25kaXRpb25WYWx1ZShlbGVtZW50KSB7XHJcbiAgdmFyIGNvbXBsZXRpb25Db25kaXRpb24gPSBnZXRDb21wbGV0aW9uQ29uZGl0aW9uKGVsZW1lbnQpO1xyXG4gIHJldHVybiBnZXRCb2R5KGNvbXBsZXRpb25Db25kaXRpb24pO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSAnYWN0aXZpdGk6Y29sbGVjdGlvbicgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSAnYWN0aXZpdGk6Y29sbGVjdGlvbicgdmFsdWVcclxuICovXHJcbmZ1bmN0aW9uIGdldENvbGxlY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBnZXRQcm9wZXJ0eShlbGVtZW50LCAnYWN0aXZpdGk6Y29sbGVjdGlvbicpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSAnYWN0aXZpdGk6ZWxlbWVudFZhcmlhYmxlJyBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlICdhY3Rpdml0aTplbGVtZW50VmFyaWFibGUnIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRFbGVtZW50VmFyaWFibGUoZWxlbWVudCkge1xyXG4gIHJldHVybiBnZXRQcm9wZXJ0eShlbGVtZW50LCAnYWN0aXZpdGk6ZWxlbWVudFZhcmlhYmxlJyk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ3JlYXRlcyAnYnBtbjpGb3JtYWxFeHByZXNzaW9uJyBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHBhcmVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9keVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmVzdWx0IHtNb2RkbGVFbGVtZW50PGJwbW46Rm9ybWFsRXhwcmVzc2lvbj59IGEgZm9ybWFsIGV4cHJlc3Npb25cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUZvcm1hbEV4cHJlc3Npb24ocGFyZW50LCBib2R5LCBicG1uRmFjdG9yeSkge1xyXG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHsgYm9keTogYm9keSB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZXMgYSBzcGVjaWZpYyBmb3JtYWwgZXhwcmVzc2lvbiBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3VmFsdWVcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XHJcblxyXG4gIHZhciBleHByZXNzaW9uUHJvcHMgPSB7fTtcclxuXHJcbiAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgLy8gcmVtb3ZlIGZvcm1hbCBleHByZXNzaW9uXHJcbiAgICBleHByZXNzaW9uUHJvcHNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywgZXhwcmVzc2lvblByb3BzKTtcclxuICB9XHJcblxyXG4gIHZhciBleGlzdGluZ0V4cHJlc3Npb24gPSBsb29wQ2hhcmFjdGVyaXN0aWNzLmdldChwcm9wZXJ0eU5hbWUpO1xyXG5cclxuICBpZiAoIWV4aXN0aW5nRXhwcmVzc2lvbikge1xyXG4gICAgLy8gYWRkIGZvcm1hbCBleHByZXNzaW9uXHJcbiAgICBleHByZXNzaW9uUHJvcHNbcHJvcGVydHlOYW1lXSA9IGNyZWF0ZUZvcm1hbEV4cHJlc3Npb24obG9vcENoYXJhY3RlcmlzdGljcywgbmV3VmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywgZXhwcmVzc2lvblByb3BzKTtcclxuICB9XHJcblxyXG4gIC8vIGVkaXQgZXhpc3RpbmcgZm9ybWFsIGV4cHJlc3Npb25cclxuICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGV4aXN0aW5nRXhwcmVzc2lvbiwge1xyXG4gICAgYm9keTogbmV3VmFsdWVcclxuICB9KTtcclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZW50cmllcyA9IFtdO1xyXG5cclxuICAvLyBlcnJvciBtZXNzYWdlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaCh7XHJcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtZXJyb3JNZXNzYWdlJyxcclxuICAgIGh0bWw6ICc8ZGl2IGRhdGEtc2hvdz1cImlzVmFsaWRcIj4nICtcclxuICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImJwcC1pY29uLXdhcm5pbmdcIj48L3NwYW4+ICcgK1xyXG4gICAgICAgICAgICAgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBlaXRoZXIgbG9vcCBjYXJkaW5hbGl0eSBvciBjb2xsZWN0aW9uJykpICtcclxuICAgICAgICAgICc8L2Rpdj4nLFxyXG5cclxuICAgIGlzVmFsaWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG5vdGlmaWNhdGlvbiwgc2NvcGUpIHtcclxuICAgICAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICBpZiAobG9vcENoYXJhY3RlcmlzdGljcykge1xyXG4gICAgICAgIHZhciBsb29wQ2FyZGluYWxpdHkgPSBnZXRMb29wQ2FyZGluYWxpdHlWYWx1ZShlbGVtZW50KTtcclxuICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGdldENvbGxlY3Rpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlzVmFsaWQgPSAhbG9vcENhcmRpbmFsaXR5ICYmICFjb2xsZWN0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkb21DbGFzc2VzKG5vZGUpLnRvZ2dsZSgnYnBwLWhpZGRlbicsICFpc1ZhbGlkKTtcclxuICAgICAgZG9tQ2xhc3Nlcyhub3RpZmljYXRpb24pLnRvZ2dsZSgnYnBwLWVycm9yLW1lc3NhZ2UnLCBpc1ZhbGlkKTtcclxuXHJcbiAgICAgIHJldHVybiBpc1ZhbGlkO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBsb29wIGNhcmRpbmFsaXR5IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1sb29wQ2FyZGluYWxpdHknLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTG9vcCBDYXJkaW5hbGl0eScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2xvb3BDYXJkaW5hbGl0eScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbG9vcENhcmRpbmFsaXR5OiBnZXRMb29wQ2FyZGluYWxpdHlWYWx1ZShlbGVtZW50KVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICByZXR1cm4gdXBkYXRlRm9ybWFsRXhwcmVzc2lvbihlbGVtZW50LCAnbG9vcENhcmRpbmFsaXR5JywgdmFsdWVzLmxvb3BDYXJkaW5hbGl0eSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIGNvbGxlY3Rpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1jb2xsZWN0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvbGxlY3Rpb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjb2xsZWN0aW9uJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb2xsZWN0aW9uOiBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsb29wQ2hhcmFjdGVyaXN0aWNzLCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nOiB2YWx1ZXMuY29sbGVjdGlvbiB8fCB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpO1xyXG4gICAgICB2YXIgZWxlbWVudFZhcmlhYmxlID0gZ2V0RWxlbWVudFZhcmlhYmxlKGVsZW1lbnQpO1xyXG5cclxuICAgICAgaWYgKCFjb2xsZWN0aW9uICYmIGVsZW1lbnRWYXJpYWJsZSkge1xyXG4gICAgICAgIHJldHVybiB7IGNvbGxlY3Rpb24gOiAnTXVzdCBwcm92aWRlIGEgdmFsdWUnIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICAvLyBlbGVtZW50IHZhcmlhYmxlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtZWxlbWVudFZhcmlhYmxlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VsZW1lbnQgVmFyaWFibGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdlbGVtZW50VmFyaWFibGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGVsZW1lbnRWYXJpYWJsZTogZ2V0RWxlbWVudFZhcmlhYmxlKGVsZW1lbnQpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsb29wQ2hhcmFjdGVyaXN0aWNzLCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmVsZW1lbnRWYXJpYWJsZSc6IHZhbHVlcy5lbGVtZW50VmFyaWFibGUgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIENvbXBsZXRpb24gQ29uZGl0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtY29tcGxldGlvbkNvbmRpdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb21wbGV0aW9uIENvbmRpdGlvbicpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2NvbXBsZXRpb25Db25kaXRpb24nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvbXBsZXRpb25Db25kaXRpb246IGdldENvbXBsZXRpb25Db25kaXRpb25WYWx1ZShlbGVtZW50KVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICByZXR1cm4gdXBkYXRlRm9ybWFsRXhwcmVzc2lvbihlbGVtZW50LCAnY29tcGxldGlvbkNvbmRpdGlvbicsIHZhbHVlcy5jb21wbGV0aW9uQ29uZGl0aW9uLCBicG1uRmFjdG9yeSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBleHRlbnNpb25FbGVtZW50c0hlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpO1xyXG5cclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKSxcclxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZVByb3BlcnR5SWQoKSB7XHJcbiAgcmV0dXJuIHV0aWxzLm5leHRJZCgnUHJvcGVydHlfJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYWxsIGFjdGl2aXRpOnByb3BlcnR5IG9iamVjdHMgZm9yIGEgc3BlY2lmaWMgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IHBhcmVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mIGFjdGl2aXRpOnByb3BlcnR5IG9iamVjdHNcclxuICovXHJcbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWVzKHBhcmVudCkge1xyXG4gIHZhciBwcm9wZXJ0aWVzID0gcGFyZW50ICYmIGdldFByb3BlcnRpZXNFbGVtZW50KHBhcmVudCk7XHJcbiAgaWYgKHByb3BlcnRpZXMgJiYgcHJvcGVydGllcy52YWx1ZXMpIHtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzLnZhbHVlcztcclxuICB9XHJcbiAgcmV0dXJuIFtdO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IGFsbCBhY3Rpdml0aTpQcm9wZXJ0aWVzIG9iamVjdCBmb3IgYSBzcGVjaWZpYyBidXNpbmVzcyBvYmplY3RcclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gcGFyZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IGEgYWN0aXZpdGk6UHJvcGVydGllcyBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIGdldFByb3BlcnRpZXNFbGVtZW50KGVsZW1lbnQpIHtcclxuICBpZiAoIWlzRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkpIHtcclxuICAgIHJldHVybiBlbGVtZW50LnByb3BlcnRpZXM7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzRWxlbWVudEluc2lkZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBmaXJzdCBhY3Rpdml0aTpQcm9wZXJ0aWVzIG9iamVjdCBmb3IgYSBzcGVjaWZpYyBicG1uOkV4dGVuc2lvbkVsZW1lbnRzXHJcbiAqIGJ1c2luZXNzIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBleHRlbnNpb25FbGVtZW50c1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBhIGFjdGl2aXRpOlByb3BlcnRpZXMgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzRWxlbWVudEluc2lkZUV4dGVuc2lvbkVsZW1lbnRzKGV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgcmV0dXJuIGZpbmQoZXh0ZW5zaW9uRWxlbWVudHMudmFsdWVzLCBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICByZXR1cm4gaXMoZWxlbSwgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuICB9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSwgaWYgdGhlIGdpdmVuIGJ1c2luZXNzIG9iamVjdCBpcyBhIGJwbW46RXh0ZW5zaW9uRWxlbWVudHMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbmZ1bmN0aW9uIGlzRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgYWN0aXZpdGk6cHJvcGVydHkgZW50cnkgdXNpbmcgdGFibGVFbnRyeUZhY3RvcnlcclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWRcclxuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXNcclxuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gb3B0aW9ucy5sYWJlbHNcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuZ2V0UGFyZW50IEdldHMgdGhlIHBhcmVudCBidXNpbmVzcyBvYmplY3RcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuc2hvdyBJbmRpY2F0ZSB3aGVuIHRoZSBlbnRyeSB3aWxsIGJlIHNob3duLCBzaG91bGQgcmV0dXJuIGJvb2xlYW5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0UGFyZW50ID0gb3B0aW9ucy5nZXRQYXJlbnQ7XHJcblxyXG4gIHZhciBtb2RlbFByb3BlcnRpZXMgPSBvcHRpb25zLm1vZGVsUHJvcGVydGllcyxcclxuICAgICAgY3JlYXRlUGFyZW50ID0gb3B0aW9ucy5jcmVhdGVQYXJlbnQ7XHJcblxyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICBibyA9IGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gIH1cclxuXHJcbiAgLy8gYnVpbGQgcHJvcGVydGllcyBncm91cCBvbmx5IHdoZW4gdGhlIHBhcnRpY2lwYW50IGhhdmUgYSBwcm9jZXNzUmVmXHJcbiAgaWYgKCFibykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgYXNzaWduKG9wdGlvbnMsIHtcclxuICAgIGFkZExhYmVsOiB0cmFuc2xhdGUoJ0FkZCBQcm9wZXJ0eScpLFxyXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChlbGVtZW50LCBub2RlLCBibyk7XHJcbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpO1xyXG4gICAgfSxcclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW10sXHJcbiAgICAgICAgICBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pO1xyXG5cclxuICAgICAgaWYgKCFwYXJlbnQgJiYgdHlwZW9mIGNyZWF0ZVBhcmVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVQYXJlbnQoZWxlbWVudCwgYm8pO1xyXG4gICAgICAgIHBhcmVudCA9IHJlc3VsdC5wYXJlbnQ7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChyZXN1bHQuY21kKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzRWxlbWVudChwYXJlbnQpO1xyXG4gICAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgICBwcm9wZXJ0aWVzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpQcm9wZXJ0aWVzJywge30sIHBhcmVudCwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgICBpZiAoIWlzRXh0ZW5zaW9uRWxlbWVudHMocGFyZW50KSkge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcGFyZW50LCB7ICdwcm9wZXJ0aWVzJzogcHJvcGVydGllcyB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXHJcbiAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICAgICAgICdleHRlbnNpb25FbGVtZW50cycsXHJcbiAgICAgICAgICAgIFsgcHJvcGVydGllcyBdLFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICAgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgcHJvcGVydHlQcm9wcyA9IHt9O1xyXG4gICAgICBmb3JFYWNoKG1vZGVsUHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgICAgIHByb3BlcnR5UHJvcHNbcHJvcF0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGlkIGlmIG5lY2Vzc2FyeVxyXG4gICAgICBpZiAobW9kZWxQcm9wZXJ0aWVzLmluZGV4T2YoJ2lkJykgPj0gMCkge1xyXG4gICAgICAgIHByb3BlcnR5UHJvcHMuaWQgPSBnZW5lcmF0ZVByb3BlcnR5SWQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHByb3BlcnR5ID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpQcm9wZXJ0eScsIHByb3BlcnR5UHJvcHMsIHByb3BlcnRpZXMsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgcHJvcGVydGllcywgJ3ZhbHVlcycsIFsgcHJvcGVydHkgXSkpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfSxcclxuICAgIHVwZGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChlbGVtZW50LCBub2RlLCBibyksXHJcbiAgICAgICAgICBwcm9wZXJ0eSA9IGdldFByb3BlcnR5VmFsdWVzKHBhcmVudClbaWR4XTtcclxuXHJcbiAgICAgIGZvckVhY2gobW9kZWxQcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgICAgdmFsdWVbcHJvcF0gPSB2YWx1ZVtwcm9wXSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIC8vIHZhbGlkYXRlIGlkIGlmIG5lY2Vzc2FyeVxyXG4gICAgICBpZiAobW9kZWxQcm9wZXJ0aWVzLmluZGV4T2YoJ2lkJykgPj0gMCkge1xyXG5cclxuICAgICAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW1lbnQsIG5vZGUsIGJvKSxcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IGdldFByb3BlcnR5VmFsdWVzKHBhcmVudCksXHJcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpZHhdO1xyXG5cclxuICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgIC8vIGNoZWNrIGlmIGlkIGlzIHZhbGlkXHJcbiAgICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9yID0gdXRpbHMuaXNJZFZhbGlkKHByb3BlcnR5LCB2YWx1ZS5pZCwgdHJhbnNsYXRlKTtcclxuXHJcbiAgICAgICAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGlkOiB2YWxpZGF0aW9uRXJyb3IgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW10sXHJcbiAgICAgICAgICBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pLFxyXG4gICAgICAgICAgcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXNFbGVtZW50KHBhcmVudCksXHJcbiAgICAgICAgICBwcm9wZXJ0eVZhbHVlcyA9IGdldFByb3BlcnR5VmFsdWVzKHBhcmVudCksXHJcbiAgICAgICAgICBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eVZhbHVlc1tpZHhdO1xyXG5cclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBwcm9wZXJ0aWVzLCAndmFsdWVzJywgbnVsbCwgWyBjdXJyZW50UHJvcGVydHkgXSkpO1xyXG5cclxuICAgICAgaWYgKHByb3BlcnR5VmFsdWVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIC8vIHJlbW92ZSBhY3Rpdml0aTpwcm9wZXJ0aWVzIGlmIHRoZSBsYXN0IGV4aXN0aW5nIHByb3BlcnR5IGhhcyBiZWVuIHJlbW92ZWRcclxuICAgICAgICBpZiAoIWlzRXh0ZW5zaW9uRWxlbWVudHMocGFyZW50KSkge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcGFyZW50LCB7IHByb3BlcnRpZXM6IHVuZGVmaW5lZCB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvckVhY2gocGFyZW50LnZhbHVlcywgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGlzKHZhbHVlLCAnYWN0aXZpdGk6UHJvcGVydGllcycpKSB7XHJcbiAgICAgICAgICAgICAgY29tbWFuZHMucHVzaChleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShibywgZWxlbWVudCwgdmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBmYWN0b3J5LnRhYmxlKG9wdGlvbnMpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xyXG5cclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIGhpZGVSZXN1bHRWYXJpYWJsZSA9IG9wdGlvbnMuaGlkZVJlc3VsdFZhcmlhYmxlLFxyXG4gICAgICBpZCA9IG9wdGlvbnMuaWQgfHwgJ3Jlc3VsdFZhcmlhYmxlJztcclxuXHJcblxyXG4gIHZhciByZXN1bHRWYXJpYWJsZUVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogaWQsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdSZXN1bHQgVmFyaWFibGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdyZXN1bHRWYXJpYWJsZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4geyByZXN1bHRWYXJpYWJsZTogYm8uZ2V0KCdhY3Rpdml0aTpyZXN1bHRWYXJpYWJsZScpIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIHJlc3VsdFZhcmlhYmxlID0gdmFsdWVzLnJlc3VsdFZhcmlhYmxlIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICAnYWN0aXZpdGk6cmVzdWx0VmFyaWFibGUnOiByZXN1bHRWYXJpYWJsZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGlzKGJvLCAnYWN0aXZpdGk6RG1uQ2FwYWJsZScpICYmICFyZXN1bHRWYXJpYWJsZSkge1xyXG4gICAgICAgIHByb3BzID0gYXNzaWduKHsgJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JzogJ3Jlc3VsdExpc3QnIH0sIHByb3BzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgaWYgKHR5cGVvZiBoaWRlUmVzdWx0VmFyaWFibGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gaGlkZVJlc3VsdFZhcmlhYmxlLmFwcGx5KHJlc3VsdFZhcmlhYmxlRW50cnksIGFyZ3VtZW50cyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIHJlc3VsdFZhcmlhYmxlRW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLmVzY2FwZUhUTUwsXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyk7XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0U2NyaXB0VHlwZShub2RlKSB7XHJcbiAgcmV0dXJuIHV0aWxzLnNlbGVjdGVkVHlwZSgnc2VsZWN0W25hbWU9c2NyaXB0VHlwZV0nLCBub2RlLnBhcmVudEVsZW1lbnQpO1xyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzY3JpcHRMYW5ndWFnZVByb3BOYW1lLCBzY3JpcHRWYWx1ZVByb3BOYW1lLCBpc0Zvcm1hdFJlcXVpcmVkLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgJzxkaXYgY2xhc3M9XCJicHAtcm93IGJwcC10ZXh0ZmllbGRcIj4nICtcclxuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LWZvcm1hdFwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnU2NyaXB0IEZvcm1hdCcpKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCI+JyArXHJcbiAgICAgICAgJzxpbnB1dCBpZD1cImNhbS1zY3JpcHQtZm9ybWF0XCIgdHlwZT1cInRleHRcIiBuYW1lPVwic2NyaXB0Rm9ybWF0XCIgLz4nICtcclxuICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJzY3JpcHQuY2xlYXJTY3JpcHRGb3JtYXRcIiBkYXRhLXNob3c9XCJzY3JpcHQuY2FuQ2xlYXJTY3JpcHRGb3JtYXRcIj4nICtcclxuICAgICAgICAgICc8c3Bhbj5YPC9zcGFuPicgK1xyXG4gICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvZGl2PicgK1xyXG4gICAgJzwvZGl2PicgK1xyXG5cclxuICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAnPGxhYmVsIGZvcj1cImNhbS1zY3JpcHQtdHlwZVwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnU2NyaXB0IFR5cGUnKSkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICc8c2VsZWN0IGlkPVwiY2FtLXNjcmlwdC10eXBlXCIgbmFtZT1cInNjcmlwdFR5cGVcIiBkYXRhLXZhbHVlPicgK1xyXG4gICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJzY3JpcHRcIiBzZWxlY3RlZD4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ0lubGluZSBTY3JpcHQnKSkgKyAnPC9vcHRpb24+JyArXHJcbiAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT1cInNjcmlwdFJlc291cmNlXCI+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdFeHRlcm5hbCBSZXNvdXJjZScpKSArICc8L29wdGlvbj4nICtcclxuICAgICAgICAnPC9zZWxlY3Q+JyArXHJcbiAgICAgICc8L2Rpdj4nICtcclxuICAgICc8L2Rpdj4nICtcclxuXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3cgYnBwLXRleHRmaWVsZFwiPicgK1xyXG4gICAgICAnPGxhYmVsIGZvcj1cImNhbS1zY3JpcHQtcmVzb3VyY2UtdmFsXCIgZGF0YS1zaG93PVwic2NyaXB0LmlzU2NyaXB0UmVzb3VyY2VcIj4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ1Jlc291cmNlJykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiBkYXRhLXNob3c9XCJzY3JpcHQuaXNTY3JpcHRSZXNvdXJjZVwiPicgK1xyXG4gICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tc2NyaXB0LXJlc291cmNlLXZhbFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNjcmlwdFJlc291cmNlVmFsdWVcIiAvPicgK1xyXG4gICAgICAgICc8YnV0dG9uIGNsYXNzPVwiY2xlYXJcIiBkYXRhLWFjdGlvbj1cInNjcmlwdC5jbGVhclNjcmlwdFJlc291cmNlXCIgZGF0YS1zaG93PVwic2NyaXB0LmNhbkNsZWFyU2NyaXB0UmVzb3VyY2VcIj4nICtcclxuICAgICAgICAgICc8c3Bhbj5YPC9zcGFuPicgK1xyXG4gICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvZGl2PicgK1xyXG4gICAgJzwvZGl2PicgK1xyXG5cclxuICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAnPGxhYmVsIGZvcj1cImNhbS1zY3JpcHQtdmFsXCIgZGF0YS1zaG93PVwic2NyaXB0LmlzU2NyaXB0XCI+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdTY3JpcHQnKSkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFwiPicgK1xyXG4gICAgICAgICc8dGV4dGFyZWEgaWQ9XCJjYW0tc2NyaXB0LXZhbFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNjcmlwdFZhbHVlXCI+PC90ZXh0YXJlYT4nICtcclxuICAgICAgJzwvZGl2PicrXHJcbiAgICAnPC9kaXY+JyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGJvKSB7XHJcbiAgICAgIHZhciB2YWx1ZXMgPSB7fTtcclxuXHJcbiAgICAgIC8vIHJlYWQgdmFsdWVzIGZyb20geG1sOlxyXG4gICAgICB2YXIgYm9TY3JpcHRSZXNvdXJjZSA9IGJvLmdldCgnYWN0aXZpdGk6cmVzb3VyY2UnKSxcclxuICAgICAgICAgIGJvU2NyaXB0ID0gYm8uZ2V0KHNjcmlwdFZhbHVlUHJvcE5hbWUpLFxyXG4gICAgICAgICAgYm9TY3JpcHRGb3JtYXQgPSBiby5nZXQoc2NyaXB0TGFuZ3VhZ2VQcm9wTmFtZSk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGJvU2NyaXB0UmVzb3VyY2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdmFsdWVzLnNjcmlwdFJlc291cmNlVmFsdWUgPSBib1NjcmlwdFJlc291cmNlO1xyXG4gICAgICAgIHZhbHVlcy5zY3JpcHRUeXBlID0gJ3NjcmlwdFJlc291cmNlJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZXMuc2NyaXB0VmFsdWUgPSBib1NjcmlwdDtcclxuICAgICAgICB2YWx1ZXMuc2NyaXB0VHlwZSA9ICdzY3JpcHQnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZXMuc2NyaXB0Rm9ybWF0ID0gYm9TY3JpcHRGb3JtYXQ7XHJcblxyXG4gICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCkge1xyXG4gICAgICB2YXIgc2NyaXB0Rm9ybWF0ID0gdmFsdWVzLnNjcmlwdEZvcm1hdCxcclxuICAgICAgICAgIHNjcmlwdFR5cGUgPSB2YWx1ZXMuc2NyaXB0VHlwZSxcclxuICAgICAgICAgIHNjcmlwdFJlc291cmNlVmFsdWUgPSB2YWx1ZXMuc2NyaXB0UmVzb3VyY2VWYWx1ZSxcclxuICAgICAgICAgIHNjcmlwdFZhbHVlID0gdmFsdWVzLnNjcmlwdFZhbHVlO1xyXG5cclxuICAgICAgLy8gaW5pdCB1cGRhdGVcclxuICAgICAgdmFyIHVwZGF0ZSA9IHtcclxuICAgICAgICAnYWN0aXZpdGk6cmVzb3VyY2UnOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuICAgICAgdXBkYXRlW3NjcmlwdFZhbHVlUHJvcE5hbWVdID0gdW5kZWZpbmVkO1xyXG4gICAgICB1cGRhdGVbc2NyaXB0TGFuZ3VhZ2VQcm9wTmFtZV0gPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBpZiAoaXNGb3JtYXRSZXF1aXJlZCkge1xyXG4gICAgICAgIC8vIGFsd2F5cyBzZXQgbGFuZ3VhZ2VcclxuICAgICAgICB1cGRhdGVbc2NyaXB0TGFuZ3VhZ2VQcm9wTmFtZV0gPSBzY3JpcHRGb3JtYXQgfHwgJyc7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAvLyBzZXQgbGFuZ3VhZ2Ugb25seSB3aGVuIHNjcmlwdEZvcm1hdCBoYXMgYSB2YWx1ZVxyXG4gICAgICBpZiAoc2NyaXB0Rm9ybWF0ICE9PSAnJykge1xyXG4gICAgICAgIHVwZGF0ZVtzY3JpcHRMYW5ndWFnZVByb3BOYW1lXSA9IHNjcmlwdEZvcm1hdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2V0IGVpdGhlciBpbmxpbmUgc2NyaXB0IG9yIHJlc291cmNlXHJcbiAgICAgIGlmICgnc2NyaXB0UmVzb3VyY2UnID09PSBzY3JpcHRUeXBlKSB7XHJcbiAgICAgICAgdXBkYXRlWydhY3Rpdml0aTpyZXNvdXJjZSddID0gc2NyaXB0UmVzb3VyY2VWYWx1ZSB8fCAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1cGRhdGVbc2NyaXB0VmFsdWVQcm9wTmFtZV0gPSBzY3JpcHRWYWx1ZSB8fCAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHVwZGF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdCA9IHt9O1xyXG5cclxuICAgICAgaWYgKHZhbHVlcy5zY3JpcHRUeXBlID09PSAnc2NyaXB0JyAmJiAhdmFsdWVzLnNjcmlwdFZhbHVlKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5zY3JpcHRWYWx1ZSA9IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHZhbHVlcy5zY3JpcHRUeXBlID09PSAnc2NyaXB0UmVzb3VyY2UnICYmICF2YWx1ZXMuc2NyaXB0UmVzb3VyY2VWYWx1ZSkge1xyXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuc2NyaXB0UmVzb3VyY2VWYWx1ZSA9IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRm9ybWF0UmVxdWlyZWQgJiYgKCF2YWx1ZXMuc2NyaXB0Rm9ybWF0IHx8IHZhbHVlcy5zY3JpcHRGb3JtYXQubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuc2NyaXB0Rm9ybWF0ID0gdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXJTY3JpcHRGb3JtYXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIGRvbVF1ZXJ5KCdpbnB1dFtuYW1lPXNjcmlwdEZvcm1hdF0nLCBzY29wZU5vZGUpLnZhbHVlPScnO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGNhbkNsZWFyU2NyaXB0Rm9ybWF0OiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1zY3JpcHRGb3JtYXRdJywgc2NvcGVOb2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBpbnB1dC52YWx1ZSAhPT0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyU2NyaXB0UmVzb3VyY2U6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIGRvbVF1ZXJ5KCdpbnB1dFtuYW1lPXNjcmlwdFJlc291cmNlVmFsdWVdJywgc2NvcGVOb2RlKS52YWx1ZT0nJztcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYW5DbGVhclNjcmlwdFJlc291cmNlOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1zY3JpcHRSZXNvdXJjZVZhbHVlXScsIHNjb3BlTm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhclNjcmlwdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgZG9tUXVlcnkoJ3RleHRhcmVhW25hbWU9c2NyaXB0VmFsdWVdJywgc2NvcGVOb2RlKS52YWx1ZT0nJztcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYW5DbGVhclNjcmlwdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ3RleHRhcmVhW25hbWU9c2NyaXB0VmFsdWVdJywgc2NvcGVOb2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBpbnB1dC52YWx1ZSAhPT0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzU2NyaXB0UmVzb3VyY2U6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIHZhciBzY3JpcHRUeXBlID0gZ2V0U2NyaXB0VHlwZShzY29wZU5vZGUpO1xyXG4gICAgICByZXR1cm4gc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdFJlc291cmNlJztcclxuICAgIH0sXHJcblxyXG4gICAgaXNTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIHZhciBzY3JpcHRUeXBlID0gZ2V0U2NyaXB0VHlwZShzY29wZU5vZGUpO1xyXG4gICAgICByZXR1cm4gc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdCc7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGlzU3RhcnRhYmxlSW5UYXNrbGlzdEVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgIGlkOiAnaXNTdGFydGFibGVJblRhc2tsaXN0JyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1N0YXJ0YWJsZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2lzU3RhcnRhYmxlSW5UYXNrbGlzdCcsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgaXNTdGFydGFibGVJblRhc2tsaXN0ID0gYm8uZ2V0KCdhY3Rpdml0aTppc1N0YXJ0YWJsZUluVGFza2xpc3QnKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNTdGFydGFibGVJblRhc2tsaXN0OiBpc1N0YXJ0YWJsZUluVGFza2xpc3QgPyBpc1N0YXJ0YWJsZUluVGFza2xpc3QgOiAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywge1xyXG4gICAgICAgICdhY3Rpdml0aTppc1N0YXJ0YWJsZUluVGFza2xpc3QnOiAhIXZhbHVlcy5pc1N0YXJ0YWJsZUluVGFza2xpc3RcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgaXNTdGFydGFibGVJblRhc2tsaXN0RW50cnlcclxuICBdO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBNb2RlbFV0aWwgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLFxyXG4gICAgaXMgPSBNb2RlbFV0aWwuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IE1vZGVsVXRpbC5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICB2YXIgZG9jdW1lbnRhdGlvbnMgPSBidXNpbmVzc09iamVjdCAmJiBidXNpbmVzc09iamVjdC5nZXQoJ2RvY3VtZW50YXRpb24nKSxcclxuICAgICAgICAgIHRleHQgPSAoZG9jdW1lbnRhdGlvbnMgJiYgZG9jdW1lbnRhdGlvbnMubGVuZ3RoID4gMCkgPyBkb2N1bWVudGF0aW9uc1swXS50ZXh0IDogJyc7XHJcblxyXG4gICAgICByZXR1cm4geyBkb2N1bWVudGF0aW9uOiB0ZXh0IH07XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBzZXRWYWx1ZSA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBuZXdPYmplY3RMaXN0ID0gW107XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlcy5kb2N1bWVudGF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZXMuZG9jdW1lbnRhdGlvbiAhPT0gJycpIHtcclxuICAgICAgICBuZXdPYmplY3RMaXN0LnB1c2goYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkRvY3VtZW50YXRpb24nLCB7XHJcbiAgICAgICAgICB0ZXh0OiB2YWx1ZXMuZG9jdW1lbnRhdGlvblxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5zZXRMaXN0KGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCAnZG9jdW1lbnRhdGlvbicsIG5ld09iamVjdExpc3QpO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvLyBFbGVtZW50IERvY3VtZW50YXRpb25cclxuICB2YXIgZWxlbWVudERvY3VFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KHtcclxuICAgIGlkOiAnZG9jdW1lbnRhdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFbGVtZW50IERvY3VtZW50YXRpb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdkb2N1bWVudGF0aW9uJ1xyXG4gIH0pO1xyXG5cclxuICBlbGVtZW50RG9jdUVudHJ5LnNldCA9IHNldFZhbHVlKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpKTtcclxuXHJcbiAgZWxlbWVudERvY3VFbnRyeS5nZXQgPSBnZXRWYWx1ZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSk7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbGVtZW50RG9jdUVudHJ5KTtcclxuXHJcblxyXG4gIHZhciBwcm9jZXNzUmVmO1xyXG5cclxuICAvLyBQcm9jZXNzIERvY3VtZW50YXRpb24gd2hlbiBoYXZpbmcgYSBDb2xsYWJvcmF0aW9uIERpYWdyYW1cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG5cclxuICAgIHByb2Nlc3NSZWYgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5wcm9jZXNzUmVmO1xyXG5cclxuICAgIC8vIGRvIG5vdCBzaG93IGZvciBjb2xsYXBzZWQgUG9vbHMvUGFydGljaXBhbnRzXHJcbiAgICBpZiAocHJvY2Vzc1JlZikge1xyXG4gICAgICB2YXIgcHJvY2Vzc0RvY3VFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KHtcclxuICAgICAgICBpZDogJ3Byb2Nlc3MtZG9jdW1lbnRhdGlvbicsXHJcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJvY2VzcyBEb2N1bWVudGF0aW9uJyksXHJcbiAgICAgICAgbW9kZWxQcm9wZXJ0eTogJ2RvY3VtZW50YXRpb24nXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcHJvY2Vzc0RvY3VFbnRyeS5zZXQgPSBzZXRWYWx1ZShwcm9jZXNzUmVmKTtcclxuXHJcbiAgICAgIHByb2Nlc3NEb2N1RW50cnkuZ2V0ID0gZ2V0VmFsdWUocHJvY2Vzc1JlZik7XHJcblxyXG4gICAgICBncm91cC5lbnRyaWVzLnB1c2gocHJvY2Vzc0RvY3VFbnRyeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGlzQW55ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnKS5pc0FueSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKTtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBtZXNzYWdlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9NZXNzYWdlRXZlbnREZWZpbml0aW9uJyksXHJcbiAgICBzaWduYWwgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1NpZ25hbEV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgZXJyb3IgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uJyksXHJcbiAgICBlc2NhbGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Fc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyksXHJcbiAgICB0aW1lciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vVGltZXJFdmVudERlZmluaXRpb24nKSxcclxuICAgIGNvbXBlbnNhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgY29uZGl0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Db25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBldmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkVuZEV2ZW50JyxcclxuICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxyXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIC8vIE1lc3NhZ2UgYW5kIFNpZ25hbCBFdmVudCBEZWZpbml0aW9uXHJcbiAgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XHJcblxyXG4gICAgICB2YXIgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpLFxyXG4gICAgICAgICAgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChtZXNzYWdlRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICAgICAgbWVzc2FnZShncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG1lc3NhZ2VFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzaWduYWxFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgICBzaWduYWwoZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBzaWduYWxFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIFNwZWNpYWwgQ2FzZTogUmVjZWl2ZSBUYXNrXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlJlY2VpdmVUYXNrJykpIHtcclxuICAgIG1lc3NhZ2UoZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgdHJhbnNsYXRlKTtcclxuICB9XHJcblxyXG4gIC8vIEVycm9yIEV2ZW50IERlZmluaXRpb25cclxuICB2YXIgZXJyb3JFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46RW5kRXZlbnQnXHJcbiAgXTtcclxuXHJcbiAgZm9yRWFjaChlcnJvckV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcclxuXHJcbiAgICAgIHZhciBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChlcnJvckV2ZW50RGVmaW5pdGlvbikge1xyXG5cclxuICAgICAgICBlcnJvcihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVycm9yRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEVzY2FsYXRpb24gRXZlbnQgRGVmaW5pdGlvblxyXG4gIHZhciBlc2NhbGF0aW9uRXZlbnRzID0gW1xyXG4gICAgJ2JwbW46U3RhcnRFdmVudCcsXHJcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcclxuICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxyXG4gICAgJ2JwbW46RW5kRXZlbnQnXHJcbiAgXTtcclxuXHJcbiAgZm9yRWFjaChlc2NhbGF0aW9uRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xyXG5cclxuICAgICAgdmFyIHNob3dFc2NhbGF0aW9uQ29kZVZhcmlhYmxlID0gaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcclxuXHJcbiAgICAgIC8vIGdldCBidXNpbmVzcyBvYmplY3RcclxuICAgICAgdmFyIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICAgICAgZXNjYWxhdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sIHNob3dFc2NhbGF0aW9uQ29kZVZhcmlhYmxlLFxyXG4gICAgICAgICAgdHJhbnNsYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgLy8gVGltZXIgRXZlbnQgRGVmaW5pdGlvblxyXG4gIHZhciB0aW1lckV2ZW50cyA9IFtcclxuICAgICdicG1uOlN0YXJ0RXZlbnQnLFxyXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIGZvckVhY2godGltZXJFdmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XHJcblxyXG4gICAgICAvLyBnZXQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgICAgIHZhciB0aW1lckV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRUaW1lckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmICh0aW1lckV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIHRpbWVyKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdGltZXJFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gQ29tcGVuc2F0ZSBFdmVudCBEZWZpbml0aW9uXHJcbiAgdmFyIGNvbXBlbnNhdGlvbkV2ZW50cyA9IFtcclxuICAgICdicG1uOkVuZEV2ZW50JyxcclxuICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXHJcbiAgXTtcclxuXHJcbiAgZm9yRWFjaChjb21wZW5zYXRpb25FdmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XHJcblxyXG4gICAgICAvLyBnZXQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgICAgIHZhciBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbXBlbnNhdGVFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIGNvbXBlbnNhdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQ29uZGl0aW9uYWwgRXZlbnQgRGVmaW5pdGlvblxyXG4gIHZhciBjb25kaXRpb25hbEV2ZW50cyA9IFtcclxuICAgICdicG1uOlN0YXJ0RXZlbnQnLFxyXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcclxuICAgICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnXHJcbiAgXTtcclxuXHJcbiAgaWYgKGlzQW55KGVsZW1lbnQsIGNvbmRpdGlvbmFsRXZlbnRzKSkge1xyXG5cclxuICAgIC8vIGdldCBidXNpbmVzcyBvYmplY3RcclxuICAgIHZhciBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICBpZiAoY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgY29uZGl0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24sIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgcGFydGljaXBhbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvUGFydGljaXBhbnRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFibykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkpIHtcclxuXHJcbiAgICB2YXIgZXhlY3V0YWJsZUVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgICAgaWQ6ICdwcm9jZXNzLWlzLWV4ZWN1dGFibGUnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFeGVjdXRhYmxlJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6ICdpc0V4ZWN1dGFibGUnXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBpbiBwYXJ0aWNpcGFudHMgd2UgaGF2ZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2Ygc2V0IGFuZCBnZXRcclxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICAgIGV4ZWN1dGFibGVFbnRyeS5nZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLmdldFByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnaXNFeGVjdXRhYmxlJyk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBleGVjdXRhYmxlRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLm1vZGlmeVByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnaXNFeGVjdXRhYmxlJywgdmFsdWVzKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZXhlY3V0YWJsZUVudHJ5KTtcclxuICB9XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vVXRpbHMnKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSwgb3B0aW9ucykge1xyXG5cclxuICB2YXIgZGVzY3JpcHRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIC8vIElkXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdpZCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJZCcpLFxyXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uICYmIHRyYW5zbGF0ZShkZXNjcmlwdGlvbiksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaWQnLFxyXG4gICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlkO1xyXG4gICAgfSxcclxuICAgIHNldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0aWVzKSB7XHJcblxyXG4gICAgICBlbGVtZW50ID0gZWxlbWVudC5sYWJlbFRhcmdldCB8fCBlbGVtZW50O1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BlcnRpZXMpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGlkVmFsdWUgPSB2YWx1ZXMuaWQ7XHJcblxyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgIHZhciBpZEVycm9yID0gdXRpbHMuaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpO1xyXG5cclxuICAgICAgcmV0dXJuIGlkRXJyb3IgPyB7IGlkOiBpZEVycm9yIH0gOiB7fTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbmZ1bmN0aW9uIGdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGxpbmtFdmVudERlZmluaXRpb24gPSBudWxsO1xyXG4gIGlmIChiby5ldmVudERlZmluaXRpb25zKSB7XHJcbiAgICBmb3JFYWNoKGJvLmV2ZW50RGVmaW5pdGlvbnMsIGZ1bmN0aW9uKGV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICBpZiAoaXMoZXZlbnREZWZpbml0aW9uLCAnYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJykpIHtcclxuICAgICAgICBsaW5rRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBsaW5rRXZlbnREZWZpbml0aW9uO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgbGlua0V2ZW50cyA9IFsgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnIF07XHJcblxyXG4gIGZvckVhY2gobGlua0V2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcclxuXHJcbiAgICAgIHZhciBsaW5rRXZlbnREZWZpbml0aW9uID0gZ2V0TGlua0V2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChsaW5rRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgICAgICBpZDogJ2xpbmstZXZlbnQnLFxyXG4gICAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnTGluayBOYW1lJyksXHJcbiAgICAgICAgICBtb2RlbFByb3BlcnR5OiAnbGluay1uYW1lJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBlbnRyeS5nZXQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHJldHVybiB7ICdsaW5rLW5hbWUnOiBsaW5rRXZlbnREZWZpbml0aW9uLmdldCgnbmFtZScpIH07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgICB2YXIgbmV3UHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgbmFtZTogdmFsdWVzWydsaW5rLW5hbWUnXVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbGlua0V2ZW50RGVmaW5pdGlvbiwgbmV3UHJvcGVydGllcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIG5hbWVFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL05hbWUnKSxcclxuICAgIGNyZWF0ZUNhdGVnb3J5VmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ2F0ZWdvcnlIZWxwZXInKS5jcmVhdGVDYXRlZ29yeVZhbHVlLFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNhbnZhcywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVDYXRlZ29yeShzZW1hbnRpYykge1xyXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXHJcbiAgICAgICAgZGVmaW5pdGlvbnMgPSBnZXRCdXNpbmVzc09iamVjdChyb290RWxlbWVudCkuJHBhcmVudCxcclxuICAgICAgICBjYXRlZ29yeVZhbHVlID0gY3JlYXRlQ2F0ZWdvcnlWYWx1ZShkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgIHNlbWFudGljLmNhdGVnb3J5VmFsdWVSZWYgPSBjYXRlZ29yeVZhbHVlO1xyXG5cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldEdyb3VwTmFtZShlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICAgIGNhdGVnb3J5VmFsdWVSZWYgPSBiby5jYXRlZ29yeVZhbHVlUmVmO1xyXG5cclxuICAgIGlmICghY2F0ZWdvcnlWYWx1ZVJlZikge1xyXG4gICAgICBpbml0aWFsaXplQ2F0ZWdvcnkoYm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG5lZWRzIGRpcmVjdCBjYWxsIHRvIHVwZGF0ZSBjYXRlZ29yeVZhbHVlIHByb3Blcmx5XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZUxhYmVsJyxcclxuICAgICAgY29udGV4dDoge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgbmV3TGFiZWw6IHZhbHVlcy5jYXRlZ29yeVZhbHVlXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRHcm91cE5hbWUoZWxlbWVudCkge1xyXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgdmFsdWUgPSAoYm8uY2F0ZWdvcnlWYWx1ZVJlZiB8fCB7fSkudmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIHsgY2F0ZWdvcnlWYWx1ZTogdmFsdWUgfTtcclxuICB9XHJcblxyXG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcblxyXG4gICAgdmFyIG9wdGlvbnM7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xyXG4gICAgICBvcHRpb25zID0geyBtb2RlbFByb3BlcnR5OiAndGV4dCcsIGxhYmVsOiB0cmFuc2xhdGUoJ1RleHQnKSB9O1xyXG4gICAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHcm91cCcpKSB7XHJcbiAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgbW9kZWxQcm9wZXJ0eTogJ2NhdGVnb3J5VmFsdWUnLFxyXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhdGVnb3J5IFZhbHVlJyksXHJcbiAgICAgICAgZ2V0OiBnZXRHcm91cE5hbWUsXHJcbiAgICAgICAgc2V0OiBzZXRHcm91cE5hbWVcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBuYW1lXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQobmFtZUVudHJ5RmFjdG9yeShlbGVtZW50LCBvcHRpb25zLCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBwYXJ0aWNpcGFudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9QYXJ0aWNpcGFudEhlbHBlcicpLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgbmFtZUVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTmFtZScpLFxyXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9VdGlscycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBvcHRpb25zKSB7XHJcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBwcm9jZXNzSWREZXNjcmlwdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wcm9jZXNzSWREZXNjcmlwdGlvbjtcclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHByb2Nlc3NJZFxyXG4gICAgICovXHJcbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICB2YXIgaWRFbnRyeSA9IGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgICAgIGlkOiAncHJvY2Vzcy1pZCcsXHJcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJvY2VzcyBJZCcpLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzSWREZXNjcmlwdGlvbiAmJiB0cmFuc2xhdGUocHJvY2Vzc0lkRGVzY3JpcHRpb24pLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICdwcm9jZXNzSWQnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gaW4gcGFydGljaXBhbnRzIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldCBhbmQgZ2V0XHJcbiAgICAgIGlkRW50cnkuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gcGFydGljaXBhbnRIZWxwZXIuZ2V0UHJvY2Vzc0J1c2luZXNzT2JqZWN0KGVsZW1lbnQsICdpZCcpO1xyXG4gICAgICAgIHJldHVybiB7IHByb2Nlc3NJZDogcHJvcGVydGllcy5pZCB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWRFbnRyeS5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgICByZXR1cm4gcGFydGljaXBhbnRIZWxwZXIubW9kaWZ5UHJvY2Vzc0J1c2luZXNzT2JqZWN0KGVsZW1lbnQsICdpZCcsIHsgaWQ6IHZhbHVlcy5wcm9jZXNzSWQgfSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZEVudHJ5LnZhbGlkYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgdmFyIGlkVmFsdWUgPSB2YWx1ZXMucHJvY2Vzc0lkO1xyXG5cclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdmFyIHByb2Nlc3NJZEVycm9yID0gdXRpbHMuaXNJZFZhbGlkKGJvLnByb2Nlc3NSZWYsIGlkVmFsdWUsIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcm9jZXNzSWRFcnJvciA/IHsgcHJvY2Vzc0lkOiBwcm9jZXNzSWRFcnJvciB9IDoge307XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBncm91cC5lbnRyaWVzLnB1c2goaWRFbnRyeSk7XHJcblxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIHByb2Nlc3MgbmFtZVxyXG4gICAgICAgKi9cclxuICAgICAgdmFyIHByb2Nlc3NOYW1lRW50cnkgPSBuYW1lRW50cnlGYWN0b3J5KGVsZW1lbnQsIHtcclxuICAgICAgICBpZDogJ3Byb2Nlc3MtbmFtZScsXHJcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJvY2VzcyBOYW1lJylcclxuICAgICAgfSlbMF07XHJcblxyXG4gICAgICAvLyBpbiBwYXJ0aWNpcGFudHMgd2UgaGF2ZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2Ygc2V0IGFuZCBnZXRcclxuICAgICAgcHJvY2Vzc05hbWVFbnRyeS5nZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLmdldFByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnbmFtZScpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcHJvY2Vzc05hbWVFbnRyeS5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgICByZXR1cm4gcGFydGljaXBhbnRIZWxwZXIubW9kaWZ5UHJvY2Vzc0J1c2luZXNzT2JqZWN0KGVsZW1lbnQsICduYW1lJywgdmFsdWVzKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGdyb3VwLmVudHJpZXMucHVzaChwcm9jZXNzTmFtZUVudHJ5KTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKSxcclxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKTtcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyksXHJcbiAgICBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKSxcclxuICAgIGZpbHRlciA9IHJlcXVpcmUoJ2xvZGFzaC9maWx0ZXInKTtcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRDb250YWluZWRBY3Rpdml0aWVzKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0Rmxvd0VsZW1lbnRzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENvbnRhaW5lZEJvdW5kYXJ5RXZlbnRzKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0Rmxvd0VsZW1lbnRzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Rmxvd0VsZW1lbnRzKGVsZW1lbnQsIHR5cGUpIHtcclxuICByZXR1cm4gdXRpbHMuZmlsdGVyRWxlbWVudHNCeVR5cGUoZWxlbWVudC5mbG93RWxlbWVudHMsIHR5cGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0NvbXBlbnNhdGlvbkV2ZW50QXR0YWNoZWRUb0FjdGl2aXR5KGFjdGl2aXR5LCBib3VuZGFyeUV2ZW50cykge1xyXG4gIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkuaWQ7XHJcbiAgdmFyIGJvdW5kYXJ5RXZlbnQgPSBmaW5kKGJvdW5kYXJ5RXZlbnRzLCBmdW5jdGlvbihib3VuZGFyeUV2ZW50KSB7XHJcbiAgICB2YXIgY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGJvdW5kYXJ5RXZlbnQpO1xyXG4gICAgdmFyIGF0dGFjaGVkVG9SZWYgPSBib3VuZGFyeUV2ZW50LmF0dGFjaGVkVG9SZWY7XHJcbiAgICByZXR1cm4gY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiAmJiBhdHRhY2hlZFRvUmVmICYmIGF0dGFjaGVkVG9SZWYuaWQgPT09IGFjdGl2aXR5SWQ7XHJcbiAgfSk7XHJcbiAgcmV0dXJuICEhYm91bmRhcnlFdmVudDtcclxufVxyXG5cclxuLy8gc3VicHJvY2Vzczogb25seSB3aGVuIGl0IGlzIG5vdCB0cmlnZ2VyZWRCeUV2ZW50XHJcbi8vIGFjdGl2aXR5OiBvbmx5IHdoZW4gaXQgYXR0YWNoIGEgY29tcGVuc2F0aW9uIGJvdW5kYXJ5IGV2ZW50XHJcbi8vIGNhbGxBY3Rpdml0eTogbm8gbGltaXRhdGlvblxyXG5mdW5jdGlvbiBjYW5BY3Rpdml0eUJlQ29tcGVuc2F0ZWQoYWN0aXZpdHksIGJvdW5kYXJ5RXZlbnRzKSB7XHJcbiAgcmV0dXJuIChpcyhhY3Rpdml0eSwgJ2JwbW46U3ViUHJvY2VzcycpICYmICFhY3Rpdml0eS50cmlnZ2VyZWRCeUV2ZW50KSB8fFxyXG4gICAgICAgICAgaXMoYWN0aXZpdHksICdicG1uOkNhbGxBY3Rpdml0eScpIHx8XHJcbiAgICAgICAgICBpc0NvbXBlbnNhdGlvbkV2ZW50QXR0YWNoZWRUb0FjdGl2aXR5KGFjdGl2aXR5LCBib3VuZGFyeUV2ZW50cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFjdGl2aXRpZXNGb3JDb21wZW5zYXRpb24oZWxlbWVudCkge1xyXG4gIHZhciBib3VuZGFyeUV2ZW50cyA9IGdldENvbnRhaW5lZEJvdW5kYXJ5RXZlbnRzKGVsZW1lbnQpO1xyXG4gIHJldHVybiBmaWx0ZXIoZ2V0Q29udGFpbmVkQWN0aXZpdGllcyhlbGVtZW50KSwgZnVuY3Rpb24oYWN0aXZpdHkpIHtcclxuICAgIHJldHVybiBjYW5BY3Rpdml0eUJlQ29tcGVuc2F0ZWQoYWN0aXZpdHksIGJvdW5kYXJ5RXZlbnRzKTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmKGVsZW1lbnQpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICB2YXIgcGFyZW50ID0gYm8uJHBhcmVudDtcclxuXHJcbiAgdmFyIGFjdGl2aXRpZXNGb3JBY3Rpdml0eVJlZiA9IGdldEFjdGl2aXRpZXNGb3JDb21wZW5zYXRpb24ocGFyZW50KTtcclxuXHJcbiAgLy8gaWYgdGhyb3dpbmcgY29tcGVuc2F0aW9uIGV2ZW50IGlzIGluIGFuIGV2ZW50IHN1YiBwcm9jZXNzOlxyXG4gIC8vIGdldCBhbHNvIGFsbCBhY3Rpdml0aWVzIG91dHNpZGUgb2YgdGhlIGV2ZW50IHN1YiBwcm9jZXNzXHJcbiAgaWYgKGlzKHBhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIHBhcmVudC50cmlnZ2VyZWRCeUV2ZW50KSB7XHJcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcclxuICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgYWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmID0gYWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmLmNvbmNhdChnZXRBY3Rpdml0aWVzRm9yQ29tcGVuc2F0aW9uKHBhcmVudCkpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJldHVybiBhY3Rpdml0aWVzRm9yQWN0aXZpdHlSZWY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXR5UmVmT3B0aW9ucyhlbGVtZW50KSB7XHJcbiAgdmFyIG9wdGlvbnMgPSBbIHsgdmFsdWU6ICcnIH0gXTtcclxuXHJcbiAgdmFyIGFjdGl2aXRpZXMgPSBnZXRBY3Rpdml0aWVzRm9yQWN0aXZpdHlSZWYoZWxlbWVudCk7XHJcbiAgZm9yRWFjaChhY3Rpdml0aWVzLCBmdW5jdGlvbihhY3Rpdml0eSkge1xyXG4gICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS5pZDtcclxuICAgIHZhciBuYW1lID0gKGFjdGl2aXR5Lm5hbWUgPyAoYWN0aXZpdHkubmFtZSArICcgJykgOiAnJykgKyAnKGlkPScgKyBhY3Rpdml0eUlkICsgJyknO1xyXG4gICAgb3B0aW9ucy5wdXNoKHsgdmFsdWU6IGFjdGl2aXR5SWQsIG5hbWU6IG5hbWUgfSk7XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBvcHRpb25zO1xyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgaWQ6ICd3YWl0LWZvci1jb21wbGV0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1dhaXQgZm9yIENvbXBsZXRpb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICd3YWl0Rm9yQ29tcGxldGlvbicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgd2FpdEZvckNvbXBsZXRpb246IGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24ud2FpdEZvckNvbXBsZXRpb25cclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFsdWVzLndhaXRGb3JDb21wbGV0aW9uID0gdmFsdWVzLndhaXRGb3JDb21wbGV0aW9uIHx8IGZhbHNlO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIHZhbHVlcyk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ2FjdGl2aXR5LXJlZicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdBY3Rpdml0eSBSZWYnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IGNyZWF0ZUFjdGl2aXR5UmVmT3B0aW9ucyhlbGVtZW50KSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdhY3Rpdml0eVJlZicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpdml0eVJlZiA9IGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24uYWN0aXZpdHlSZWY7XHJcbiAgICAgIGFjdGl2aXR5UmVmID0gYWN0aXZpdHlSZWYgJiYgYWN0aXZpdHlSZWYuaWQ7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYWN0aXZpdHlSZWY6IGFjdGl2aXR5UmVmIHx8ICcnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBhY3Rpdml0eVJlZiA9IHZhbHVlcy5hY3Rpdml0eVJlZiB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIGFjdGl2aXR5UmVmID0gYWN0aXZpdHlSZWYgJiYgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudFJlZ2lzdHJ5LmdldChhY3Rpdml0eVJlZikpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIHtcclxuICAgICAgICBhY3Rpdml0eVJlZjogYWN0aXZpdHlSZWZcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgaXNFdmVudFN1YlByb2Nlc3MgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL0RpVXRpbCcpLmlzRXZlbnRTdWJQcm9jZXNzO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0VmFsdWUgPSBmdW5jdGlvbihtb2RlbFByb3BlcnR5KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICB2YXIgbW9kZWxQcm9wZXJ0eVZhbHVlID0gY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOicgKyBtb2RlbFByb3BlcnR5KTtcclxuICAgICAgdmFyIHZhbHVlID0ge307XHJcblxyXG4gICAgICB2YWx1ZVttb2RlbFByb3BlcnR5XSA9IG1vZGVsUHJvcGVydHlWYWx1ZTtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbihtb2RlbFByb3BlcnR5KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG5cclxuICAgICAgcHJvcHNbJ2NhbXVuZGE6JyArIG1vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24sIHByb3BzKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICd2YXJpYWJsZU5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGUgTmFtZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eSA6ICd2YXJpYWJsZU5hbWUnLFxyXG5cclxuICAgIGdldDogZ2V0VmFsdWUoJ3ZhcmlhYmxlTmFtZScpLFxyXG4gICAgc2V0OiBzZXRWYWx1ZSgndmFyaWFibGVOYW1lJylcclxuICB9KSk7XHJcblxyXG4gIHZhciBpc0NvbmRpdGlvbmFsU3RhcnRFdmVudCA9XHJcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpTdGFydEV2ZW50JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQucGFyZW50KTtcclxuXHJcbiAgaWYgKCFpc0NvbmRpdGlvbmFsU3RhcnRFdmVudCkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZDogJ3ZhcmlhYmxlRXZlbnQnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdWYXJpYWJsZSBFdmVudCcpLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKCdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUgY2hhbmdlIGV2ZW50IGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAndmFyaWFibGVFdmVudCcsXHJcblxyXG4gICAgICBnZXQ6IGdldFZhbHVlKCd2YXJpYWJsZUV2ZW50JyksXHJcbiAgICAgIHNldDogc2V0VmFsdWUoJ3ZhcmlhYmxlRXZlbnQnKVxyXG4gICAgfSkpO1xyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBlbnRyeSB0byBtb2RpZnkgYSBwcm9wZXJ0eSBvZiBhbiBlbGVtZW50IHdoaWNoXHJcbiAqIGlzIHJlZmVyZW5jZWQgYnkgYSBldmVudCBkZWZpbml0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uXHJcbiAqIEBwYXJhbSAge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkIHRoZSBpZCBvZiB0aGUgZW50cnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsIHRoZSBsYWJlbCBvZiB0aGUgZW50cnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnJlZmVyZW5jZVByb3BlcnR5IHRoZSBuYW1lIG9mIHJlZmVyZW5jaW5nIHByb3BlcnR5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5tb2RlbFByb3BlcnR5IHRoZSBuYW1lIG9mIHByb3BlcnR5IHRvIG1vZGlmeVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuc2hvdWxkVmFsaWRhdGUgYSBmbGFnIGluZGljYXRlIHdoZXRoZXIgdG8gdmFsaWRhdGUgb3Igbm90XHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBlbnRyaWVzXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGRlZmluaXRpb24sIGJwbW5GYWN0b3J5LCBvcHRpb25zKSB7XHJcblxyXG4gIHZhciBpZCA9IG9wdGlvbnMuaWQgfHwgJ2VsZW1lbnQtcHJvcGVydHknO1xyXG4gIHZhciBsYWJlbCA9IG9wdGlvbnMubGFiZWw7XHJcbiAgdmFyIHJlZmVyZW5jZVByb3BlcnR5ID0gb3B0aW9ucy5yZWZlcmVuY2VQcm9wZXJ0eTtcclxuICB2YXIgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSB8fCAnbmFtZSc7XHJcbiAgdmFyIHNob3VsZFZhbGlkYXRlID0gb3B0aW9ucy5zaG91bGRWYWxpZGF0ZSB8fCBmYWxzZTtcclxuXHJcbiAgdmFyIGVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogaWQsXHJcbiAgICBsYWJlbDogbGFiZWwsXHJcbiAgICBtb2RlbFByb3BlcnR5OiBtb2RlbFByb3BlcnR5LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcmVmZXJlbmNlID0gZGVmaW5pdGlvbi5nZXQocmVmZXJlbmNlUHJvcGVydHkpO1xyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuICAgICAgcHJvcHNbbW9kZWxQcm9wZXJ0eV0gPSByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLmdldChtb2RlbFByb3BlcnR5KTtcclxuICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgcmVmZXJlbmNlID0gZGVmaW5pdGlvbi5nZXQocmVmZXJlbmNlUHJvcGVydHkpO1xyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuICAgICAgcHJvcHNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZXNbbW9kZWxQcm9wZXJ0eV0gfHwgdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHJlZmVyZW5jZSwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFkZWZpbml0aW9uLmdldChyZWZlcmVuY2VQcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChzaG91bGRWYWxpZGF0ZSkge1xyXG4gICAgZW50cnkudmFsaWRhdGUgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcclxuICAgICAgaWYgKHJlZmVyZW5jZSAmJiAhdmFsdWVzW21vZGVsUHJvcGVydHldKSB7XHJcbiAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvcnMgPSB7fTtcclxuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzW21vZGVsUHJvcGVydHldID0gJ011c3QgcHJvdmlkZSBhIHZhbHVlJztcclxuICAgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9ycztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBbIGVudHJ5IF07XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBldmVudERlZmluaXRpb25SZWZlcmVuY2UgPSByZXF1aXJlKCcuL0V2ZW50RGVmaW5pdGlvblJlZmVyZW5jZScpLFxyXG4gICAgZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9FbGVtZW50UmVmZXJlbmNlUHJvcGVydHknKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZXJyb3JFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSkge1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yJyksXHJcbiAgICBlbGVtZW50TmFtZTogJ2Vycm9yJyxcclxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpFcnJvcicsXHJcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2Vycm9yUmVmJyxcclxuICAgIG5ld0VsZW1lbnRJZFByZWZpeDogJ0Vycm9yXydcclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIGVycm9yRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICdlcnJvci1lbGVtZW50LW5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgTmFtZScpLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdlcnJvclJlZicsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXHJcbiAgICBzaG91bGRWYWxpZGF0ZTogdHJ1ZVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ2Vycm9yLWVsZW1lbnQtY29kZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvciBDb2RlJyksXHJcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2Vycm9yUmVmJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdlcnJvckNvZGUnXHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcclxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sIHNob3dFc2NhbGF0aW9uQ29kZVZhcmlhYmxlLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXNjYWxhdGlvbicpLFxyXG4gICAgZWxlbWVudE5hbWU6ICdlc2NhbGF0aW9uJyxcclxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpFc2NhbGF0aW9uJyxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXNjYWxhdGlvblJlZicsXHJcbiAgICBuZXdFbGVtZW50SWRQcmVmaXg6ICdFc2NhbGF0aW9uXydcclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ2VzY2FsYXRpb24tZWxlbWVudC1uYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VzY2FsYXRpb24gTmFtZScpLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdlc2NhbGF0aW9uUmVmJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgIHNob3VsZFZhbGlkYXRlOiB0cnVlXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICdlc2NhbGF0aW9uLWVsZW1lbnQtY29kZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFc2NhbGF0aW9uIENvZGUnKSxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXNjYWxhdGlvblJlZicsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZXNjYWxhdGlvbkNvZGUnXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgaWYgKHNob3dFc2NhbGF0aW9uQ29kZVZhcmlhYmxlKSB7XHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgIGlkIDogJ2VzY2FsYXRpb25Db2RlVmFyaWFibGUnLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRXNjYWxhdGlvbiBDb2RlIFZhcmlhYmxlJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnZXNjYWxhdGlvbkNvZGVWYXJpYWJsZScsXHJcblxyXG4gICAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgY29kZVZhcmlhYmxlID0gZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6ZXNjYWxhdGlvbkNvZGVWYXJpYWJsZScpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBlc2NhbGF0aW9uQ29kZVZhcmlhYmxlOiBjb2RlVmFyaWFibGVcclxuICAgICAgICB9O1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sIHtcclxuICAgICAgICAgICdjYW11bmRhOmVzY2FsYXRpb25Db2RlVmFyaWFibGUnOiB2YWx1ZXMuZXNjYWxhdGlvbkNvZGVWYXJpYWJsZSB8fCB1bmRlZmluZWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXHJcbiAgICBkb21BdHRyID0gcmVxdWlyZSgnbWluLWRvbScpLmF0dHI7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyksXHJcbiAgICBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKTtcclxuXHJcbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcclxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKSxcclxuICAgIGVzY2FwZUhUTUwgPSB1dGlscy5lc2NhcGVIVE1MO1xyXG5cclxudmFyIHNlbGVjdG9yID0gJ3NlbGVjdFtuYW1lPXNlbGVjdGVkRWxlbWVudF0nO1xyXG5cclxuLyoqXHJcbiAqIEdldCBzZWxlY3QgYm94IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcclxuICpcclxuICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIHNlbGVjdCBib3hcclxuICovXHJcbmZ1bmN0aW9uIGdldFNlbGVjdEJveChub2RlKSB7XHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KHNlbGVjdG9yLCBub2RlLnBhcmVudEVsZW1lbnQpO1xyXG59XHJcblxyXG4vKipcclxuICogRmluZCBlbGVtZW50IGJ5IGdpdmVuIGlkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGV2ZW50RGVmaW5pdGlvblxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBhbiBlbGVtZW50XHJcbiAqL1xyXG5mdW5jdGlvbiBmaW5kRWxlbWVudEJ5SWQoZXZlbnREZWZpbml0aW9uLCB0eXBlLCBpZCkge1xyXG4gIHZhciBlbGVtZW50cyA9IHV0aWxzLmZpbmRSb290RWxlbWVudHNCeVR5cGUoZXZlbnREZWZpbml0aW9uLCB0eXBlKTtcclxuICByZXR1cm4gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuaWQgPT09IGlkO1xyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGVudHJ5IHRvIG1vZGlmeSB0aGUgcmVmZXJlbmNlIHRvIGFuIGVsZW1lbnQgZnJvbSBhblxyXG4gKiBldmVudCBkZWZpbml0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uXHJcbiAqIEBwYXJhbSAge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsIHRoZSBsYWJlbCBvZiB0aGUgZW50cnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmRlc2NyaXB0aW9uIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZW50cnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmVsZW1lbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5lbGVtZW50VHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMucmVmZXJlbmNlUHJvcGVydHkgdGhlIG5hbWUgb2YgcmVmZXJlbmNpbmcgcHJvcGVydHlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm5ld0VsZW1lbnRJZFByZWZpeCB0aGUgcHJlZml4IG9mIGEgbmV3IGNyZWF0ZWQgZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgZW50cmllc1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBkZWZpbml0aW9uLCBicG1uRmFjdG9yeSwgb3B0aW9ucykge1xyXG5cclxuICB2YXIgZWxlbWVudE5hbWUgPSBvcHRpb25zLmVsZW1lbnROYW1lIHx8ICcnLFxyXG4gICAgICBlbGVtZW50VHlwZSA9IG9wdGlvbnMuZWxlbWVudFR5cGUsXHJcbiAgICAgIHJlZmVyZW5jZVByb3BlcnR5ID0gb3B0aW9ucy5yZWZlcmVuY2VQcm9wZXJ0eTtcclxuXHJcbiAgdmFyIG5ld0VsZW1lbnRJZFByZWZpeCA9IG9wdGlvbnMubmV3RWxlbWVudElkUHJlZml4IHx8ICdlbGVtXyc7XHJcblxyXG4gIHZhciBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbiB8fCAnJztcclxuXHJcbiAgdmFyIGVudHJpZXMgPSBbXTtcclxuXHJcbiAgZW50cmllcy5wdXNoKHtcclxuXHJcbiAgICBpZDogJ2V2ZW50LWRlZmluaXRpb25zLScgKyBlbGVtZW50TmFtZSxcclxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcclxuICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwiYnBwLXJvdyBicHAtc2VsZWN0XCI+JyArXHJcbiAgICAgICAgICAgICAnPGxhYmVsIGZvcj1cImNhbXVuZGEtJyArIGVzY2FwZUhUTUwoZWxlbWVudE5hbWUpICsgJ1wiPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICAgICAgICAnPHNlbGVjdCBpZD1cImNhbXVuZGEtJyArIGVzY2FwZUhUTUwoZWxlbWVudE5hbWUpICsgJ1wiIG5hbWU9XCJzZWxlY3RlZEVsZW1lbnRcIiBkYXRhLXZhbHVlPicgK1xyXG4gICAgICAgICAgICAgICAnPC9zZWxlY3Q+JyArXHJcbiAgICAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiYWRkXCIgaWQ9XCJhZGRFbGVtZW50XCIgZGF0YS1hY3Rpb249XCJhZGRFbGVtZW50XCI+PHNwYW4+Kzwvc3Bhbj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICc8L2Rpdj4nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlKSB7XHJcbiAgICAgIHV0aWxzLnVwZGF0ZU9wdGlvbnNEcm9wRG93bihzZWxlY3RvciwgZGVmaW5pdGlvbiwgZWxlbWVudFR5cGUsIGVudHJ5Tm9kZSk7XHJcbiAgICAgIHZhciByZWZlcmVuY2UgPSBkZWZpbml0aW9uLmdldChyZWZlcmVuY2VQcm9wZXJ0eSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50OiAocmVmZXJlbmNlICYmIHJlZmVyZW5jZS5pZCkgfHwgJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHNlbGVjdGlvbiA9IHZhbHVlcy5zZWxlY3RlZEVsZW1lbnQ7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuXHJcbiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHR5cGVvZiBzZWxlY3Rpb24gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHJlZmVyZW5jZSB0byBlbGVtZW50XHJcbiAgICAgICAgcHJvcHNbcmVmZXJlbmNlUHJvcGVydHldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZGVmaW5pdGlvbiwgcHJvcHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuXHJcbiAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBmaW5kRWxlbWVudEJ5SWQoZGVmaW5pdGlvbiwgZWxlbWVudFR5cGUsIHNlbGVjdGlvbik7XHJcbiAgICAgIGlmICghc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIHJvb3QgPSB1dGlscy5nZXRSb290KGRlZmluaXRpb24pO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgZWxlbWVudFxyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZSwgeyBuYW1lOiBzZWxlY3Rpb24gfSwgcm9vdCwgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgcm9vdCwgJ3Jvb3RFbGVtZW50cycsIG51bGwsIFsgc2VsZWN0ZWRFbGVtZW50IF0pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdXBkYXRlIHJlZmVyZW5jZSB0byBlbGVtZW50XHJcbiAgICAgIHByb3BzW3JlZmVyZW5jZVByb3BlcnR5XSA9IHNlbGVjdGVkRWxlbWVudDtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZGVmaW5pdGlvbiwgcHJvcHMpKTtcclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcblxyXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICAgIC8vIG5vdGU6IHRoaXMgZ2VuZXJhdGVkIGlkIHdpbGwgYmUgdXNlZCBhcyBuYW1lXHJcbiAgICAgIC8vIG9mIHRoZSBlbGVtZW50IGFuZCBub3QgYXMgaWRcclxuICAgICAgdmFyIGlkID0gdXRpbHMubmV4dElkKG5ld0VsZW1lbnRJZFByZWZpeCk7XHJcblxyXG4gICAgICB2YXIgb3B0aW9uVGVtcGxhdGUgPSBkb21pZnkoJzxvcHRpb24gdmFsdWU9XCInICsgZXNjYXBlSFRNTChpZCkgKyAnXCI+IChpZD0nK2VzY2FwZUhUTUwoaWQpKycpJyArICc8L29wdGlvbj4nKTtcclxuXHJcbiAgICAgIC8vIGFkZCBuZXcgb3B0aW9uXHJcbiAgICAgIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3goaW5wdXROb2RlKTtcclxuICAgICAgc2VsZWN0Qm94Lmluc2VydEJlZm9yZShvcHRpb25UZW1wbGF0ZSwgc2VsZWN0Qm94LmZpcnN0Q2hpbGQpO1xyXG5cclxuICAgICAgLy8gc2VsZWN0IG5ldyBlbGVtZW50IGluIHRoZSBzZWxlY3QgYm94XHJcbiAgICAgIGZvckVhY2goc2VsZWN0Qm94LCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSBpZCkge1xyXG4gICAgICAgICAgZG9tQXR0cihvcHRpb24sICdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb21BdHRyKG9wdGlvbiwgJ3NlbGVjdGVkJywgbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcclxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG1lc3NhZ2VFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSkge1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlKGVsZW1lbnQsIG1lc3NhZ2VFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdNZXNzYWdlJyksXHJcbiAgICBlbGVtZW50TmFtZTogJ21lc3NhZ2UnLFxyXG4gICAgZWxlbWVudFR5cGU6ICdicG1uOk1lc3NhZ2UnLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdtZXNzYWdlUmVmJyxcclxuICAgIG5ld0VsZW1lbnRJZFByZWZpeDogJ01lc3NhZ2VfJ1xyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnbWVzc2FnZS1lbGVtZW50LW5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWVzc2FnZSBOYW1lJyksXHJcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ21lc3NhZ2VSZWYnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgc2hvdWxkVmFsaWRhdGU6IHRydWVcclxuICB9KSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gZW50cnkgdG8gbW9kaWZ5IHRoZSBuYW1lIG9mIGFuIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWQgdGhlIGlkIG9mIHRoZSBlbnRyeVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubGFiZWwgdGhlIGxhYmVsIG9mIHRoZSBlbnRyeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZ1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW50cnkgdG8gbW9kaWZ5IHRoZSBuYW1lXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICB2YXIgaWQgPSBvcHRpb25zLmlkIHx8ICduYW1lJyxcclxuICAgICAgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHRyYW5zbGF0ZSgnTmFtZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5ID0gb3B0aW9ucy5tb2RlbFByb3BlcnR5IHx8ICduYW1lJztcclxuXHJcbiAgdmFyIG5hbWVFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KHtcclxuICAgIGlkOiBpZCxcclxuICAgIGxhYmVsOiBsYWJlbCxcclxuICAgIG1vZGVsUHJvcGVydHk6IG1vZGVsUHJvcGVydHksXHJcbiAgICBnZXQ6IG9wdGlvbnMuZ2V0LFxyXG4gICAgc2V0OiBvcHRpb25zLnNldFxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyBuYW1lRW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBldmVudERlZmluaXRpb25SZWZlcmVuY2UgPSByZXF1aXJlKCcuL0V2ZW50RGVmaW5pdGlvblJlZmVyZW5jZScpLFxyXG4gICAgZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9FbGVtZW50UmVmZXJlbmNlUHJvcGVydHknKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgc2lnbmFsRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBzaWduYWxFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTaWduYWwnKSxcclxuICAgIGVsZW1lbnROYW1lOiAnc2lnbmFsJyxcclxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpTaWduYWwnLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdzaWduYWxSZWYnLFxyXG4gICAgbmV3RWxlbWVudElkUHJlZml4OiAnU2lnbmFsXydcclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnc2lnbmFsLWVsZW1lbnQtbmFtZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTaWduYWwgTmFtZScpLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdzaWduYWxSZWYnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgc2hvdWxkVmFsaWRhdGU6IHRydWVcclxuICB9KSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRpbWVyIGRlZmluaXRpb24gdHlwZSBmb3IgYSBnaXZlbiB0aW1lciBldmVudCBkZWZpbml0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8YnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbj59IHRpbWVyXHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9IHRoZSB0aW1lciBkZWZpbml0aW9uIHR5cGVcclxuICovXHJcbmZ1bmN0aW9uIGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXIpIHtcclxuICB2YXIgdGltZURhdGUgPSB0aW1lci5nZXQoJ3RpbWVEYXRlJyk7XHJcbiAgaWYgKHR5cGVvZiB0aW1lRGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAndGltZURhdGUnO1xyXG4gIH1cclxuXHJcbiAgdmFyIHRpbWVDeWNsZSA9IHRpbWVyLmdldCgndGltZUN5Y2xlJyk7XHJcbiAgaWYgKHR5cGVvZiB0aW1lQ3ljbGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICByZXR1cm4gJ3RpbWVDeWNsZSc7XHJcbiAgfVxyXG5cclxuICB2YXIgdGltZUR1cmF0aW9uID0gdGltZXIuZ2V0KCd0aW1lRHVyYXRpb24nKTtcclxuICBpZiAodHlwZW9mIHRpbWVEdXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAndGltZUR1cmF0aW9uJztcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzICdicG1uOkZvcm1hbEV4cHJlc3Npb24nIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBib2R5XHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gYSBmb3JtYWwgZXhwcmVzc2lvblxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlRm9ybWFsRXhwcmVzc2lvbihwYXJlbnQsIGJvZHksIGJwbW5GYWN0b3J5KSB7XHJcbiAgYm9keSA9IGJvZHkgfHwgdW5kZWZpbmVkO1xyXG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHsgYm9keTogYm9keSB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGltZXJFdmVudERlZmluaXRpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0aW1lckV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBzZWxlY3RPcHRpb25zID0gW1xyXG4gICAgeyB2YWx1ZTogJ3RpbWVEYXRlJywgbmFtZTogdHJhbnNsYXRlKCdEYXRlJykgfSxcclxuICAgIHsgdmFsdWU6ICd0aW1lRHVyYXRpb24nLCBuYW1lOiB0cmFuc2xhdGUoJ0R1cmF0aW9uJykgfSxcclxuICAgIHsgdmFsdWU6ICd0aW1lQ3ljbGUnLCBuYW1lOiB0cmFuc2xhdGUoJ0N5Y2xlJykgfVxyXG4gIF07XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkOiAndGltZXItZXZlbnQtZGVmaW5pdGlvbi10eXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RpbWVyIERlZmluaXRpb24gVHlwZScpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogc2VsZWN0T3B0aW9ucyxcclxuICAgIGVtcHR5UGFyYW1ldGVyOiB0cnVlLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3RpbWVyRGVmaW5pdGlvblR5cGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpbWVyRGVmaW5pdGlvblR5cGU6IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pIHx8ICcnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICB0aW1lRHVyYXRpb246IHVuZGVmaW5lZCxcclxuICAgICAgICB0aW1lRGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRpbWVDeWNsZTogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgbmV3VHlwZSA9IHZhbHVlcy50aW1lckRlZmluaXRpb25UeXBlO1xyXG4gICAgICBpZiAodmFsdWVzLnRpbWVyRGVmaW5pdGlvblR5cGUpIHtcclxuICAgICAgICB2YXIgb2xkVHlwZSA9IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgaWYgKG9sZFR5cGUpIHtcclxuICAgICAgICAgIHZhciBkZWZpbml0aW9uID0gdGltZXJFdmVudERlZmluaXRpb24uZ2V0KG9sZFR5cGUpO1xyXG4gICAgICAgICAgdmFsdWUgPSBkZWZpbml0aW9uLmdldCgnYm9keScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJvcHNbbmV3VHlwZV0gPSBjcmVhdGVGb3JtYWxFeHByZXNzaW9uKHRpbWVyRXZlbnREZWZpbml0aW9uLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHRpbWVyRXZlbnREZWZpbml0aW9uLCBwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAndGltZXItZXZlbnQtZGVmaW5pdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUaW1lciBEZWZpbml0aW9uJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAndGltZXJEZWZpbml0aW9uJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHR5cGUgPSBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcclxuICAgICAgdmFyIGRlZmluaXRpb24gPSB0eXBlICYmIHRpbWVyRXZlbnREZWZpbml0aW9uLmdldCh0eXBlKTtcclxuICAgICAgdmFyIHZhbHVlID0gZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmdldCgnYm9keScpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpbWVyRGVmaW5pdGlvbjogdmFsdWVcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHR5cGUgPSBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcclxuICAgICAgdmFyIGRlZmluaXRpb24gPSB0eXBlICYmIHRpbWVyRXZlbnREZWZpbml0aW9uLmdldCh0eXBlKTtcclxuXHJcbiAgICAgIGlmIChkZWZpbml0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBkZWZpbml0aW9uLCB7XHJcbiAgICAgICAgICBib2R5OiB2YWx1ZXMudGltZXJEZWZpbml0aW9uIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbik7XHJcbiAgICAgIHZhciBkZWZpbml0aW9uID0gdHlwZSAmJiB0aW1lckV2ZW50RGVmaW5pdGlvbi5nZXQodHlwZSk7XHJcbiAgICAgIGlmIChkZWZpbml0aW9uKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5pdGlvbi5nZXQoJ2JvZHknKTtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lckRlZmluaXRpb246IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiAhZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbik7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGltZXJFdmVudERlZmluaXRpb247XHJcbiIsIi8qKlxyXG4gKiBAZGVzY3JpcHRpb24g5YWo5bGA5Yqf6IO95bCB6KOFXHJcbiAqIEBhdXRob3IgenJcclxuICogQHR5cGUge3tyZWdpc3RlckZpbGVEcm9wKCosICopOiB2b2lkLCBzYXZlQnBtbihPYmplY3QpOiB2b2lkLCBoYW5kbGVEcmFnT3ZlcigqKTogdm9pZCwgc2V0Q29sb3IoT2JqZWN0KTogdm9pZCwgZG93bkxvYWQoT2JqZWN0KTogdm9pZCwgdXBsb2FkKE9iamVjdCwgT2JqZWN0LCBPYmplY3QpOiB2b2lkLCBoYW5kbGVGaWxlU2VsZWN0KCopOiB2b2lkLCBzZXRFbmNvZGVkKE9iamVjdCwgc3RyaW5nLCBzdHJpbmcpOiB2b2lkLCBvcGVuRnJvbVVybChPYmplY3QsIE9iamVjdCwgT2JqZWN0LCBzdHJpbmcpOiB2b2lkLCBjcmVhdGVEaWFncmFtKHN0cmluZywgT2JqZWN0LCBPYmplY3QpOiBQcm9taXNlPHZvaWQ+LCBnZXRVcmxQYXJhbTogdG9vbHMuZ2V0VXJsUGFyYW19fVxyXG4gKi9cclxuXHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmNvbnN0IHByb0hvc3QgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuY29uc3QgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiYnBtbmpzXCIpWzBdO1xyXG5jb25zdCBrZXkgPSBocmVmLnNwbGl0KHdpbmRvdy5sb2NhdGlvbi5ob3N0KVsxXTtcclxuY29uc3QgcHVibGljdXJsID0gcHJvSG9zdCArIGtleTtcclxuY29uc3QgdG9vbHMgPSB7XHJcbiAgICByZWdpc3RlckZpbGVEcm9wKGNvbnRhaW5lciwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb250YWluZXIuZ2V0KDApLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdG9vbHMuaGFuZGxlRHJhZ092ZXIsIGZhbHNlKTtcclxuICAgICAgICBjb250YWluZXIuZ2V0KDApLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0b29scy5oYW5kbGVGaWxlU2VsZWN0LCBmYWxzZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5blnLDlnYDmoI/lj4LmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBnZXRVcmxQYXJhbTogZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHZhciBvYmplY3QgPSB7fTtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YoXCI/XCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHZhciBzdHIgPSB1cmwuc3BsaXQoXCI/XCIpWzFdO1xyXG4gICAgICAgICAgICB2YXIgc3RycyA9IHN0ci5zcGxpdChcIiZcIik7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0W3N0cnNbaV0uc3BsaXQoXCI9XCIpWzBdXSA9IHN0cnNbaV0uc3BsaXQoXCI9XCIpWzFdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0W3VybF07XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDpgJrov4d4bWzliJvlu7picG1uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30geG1sIOWIm+W7umJwbXMgeG1sXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYnBtbk1vZGVsZXIgYnBtbuWvueixoVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRhaW5lciDlrrnlmajlr7nosaFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlRGlhZ3JhbSh4bWwsIGJwbW5Nb2RlbGVyLCBjb250YWluZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBicG1uTW9kZWxlci5pbXBvcnRYTUwoeG1sKTtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWVycm9yJykuYWRkQ2xhc3MoJ3dpdGgtZGlhZ3JhbScpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3dpdGgtZGlhZ3JhbScpLmFkZENsYXNzKCd3aXRoLWVycm9yJyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuZXJyb3IgcHJlJykudGV4dChlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDpgJrov4dKc29u6K6+572u6aKc6ImyXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0ganNvbiBqc29uIOWtl+espuS4slxyXG4gICAgICovXHJcbiAgICBzZXRDb2xvcihqc29uLGJwbW5Nb2RlbGVyKSB7XHJcbiAgICAgICAgdmFyIG1vZGVsaW5nID0gYnBtbk1vZGVsZXIuZ2V0KCdtb2RlbGluZycpO1xyXG4gICAgICAgIHZhciBlbGVtZW50UmVnaXN0cnkgPSBicG1uTW9kZWxlci5nZXQoJ2VsZW1lbnRSZWdpc3RyeScpXHJcbiAgICAgICAgdmFyIGVsZW1lbnRUb0NvbG9yID0gZWxlbWVudFJlZ2lzdHJ5LmdldChqc29uLm5hbWUpO1xyXG4gICAgICAgIGlmKGVsZW1lbnRUb0NvbG9yKXtcclxuICAgICAgICAgICAgbW9kZWxpbmcuc2V0Q29sb3IoW2VsZW1lbnRUb0NvbG9yXSwge1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBqc29uLnN0cm9rZSxcclxuICAgICAgICAgICAgICAgIGZpbGw6IGpzb24uZmlsbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDkv53lrZhicG1u5a+56LGhXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYnBtbk1vZGVsZXIgYnBtbuWvueixoVxyXG4gICAgICovXHJcbiAgICBzYXZlQnBtbihicG1uTW9kZWxlcikge1xyXG4gICAgICAgIGJwbW5Nb2RlbGVyLnNhdmVYTUwoeyBmb3JtYXQ6IHRydWUgfSwgZnVuY3Rpb24gKGVyciwgeG1sKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKCfkv53lrZjlpLHotKXvvIzor7fph43or5UnLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHhtbClcclxuICAgICAgICAgICAgdmFyIHBhcmFtPXtcclxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ0JQTU5cIjp4bWxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogcHVibGljdXJsKydwcm9jZXNzRGVmaW5pdGlvbi9hZGREZXBsb3ltZW50QnlTdHJpbmcnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6XCJqc29uXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbSxcclxuICAgICAgICAgICAgICAgIC8vaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGY4J30sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0Lm1zZz09J+aIkOWKnycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29scy5zeWhpZGUoJ2FsZXJ0JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ+S/neWtmOaIkOWKnycpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3VsdC5tc2cpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOS4i+i9vWJwbW5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBicG1uTW9kZWxlciBicG1u5a+56LGhXHJcbiAgICAgKi9cclxuICAgIGRvd25Mb2FkKGJwbW5Nb2RlbGVyKSB7XHJcbiAgICAgICAgdmFyIGRvd25sb2FkTGluayA9ICQoXCIjZG93bmxvYWRCcG1uXCIpXHJcbiAgICAgICAgYnBtbk1vZGVsZXIuc2F2ZVhNTCh7IGZvcm1hdDogdHJ1ZSB9LCBmdW5jdGlvbiAoZXJyLCB4bWwpIHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ2NvdWxkIG5vdCBzYXZlIEJQTU4gMi4wIGRpYWdyYW0nLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvb2xzLnNldEVuY29kZWQoZG93bmxvYWRMaW5rLCAnZGlhZ3JhbS5icG1uJywgZXJyID8gbnVsbCA6IHhtbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDovaznoIF4bWzlubbkuIvovb1cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBsaW5rIOaMiemSrlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUg5LiL6L295ZCN56ewXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBiYXNlNjRYTUxcclxuICAgICAqL1xyXG4gICAgc2V0RW5jb2RlZChsaW5rLCBuYW1lLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIGVuY29kZWREYXRhID0gZW5jb2RlVVJJQ29tcG9uZW50KGRhdGEpO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGxpbmsuYWRkQ2xhc3MoJ2FjdGl2ZScpLmF0dHIoe1xyXG4gICAgICAgICAgICAgICAgJ2hyZWYnOiAnZGF0YTphcHBsaWNhdGlvbi9icG1uMjAteG1sO2NoYXJzZXQ9VVRGLTgsJyArIGVuY29kZWREYXRhLFxyXG4gICAgICAgICAgICAgICAgJ2Rvd25sb2FkJzogbmFtZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsaW5rLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDkuIrkvKBicG1uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYnBtbk1vZGVsZXIgYnBtbuWvueixoVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRhaW5lciDlrrnlmajlr7nosaFcclxuICAgICAqL1xyXG4gICAgdXBsb2FkKGJwbW5Nb2RlbGVyLCBjb250YWluZXIpIHtcclxuICAgICAgICB2YXIgRmlsZVVwbG9hZCA9IGRvY3VtZW50Lm15Rm9ybS51cGxvYWRGaWxlLmZpbGVzWzBdO1xyXG4gICAgICAgIHZhciBmbSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZtLmFwcGVuZCgncHJvY2Vzc0ZpbGUnLCBGaWxlVXBsb2FkKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vdXBsb2FkJyxcclxuICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICBkYXRhOiBmbSxcclxuICAgICAgICAgICAgYXN5bmM6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsIC8v56aB5q2i6K6+572u6K+35rGC57G75Z6LXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSwgLy/npoHmraJqcXVlcnnlr7lEQXRh5pWw5o2u55qE5aSE55CGLOm7mOiupOS8muWkhOeQhlxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gcHVibGljdXJsKydicG1uLycgKyByZXN1bHQub2JqXHJcbiAgICAgICAgICAgICAgICB0b29scy5vcGVuRnJvbVVybChicG1uTW9kZWxlciwgY29udGFpbmVyLCB1cmwpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOaJk+W8gHhtbCAgVXJsIOWcsOWdgFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250YWluZXIg5a655Zmo5a+56LGhXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIHVybOWcsOWdgFxyXG4gICAgICovXHJcbiAgICBvcGVuRnJvbVVybChicG1uTW9kZWxlciwgY29udGFpbmVyLCB1cmwpIHtcclxuICAgICAgICAkLmFqYXgodXJsLCB7IGRhdGFUeXBlOiAndGV4dCcgfSkuZG9uZShhc3luYyBmdW5jdGlvbiAoeG1sKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBicG1uTW9kZWxlci5pbXBvcnRYTUwoeG1sKTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDbGFzcygnd2l0aC1lcnJvcicpLmFkZENsYXNzKCd3aXRoLWRpYWdyYW0nKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOaJk+W8gOW8ueWHuuahhlxyXG4gICAgICogQHBhcmFtIGlkXHJcbiAgICAgKi9cclxuICAgIHN5b3BlbihpZCkge1xyXG4gICAgICAgIHZhciBkb20gPSAkKFwiI1wiICsgaWQpO1xyXG4gICAgICAgIHRoaXMuc3ljZW50ZXIoZG9tKTtcclxuICAgICAgICBkb20uYWRkQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgZG9tLnNob3coKTtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgJChcIi5zeS1tYXNrXCIpLmZhZGVJbigzMDApXHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKG5hbWUpXHJcbiAgICAgICAgfSwgMzAwKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDpmpDol4/lvLnlh7rmoYZcclxuICAgICAqIEBwYXJhbSBpZFxyXG4gICAgICovXHJcbiAgICBzeWhpZGUoaWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGlkID09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgdmFyIGRvbSA9ICQoXCIuc3ktYWxlcnRcIilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZG9tID0gJChcIiNcIiArIGlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmFtZSA9IGRvbS5hdHRyKFwic3ktbGVhdmVcIik7XHJcbiAgICAgICAgZG9tLmFkZENsYXNzKG5hbWUpO1xyXG4gICAgICAgICQoXCIuc3ktbWFza1wiKS5mYWRlT3V0KDMwMCk7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZG9tLmhpZGUoKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKG5hbWUpO1xyXG4gICAgICAgIH0sIDMwMClcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOW8ueWHuuahhuWxheS4rVxyXG4gICAgICogQHBhcmFtIGRvbVxyXG4gICAgICovXHJcbiAgICBzeWNlbnRlcihkb20pIHtcclxuICAgICAgICB2YXIgbWd0b3AgPSBwYXJzZUZsb2F0KGRvbS5oZWlnaHQoKSAvIDIpO1xyXG4gICAgICAgIGRvbS5jc3Moe1xyXG4gICAgICAgICAgICBcInRvcFwiOiBcIjUwJVwiLFxyXG4gICAgICAgICAgICBcIm1hcmdpbi10b3BcIjogXCItXCIgKyBtZ3RvcCArIFwicHhcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDliKTmlq3mmK/lkKbmmK/mlbDnu4RcclxuICAgICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAgICogQHJldHVybnMge2FyZyBpcyBBcnJheTxhbnk+fGJvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzQXJyYXlGbih2YWx1ZSl7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOagueaNruaVsOaNruiuvue9ruminOiJslxyXG4gICAgICogQHBhcmFtIGRhdGFcclxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgZ2V0QnlDb2xvcihkYXRhKXtcclxuXHJcbiAgICAgICAgdmFyIENvbG9ySnNvbj1bXVxyXG4gICAgICAgIGZvcih2YXIgayBpbiBkYXRhWydoaWdoTGluZSddKXtcclxuICAgICAgICAgICAgdmFyIHBhcj17XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogZGF0YVsnaGlnaExpbmUnXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCJncmVlblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQ29sb3JKc29uLnB1c2gocGFyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IodmFyIGsgaW4gZGF0YVsnaGlnaFBvaW50J10pe1xyXG4gICAgICAgICAgICB2YXIgcGFyPXtcclxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBkYXRhWydoaWdoUG9pbnQnXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmF5XCIsXHJcbiAgICAgICAgICAgICAgICBcImZpbGxcIjpcIiNlYWU5ZTlcIlxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBDb2xvckpzb24ucHVzaChwYXIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcih2YXIgayBpbiBkYXRhWydpRG8nXSl7XHJcbiAgICAgICAgICAgIHZhciBwYXI9e1xyXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IGRhdGFbJ2lEbyddW2tdLFxyXG4gICAgICAgICAgICAgICAgXCJzdHJva2VcIjpcImdyZWVuXCIsXHJcbiAgICAgICAgICAgICAgICBcImZpbGxcIjpcIiNhM2Q2OGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIENvbG9ySnNvbi5wdXNoKHBhcilcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKHZhciBrIGluIGRhdGFbJ3dhaXRpbmdUb0RvJ10pe1xyXG4gICAgICAgICAgICB2YXIgcGFyPXtcclxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBkYXRhWyd3YWl0aW5nVG9EbyddW2tdLFxyXG4gICAgICAgICAgICAgICAgXCJzdHJva2VcIjpcImdyZWVuXCIsXHJcbiAgICAgICAgICAgICAgICBcImZpbGxcIjpcInllbGxvd1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQ29sb3JKc29uLnB1c2gocGFyKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQ29sb3JKc29uXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHRvb2xzIl19 diff --git a/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/FormProps.js b/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/FormProps.js index e3b39cbe37f4a47af68894235d6429f2cd47ab66..c759a09a740d8b8a8635ad1d359029a688572c25 100644 --- a/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/FormProps.js +++ b/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/FormProps.js @@ -77,7 +77,7 @@ function formFieldTextField(options, getSelectedFormField) { function ensureFormKeyAndDataSupported(element) { return ( - is(element, 'bpmn:StartEvent') && !is(element.parent, 'bpmn:SubProcess') + is(element, 'bpmn:StartEvent') && !is(element.parent, 'bpmn:SubProcess') ) || is(element, 'bpmn:UserTask'); } @@ -140,26 +140,26 @@ module.exports = function(group, element, bpmnFactory, translate) { extensionElements = elementHelper.createElement('bpmn:ExtensionElements', { values: [] }, bo, bpmnFactory); commands.push(cmdHelper.updateProperties(element, { extensionElements: extensionElements })); } - /* var formData = formHelper.getFormData(element); - - if (!formData) { - formData = elementHelper.createElement('activiti:FormData', { fields: [] }, extensionElements, bpmnFactory); - commands.push(cmdHelper.addAndRemoveElementsFromList( - element, - extensionElements, - 'values', - 'extensionElements', - [formData], - [] - )); - }*/ + /* var formData = formHelper.getFormData(element); + + if (!formData) { + formData = elementHelper.createElement('activiti:FormData', { fields: [] }, extensionElements, bpmnFactory); + commands.push(cmdHelper.addAndRemoveElementsFromList( + element, + extensionElements, + 'values', + 'extensionElements', + [formData], + [] + )); + }*/ /**activiti 是向 extensionElements 下追加元素,而不是 formData 下,*/ var field = elementHelper.createElement('activiti:FormProperty', { id: value }, extensionElements, bpmnFactory); if (typeof extensionElements.values !== 'undefined') { commands.push(cmdHelper.addElementsTolist(element, extensionElements, 'values', [ field ])); } else { commands.push(cmdHelper.updateBusinessObject(element, extensionElements, { - values: [ field ] + values: [ field ] })); } return commands; @@ -173,9 +173,9 @@ module.exports = function(group, element, bpmnFactory, translate) { commands.push(removeEntry(getBusinessObject(element), element, extensionElements)); } else { commands.push(cmdHelper.removeElementsFromList(element, extensionElements, 'values', null, [entry])); - /* if (entry.id === formData.get('businessKey')) { - commands.push(cmdHelper.updateBusinessObject(element, extensionElements, { 'businessKey': undefined })); - }*/ + /* if (entry.id === formData.get('businessKey')) { + commands.push(cmdHelper.updateBusinessObject(element, extensionElements, { 'businessKey': undefined })); + }*/ } return commands; @@ -287,18 +287,24 @@ module.exports = function(group, element, bpmnFactory, translate) { })); // [FormData] form field label text input field - group.entries.push(formFieldTextField({ + group.entries.push(entryFactory.textField({ id: 'form-field-label', label: translate('Label'), - modelProperty: 'label' - }, getSelectedFormField)); + modelProperty: 'label', + hidden: function(element, node) { + return !getSelectedFormField(element, node); + } + })); // [FormData] form field defaultValue text input field - group.entries.push(formFieldTextField({ + group.entries.push(entryFactory.textField({ id: 'form-field-defaultValue', label: translate('Default Value'), - modelProperty: 'defaultValue' - }, getSelectedFormField)); + modelProperty: 'defaultValue', + hidden: function(element, node) { + return !getSelectedFormField(element, node); + } + })); // [FormData] form field enum values label @@ -334,10 +340,10 @@ module.exports = function(group, element, bpmnFactory, translate) { id = generateValueId(); var enumValue = elementHelper.createElement( - 'activiti:Value', - { id: id, name: undefined }, - getBusinessObject(element), - bpmnFactory + 'activiti:Value', + { id: id, name: undefined }, + getBusinessObject(element), + bpmnFactory ); return cmdHelper.addElementsTolist(element, selectedFormField, 'values', [enumValue]); @@ -406,10 +412,10 @@ module.exports = function(group, element, bpmnFactory, translate) { } var newConstraint = elementHelper.createElement( - 'activiti:Constraint', - { name: undefined, config: undefined }, - validation, - bpmnFactory + 'activiti:Constraint', + { name: undefined, config: undefined }, + validation, + bpmnFactory ); commands.push(cmdHelper.addElementsTolist(element, validation, 'constraints', [ newConstraint ])); @@ -432,11 +438,11 @@ module.exports = function(group, element, bpmnFactory, translate) { currentConstraint = constraints[idx]; commands.push(cmdHelper.removeElementsFromList( - element, - formField.validation, - 'constraints', - null, - [ currentConstraint ] + element, + formField.validation, + 'constraints', + null, + [ currentConstraint ] )); if (constraints.length === 1) {